c小游戏-三子棋

时间:2021-07-28
本文章向大家介绍c小游戏-三子棋,主要包括c小游戏-三子棋使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

三子棋小游戏

经过几天学习,为了将之前学习的知识加以运用,于是写了一个简单的三子棋。


在写之前,先将游戏实现流程梳理一遍,
按照我们平常的游戏经验,进入游戏后,首先得有菜单,可以让玩家知道如何进入游戏。
在进入游戏后,需要一个3*3的棋盘。游戏一开始,棋盘内的内容需要初始化为空格
将棋盘打印出来后,等待玩家下棋后,电脑在接着下。在每一步下棋后,都需要确认游戏是否已出现胜负或者和棋。
在确认棋盘内还有空格,且没有出现三字连线的情况,那就要再重复玩家下棋,确认棋盘,电脑下棋,确认棋盘,直到出现胜负为止。
胜负确认后,再重新打印菜单,确认是否重新开始游戏。

分析完流程后,便可以开始写三子棋了。


#include<stdio.h>
#include<windows.h>
#define ROW 3
#define COW 3
#include<stdlib.h>
#include<time.h>
void Initboard(char board[ROW][COW], int row, int cow);
void Print(char board[ROW][COW], int row, int cow);
void Playchess(char board[ROW][COW], int row, int cow);
void computer(char board[ROW][COW], int row, int cow);
char Is`win(char board[ROW][COW], int row, int cow);

先将游戏的菜单页面给出。在打印菜单前顺便将屏幕清屏。

void menu()
{
system("cls");
printf("\n************************************\n");
printf("*************1 开始游戏*************\n");
printf("*************0 退出游戏*************\n");
printf("************************************\n");}`

菜单打印完后,便要由玩家选择是否开始游戏了

int main()
{int n;
do
{
menu();
scanf("%d", &n);
switch (n)
{
case 1:
	game();
	break;
case 0:
	printf("退出游戏");
	break;
default:
	printf("输入错误");
	break;
 }
} while (n); //通过玩家选择的值,确定是否进入游戏。或者退出游戏。

在进入游戏后。就要进入游戏主体,而三子棋的游戏思路就是玩家下棋,判断胜负,电脑下棋,判断胜负,每一次下完棋后,都将棋盘当前画面打印,那么用代码表示就是:

void game()
{
char a;
char board[ROW][COW] = { 0 };
Initboard(board, ROW, COW);
system("cls");
Print(board, ROW, COW);
while (1)
{
	Playchess(board, ROW, COW);
	a = Iswin(board, ROW, COW);
	if (a == 'a')
	{
		printf("和局\n");
		break;
	}
	else if (a == '*')
	{
		printf("玩家胜");
		break;
	}
	else if (a == '#')
	{
		printf("电脑胜");
		break;
	}
	Print(board, ROW, COW);
	computer(board, ROW, COW);
	Print(board, ROW, COW);
	a = Iswin(board, ROW, COW);
	if (a == 'a')
	{
		printf("和局\n");
		break;
	}
	else if (a == '*')
	{
		printf("玩家胜");
		break;
	}
	else if (a == '#')
	{
		printf("电脑胜");
		break;
	}
}
printf("按任意键继续\n");
getch();
}

现在为止已经将大致的逻辑写清,只剩将每个函数的内容补充。


首先是创建一个3* 3的棋盘。也就是一个3*3的二维数组,再将数组内容全部初始化为空格’ ’;

void Initboard(char board[ROW][COW], int row, int cow)//初始化棋盘
{
int i = 0, j = 0;
for (i = 0; i < row; i++)
{
	for (j = 0; j < cow; j++)
	{
		board[i][j] = ' ';
	}
}
}

初始化好之后,自然要将棋盘打印出来,这样才能让用户选择坐标。

void Print(char board[ROW][COW], int row, int cow)//打印棋盘
{
int i, j;
for (i = 0; i < row; i++)
{
	for (j = 0; j < cow; j++)
	{
		printf(" %c ", board[i][j]);
		if (j != cow - 1)//在棋盘打印到最后一排时不打印 ’|’
		{
			printf("|");
		}
	}
	printf("\n");
	for (j = 0; j < cow; j++)
	{
		if (i < row - 1)
		{
			printf("---");
			if (j < cow - 1)
			{
				printf("|");
			}
		}
	}printf("\n");
}
}

打印完棋盘后,需要用户输入坐标下棋,那我们就写一个下棋函数

void Playchess(char board[ROW][COW], int row, int cow)//玩家下棋
{
int x = 0, y = 0;
while (1)
{
	printf("请输入坐标:>\n");
	scanf("%d%d", &x, &y);
	if (x > 0 && x <= row && y > 0 && y <= cow)
	{
		if (board[x-1][y-1] == ' ')
		{
			board[x - 1][y - 1] = '*';
			break;
		}
		else
		{
			printf("坐标重复!");
		}
	}
	else
	{
		printf("输入错误!\n");
	}
}
}

每下完一步,游戏就有可能出现胜负,或者棋盘已被下满的情况,所以我们要再写一个函数确认。

char deuce(char board[ROW][COW], int row, int cow)//判断棋盘是否还要空位
{
int i, j;
for (i = 0; i < row; i++)
{
	for (j = 0; j < cow; j++)
	{
		if (board[i][j] == ' ')
		{
			return 'C';
		}
	}
}
return 'a';
}

char Iswin(char board[ROW][COW], int row, int cow)//判断游戏是否出现胜利条件或者棋盘是否还有空位
{
int i;
for (i = 0; i < row; i++)
{
	if (board[i][0] == board[i][1] && board[i][1] == board[i][2])
	{
		return board[i][1];
	}
	else if (board[0][i] == board[1][i] && board[1][i] == board[2][i])
	{
		return board[1][i];
	}
}
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] || board[2][0] == board[1][1] && board[0][2])
{
	return board[1][1];
}
return(deuce(board, row, cow));//当遍历完没有出现胜利条件,便判断棋盘内是否还有空位。
}

通过函数返回的值进行确认。

while (1)
{
	Playchess(board, ROW, COW);
	a = Iswin(board, ROW, COW);
	if (a == 'a')
	{
		printf("和局\n");
		break;
	}
	else if (a == '*')
	{
		printf("玩家胜");
		break;
	}
	else if (a == '#')
	{
		printf("电脑胜");
		break;
	}

如果游戏继续,那就回到玩家下棋,再进行循环,直到出现胜负或者和局break跳出后再结束循环,回到菜单界面询问是否进入下次游戏。


到此,一个三子棋便新鲜出炉了。但是在这个三子棋中,判断胜利的代码是锁死只能判断3*3的棋盘,如果棋盘大小改变,那代码又要重新修改,不过今天的任务便是先出这样一份三字棋便可。

感谢大佬观看到这。如果代码中有哪些不足之处也请大家多多指出。

原文地址:https://www.cnblogs.com/zjj4633/p/15071840.html