threeChess 三子棋C语言

要制作一个三子棋小游戏
首先我们需要先列出步骤!

1.初始化棋盘
2.初始化数组
3.打印棋盘
4.玩家落子(scanf()实现)
5.判断输赢(包括棋盘是否已满的情况)
6.电脑落子(用rand()随机数实现) C语言随机种子需要重新设置
7.判断输赢(包括棋盘是否已满的情况)
循环4-7
注意事项 需要检验玩家输入情况与落子情况等是否正常

使用宏定义便于修改

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

宏定义 便于修改
#define  maxRow 3
#define  maxCol 3
定义一个全局变量
char chessBoard[maxRow][maxCol];

初始化数组

void Init()
{
	for (int row=0;row<maxRow;row++)
	{
		for (int col=0;col<maxCol;col++)
		{
			将空格作为初始化条件
			chessBoard[row][col] = ' ';  
		}
	}
}

打印棋盘 (有点粗略请不要介意)

void printChess()
{
	printf("----+---+----\n");
	for (int row=0;row<maxRow;row++)
	{
		printf("| %c | %c | %c |\n", chessBoard[row][0],chessBoard[row][1],chessBoard[row][2]);
		printf("----+---+----\n");
	}
}

玩家落子 注意非法判定

void playMove()
{
	
	printf("玩家落子\n");
	while(1)
	{printf("please input");
	int row;
	int col;
	scanf 使用需要严格匹配
	scanf("%d %d", &row, &col);

	非法判定
	if (row<0 || row>maxRow || col<0 || col>maxCol)
	{//满足情况就需要玩家重新落子
		printf("输入有误 请重新输入\n");
		continue;
	}
	if (chessBoard[row][col]!=' ')
	{
		printf("输入有误 请重新输入\n");
		continue;
	}
	落子 修改
	chessBoard[row][col] = 'X';
	break;
	} 
}

电脑落子 注意非法判定

void computerMove()
{//电脑 随机落子
	printf("电脑落子\n");
	while (1)
	{
		int row = rand() % maxRow;
		int col = rand() % maxCol;
		if (chessBoard[row][col]!=' ')
		{//该位置有子了
			continue;
		}
		chessBoard[row][col] = 'O';
		break;
	}
}

和棋 遍历数组找空格 满了返回1

int isFull()
{
	for (int row = 0; row < maxRow; row++)
	{
		for (int col = 0; col < maxCol; col++)
		{
			不能使用!= 因为无法判断是否下满棋盘!
			if (chessBoard[row][col] == ' ')
			{
				return 0;
			}
		}
	}
	return 1;
}

检验胜负 三种情况
'x’玩家‘o’电脑 ‘ ’胜负未分

char win()
{
	int isFull();
	检测所有行
	for (int row=0;row<maxRow;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 < maxRow; col++)
	{
		if (chessBoard[0][col] != ' '&&chessBoard[0][col] == chessBoard[1][col] && chessBoard[0][col] == chessBoard[0][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[0][2] != ' '&&chessBoard[0][2] == chessBoard[1][1] && chessBoard[0][2] == chessBoard[2][0])
		{
			return chessBoard[0][2];
		}
		是否和棋
			if (isFull() == 1)
			{
				return 'q';
			}
		return ' ';
}

开始执行


int main()
{
	char winner;
	//创建棋盘
	Init();
	while (1)
	{
		//打印棋盘
		printChess();
		//玩家落子
		playMove();
		//判定胜负
		winner=win();
		if (winner!=' ')
		{
			break;
		}
		//电脑落子
		computerMove();
		//判断胜负
		winner = win();
		if (winner != ' ')
		{
			break;
		}
	}
	printChess();
	//循环上述
	///判断谁胜利
	if (winner=='X')
	{
		printf("you win\n");
	}
	else if (winner=='O')
	{
		printf(" you defeated\n");
	}
	else
	{
		printf("peace\n");
	}
	system("pause");
	return 0;
}

三子棋是一个虽然作为一个简易小代码 但是还是不能光看不练 代码需要实践 这样才能找出错误 不断提升!

原创文章 zy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值