最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解用C語言實現(xiàn)三子棋游戲流程

 更新時間:2021年11月15日 11:54:22   作者:Ssorrymaker  
三子棋是一種民間傳統(tǒng)游戲,又叫九宮棋、圈圈叉叉、一條龍、井字棋等。將正方形對角線連起來,相對兩邊依次擺上三個雙方棋子,只要將自己的三個棋子走成一條線,對方就算輸了

三子棋游戲簡介

在這里插入圖片描述

這是一個簡單的三子棋小游戲,估計大家小時候都玩兒過,只要能連成三個,無論是行,列還是對角線,就可以勝利了。是不是很簡單呢,那我們來嘗試一下用C語言來寫一個簡單的三子棋游戲。

一、分析及實現(xiàn)

1.棋盤

想要玩游戲,那首先應該有一個棋盤吧。因為我們玩兒的是三子棋,所以來說一個3X3的棋盤應該可以滿足要求。這里使用了一個三行三列的二維數(shù)組來模擬三子棋的棋盤。
有了棋盤之后在開始游戲之前先把棋盤初始化一下,這樣看起來更方便。

//初始化棋盤
void InitBoard(char board[][COL], int row, int col)
{
	int i = 0;
	for (i = 0; i < ROW; i++)
	{
		int j = 0;
		for (j = 0; j < COL; j++)
		{
			board[i][j] = ' ';
		}
	}
}

之后呢,再來打印看看,要優(yōu)化一下再打印出來

//打印棋盤
void DisplayBoard(char board[ROW][COL], int row, int col)
{
	int i = 0;
	for (i = 0; i < row; i++)
	{
		printf("+---+---+---+\n");
		int j = 0;
		for (j = 0; j < col; j++)
		{
			printf("| %c ", board[i][j]);
		}
		printf("|\n");
	}
	printf("+---+---+---+\n");
}

這是我設計的一個簡單的小棋盤

在這里插入圖片描述

棋盤的風格和樣式可以根據(jù)自己的喜好更改。
好了,現(xiàn)在我們有了棋盤,有了打印出來的樣子,那接下來就應該向棋盤上落子了!

2.落子

下棋呢可以是兩個人下,當然也可以自己和電腦下棋,這里我選擇和電腦對弈,這樣就需要兩個功能了,一個是玩家下棋,一個就是電腦下棋了。

//玩家下棋
void Player_move(char board[ROW][COL], int row, int col)
{
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("玩家下棋:->");
		scanf("%d %d", &x, &y);

		if (x > 0 && x <= row && y > 0 && y <= col)
		{
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = 'O';
				break;
			}
			else
			{
				printf("坐標已被占用!\n");
			}
		}
		else
		{
			printf("坐標非法,請重新輸入!\n");
		}
	}
}

為了將玩家和電腦區(qū)分開,需要使用兩個不一樣的符號來代表玩家的落子和電腦的落子 玩家----O,電腦----X

//電腦下棋
void Computer_move(char board[ROW][COL], int row, int col)
{
	printf("電腦下棋:\n");
	while (1)
	{
		int x = rand() % ROW;
		int y = rand() % COL;
		if (board[x][y] == ' ')
		{
			board[x][y] = 'X';
			break;
		}
	}
}

玩家的落子可以通過輸入坐標,而電腦呢,我們讓他隨機選擇合理的坐標范圍進行落子。
那隨著玩家和電腦相繼落子,我們就需要判斷誰獲勝了,或者平局的情況。

3.判斷輸贏

//判斷輸贏
char Is_win(char board[ROW][COL], int row, int col)
{
	//判斷行列
	int i = 0;
	for (i = 0; i < ROW; i++)
	{
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2])
		{
			return board[i][0];
		}

		if (board[0][i] == board[1][i] && board[1][i] == board[2][i])
		{
			return board[0][i];
		}

	}
	//判斷對角線
	if ((board[0][0] == board[1][1] && board[1][1] == board[2][2])
		|| (board[0][2] == board[1][1] && board[1][1] == board[2][0]))
	{
		return board[1][1];
	}

	if (Is_full(board, row, col))
	{
		return 'D';  //平局
	}
	return 'C'; //Continue表示繼續(xù)
}

如果棋盤滿了,還沒有分出勝負的話就是平局的情況。
為了判斷棋盤是否滿了,我們也需要相應的功能來簡化我們的代碼。

//判斷棋盤是否滿了
int Is_full(char board[ROW][COL], int row, int col)
{
	int i = 0;
	for (i = 0; i < ROW; i++)
	{
		int j = 0;
		for (j = 0; j < COL; j++)
		{
			if (board[i][j] == ' ')
				return 0;
		}
	}
	return 1;
}

二、程序演示

在這里插入圖片描述

三、完整代碼

以下是完整代碼,有需要的可以查看,我用了三個文件來存儲,兩個.c文件用來書寫主要代碼,一個.h文件用來存儲預處理指令和宏定義

1.main.c

#define _CRT_SECURE_NO_WARNINGS 1

#include"game.h"


int main()
{
	test();
	return 0;
}

