1. 程式人生 > >C語言_簡易三子棋小遊戲

C語言_簡易三子棋小遊戲

三子棋和五子棋的玩法相同,率先三子連成直線的玩家即可獲勝。

下面簡單介紹用C語言編寫的三子棋小遊戲。

思路如下:

1.定義一個二維陣列做為棋盤,定義陣列的行和列。

2.將棋盤初始化,填充為空格。

3.列印棋盤函式,每次下子後都列印一次棋盤。

4.玩家下子函式。

5.電腦下子函式。

6.判定遊戲結束函式。

7.程式碼如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define ROW 3
#define COL 3
char chess[ROW][COL];

void InIt()
{
	for (int row = 0; row < ROW; row++)
	{
		for (int col = 0; col < COL; col++)
		{
			chess[row][col] = ' ';
		}
	}
}

void Print()
{
	printf(" \n");
	printf("     |---|---|---|\n");
	for (int row = 0; row < ROW; row++)
	{
		printf("     | %c | %c | %c |\n",
			chess[row][0], chess[row][1], chess[row][2]);
		if (row != ROW - 1)
		{
			printf("     |---|---|---|\n");
		}
	}
	printf("     |---|---|---|\n");
	printf(" \n");
}

void PlayerTime()
{
	while (1)
	{
		//1.提示玩家落子
		printf("請玩家落子(輸入一個座標):\n");
		int row = 0, col = 0;
		scanf("%d %d", &row, &col);
		//2.判斷輸入的座標是否合法,做出正確提示
		if (row < 0 || row >= ROW || col < 0 || col >= COL)
		{
			printf("輸入有誤,請重新輸入!\n");
			continue;
		}
		if (chess[row][col] != ' ')
		{
			printf("該位置已有子,請重新輸入!\n");
			continue;
		}
		//3.合法後將對應位置填充為x
		chess[row][col] = 'x';
		break;
	}
}

void ComputerTime()
{
	printf("電腦落子!\n");
	int row = 0, col = 0;
	//1.隨機產生一個行和列
	while (1)
	{
		row = rand() % ROW;  //[0,row)
		col = rand() % COL;  //[0,col)
		//2.判斷位置是否正確
		if (chess[row][col] == ' ')
		{
			//3.將對應位置填充為o
			chess[row][col] = 'o';
			break;
		}
	}
}

int IsFull()
{
	for (int row = 0; row < ROW; row++)
	{
		for (int col = 0; col < COL; col++)
		{
			if (chess[row][col] == ' ');
			return 0;
		}
	}
	return 1;
}

char CheckOver()
{
	//檢查是否連成3個子
	for (int row = 0; row < ROW; row++)
	{
		if (chess[row][0] == chess[row][1] && chess[row][0] == chess[row][2]
			&& chess[row][2] != ' ')
		{
			return chess[row][0];
		}

	}
	for (int col = 0; col < COL; col++)
	{
		if (chess[0][col] == chess[1][col] && chess[0][col] == chess[2][col]
			&& chess[0][col] != ' ')
		{
			return chess[0][col];
		}
	}
	if (chess[0][0] == chess[1][1] && chess[0][0] == chess[2][2]
		&& chess[0][0] != ' ')
	{
		return chess[0][0];
	}
	if (chess[0][2] == chess[1][1] && chess[0][2] == chess[2][0]
		&& chess[0][4] != ' ')
	{
		return chess[0][2];
	}
	if (IsFull())
	{
		return 'q';
	}
	return ' ';
}

int main()
{
	char winner = ' ';
	InIt();
	while (1)
	{
		Print();
		PlayerTime();
		winner = CheckOver();
		if (winner != ' ')
		{
			Print();
			break;
		}
		ComputerTime();
		winner = CheckOver();
		if (winner != ' ')
		{
			Print();
			break;
		}
	}
	if (winner == 'o')
	{
		printf("電腦獲勝!!!\n");
	}
	else if (winner == 'x')
	{
		printf("玩家獲勝!!!\n");
	}
	else if (winner == 'q')
	{
		printf("和棋!!!\n");
	}
	system("pause");
	return 0;
}