实现三子棋小游戏

实现三子棋小游戏,第1张

实现三子棋小游戏

1.srand函数、time函数

(1)srand()函数表示设置一个随机种子,每次运行都能使随机种子不同,但如果重新运行会与上次运行时的结果一样,可配合时间戳time()函数解决,srand()函数类型为unsigned int,头文件为,time()函数类型为time_t,头文件为

(2)语句:srand((unsigned int)time(NULL))------>由于类型不兼容,需强制类型转换

2.rand函数

(1)设置了随机种子之后配合rand函数产生一个随机数,生成范围:[0,32769],若需控制生成范围可通过%的办法来获取所需的范围

(2)Eg:生成一个随机数范围为[0,99],语句:rand()%100

3.实现三子棋小游戏

(1)头文件lin.h(声明函数)

#pragma once
#include 
#include 
#include 
//行
#define ROW 3
//列
#define COL 3

//声明控制间距
void distance();

//声明初始化棋盘为空格
void My_lin(char arr[ROW][COL], int row, int col); 

//声明打印棋盘
void My_print(char arr[ROW][COL],int  row,int  col);

//声明玩家下棋
void My_qin(char arr[ROW][COL],int row, int col);

//声明电脑下棋
void My_yan(char arr[ROW][COL], int row, int col);

//声明判断输赢
char My_li(char arr[ROW][COL], int row, int col);

(2)源文件lin.c(实现函数)

#include"lin.h"
//实现控制间距
void distance()
{
	printf("nnn");
}

//实现初始化棋盘为空格
void My_lin(char  arr[ROW][ROW], int  row, int  col)
{
	for (int i = 0; i < row; i++)
	{
		for (int j = 0; j < col; j++)
		{
			arr[i][j] = ' ';
		}
	}
}

//实现打印棋盘
void My_print(char arr[ROW][COL], int row, int col)
{
	int i = 0;
	for (i = 0; i < row; i++)
	{
		int j = 0;
		for (j = 0; j < col; j++)
		{
			printf(" %c ", arr[i][j]);

			if (j < col - 1)
			{
				printf("|");
			}

		}
		printf("n");
		if (i < row - 1)
		{
			printf("---|---|---n");
		}
	}
}

//实现玩家下棋
void My_qin(char arr[ROW][COL], int row, int col)
{
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("玩家回合n");
		printf("请输入坐标(坐标请用空格隔开):");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= row && y >=1 && y <= col)
		{
			if (arr[x - 1][y - 1] == ' ')
			{
				arr[x - 1][y - 1] = '*'; break;
			}
			else
			{
				printf("坐标以被占用,请重新输入n");
				//控制间距
				distance();
			}
		}
		else
		{
			printf("坐标无效,请重新输入n");
		}
	}
}

//实现电脑下棋
void My_yan(char arr[ROW][COL], int row, int col)
{
	int x = 0;
	int y = 0;
	printf("电脑回合n");
	while (1)
	{
		//设置随机范围[0,(row-1)]
		x = rand() % row;
		//设置随机范围[0,(col-1)]
		y = rand() % col;
		if (arr[x][y] == ' ')
		{
			arr[x][y] = '#'; break;
		}
	}
}

//实现判断平局
static int My_draw(char arr[ROW][COL], int row, int col)
{
	int i = 0;
	for (i = 0; i < row; i++)
	{
		int j = 0;
		for (j = 0; j < col; j++)
		{
			if (arr[i][j] == ' ')
			{
				return 0;
			}
		}
	}
	return 1;
}

//实现判断输赢
char My_li(char arr[ROW][COL], int row, int col)
{
	int i = 0;
	//判断三行
	for (i = 0; i < row; i++)
	{
		if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][1] != ' ')
		{
			return arr[i][1];
		}
	}
	//判断三列
	for (i = 0; i < col; i++)
	{
		if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[1][i] != ' ')
		{
			return arr[i][1];
		}
	}
	//判断对角线
	if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != ' ')
	{
		return arr[1][1];
	}
	if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' ')
	{
		return arr[1][1];
	}
	//判断平局
	if (1 == My_draw(arr, ROW, COL))
	{
		return 'L';
	}
	//游戏继续
	return 'M';
}

(3)源文件test.c(主函数)

#include "lin.h"
void menu()
{
	//控制间距
	distance();
	printf("		1.开始游戏		n");
	printf("		2.退出游戏		n");
	//控制间距
	distance();
}
void lin()
{
	char ret = 0;
	//设置棋盘规格
	char arr[ROW][COL] = { 0 };

	//初始化棋盘为空格
	My_lin(arr,ROW,COL);

	//打印棋盘
	My_print(arr, ROW, COL);

	//控制间距
	distance();

	while (1)
	{
		//玩家回合
		My_qin(arr, ROW, COL);

		//控制间距
		distance();

		//打印棋盘
		My_print(arr, ROW, COL);

		//控制间距
		distance();

		//判断输赢
		ret=My_li(arr,ROW,COL);
		if (ret != 'M')
		{
			break;
		}
		//电脑回合
		My_yan(arr, ROW, COL);

		//控制间距
		distance();

		//打印棋盘
		My_print(arr, ROW, COL);

		//控制间距
		distance();

		//判断输赢
		ret = My_li(arr, ROW, COL);
		if (ret != 'M')
		{
			break;
		}
	}
	if (ret == '*')
	{
		printf("恭喜你!获胜啦");
	}
	else if (ret == '#')
	{
		printf("很遗憾,输掉了");
	}
	else
	{
		printf("双方不相上下,平局啦");
	}
}
void test()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		//打印菜单
		menu();
		printf("请输入选项:");
		scanf("%d", &input);
		//控制信息间距
		distance();
		switch (input)
		{
		case 1:
			lin();
			break;
		case 2:
			printf("退出游戏n");
			input = 0; break;
		default:
			printf("选择无效,请重新选择n"); break;
		}
	} while (input);
}
int main()
{
	test();
	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5710408.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存