三子棋小游戏(可扩展为五子棋)

三子棋

三子棋是五子棋的简化版,一局游戏的具体流程是:
1.创建棋盘并初始化。
2.打印棋盘。
3.玩家落子(玩家通过输入行列坐标的方式来落子)。
4.判定胜负关系
5.电脑落子(随机位置落子)
6.判定胜负关系。
回到2继续执行。


C语言代码如下(示例):

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

#pragma warning (disable:4996)

#define Max_Row 3
#define Max_Col 3

//初始化棋盘
void init(char chessBoard[Max_Row][Max_Col])
{
	for (int row = 0; row < Max_Row; row++){
		for (int col = 0; col < Max_Col; col++){
			chessBoard[row][col] = ' ';
		}
	}
}
//显示棋盘
void printChessBoard(char chessBoard[Max_Row][Max_Col])
{
	printf("+---+---+---+\n");
	for (int row = 0; row < Max_Row; row++){
		printf("| %c | %c | %c |\n",chessBoard[row][0],
			chessBoard[row][1], chessBoard[row][2]);
		printf("+---+---+---+\n");
	}
}
//玩家落子
void playerMove(char chessBoard[Max_Row][Max_Col])
{
	
	while (1){
		printf("请玩家输入坐标(row,col):");
		int row = 0;
		int col = 0;
		scanf("%d %d", &row, &col);
		//校验玩家输入的坐标是否合法
		if (row < 0 || row >= Max_Row
			|| col < 0 || col >= Max_Col){
			printf("您的坐标位置不在合法范围[0,2]内!\n");
			continue;
		}
		if (chessBoard[row][col] != ' '){
			printf("您的坐标位置已经有子!\n");
			continue;
		}
		chessBoard[row][col] = 'x';
		break;
	}	
}
//电脑落子
void computerMove(char chessBoard[Max_Row][Max_Col])
{
	while (1){
		int row = rand() % Max_Row;
		int col = rand() % Max_Col;
		//确保随机数不能已经有子的位置
		if (chessBoard[row][col] != ' '){
			continue;
		}
		chessBoard[row][col] = 'o';
		break;
	}
}
//判断棋盘是否已满
int isFull(char chessBoard[Max_Row][Max_Col])
{
	//找空格,如果找不到就是满了
	for (int row = 0; row < Max_Row; row++){
		for (int col = 0; col < Max_Col; col++){
			if (chessBoard[row][col] == ' '){
				return 0;
			}
		}
	}
	return 1;
}
//判断输赢的条件返回x玩家获胜,返回o电脑获胜,q表示和棋,' '胜负未分
char isWin(char chessBoard[Max_Row][Max_Col])
{
	//判断所有行
	for (int row = 0; row < Max_Row; row++){
		if (chessBoard[row][0] != ' '
			&& chessBoard[row][0] == chessBoard[row][1]
			&& chessBoard[row][0] == chessBoard[row][2]){
			return chessBoard[row][0];
		}
	}
	//判断所有列
	for (int col = 0; col < Max_Col; col++){
		if (chessBoard[0][col] != ' '
			&& chessBoard[0][col] == chessBoard[1][col]
			&& chessBoard[0][col] == chessBoard[2][col]){
			return chessBoard[0][col];
		}
	}
	//判断两个对角线
	if (chessBoard[0][0] != ' '
		&& chessBoard[0][0] == chessBoard[1][1]
		&& chessBoard[0][0] == chessBoard[2][2]){
		return chessBoard[0][0];
	}
	if (chessBoard[2][0] != ' '
		&&chessBoard[2][0] == chessBoard[1][1]
		&& chessBoard[2][0] == chessBoard[0][2]){
		return chessBoard[2][0];
	}
	//判断是否为和棋,看棋盘中是否有剩余空间
	if (isFull(chessBoard)){
		return 'q';
	}
	return ' ';//单引号中间是一个空格
}

void game()
{
	//创建棋盘并初始化
	char chessBoard[Max_Row][Max_Col] = { 0 };
	init(chessBoard);
	char winner=' ';
	while (1){
		printChessBoard(chessBoard);//显示棋盘
		playerMove(chessBoard);//玩家落子
		winner=isWin(chessBoard);//判断输赢
		if (winner != ' '){
			break;
		}
		computerMove(chessBoard);//电脑落子
		winner = isWin(chessBoard);//判断输赢
		if (winner != ' '){
			break;
		}
	}
	printChessBoard(chessBoard);//显示最终输赢的盘面
	if (winner =='x'){
		printf("恭喜您赢了!\n");
	}
	else if (winner =='o'){
		printf("很遗憾,您输了!\n");
	}
	else{
		printf("打成平局!\n");
	}
}

int menu()
{
	printf("========================\n");
	printf("1.开始游戏\n");
	printf("0.结束游戏\n");
	printf("========================\n");
	printf("请输入您的选择:");
	int choice = 0;
	scanf("%d",&choice);
	return choice;
}

int main()
{
	srand((unsigned int)time(0));
	while (1){
		int choice = menu();
		if (choice == 1){
			game();
		}
		else if (choice == 0){
			printf("goodbye!\n");
			break;
		}
	}
	system("pause");
	return 0;
}

具体效果如图所示:
在这里插入图片描述


小结

以上就是今天简单的一个小游戏编程,对我们学过的数组知识,可以更好的理解与应用,通过最近一段时间的学习,基本上对C语言的基本知识有了更深刻的理解,希望我们在学习的道路上能继续坚持,继续向更高的楼梯爬去。


写作不易,大侠请留步,来个赞再走吆!!!


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值