2.game.c

#define _CRT_SECURE_NO_WARNINGS 1

#include"game.h"

void menu()
{
	printf("**********************************\n");
	printf("**********   1.play   ************\n");
	printf("**********   0.exit   ************\n");
	printf("**********************************\n");
}
void game()
{
	char board[ROW][COL] = {0};
	InitBoard(board, ROW, COL);
	DisplayBoard(board, ROW, COL);

	char ret = 0;
	while (1)
	{
		Player_move(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		ret = Is_win(board, ROW, COL);
		if (ret == 'O')
		{
			printf("玩家贏!\n");
			break;
		}
		if (ret == 'D')
		{
			printf("平局\n");
			break;
		}
		Computer_move(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		ret = Is_win(board, ROW, COL);
		if (ret == 'X')
		{
			printf("電腦贏!\n");
			break;
		}
	}

}
void test()
{
	srand((unsigned int)time(NULL));
	int input = 0;

	do
	{
		menu();
		printf("請選擇:->");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戲!\n");
			break;
		default:
			printf("輸入錯誤,請重新輸入!\n");
			break;
		}
	} while (input);
}

//初始化棋盤
void InitBoard(char board[][COL], int row, int col)
{
	int i = 0;
	for (i = 0; i < ROW; i++)
	{
		int j = 0;
		for (j = 0; j < COL; j++)
		{
			board[i][j] = ' ';
		}
	}
}
//打印棋盤
void DisplayBoard(char board[ROW][COL], int row, int col)
{
	int i = 0;
	for (i = 0; i < row; i++)
	{
		printf("+---+---+---+\n");
		int j = 0;
		for (j = 0; j < col; j++)
		{
			printf("| %c ", board[i][j]);
		}
		printf("|\n");
	}
	printf("+---+---+---+\n");
}
//玩家下棋
void Player_move(char board[ROW][COL], int row, int col)
{
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("玩家下棋:->");
		scanf("%d %d", &x, &y);

		if (x > 0 && x <= row && y > 0 && y <= col)
		{
			if (board[x - 1][y - 1] == ' ')
			{
				board[x - 1][y - 1] = 'O';
				break;
			}
			else
			{
				printf("坐標已被占用!\n");
			}
		}
		else
		{
			printf("坐標非法,請重新輸入!\n");
		}
	}
}
//電腦下棋
void Computer_move(char board[ROW][COL], int row, int col)
{
	printf("電腦下棋:\n");
	while (1)
	{
		int x = rand() % ROW;
		int y = rand() % COL;
		if (board[x][y] == ' ')
		{
			board[x][y] = 'X';
			break;
		}
	}
}
//判斷棋盤是否滿了
int Is_full(char board[ROW][COL], int row, int col)
{
	int i = 0;
	for (i = 0; i < ROW; i++)
	{
		int j = 0;
		for (j = 0; j < COL; j++)
		{
			if (board[i][j] == ' ')
				return 0;
		}
	}
	return 1;
}
//判斷輸贏
char Is_win(char board[ROW][COL], int row, int col)
{
	//判斷行列
	int i = 0;
	for (i = 0; i < ROW; i++)
	{
		if (board[i][0] == board[i][1] && board[i][1] == board[i][2])
		{
			return board[i][0];
		}

		if (board[0][i] == board[1][i] && board[1][i] == board[2][i])
		{
			return board[0][i];
		}

	}
	//判斷對角線
	if ((board[0][0] == board[1][1] && board[1][1] == board[2][2])
		|| (board[0][2] == board[1][1] && board[1][1] == board[2][0]))
	{
		return board[1][1];
	}

	if (Is_full(board, row, col))
	{
		return 'D';  //平局
	}
	return 'C'; //Continue表示繼續(xù)
}

3.game.h

#define _CRT_SECURE_NO_WARNINGS 1

#define ROW 3
#define COL 3

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

void test();
void menu();

void InitBoard(char board[ROW][COL], int, int);
void DisplayBoard(char board[ROW][COL], int, int);
void Player_move(char board[ROW][COL], int, int);
void Computer_move(char board[ROW][COL], int, int);
char Is_win(char board[ROW][COL], int, int);

總結

以上就是一個完整的三子棋小游戲的C語言實現(xiàn)版本,謝謝觀看!

以上就是詳解用C語言實現(xiàn)三子棋游戲流程的詳細內(nèi)容,更多關于C語言 三子棋的資料請關注腳本之家其它相關文章!

相關文章

最新評論

遵义县| 华安县| 灵宝市| 昆山市| 旬阳县| 安图县| 壤塘县| 陇南市| 浠水县| 华容县| 郓城县| 托里县| 泸水县| 红原县| 来凤县| 宾川县| 会泽县| 大英县| 安义县| 昌图县| 黄平县| 民权县| 胶南市| 萨嘎县| 普陀区| 巧家县| 凉山| 元氏县| 嘉禾县| 广灵县| 亳州市| 东乡族自治县| 东源县| 米脂县| 出国| 定兴县| 安义县| 高唐县| 彝良县| 平原县| 康保县|