コード例 #1
0
void PrintSkor(Queue *Q)
/* I.S : Queue tidak kosong */
/* F.S : Menampilkan seluruh skor pemain sesuai dengan format yang telah ditentukan */
{
	int i;
	for (i = Head(*Q); i <= Tail(*Q); i++)
	{
		printf("%s : %d", InfoHeadNama(*Q), InfoHeadSkor(*Q));
		printf("  ");
		ChangeTurn(&(*Q));
	}
	printf("\n");
}
コード例 #2
0
bool Checkers::Move(Player* player, int xf, int yf, int xt, int yt)
{
	// * 着手に関する確認 *
	// プレイヤーが実在するか確認
	if(player != ally_player && player != enemy_player)
		return 0;
	// プレイヤーが手番者か確認
	if(turn != player->side)
		return false;
	// 盤上での着手をしているか確認
	if(board.IsAvailable(xf, yf) == 0 || board.IsAvailable(xt, yt) == 0)
		return false;
	// 移動するコマの存在を確認
	if(board.getAt(xf, yf)->piece == 0)
		return false;
	// 移動先のセルの状態を確認
	if(board.getAt(xt, yt)->piece != 0)
		return false;

	// * 着手の解釈 *
	if(!DutyJump(player->side))
	{
		if(player->side == ally)
		{
			// 周囲1マス(進行)
			if((xt == xf-1 || xt == xf+1) && (yt == yf-1 || yt == yf+1))
			{
				if(yt == yf-1)
				{
					board.getAt(xt, yt)->piece = board.getAt(xf, yf)->piece;
					board.getAt(xf, yf)->piece = 0;
					if(board.IsAvailable(xt-1, yt-1) == false)
						board.getAt(xt, yt)->piece->Crown();
					ChangeTurn();
					return true;
				}
				if(yt == yf+1 && board.getAt(xf, yf)->piece->isCrowned())
				{
					board.getAt(xt, yt)->piece = board.getAt(xf, yf)->piece;
					board.getAt(xf, yf)->piece = 0;
					ChangeTurn();
					return true;
				}
			}
		}
		else if(player->side == enemy)
		{	
			// 周囲1マス(進行)
			if((xt == xf-1 || xt == xf+1) && (yt == yf-1 || yt == yf+1))
			{
				if(yt == yf-1 && board.getAt(xf, yf)->piece->isCrowned())
				{
					board.getAt(xt, yt)->piece = board.getAt(xf, yf)->piece;
					board.getAt(xf, yf)->piece = 0;
					ChangeTurn();
					return true;
				}
				if(yt == yf+1)
				{
					board.getAt(xt, yt)->piece = board.getAt(xf, yf)->piece;
					board.getAt(xf, yf)->piece = 0;
					if(board.IsAvailable(xt+1, yt+1) == false)
						board.getAt(xt, yt)->piece->Crown();
					ChangeTurn();
					return true;
				}
			}
		}
		return false;
	}
			
	// 周囲2マス(ジャンプ)
	if(player->side == ally)
	{
		if((xt == xf-2 || xt == xf+2) && (yt == yf-2 || yt == yf+2))
		{
			if(yt == yf-2)
			{
				board.getAt(xt, yt)->piece = board.getAt(xf, yf)->piece;
				board.getAt(xf, yf)->piece = 0;
				if(board.IsAvailable(xt-1, yt-1) == false)
					board.getAt(xt, yt)->piece->Crown();
				if(xt == xf-2)
				{
					delete board.getAt(xf-1, yf-1)->piece;
					board.getAt(xf-1, yf-1)->piece = 0;
					if(!DutyJump(player->side))
						ChangeTurn();
					return true;
				}
				if(xt == xf+2)
				{
					delete board.getAt(xf+1, yf-1)->piece;
					board.getAt(xf+1, yf-1)->piece = 0;
					if(!DutyJump(player->side))
						ChangeTurn();
					return true;
				}
			}
			if(yt == yf+2 && board.getAt(xf, yf)->piece->isCrowned())
			{
				board.getAt(xt, yt)->piece = board.getAt(xf, yf)->piece;
				board.getAt(xf, yf)->piece = 0;
				if(xt == xf-2)
				{
					delete board.getAt(xf-1, yf+1)->piece;
					board.getAt(xf-1, yf+1)->piece = 0;
					if(!DutyJump(player->side))
						ChangeTurn();
					return true;
				}
				if(xt == xf+2)
				{
					delete board.getAt(xf+1, yf+1)->piece;
					board.getAt(xf+1, yf+1)->piece = 0;
					if(!DutyJump(player->side))
						ChangeTurn();
					return true;
				}
			}
		}
	}
	else if(player->side == enemy)
	{	
		if((xt == xf-2 || xt == xf+2) && (yt == yf-2 || yt == yf+2))
		{
			if(yt == yf-2 && board.getAt(xf, yf)->piece->isCrowned())
			{
				board.getAt(xt, yt)->piece = board.getAt(xf, yf)->piece;
				board.getAt(xf, yf)->piece = 0;
				if(xt == xf-2)
				{
					delete board.getAt(xf-1, yf-1)->piece;
					board.getAt(xf-1, yf-1)->piece = 0;
					if(!DutyJump(player->side))
						ChangeTurn();
					return true;
				}
				if(xt == xf+2)
				{
					delete board.getAt(xf+1, yf-1)->piece;
					board.getAt(xf+1, yf-1)->piece = 0;
					if(!DutyJump(player->side))
						ChangeTurn();
					return true;
				}
			}
			if(yt == yf+2)
			{
				board.getAt(xt, yt)->piece = board.getAt(xf, yf)->piece;
				board.getAt(xf, yf)->piece = 0;
				if(board.IsAvailable(xt+1, yt+1) == false)
					board.getAt(xt, yt)->piece->Crown();
				if(xt == xf-2)
				{
					delete board.getAt(xf-1, yf+1)->piece;
					board.getAt(xf-1, yf+1)->piece = 0;
					if(!DutyJump(player->side))
						ChangeTurn();
					return true;
				}
				if(xt == xf+2)
				{
					delete board.getAt(xf+1, yf+1)->piece;
					board.getAt(xf+1, yf+1)->piece = 0;
					if(!DutyJump(player->side))
						ChangeTurn();
					return true;
				}
			}
		}
	}
	return false;
}