void doMove(board Game, Move move) { if (move->command == DO_NOTHING) return; if (move->isPieceCreated != NULL) { putPiece(Game, move->xTo, move->yTo, move->isPieceCreated); } else { removePiece(Game, move->xFrom, move->yFrom); if (move->isPieceRemoved == NULL) { putPiece(Game, move->xTo, move->yTo, move->movedPiece); } else { if (move->movedPiece != move->isPieceRemoved) { removePiece(Game, move->xTo, move->yTo); if (toupper(move->movedPiece->letter) != toupper(move->isPieceRemoved->letter)) { putPiece(Game, move->xTo, move->yTo, move->movedPiece); } } } } move->movedPiece->lastMove = move->currentPieceTurnAfter; }
TEST(Board_test,putPieceOutsideTheBoard) { EXPECT_EQ(0, createBoard()); EXPECT_EQ(1, putPiece(-1,0,0)); EXPECT_EQ(1, putPiece(0,3,CROSS)); EXPECT_EQ(EMPTY,getBoardCell(0,1)); EXPECT_EQ(1, putPiece(3,3,CIRCLE)); EXPECT_EQ(EMPTY,getBoardCell(0,2)); }
TEST(Board_test,putPieceOnBoard) { EXPECT_EQ(0, createBoard()); EXPECT_EQ(0, putPiece(0,0,0)); EXPECT_EQ(0, putPiece(0,1,CROSS)); EXPECT_EQ(CROSS,getBoardCell(0,1)); EXPECT_EQ(0, putPiece(0,2,CIRCLE)); EXPECT_EQ(CIRCLE,getBoardCell(0,2)); }
TEST(Board_test,putPieceOnAnotherOne) { EXPECT_EQ(0, createBoard()); EXPECT_EQ(0, putPiece(1,1,CROSS)); EXPECT_EQ(1, putPiece(1,1,CROSS)); EXPECT_EQ(CROSS,getBoardCell(1,1)); EXPECT_EQ(0, putPiece(2,1,CIRCLE)); EXPECT_EQ(1, putPiece(2,1,CROSS)); EXPECT_EQ(CIRCLE,getBoardCell(2,1)); }
void GameWidget::keyRight() { if (!in_game || in_pause || xpos == scr_width - 2) return; getPiece(); if ((piece[0] != bg_sprite && ref(xpos + 1, ypos + 0) != bg_sprite) || (piece[1] != bg_sprite && ref(xpos + 2, ypos + 0) != bg_sprite) || (piece[2] != bg_sprite && ref(xpos + 1, ypos + 1) != bg_sprite) || (piece[3] != bg_sprite && ref(xpos + 2, ypos + 1) != bg_sprite)) { putPiece(); return; } ++xpos; putPiece(); }
void GameWidget::keyLeft() { if (!in_game || in_pause || xpos == 0) return; getPiece(); if ((piece[0] != bg_sprite && ref(xpos - 1, ypos + 0) != bg_sprite) || (piece[1] != bg_sprite && ref(xpos + 0, ypos + 0) != bg_sprite) || (piece[2] != bg_sprite && ref(xpos - 1, ypos + 1) != bg_sprite) || (piece[3] != bg_sprite && ref(xpos + 0, ypos + 1) != bg_sprite)) { putPiece(); return; } --xpos; putPiece(); }
void GameWidget::keyDown() { if (!in_game || in_pause) return; getPiece(); if ((piece[0] == bg_sprite && ref(xpos + 0, ypos + 0) != bg_sprite) || (piece[1] == bg_sprite && ref(xpos + 1, ypos + 0) != bg_sprite) || (piece[2] == bg_sprite && ref(xpos + 0, ypos + 1) != bg_sprite) || (piece[3] == bg_sprite && ref(xpos + 1, ypos + 1) != bg_sprite)) { putPiece(); return; } Sprite npiece[4]; npiece[0] = piece[2]; npiece[1] = piece[0]; npiece[2] = piece[3]; npiece[3] = piece[1]; for (int i = 0; i < 4; ++i) piece[i] = npiece[i]; putPiece(); }
void undoMove(board Game, Move move) { if (move->command == DO_NOTHING) return; if (move->isPieceCreated != NULL) { removePiece(Game, move->xTo, move->yTo); } else { putPiece(Game, move->xFrom, move->yFrom, move->movedPiece); if (move->isPieceRemoved != NULL && move->isPieceRemoved != move->movedPiece) { removePiece(Game, move->xTo, move->yTo); putPiece(Game, move->xTo, move->yTo, move->isPieceRemoved); } if (move->isPieceRemoved == NULL) { removePiece(Game, move->xTo, move->yTo); } } move->movedPiece->lastMove = move->currentPieceTurnBefore; }
static bool putPieces(void) { for (int y = 0; y < BOARD_H; y++) { for (int x = 0; x < BOARD_W; x++) { board[y][x].idx = (x < 4 || x > 12 || (x & y & 1)) ? COLUMN : EMPTY; board[y][x].isCorner = false; } } bool ret = false; for (int i = 0; i < PIECES; i++) { ret = putPiece(pieceOrder[i]) || ret; } toDrawAll = true; return ret; }
static void focusPiece(int8_t x, int8_t y) { focusPieceIdx = board[y][x].idx; if (focusPieceIdx >= 0) { int i = 9; while (pieceOrder[i] != focusPieceIdx) { i--; } if (i != 9) { while (i < 9) { pieceOrder[i] = pieceOrder[i + 1]; i++; } pieceOrder[9] = focusPieceIdx; putPiece(focusPieceIdx); } } }
int main(void) { int fini,x,y; fini=0; initPlayer(); createBoard(); while(!fini) { displayBoard(); if(getPlayer()==CROSS) { printf("Cross to play\n"); } else { printf("Circle to play\n"); } printf("column?: "); scanf("%d",&x); printf("line?: "); scanf("%d",&y); if(putPiece(x,y,getPlayer())==0) { fini=checkGameStatus(); if(!fini) { changePlayer(); } }else { printf("you can't play here!\n"); } } displayBoard(); if(getPlayer()==CROSS) { printf("Cross won \\o/\n"); } else { printf("Circle won \\o/\n"); } }
void GameWidget::nextPiece() { piece[0] = next_piece[0]; piece[1] = next_piece[1]; piece[2] = next_piece[2]; piece[3] = next_piece[3]; newPiece(); xpos = (scr_width - 2) / 2; ypos = 0; if ((piece[0] != bg_sprite && ref(xpos + 0, ypos + 0) != bg_sprite) || (piece[1] != bg_sprite && ref(xpos + 1, ypos + 0) != bg_sprite) || (piece[2] != bg_sprite && ref(xpos + 0, ypos + 1) != bg_sprite) || (piece[3] != bg_sprite && ref(xpos + 1, ypos + 1) != bg_sprite)) { in_game = false; repaintChilds(); KMessageBox::sorry(this, i18n("Game Over")); emit gameOver(); } putPiece(); }
void GameWidget::timeout() { if (!in_game || in_pause) return; getPiece(); if (ypos == scr_height - 2) { blockPiece(); return; } if ((piece[0] != bg_sprite && ref(xpos + 0, ypos + 1) != bg_sprite) || (piece[1] != bg_sprite && ref(xpos + 1, ypos + 1) != bg_sprite) || (piece[2] != bg_sprite && ref(xpos + 0, ypos + 2) != bg_sprite) || (piece[3] != bg_sprite && ref(xpos + 1, ypos + 2) != bg_sprite)) blockPiece(); else { ++ypos; putPiece(); } }
void GameWidget::blockPiece() { if (fast_mode) { timer->changeInterval(timer_interval); fast_mode = false; } putPiece(); bool xmap[scr_width * scr_height]; for (int yy = 0; yy < scr_height; ++yy) for (int x = 0; x < scr_width; ++x) xmap[yy*scr_width + x] = false; if (piece[2] != bg_sprite) checkSolePiece(xpos, ypos+1, xmap); if (piece[3] != bg_sprite) checkSolePiece(xpos+1, ypos+1, xmap); if (piece[2] == bg_sprite) checkSolePiece(xpos, ypos, xmap); if (piece[3] == bg_sprite) checkSolePiece(xpos+1, ypos, xmap); compact(); nextPiece(); }
int main(int argc, char const *argv[]) { newgame(); inst(); printf("\nHow Many Milliseconds Per Move Would You Like Your Opponent To Take?\n"); scanf("%d",inp); int mils = *inp; while(game==0) { checkMove(); if(moves==0){ cantMove[0]=1; legal=1; } screen(); scanf("%s",pos); row=pos[0]-'1'; col=letToNum(pos[2])-1; islegal(row,col); if(legal==1){ retZero(); putPiece(row,col); } nextTurn: retZero(); if (legal == 1) { player = 2; checkMove(); if(moves==0){ cantMove[1]=1; legal=0; goto nextTurn1; } clock_t begin = clock(), runningTime; int ai = minimax(player, board, 6, turn, begin, runningTime, mils)[0]; if (ai != 0) { yy = ai % 10; yy = yy - 1; xx = ai / 10; xx = xx - 1; printf("\n"); printf("Opponent Moved To %d,%d\n", (xx + 1), (yy + 1)); putPiece(xx, yy); retZero(); player = 1; } legal=0; } nextTurn1: if(cantMove[0]==1 && cantMove[1]==1){ game=1; if(cantMove[0]==0){ printf("\nPlayer 1 Wins"); }else{ printf("\n AI Wins"); } }else{ game=0; cantMove[0]=0; cantMove[1]=0; } } return 0; }