【C语言】五子棋(编译环境:vs2013)

      今天写了五子棋的代码,虽然这个程序不是特别的难,但是对于我这个C语言小白来说还真的是有点开心,写这个程序的时候最重要的是先搭建框架,再一步步实现具体代码.

基本思路:

用一个二维数组表示棋盘(5 * 5),默认初始化成空格'  ',

用字符'x'表示玩家的落子,用'o'表示电脑打的落子,

轮到玩家落子,就提示玩家进行落子(输入一组坐标),

轮到电脑落子,随机下(随机找一个空白的位置落子)

游戏结束判定:

   1.玩家胜利

   2.电脑胜利

   3.和棋

 

具体代码如下:

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

#define ROW 5
#define COL 5
char qipan[ROW][COL];

void init(char qipan[ROW][COL])    //初始化函数
{
	//初始化成空格;
	for (int row = 0; row < ROW; ++row)
	{
		for (int col = 0; col < COL; ++col)
		{
			qipan[row][col] = ' ';
		}
	}
}
void Print(char qipan[ROW][COL])    //打印函数
{
	//打印出边框;
	printf(" --- --- --- --- ---\n");
	for (int row = 0; row < ROW; ++row)
	{
		printf("| %c | %c | %c | %c | %c |\n", qipan[row][0], qipan[row][1], qipan[row][2],qipan[row][3],qipan[row][4]);
		printf(" --- --- --- --- ---\n");
	}
}
void playermove(char qipan[ROW][COL])    //玩家下棋函数
{
	//玩家下,输入一组坐标;判断坐标是否越界,判断是否已经下过(是否等于空格)
	//输入符合   该格' ' = 'x';
	while (1)
	{
		int row = 0;
		int col = 0;
		printf("请玩家输入坐标[row][col]:");
		scanf("%d %d", &row, &col);
		if (row < 0 || row >(ROW - 1) || col < 0 || col >(COL - 1))
		{
			printf("输入错误,请重新输入:\n");
			continue;
		}
		if (qipan[row][col] != ' ')
		{
			printf("此位置已经下过,请重新输入坐标:\n");
			continue;
		}
		else
		{
			qipan[row][col] = 'x';
			break;
		}
	}
}
void computermove(char qipan[ROW][COL])    //电脑下棋函数
{ 
	//判断是否已经下过;
	//输入符合  该格' ' = 'o';
	while (1)
	{
		int row = rand() % ROW;
		int col = rand() % COL;
		if (qipan[row][col] != ' ')
		{
			continue;
		}
		else
		{
			qipan[row][col] = 'o';
			break;
		}
	}
}
int isfull(char qipan[ROW][COL])    //判断格子是否下满了;
{
	//如果有一个格是' ',就没满,return0;
	//如果全部满了 return1;
	for (int row = 0; row < ROW; ++row)
	{
		for (int col = 0; col < COL; ++col)
		{
			if (qipan[row][col] == ' ')
			{
				return 0;
			}
		}
	}
	return 1;
}
int checkwinner(char qipan[ROW][COL])     //检查函数
{
	//检查(遍历);
	//三个棋连在一起的所有情况(行和列和对角线);
	//检查和棋,所有格都不是' ';
	for (int row = 0; row < ROW; ++row)
	{
		if (qipan[row][0] == qipan[row][1]
			&& qipan[row][0] == qipan[row][2]
			&& qipan[row][0] == qipan[row][3]
			&& qipan[row][0] == qipan[row][4]
			&& qipan[row][0] != ' ')
		{
			return qipan[row][0];
		}
	}
	for (int col = 0; col < COL; ++col)
	{
		if (qipan[0][col] == qipan[1][col]
			&& qipan[0][col] == qipan[2][col]
			&& qipan[0][col] == qipan[3][col]
			&& qipan[0][col] == qipan[4][col]
			&& qipan[0][col] != ' ')
		{
			return qipan[0][col];
		}
	}
	if (qipan[0][0] == qipan[1][1]
		&& qipan[0][0] == qipan[2][2]
		&& qipan[0][0] == qipan[3][3]
		&& qipan[0][0] == qipan[4][4]
		&& qipan[0][0] != ' ')
	{
		return qipan[0][0];
	}
	if (qipan[0][4] == qipan[1][3]
		&& qipan[0][4] == qipan[2][2]
		&& qipan[0][4] == qipan[3][1]
		&& qipan[0][4] == qipan[4][0]
		&& qipan[0][4] != ' ')
	{
		return qipan[0][4];
	}
	if (isfull(qipan) == 1)
	{
		return 'p';
	}
	return ' ';
}
int menu()    //菜单
{
	printf("**********************************\n");
	printf("*************1,开始游戏***********\n");
	printf("*************0.退出游戏***********\n");
	printf("**********************************\n");
	int choice = 0;
	printf("请输入您的选择:\n");
	scanf("%d", &choice);
	return choice;
}
void game()    //游戏入口
{
	//1.初始化棋盘;
	init(qipan);
	char winner = ' ';
	while (1)
	{
		//2.打印棋盘(第一次是一个空棋盘);
		Print(qipan);
		//3.玩家下,检测是否结束;
		playermove(qipan);
		winner = checkwinner(qipan);
		if (winner != ' ')
		{
			break;
		}
		//4.电脑落子,检测游戏是否结束;
		computermove(qipan);
		winner = checkwinner(qipan);
		if (winner != ' ')
		{
			break;
		}
	}
	Print(qipan);
	//在游戏结束之前再打印一下地图;
	if (winner == 'x')
	{
		printf("^_^玩家胜利!^_^\n");
	}
	else if (winner == 'o')
	{
		printf("~_~电脑胜利!~_~\n");
	}
	else if (winner == 'p')
	{
		printf("平局\n");
	}
	else
	{
		printf("程序错误\n");
	}
	//循环执行第二步;
}
int main()    //主函数
{
	//随机种子的设置,一次就行了;
	srand((unsigned int)time(0));
	while (1)
	{
		int choice = menu();
		if (choice == 1)
		{
			game();
		}
		else if (choice == 0)
		{
			printf("byebye^_^\n");
			break;
		}
		else
		{
			printf("您的输入有误,请重新输入:\n");
			continue;
		}
	}
	system("pause");
    return 0;
}

以上就是五子棋的函数,谢谢观看^_^;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值