C语言实现三字棋

首先三字棋的玩法大家应该都比较熟悉,其实就是与五子棋的玩法差不多,只是五子成线为赢变成了三子成线为赢。

1.先上代码效果:

2.然后说一下实现的逻辑:

2.1首先肯定是建立一个进入退出游戏的环节,如果选择进入则开始游戏,选择退出则程序结束,并且如果玩家玩完一局后还可进行选择是否继续游戏。

2.2第一步有两个分支,如果选择退出游戏则程序结束,如果选择开始游戏则要进入游戏。所以我们下一步是实现游戏的环节。

2.3游戏的实现要分为许多步骤,首先要先建立一个空的棋盘,然后玩家和电脑交替下棋,并且每下一步都要有一个判断机制去判断这一步的结果是什么,是玩家赢了?是电脑赢了?还是平局?又或是继续?如果玩家赢了则输出玩家赢,如果电脑赢了则输出电脑赢了,如果平局则输出平局,如果都不是则继续下棋。

3.代码实现:

3.1首先建立进入退出游戏的环节:

void menu(void)
{
	printf("**********************************\n");
	printf("******    0.退出游戏       *******\n");
	printf("******    1.进入游戏       *******\n");
	printf("**********************************\n");
}
int main(void)
{
	int input;
	
//此代码为后面产生随机数做铺垫的,具体请了解rand函数产生  随机数的用法
	srand((unsigned int)time(NULL)); 
	do
	{
		menu(); //打印选项
		printf("请输入您的选项");
		scanf("%d", &input); //输入你是否想玩
		switch (input)
		{
		case 1: // 想玩则进入game
			game();
			break;
		case 0:  //不想玩则退出进入游戏的循环
			break; 
		default:  //输入错误则重新输入
			printf("输入错误请重新输入\n");
			break;
		}
	} while (input);
	return 0;
}

 3.2 游戏主要逻辑函数game()的实现

void game(void)
{
	//创建棋盘
	char judge;//用于保存判断结果
	char a[ROW][COL];
	//初始化棋盘为空
	init_chb(a, ROW, COL);
	//打印棋盘
	print_chb(a, ROW, COL);
	while (1)
	{
       //玩家下棋
		player_move(a, ROW, COL);
       //玩家下完棋就进行判断,看是否出现胜负或平局
		judge = judge_win(a, ROW, COL);
		if (judge != '1') break; 
       //电脑下棋
		comput_move(a, ROW, COL);
       //电脑下完棋就进行判断,看是否出现胜负或平局
		judge = judge_win(a, ROW, COL);
       //每下一回合就输出一次棋盘
		print_chb(a, ROW, COL);
		if (judge != '1') break;
	}
    //下面根据judge保存的返回值输出游戏结果
	if (judge == '#')
	{
		printf("玩家赢\n");
	}
	else if (judge == '*')
	{
		printf("电脑赢\n");
	}
	else
		printf("平局\n");
	print_chb(a, ROW, COL);
}

3.3游戏具体用到的函数的实现:

初始化棋盘的函数:

void init_chb(char a[][COL], int row, int col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			a[i][j] = ' ';
		}
	}
}

输出棋盘的函数:

void print_chb(char a[][COL], int row, int col)
{
	for (int i = 0; i < row; i++)
	{
		printf("   |   |   \n"); //先输出一行
		for (int j = 0; j < col; j++)
		{
			if (j == col - 1) //最后一次循环不打印 |
			{
				printf(" %c ", a[i][j]);
			}
			else
			{
				printf(" %c |", a[i][j]);
			}
		}
		printf("\n");
		
		if (i != row - 1)//最后一行下面不打印下划线
		{
			for (int k = 0; k < 3 * col + col - 1; k++)
			{
				printf("-");
			}
		}
		printf("\n");
	}
}

玩家下棋函数:

void player_move(char a[][COL], int row, int col)
{
	int x, y;
	
	while (1)
	{
		printf("请输入您想走的坐标");
		scanf("%d%d", &x, &y);
		if (a[x - 1][y - 1] == ' ')
		{
			a[x - 1][y - 1] = '#';
			break;
		}
	}
}

判断输赢的函数:

char judge_win(char a[][COL], int row, int col)
{
	int i, j, count = 0;
	for (i = 0; i < col; i++)
	{
       //行三个相同为赢
        if (a[i][0] == a[i][1] && a[i][1] == a[i][2] && a[i][1]!= ' ')
		{
			return a[i][1];//返回其中一个元素
		}
       //列三个相同为赢
		else if (a[0][i] == a[1][i] && a[1][i] == a[2][i] && a[1][i] != ' ')
		{
			return a[1][i];//返回其中一个元素
		}
       //主对角线三个相同为赢
		else if (a[0][0] == a[2][2] && a[2][2] == a[1][1] && a[0][0] != ' ')
		{
			return a[0][0];//返回其中一个元素
		}
        //副对角线三个相同为赢
		else if (a[0][2] == a[1][1] && a[2][0] == a[1][1] && a[0][2] != ' ')
		{
			return a[1][1];//返回其中一个元素
		}
	}
	for (i = 0; i < row; i++)
	{
		
		for (j = 0; j < col; j++)
		{
			if (a[i][j] == ' ') count++; //下满了则平局
		}
	}
	if (count == 0) return '0'; //平局返回'0'
	return '1'; //否则返回'1'继续游戏
}

电脑下棋的函数:

void comput_move(char a[][COL], int row, int col)
{
	int x, y;
	while (1)
	{
		x = rand() % 3 + 1; //产生一个1 - 3的随机数作为横坐标
		y = rand() % 3 + 1; //产生一个1 - 3的随机数作为纵坐标
		if (a[x - 1][y - 1] == ' ') //如果此位置没有被下棋那么就下到此位置
		{
			a[x - 1][y - 1] = '*';
			break;
		}
	}
}

到这里这个简单版的三字棋就算是基本完成了,这里我只写了主要的代码,如果你能看懂我上面所说的,那么基本就能写出这样的小游戏了。如果想运行起来还需要函数的声明,头文件,还有宏定义,这些我统一放在了一个名为game.h的头文件里:

#define _CRT_SECURE_NO_WARNINGS 1
#define ROW 3
#define COL 3
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void game(void);
void print_chb(char a[][COL], int row, int col);
char judge_win(char a[][COL], int row, int col);
void player_move(char a[][COL], int row, int col);
void comput_move(char a[][COL], int row, int col);

在其他文件里使用只需要包含这个头文件就行了。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值