Annotation of DewFind/GameBoard.cpp, revision 1.1.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>