三子連珠遊戲

玩家通過鍵盤輸入要落子的地點,電腦隨機產生一個沒有棋子的棋盤座標並落子,如果有一方可以做到三個子連着或對角線連着,則此方贏;如果雙方直到棋盤下滿都沒有任一方均做到,則爲平局。

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

#define LINE 3
#define LIST 3

void print(char arr[LINE][LIST]);
void player(char arr[LINE][LIST]);
int computer(char arr[LINE][LIST]);
char check(char arr[LINE][LIST]);
void init(char arr[LINE][LIST]);	

int main()
{
	char arr[LINE][LIST];
	char ch;
	init(arr);
	print(arr);
	do{	
		player(arr);
		ch = check(arr);
		if (ch != ' ')
		{
			break;
		}
		int inter = computer(arr);
		if (inter == 0)
		{
			printf("平局!\n");
			system("pause");
			return 0;
		}
		print(arr);
		ch = check(arr);		
	} while (ch==' ');
	print(arr);
	if (ch == '*')
	{
		printf("玩家贏!\n");
		system("pause");
		return 0;
	}
	else if (ch == 'o')
	{
		printf("電腦贏!\n");
		system("pause");
		return 0;
	}
	else
	{
		printf("平局!\n");
	}
	system("pause");
	return 0;
}
void player(char arr[LINE][LIST])  /*玩家輸入*/
{
	int x = 0, y = 0;
	printf("請輸入您要落子的地點(x,y):> ");
	scanf_s("%d%d", &x, &y);
	if ((x <= 0 || x > 3) || (y <= 0 || y > 3)||arr[x-1][y-1] != ' ')
	{
		printf("請輸入正確的地點!\n");
		player(arr);
	}
	arr[x - 1][y - 1] = '*';
}
int computer(char arr[LINE][LIST]) /*電腦輸入*/
{
	int x = 0, y = 0, i = 0, j = 0;
	for (i = 0; i < LINE; i++)
	{
		for (j = 0; j < LIST; j++)
		{
			if (arr[i][j] == ' ')
			{
				goto flag;
			}
		}
	}
	return 0;
flag:
	srand((unsigned int)time(NULL));
	x = rand() % 3;
	y = rand() % 3;   /*產生0~2之間的隨機數*/
	
	if (arr[x][y] != ' ')
	{
		goto flag;
	}
	arr[x][y] = 'o';
	return 1;
}
char check(char arr[LINE][LIST])	 /*檢查函數*/
{
	for (int i = 0; i < LINE; i++)	 /*行贏*/
	{
		if (arr[i][0] == arr[i][1] && arr[i][0] == arr[i][2])
			return arr[i][1];
	}
	for (int j = 0; j < LIST; j++)	 /*列贏*/
	{
		if (arr[0][j] == arr[1][j] && arr[0][j] == arr[2][j])
			return arr[0][j];
	}
	if (arr[0][0] == arr[1][1] && arr[0][0] == arr[2][2])  /*斜贏*/
		return 	arr[0][0];
	if (arr[0][2] == arr[1][1] && arr[0][2] == arr[2][0])
		return 	arr[0][2];
	return ' ';
}
void print(char arr[LINE][LIST])	/*輸出棋盤*/
{
	for (int i = 0; i < LINE; i++)
	{
		printf(" %c | %c | %c \n", arr[i][0], arr[i][1], arr[i][2]);
		printf("---|---|---\n");
	}
}
void init(char arr[LINE][LIST])	  /*初始化*/
{
	for (int i = 0; i < LINE; i++)
	{
		for (int j = 0; j < LIST; j++)
		{
			arr[i][j] = ' ';
		}
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章