3チェスと5チェスの小さなゲームを実現するC言語

3ピースチェスと5ピースチェスCの実現は同じであり、それぞれ実現するには以下のパーツに分割する必要があります。以下は主に3つのチェスの実現を紹介します。

1.
ボードの初期化2.ボードの表示
3.プレイヤー入力
4. 3ピースの状況があるかどうかを判断する
5.コンピューターによる自動入力
6. 3ピースの状況があるかどうかを判断する
 
 

1.ボードの初期化:

void InitialArr(char Arr[][COL], int row, int col)
{
    
    
	int i = 0;
	for (; i < row; i++)
	{
    
    
		int j = 0;
		for (; j < col; j++)
		{
    
    
			Arr[i][j] = ' ';
		}
	}
}

最初のボードのすべてのキャラクターを設定します' '
 
 

2.チェッカーボード表示:

void ShowArr(char Arr[][COL], int row, int col)
{
    
    
	int i = 0;
	printf("-----------\n");
	printf("   1| 2| 3|\n");
	printf("-----------\n");
	for (; i < row; i++)
	{
    
    
		printf("%d| %c| %c| %c|\n", i+1, Arr[i][0], Arr[i][1], Arr[i][2]);
		printf("-----------\n");
	}
}

ここに画像の説明を挿入
これは3 * 3のチェス盤です。複雑にする必要はなく、単に表示するだけです。
 
 

3.プレイヤー入力:

int PlayerArr(char Arr[][COL], int row, int col)
{
    
    
	printf("Please input your row and col:>");
	int i = 0;
	int j = 0;
	scanf("%d %d", &i, &j);
	if (i >= 1 && i <= 3 && j >= 1 && j <= 3)
	{
    
    
		if (Arr[i-1][j-1] != ' ')
		{
    
    
			return 2;  //该位置已经有点了,不能再输入
		}
		else
		{
    
    
			Arr[i - 1][j - 1] = BLACK;
			return 1;  //输入正确
		}
	}
	return -1;  //坐标输入错误
}

プレイヤーによる入力が表示されます‘X’
ここに画像の説明を挿入
ここでは、プレーヤーの入力方法として、キーボードから座標を入力することを選択しています。入力が間違っている(範囲が正しくない)場合、または座標が既に少しでもある場合は、エラーが表示され、プレーヤーに再度入力するよう求められます。
 
 

4. 3つのサブ条件があるかどうかを判断します。

int JudgeArr(char Arr[][COL], int row, int col)
{
    
    
	int i = 0;
	for (;i<row;i++)//每行三子,且不为空
	{
    
    
		if (Arr[i][0]!=' '&& Arr[i][0] == Arr[i][1] && Arr[i][1] == Arr[i][2])
		{
    
    
			return Arr[i][0];
		}
	}
	for (i=0; i < row; i++)//每列三子,且不为空
	{
    
    
		if (Arr[0][i] != ' '&&Arr[0][i] == Arr[1][i] && Arr[1][i] == Arr[2][i])
		{
    
    
			return Arr[0][i];
		}
	}
	if (Arr[0][0] != ' '&&Arr[0][0] == Arr[1][1] && Arr[1][1] == Arr[2][2])
	{
    
    
		return Arr[0][0];
	}//主对角线,且不为空
	if (Arr[0][2] != ' '&&Arr[0][2] == Arr[1][1] && Arr[1][1] == Arr[2][0])
	{
    
    
		return Arr[0][2];
	}//副对角线,且不为空
	for (i = 0; i < row; i++)
	{
    
    
		int j = 0;
		for (; j < col; j++)
		{
    
    
			if (Arr[i][j] == ' ')
			{
    
    
				return 'E'; //Empty,棋盘还有空,继续下棋
			}
		}
	}
	return 'D';//Draw,棋盘满了,未有输赢,平局
}

判定はプレイヤーとコンピューターの入力後に行われます。勝ちまたは負けの状況は8 つあります。各行に3人の子供、各列に3人の子供、主対角線および副対角線があり、空のものはありません
他の2つの状況:

  1. ボードは無料です。引き続きプレイしてください
  2. チェス盤がいっぱいで、勝ち負けなし、引き分け
     
     

5.コンピュータ自動入力:

void ComputerArr(char Arr[][COL], int row, int col)
{
    
    
	while (1)
	{
    
    
		int i = rand() % row;
		int j = rand() % col;
		if (Arr[i][j] == ' ')
		{
    
    
			Arr[i][j] = WHITE;
			break;
		}
	}
	Sleep(500);
	printf("Computer done!\n");

}

ここでは、srand関数とrand関数を使用して乱数を生成しています。生成された行と列、および対応するチェス盤がこの時点で空の場合、それらはチェスの駒に落ち、コンピュータのチェスの駒はになり‘O’ます。ここで少し遅延が設定されています。
ここに画像の説明を挿入
 
 

6. 3人の息子がいるかどうかを確認する

これは、上記のステップ4と同じです。

 
 

ゲームの手順:

void Game()
{
    
    
	printf("\n游戏开始!\n");
	char Arr[ROW][COL];
	InitialArr(Arr, ROW, COL);
	char ret = 'E'; //Empty,棋盘最开始全为空,返回值可为D,WHITE和BLACK
	int ProRet = 0;
	while (1)
	{
    
    
		ShowArr(Arr, ROW, COL);
		again: //输入不对的情况,重新输入
	    ProRet=PlayerArr(Arr, ROW, COL);
		if (2 == ProRet)
		{
    
    
			printf("该位置已经有点了,请重新输入\n");
			goto again;
		}
		else if (-1 == ProRet)
		{
    
    
			printf("坐标输入有误,请重新输入\n");
			goto again;
		}
		else
		{
    
    
			printf("Player done!\n");
			Sleep(500);
		}
	    ret=JudgeArr(Arr, ROW, COL);
		if (ret != 'E')//不等于空,棋盘满了,不执行了
		{
    
    
			break;
		}
		ComputerArr(Arr, ROW, COL);
		ret = JudgeArr(Arr, ROW, COL);
		if (ret != 'E')//不等于空,棋盘满了,不执行了
		{
    
    
			break;
		}
	}
	ShowArr(Arr, ROW, COL);
	switch (ret)//进行判定,谁输谁赢,平局
	{
    
    
	case BLACK:
		printf("\n恭喜你,你赢了!\n");
		break;
	case WHITE:
		printf("\n很遗憾,你输了!\n");
		break;
	case 'D':
		printf("\n平局,再接再厉!\n");
		break;
	default:
		break;
	}
	printf("\n游戏结束!\n");
}

ここに画像の説明を挿入
ゴバンのサンプル画像は、サンバンの実現方法と同じです。

3つのチェスとgobangのプログラムをGithubに配置しました。必要に応じて、3つのチェスとgobangを入手してください。

おすすめ

転載: blog.csdn.net/w903414/article/details/105622734