예제 #1
0
파일: move.c 프로젝트: mplaton1/IPP
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;
}
예제 #2
0
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));
}
예제 #3
0
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));
}
예제 #4
0
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));
}
예제 #5
0
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();
}
예제 #6
0
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();
}
예제 #7
0
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();
}
예제 #8
0
파일: move.c 프로젝트: mplaton1/IPP
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;
}
예제 #9
0
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;
}
예제 #10
0
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);
        }
    }
}
예제 #11
0
파일: main.c 프로젝트: jefff35/morpion
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");
    }
}
예제 #12
0
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();
}
예제 #13
0
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();
	}

}
예제 #14
0
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();
}
예제 #15
0
파일: board2.c 프로젝트: ferrin22/EDA132
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;
}