Annotation of DewFind/GameBoard.cpp, revision 1.1

1.1     ! nick        1: #include "StdAfx.h"
        !             2: #include "resource.h"
        !             3: #include "gameboard.h"
        !             4: 
        !             5: GameBoard::GameBoard()
        !             6: {
        !             7:        ClearWords();
        !             8:        ClearBoard();
        !             9: }
        !            10: 
        !            11: GameBoard::~GameBoard()
        !            12: {
        !            13: }
        !            14: 
        !            15: int GameBoard::GetWordsFound()
        !            16: {
        !            17:        int found=0;
        !            18:        int x=0;
        !            19:        for(x=0;x<wordcount_;x++)
        !            20:        {
        !            21:                if (foundword_[x] == true)
        !            22:                {
        !            23:                        found++;
        !            24:                }
        !            25:        }
        !            26:        
        !            27:        return(found);
        !            28: }
        !            29: 
        !            30: bool GameBoard::IsGameOver()
        !            31: {
        !            32:        bool ans=false;
        !            33: 
        !            34:        if (GetWordsFound() == wordcount_)
        !            35:        {
        !            36:                ans=true;
        !            37:                ClearSelected();
        !            38:        }
        !            39: 
        !            40:        return(ans);
        !            41: }
        !            42: 
        !            43: void GameBoard::ClearWords()
        !            44: {
        !            45:        int z=0;
        !            46:        wordcount_ = 0;
        !            47:        for (z=0;z<MAXWORDS;z++)
        !            48:        {
        !            49:                words_[z] = "";
        !            50:                foundword_[z] = false;
        !            51:        }
        !            52: }
        !            53: 
        !            54: void GameBoard::ClearBoard()
        !            55: {
        !            56:        int x=0;int y=0;int z=0;
        !            57:        selects_ = 0;
        !            58: 
        !            59:        for(x=0;x<MAXROW;x++)
        !            60:        {
        !            61:                for(y=0;y<MAXCOL;y++)
        !            62:                {
        !            63:                        board_[x][y].Clear(); 
        !            64:                }
        !            65:        }
        !            66: 
        !            67:        for (z=0;z<MAXWORDS;z++)
        !            68:        {
        !            69:                foundword_[z] = false;
        !            70:        }
        !            71: }
        !            72: 
        !            73: 
        !            74: void GameBoard::SetUpBoard()
        !            75: {
        !            76:        //will place words where we want em
        !            77:        //HandleDown(0);
        !            78:        //HandleDown(1);
        !            79:        //HandleDown(2);
        !            80:        //HandleDown(3);
        !            81:        //CreateDiagonally(4);
        !            82:        //CreateDiagonally(5);
        !            83:        int i=0;
        !            84:        int ran = 0;
        !            85:        for (i=0;i<wordcount_;i++)
        !            86:        {
        !            87:                ran = rand() % 3;
        !            88:                if (ran == 1)
        !            89:                {
        !            90:                        HandleDown(i);
        !            91:                }
        !            92:                else if (ran == 2)
        !            93:                {
        !            94:                        CreateDiagonally(i);
        !            95:                }
        !            96:                else
        !            97:                {
        !            98:                        HandleAcross(i);
        !            99:                }
        !           100:        }
        !           101:        FillRandom();
        !           102: }
        !           103: 
        !           104: 
        !           105: 
        !           106: void GameBoard::DrawBoard(CDC *xDC)
        !           107: {
        !           108:        Word Red,Green,Black;           
        !           109:        Black.SetColor(0);
        !           110:        Red.SetColor(1);
        !           111:        Green.SetColor(2);
        !           112: 
        !           113:        int x=0,y=0,z=0,a=0;
        !           114:        z = 50;
        !           115:        a = 50;
        !           116:        for (x=0;x<MAXROW;x++)
        !           117:        {
        !           118:                for(y=0;y<MAXCOL;y++)
        !           119:                {
        !           120:                        if (board_[x][y].IsSelected() == true)
        !           121:                        {
        !           122:                                Red.Write(board_[x][y].GetLetter(),a,z,xDC);
        !           123:                        }
        !           124:                        else if (board_[x][y].IsFound() == true)
        !           125:                        {
        !           126:                                Green.Write(board_[x][y].GetLetter(),a,z,xDC);
        !           127:                        }
        !           128:                        else
        !           129:                        {
        !           130:                                Black.Write(board_[x][y].GetLetter(),a,z,xDC);
        !           131:                        }
        !           132:                        a = a + 19;
        !           133:                }
        !           134:                a = 50;
        !           135:                z = z + 30;
        !           136:        }
        !           137: }
        !           138: 
        !           139: void GameBoard::DrawWords(CDC *xDC)
        !           140: {
        !           141:        Word wd;
        !           142:        wd.SetColor(0);
        !           143: 
        !           144:        int words=0;
        !           145:        int line=50;
        !           146:        for (words=0;words<wordcount_;words++)
        !           147:        {
        !           148:                if (foundword_[words] == false)
        !           149:                {
        !           150:                        wd.SetColor(0);
        !           151:                        wd.Write(words_[words],390,line,xDC);
        !           152:                        line = line + 30;
        !           153:                }
        !           154:                else
        !           155:                {
        !           156:                        wd.SetColor(2);
        !           157:                        wd.Write(words_[words],390,line,xDC);
        !           158:                        line = line + 30;
        !           159:                }
        !           160:        }
        !           161: }
        !           162: int GameBoard::GetWordCount()
        !           163: {
        !           164:        return(wordcount_);
        !           165: }
        !           166: void GameBoard::LoadWordsFromFile(CString FN)
        !           167: {
        !           168:        //Load words from File
        !           169:        //AddWord("NICK");
        !           170:        //AddWord("BRENDAN");
        !           171:        //AddWord("CHRIS");
        !           172:        //AddWord("BRENT");
        !           173:        //AddWord("JUSTIN");
        !           174:        //AddWord("MATT");
        !           175:        //ifstream inFile;
        !           176:        CString loadword("");
        !           177:        CStdioFile file;
        !           178:        if(file.Open(FN,CFile::modeRead))
        !           179:        {
        !           180:                while (file.ReadString(loadword))
        !           181:                {
        !           182:                        if(!loadword.IsEmpty())
        !           183:                        {
        !           184:                                loadword.MakeUpper();
        !           185:                                AddWord(loadword);
        !           186:                        }
        !           187:                }
        !           188:                file.Close();
        !           189:        }
        !           190:        else
        !           191:        {
        !           192:                AddWord("WORD");
        !           193:                AddWord("FILE");
        !           194:                AddWord("IS");
        !           195:                AddWord("MISSING");
        !           196:        }
        !           197: }
        !           198: 
        !           199: bool GameBoard::SelectSquareMouse(int x,int y)
        !           200: {
        !           201:        bool ans=false;
        !           202:        //Looks up selected
        !           203:        int square=-1;
        !           204:        int col=0,row=0;
        !           205:        int current=0;
        !           206: 
        !           207:        int a=0,b=0,c=0,d=0;
        !           208: 
        !           209:        a = 50;
        !           210:        b = 69;
        !           211:        c = 50;
        !           212:        d = 80;
        !           213:  
        !           214:        current = 0;
        !           215:        
        !           216:        for (row=0;row<MAXROW;row++)
        !           217:        {
        !           218:                for (col=0;col<MAXCOL;col++)
        !           219:                {
        !           220:                        if (square == -1)
        !           221:                        {
        !           222:                                square = CheckLoc(x,y,a,b,c,d,current);
        !           223:                        };
        !           224:                        a = a + 19;
        !           225:                        b = b + 19;
        !           226:                        current++;
        !           227:                }
        !           228:                a = 50;
        !           229:                b = 69;
        !           230:                c = c + 30;
        !           231:                d = d + 30;
        !           232:        }
        !           233:        //square = CheckLoc(x,y,a,b,c,d,0);
        !           234:        //if (square == -1)
        !           235:        //{
        !           236:        //      square = CheckLoc(x,y,50,69,80,110,15);
        !           237:        //};
        !           238: 
        !           239:        ans = HandleSelection(square);
        !           240:        return(ans);
        !           241: }
        !           242: 
        !           243: void GameBoard::ClearSelected()
        !           244: {
        !           245:        int x=0,y=0;
        !           246:        for(x=0;x<MAXROW;x++)
        !           247:        {
        !           248:                for(y=0;y<MAXCOL;y++)
        !           249:                {
        !           250:                        board_[x][y].SetSelect(false);
        !           251:                }
        !           252:        }
        !           253:        selects_ = 0;
        !           254: }
        !           255: 
        !           256: //--------------------------PRIVATE FUNCTIONS-------------------------------------------------------------
        !           257: 
        !           258: bool GameBoard::HandleSelection(int square)
        !           259: {
        !           260:        bool ans=false;
        !           261:        int x=0,y=0;
        !           262:        if (square > -1)
        !           263:        {       
        !           264:                x = square/15;
        !           265:                y = square - (x*15);
        !           266:                SelectSquare(x,y);
        !           267:                ans = true;
        !           268:        }
        !           269: 
        !           270:        return(ans);
        !           271: }
        !           272: 
        !           273: int GameBoard::CheckLoc(int selx,int sely,int X,int X2,int Y,int Y2,int RTN)
        !           274: {
        !           275:  int locx=0;
        !           276:  int locy=0;
        !           277: 
        !           278:        for (locx = X;locx < X2; locx++)
        !           279:        {
        !           280:                for (locy = Y; locy < Y2; locy++)
        !           281:                {
        !           282:                        if ((locx == selx)&&(locy == sely))
        !           283:                                return(RTN);
        !           284:                }
        !           285:        }
        !           286:  return(-1);
        !           287: }
        !           288: 
        !           289: void GameBoard::SelectSquare(int x,int y)
        !           290: {
        !           291:        board_[x][y].SetSelect(true);
        !           292:        //Check if word is found
        !           293:        CheckWords();
        !           294:        //On your 10th select clear it
        !           295:        selects_++;
        !           296:        if (selects_ > 9)
        !           297:        {
        !           298:                ClearSelected();
        !           299:        }
        !           300: }
        !           301: 
        !           302: void GameBoard::CheckWords()
        !           303: {
        !           304:        bool found=false;
        !           305: 
        !           306:        int x=0,y=0,wordnum=0,wordlen=0,sel=0;
        !           307: 
        !           308:        for(wordnum=0;wordnum<wordcount_;wordnum++)
        !           309:        {
        !           310:                wordlen = words_[wordnum].GetLength();
        !           311:                sel = 0;
        !           312:                if (foundword_[wordnum] == false)
        !           313:                {
        !           314:                        for(x=0;x<MAXROW;x++)
        !           315:                        {
        !           316:                                for(y=0;y<MAXCOL;y++)
        !           317:                                {
        !           318:                                        if ((board_[x][y].IsSelected() == true) && (board_[x][y].GetNumber() == wordnum))
        !           319:                                        {
        !           320:                                                sel++;
        !           321:                                        }
        !           322:                                }
        !           323:                        }
        !           324:                        if (wordlen == sel)
        !           325:                        {
        !           326:                                WordFound(wordnum);
        !           327:                                foundword_[wordnum] = true;
        !           328:                                selects_ = 0;
        !           329:                                found = true;
        !           330:                        }
        !           331:                }
        !           332:        }
        !           333: }
        !           334: 
        !           335: void GameBoard::WordFound(int wordnumber)
        !           336: {
        !           337:        int x=0,y=0;
        !           338:        for(x=0;x<MAXROW;x++)
        !           339:        {
        !           340:                for(y=0;y<MAXCOL;y++)
        !           341:                {
        !           342:                        if (board_[x][y].GetNumber() == wordnumber)
        !           343:                        {
        !           344:                                board_[x][y].SetFound();
        !           345:                        }
        !           346:                }
        !           347:        }
        !           348: }
        !           349: 
        !           350: void GameBoard::AddWord(CString word)
        !           351: {
        !           352:        if (wordcount_ < MAXWORDS)
        !           353:        {
        !           354:                words_[wordcount_] = word;
        !           355:                wordcount_++;
        !           356:        };
        !           357: }
        !           358: 
        !           359: 
        !           360: void GameBoard::CreateDiagonally(int wordnumber)
        !           361: {
        !           362:        CString WordToFind = HandleBackward(wordnumber);
        !           363: 
        !           364:        int len=0;
        !           365:        int open=0;
        !           366:        int placex=-1; 
        !           367:        int placey=-1;
        !           368:        len = WordToFind.GetLength();
        !           369:        int found = 0;
        !           370:        int x=0;int y=0;
        !           371:        int a=0;int b=0;
        !           372: 
        !           373:        //Find Spot on gameboard
        !           374:        while ((found == 0)||(x > MAXROW))
        !           375:        {
        !           376:                if ((board_[a][b].GetLetter() == '1')&&(found == 0))
        !           377:                {
        !           378:                        open = open + 1;
        !           379:                        a++;
        !           380:                        b++;
        !           381:                        if (open == len)
        !           382:                        {
        !           383:                                        placex = x;
        !           384:                                        placey = y;
        !           385:                                        found = 1;
        !           386:                        }
        !           387:                        if (b > MAXCOL-1)
        !           388:                        {
        !           389:                                x++;
        !           390:                                y=0;
        !           391:                                a = x;
        !           392:                                b = y;
        !           393:                        }
        !           394:                        
        !           395:                }
        !           396:                else 
        !           397:                {
        !           398:                        open = 0;
        !           399:                        y++;
        !           400:                        if (y > MAXCOL)
        !           401:                        {
        !           402:                                x++;
        !           403:                                y=0;
        !           404:                        }
        !           405:                        a = x;
        !           406:                        b = y;
        !           407:                }
        !           408:        }
        !           409:        //Put word on gameboard
        !           410:        if ((placex > -1)&&(placey > -1))
        !           411:        {
        !           412:                char word[MAXLETTERS];
        !           413:                //WordToFind.copy(word,len,0);
        !           414:                strcpy(word,WordToFind);
        !           415:                int z=0;
        !           416:                int position=len;
        !           417:                
        !           418:                while (position > 0)
        !           419:                {
        !           420:                        board_[placex][placey].SetData(word[z],wordnumber);
        !           421:                        position--;
        !           422:                        z++;
        !           423:                        placex++;
        !           424:                        placey++;
        !           425:                }
        !           426:        }
        !           427: 
        !           428: 
        !           429: }
        !           430: bool GameBoard::HandleDown(int wordnumber)
        !           431: {
        !           432:        bool success=true;
        !           433:        if (RandomDown(wordnumber) == false)
        !           434:        {
        !           435:                CreateDown(wordnumber);
        !           436:        };
        !           437:        return(success);
        !           438: }
        !           439: 
        !           440: bool GameBoard::HandleAcross(int wordnumber)
        !           441: {
        !           442:        bool success=true;
        !           443:        if (RandomAcross(wordnumber) == false)
        !           444:        {
        !           445:                CreateAcross(wordnumber);
        !           446:        };
        !           447:        return(success);
        !           448: }
        !           449: 
        !           450: bool GameBoard::RandomAcross(int wordnumber)
        !           451: {
        !           452:        bool ans=false;
        !           453:        CString WordToFind = HandleBackward(wordnumber);
        !           454:        
        !           455:        int len=0,open=0, placey=-1;
        !           456:        len = WordToFind.GetLength();
        !           457:        int found = 0;
        !           458: 
        !           459:        int y=0,boardx=0,boardy=0;
        !           460:        
        !           461:        boardx=rand() % 15;
        !           462:        boardy=rand() % (15 - len);
        !           463: 
        !           464:        for (y=boardy;y<MAXCOL;y++)
        !           465:        {
        !           466:                if ((board_[boardx][y].GetLetter() == '1')&&(found == 0))
        !           467:                {
        !           468:                                open = open + 1;
        !           469:                                if (open == len)
        !           470:                                {
        !           471:                                        placey = (y - len)+1;
        !           472:                                        found = 1;
        !           473:                                }
        !           474:                }
        !           475:                else 
        !           476:                {
        !           477:                        open = 0;
        !           478:                }
        !           479:        }
        !           480: 
        !           481:        ans = PlaceAcross(boardx,placey,WordToFind,wordnumber);
        !           482:        return(ans);
        !           483: }
        !           484: 
        !           485: bool GameBoard::RandomDown(int wordnumber)
        !           486: {
        !           487:        bool ans = false;
        !           488:        CString WordToFind = HandleBackward(wordnumber);
        !           489:        
        !           490:        int len=0,open=0, placex=-1, placey=-1;
        !           491:        len = WordToFind.GetLength();
        !           492:        int found = 0;
        !           493:        int y=0;
        !           494: 
        !           495:        int boardx=0,boardy=0;
        !           496:        
        !           497:        boardx=rand() % (15 - len);
        !           498:        boardy=rand() % 15;
        !           499: 
        !           500:        //boardx=3;
        !           501:        //boardy=3;
        !           502:                for (y=boardx;y<MAXROW;y++)
        !           503:                {
        !           504:                        if ((board_[y][boardy].GetLetter() == '1')&&(found == 0))
        !           505:                        {
        !           506:                                open = open + 1;
        !           507:                                if (open == len)
        !           508:                                {
        !           509:                                        placex = boardy;
        !           510:                                        placey = (y - len)+1;
        !           511:                                        found = 1;
        !           512:                                }
        !           513:                        }
        !           514:                        else 
        !           515:                        {
        !           516:                                open = 0;
        !           517:                        }
        !           518: 
        !           519:                }
        !           520: 
        !           521:        ans = PlaceDown(placex,placey,WordToFind,wordnumber);
        !           522:        return(ans);
        !           523: }
        !           524: 
        !           525: 
        !           526: void GameBoard::CreateDown(int wordnumber)
        !           527: {
        !           528:        CString WordToFind = HandleBackward(wordnumber);
        !           529: 
        !           530:        //Find an open down spot
        !           531:        int len=0,open=0, placex=-1, placey=-1;
        !           532:        len = WordToFind.GetLength(); 
        !           533:        int found = 0;
        !           534:        int x=0;int y=0;
        !           535: 
        !           536:        for (x=0;x<MAXCOL;x++)
        !           537:        {
        !           538:                for (y=0;y<MAXROW;y++)
        !           539:                {
        !           540:                        if ((board_[y][x].GetLetter() == '1')&&(found == 0))
        !           541:                        {
        !           542:                                open = open + 1;
        !           543:                                if (open == len)
        !           544:                                {
        !           545:                                        placex = x;
        !           546:                                        placey = (y - len)+1;
        !           547:                                        found = 1;
        !           548:                                }
        !           549:                        }
        !           550:                        else 
        !           551:                        {
        !           552:                                open = 0;
        !           553:                        }
        !           554: 
        !           555:                }
        !           556:                open = 0;
        !           557:        }
        !           558: 
        !           559:        PlaceDown(placex,placey,WordToFind,wordnumber);
        !           560: }
        !           561: 
        !           562: bool GameBoard::PlaceDown(int boardx,int boardy, CString word,int wordnumber)
        !           563: {
        !           564:        bool placed=true;
        !           565:        char wordtmp[MAXLETTERS];
        !           566:        int z=0, y=0;
        !           567:        int len = word.GetLength();
        !           568:        
        !           569:        if ((boardx > -1)&&(boardy > -1))
        !           570:        {
        !           571:                //word.copy(wordtmp,len,0);
        !           572:                strcpy(wordtmp,word);
        !           573:                for(y=boardy;y<boardy+len;y++)
        !           574:                {
        !           575:                        board_[y][boardx].SetData(wordtmp[z],wordnumber);
        !           576:                        z++;
        !           577:                }
        !           578:        }
        !           579:        else
        !           580:        {
        !           581:                placed=false;
        !           582:        }
        !           583: 
        !           584:        return(placed);
        !           585: }
        !           586: 
        !           587: bool GameBoard::PlaceAcross(int boardx,int boardy,CString word,int wordnumber)
        !           588: {
        !           589:        bool placed=true;
        !           590:        char wordtmp[MAXLETTERS];
        !           591:        int z=0, y=0;
        !           592:        int len = word.GetLength();
        !           593: 
        !           594:        if ((boardx > -1)&&(boardy > -1))
        !           595:        {
        !           596:                strcpy(wordtmp,word);
        !           597:                //word.copy(wordtmp,len,0);
        !           598:                for(y=boardy;y<boardy+len;y++)
        !           599:                {
        !           600:                        board_[boardx][y].SetData(wordtmp[z],wordnumber);
        !           601:                        z++;
        !           602:                }
        !           603:        }
        !           604:        else
        !           605:        {
        !           606:                placed=false;
        !           607:        }
        !           608: 
        !           609:        return(placed);
        !           610: }
        !           611: 
        !           612: CString GameBoard::HandleBackward(int wordnumber)
        !           613: {
        !           614:        //Will set word to backwards 50% of the time
        !           615:        CString word ("");
        !           616:        word = words_[wordnumber];
        !           617:        int ran = rand() % 2;
        !           618:        if (ran == 1)
        !           619:        {
        !           620:                word = ChangeToBackward(wordnumber);
        !           621:        }
        !           622: 
        !           623:        return(word);
        !           624: }
        !           625: 
        !           626: void GameBoard::CreateAcross(int wordnumber)
        !           627: {
        !           628:        CString WordToFind = HandleBackward(wordnumber);
        !           629:        
        !           630:        int len=0,open=0, placex=-1, placey=-1;
        !           631:        len = WordToFind.GetLength();
        !           632:        int found = 0;
        !           633: 
        !           634:        int x=0;int y=0;
        !           635: 
        !           636:        for (x=0;x<MAXROW;x++)
        !           637:        {
        !           638:                for (y=0;y<MAXCOL;y++)
        !           639:                {
        !           640:                        if ((board_[x][y].GetLetter() == '1')&&(found == 0))
        !           641:                        {
        !           642:                                open = open + 1;
        !           643:                                if (open == len)
        !           644:                                {
        !           645:                                        placex = x;
        !           646:                                        placey = (y - len)+1;
        !           647:                                        found = 1;
        !           648:                                }
        !           649:                        }
        !           650:                        else 
        !           651:                        {
        !           652:                                open = 0;
        !           653:                        }
        !           654:                }
        !           655:                open = 0;
        !           656:        }
        !           657: 
        !           658:        PlaceAcross(placex,placey,WordToFind,wordnumber);
        !           659: }
        !           660: 
        !           661: 
        !           662: CString GameBoard::ChangeToBackward(int wordnumber)
        !           663: {
        !           664:        CString backwards ("");
        !           665:        
        !           666:        int len=0,tmpy=0;       
        !           667:        char tChar;
        !           668: 
        !           669:        len = words_[wordnumber].GetLength();
        !           670:        tmpy = len-1;
        !           671:        for(tmpy;tmpy>=0;tmpy--)
        !           672:        {
        !           673:                tChar = words_[wordnumber].GetAt(tmpy);
        !           674:                backwards = backwards + tChar;
        !           675:        };
        !           676: 
        !           677:        return(backwards); 
        !           678: }
        !           679: 
        !           680: char GameBoard::RandomLetter()
        !           681: {
        !           682:        int n = rand() % 26;
        !           683:        char c = (char)(n+65);
        !           684:        return(c);
        !           685: }
        !           686: 
        !           687: void GameBoard::FillRandom()
        !           688: {
        !           689:        //change all 1's to a character
        !           690:        int x=0;int y=0;
        !           691:        for(x=0;x<MAXROW;x++)
        !           692:        {
        !           693:                for(y=0;y<MAXCOL;y++)
        !           694:                {
        !           695:                        if (board_[x][y].GetLetter() == '1')
        !           696:                        {
        !           697:                                board_[x][y].SetData(RandomLetter(),-1);
        !           698:                        }
        !           699:                }
        !           700:        }
        !           701: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>