【C语言-7】扫雷,三子棋游戏

欢迎来到扫雷小游戏:(程序中有部分注释,注意千万不要踩坑哦!)

祝君好运!

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

int Menu(){
	printf("---------------------------------------\n");
	printf("--------     欢迎来到扫雷游戏   -------\n");
	printf("--------      1.开始游戏        -------\n");
	printf("--------      0.退出游戏        -------\n");
	printf("---------------------------------------\n");
	printf("请输入您的选择:");
	int choic = 0;
	scanf("%d", &choic);
	return choic;
}

#define MAX_ROW 9
#define MAX_COL 9
#define MINE_COUNT 10

void Init(char map[MAX_ROW][MAX_COL],
	char mine_map[MAX_ROW][MAX_ROW]){
	//1.对于show_map,需要都设为*
	for (int row = 0; row < MAX_ROW; ++row){
		for (int col = 0; col < MAX_COL; ++col){
			map[row][col] = '*';
		}
	}
	//2.对于mine_map,需要生成若干个地雷,使用0 表示不是地雷, 1 表示是地雷
	for (int row = 0; row < MAX_ROW; ++row){
		for (int col = 0; col < MAX_COL; ++col){
			mine_map[row][col] = '0';//此处用数字0也可以

		}
	}
	int n = MINE_COUNT;
	while (n > 0){
		//生成一组随机坐标
		int row = rand() % MINE_COUNT;
		int col = rand() % MINE_COUNT;
		if (mine_map[row][col] == '1'){
			//该位置已是地雷,需要重新生成;
			continue;
		}
		mine_map[row][col] = '1';
		--n;
	}
}

void PrintMap(char map[MAX_ROW][MAX_COL]){
	//先打印第一行
	printf("   ");
	for (int col = 0; col < MAX_COL;++col){
		printf("%d ", col);
	}
	printf("\n");
	//打印一个分割线
	for (int col = 0; col < MAX_COL-2; ++col){
		printf("---");
	}
	printf("\n");
	//再打印其它行
	
	for (int row = 0; row < MAX_ROW; ++row){
		printf("%d| ", row);
		//打印本行的每一列
		for (int col = 0; col < MAX_COL; ++col){
			printf("%c ", map[row][col]);
		}
		printf("\n");
	}
}

void UpdateShowmap(int row,int col,
		char show_map[MAX_ROW][MAX_COL],
		char mine_map[MAX_ROW][MAX_COL]){
	//根据当前位置来判定这个位置周围8个格子有几个地雷,
	//并且这个数字更新到show_map中
	int count = 0;
	if (row - 1 >= 0 && col - 1 >= 0
		&& row - 1 < MAX_ROW && col - 1 < MAX_COL
		&&mine_map[row - 1][col - 1] == '1'){
		++count;
	}
	if (row - 1 >= 0 && col >= 0
		&& row - 1 < MAX_ROW && col < MAX_COL
		&&mine_map[row - 1][col] == '1'){
		++count;
	}
	if (row - 1 >= 0 && col + 1 >= 0
		&& row - 1 < MAX_ROW && col + 1 < MAX_COL
		&&mine_map[row - 1][col + 1] == '1'){
		++count;
	}
	if (row >= 0 && col - 1 >= 0
		&& row < MAX_ROW && col - 1 < MAX_COL
		&&mine_map[row][col - 1] == '1'){
		++count;
	}
	if (row  >= 0 && col + 1 >= 0
		&& row < MAX_ROW && col + 1 < MAX_COL
		&&mine_map[row][col + 1] == '1'){
		++count;
	}
	if (row + 1 >= 0 && col - 1 >= 0
		&& row + 1 < MAX_ROW && col - 1 < MAX_COL
		&&mine_map[row + 1][col - 1] == '1'){
		++count;
	}
	if (row + 1 >= 0 && col >= 0
		&& row + 1 < MAX_ROW && col < MAX_COL
		&&mine_map[row + 1][col] == '1'){
		++count;
	}
	if (row + 1 >= 0 && col + 1 >= 0
		&& row +1 < MAX_ROW && col + 1 < MAX_COL
		&&mine_map[row + 1][col + 1] == '1'){
		++count;
	}
	//得到了周围的八个格子中地雷的个数
	show_map[row][col] = '0' + count;//假设count为2,实际看到的结果是2+ascii表中对应的50
}
void Game(){
	//先创建地图,并初始化
	char show_map[MAX_ROW][MAX_COL];
	char mine_map[MAX_ROW][MAX_COL];
	//已经翻开的空格的个数(非地雷)
	int blank_mine_count_already_show = 0;
	Init(show_map, mine_map);
	//2.打印地图
	while (1){
	PrintMap(show_map);
	PrintMap(mine_map);//这个打印是为了调试临时加的【要记得删掉】

	//3.让用户输入坐标并进行合法性检测
	printf("请输入一组坐标:");
		int row = 0;
		int col = 0;
		scanf("%d %d", &row, &col);
		//清屏
		system("cls");//清除坐标之前的
		//合法性检测
		if (row < 0 || row >= MAX_ROW ||
			col < 0 || col >= MAX_COL){
			printf("您的输入非法!请重新输入!\n");
			continue;
	}
	if (show_map[row][col] != '*'){
		printf("您输入的位置已经被翻开了!\n");
	}
	//4.判定是否是地雷
	if(mine_map[row][col] == '1'){
		printf("游戏结束!\n");
		PrintMap(mine_map);
			break;
	}
	//5.判定游戏是否胜利
	//判定所有的非地雷位置都已被翻开了
	++blank_mine_count_already_show;
	if (blank_mine_count_already_show == MAX_ROW * MAX_COL - MINE_COUNT){
		printf("游戏胜利!\n");
		PrintMap(mine_map);
		break;
	}
	//6.统计当前位置雷的个数
	UpdateShowmap(row,col,show_map,mine_map);
 }
}

int main(){
	while (1){
		int choic = Menu();
		if (choic == 1){
			Game();
		}
		else if (choic == 0){
			printf("Goodbye!\n");
			break;
		}
		else{
			printf("您的输入有误!\n");
		}
	}
	system("pause");
	return 0;
}

欢迎来到三子棋游戏: 

#define _CRT_SECURE_NO_WARNINGS 1
#include<time.h>
#include"game.h"

void menu()
{
	printf("------------------------------------------\n");
	printf("----------  欢迎来到三子棋游戏   ---------\n");
	printf("----------      1.play           ---------\n");
	printf("----------      0.exit           ---------\n");
	printf("------------------------------------------\n");
}
void game()
{
	char board[ROW][COL] = { 0 };
	char ret = 0;
	InitBoard(board, ROW, COL);
	DisplayBoard(board, ROW, COL);
	while (1)
	{
		PlayMove(board,ROW,COL);
		DisplayBoard(board, ROW, COL);
		ret = CheckWin(board, ROW, COL);
		if (ret != 'C')
			break;
		ComputerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		ret = CheckWin(board, ROW, COL);
		if (ret != 'C')
			break;
	}
	if (ret == '*')
	{
		printf("玩家赢\n");
	}
	else if (ret == '#')
	{
		printf("电脑赢\n");
	}
	else if (ret == 'Q')
	{
		printf("平局\n");
	}
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择!\n");
			break;
		}
	} while (0);
	system("pause");
	return 0;
}

哈哈,当然程序还没完呐!继续码,走起~

#define _CRT_SECURE_NO_WARNINGS 1
#include<time.h>
#include"game.h"

void menu()
{
	printf("------------------------------------------\n");
	printf("----------  欢迎来到三子棋游戏   ---------\n");
	printf("----------      1.play           ---------\n");
	printf("----------      0.exit           ---------\n");
	printf("------------------------------------------\n");
}
void game()
{
	char board[ROW][COL] = { 0 };
	char ret = 0;
	InitBoard(board, ROW, COL);
	DisplayBoard(board, ROW, COL);
	while (1)
	{
		PlayMove(board,ROW,COL);
		DisplayBoard(board, ROW, COL);
		ret = CheckWin(board, ROW, COL);
		if (ret != 'C')
			break;
		ComputerMove(board, ROW, COL);
		DisplayBoard(board, ROW, COL);
		ret = CheckWin(board, ROW, COL);
		if (ret != 'C')
			break;
	}
	if (ret == '*')
	{
		printf("玩家赢\n");
	}
	else if (ret == '#')
	{
		printf("电脑赢\n");
	}
	else if (ret == 'Q')
	{
		printf("平局\n");
	}
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择!\n");
			break;
		}
	} while (0);
	system("pause");
	return 0;
}

胜利就在前方!吼吼~ 

以下是头文件内容:

#define _CRT_SECURE_NO_WARNINGS 1

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


#define ROW 3
#define COL 3

void InitBoard(char board[ROW][COL], int row, int col);
void DisplayBoard(char board[ROW][COL], int row, int col);
void PlayMove(char board[ROW][COL], int row, int col);
void ComputerMove(char board[ROW][COL], int row, int col);
//玩家赢--'* '
//电脑赢--'# '
//平局--'Q '

char CheckWin(char board[ROW][COL], int row, int col);

~敬请期待 ~

bye

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本火锅店点餐系统采用Java语言和Vue技术,框架采用SSM,搭配Mysql数据库,运行在Idea里,采用小程序模式。本火锅店点餐系统提供管理员、用户两种角色的服务。总的功能包括菜品的查询、菜品的购买、餐桌预定和订单管理。本系统可以帮助管理员更新菜品信息和管理订单信息,帮助用户实现在线的点餐方式,并可以实现餐桌预定。本系统采用成熟技术开发可以完成点餐管理的相关工作。 本系统的功能围绕用户、管理员两种权限设计。根据不同权限的不同需求设计出更符合用户要求的功能。本系统中管理员主要负责审核管理用户,发布分享新的菜品,审核用户的订餐信息和餐桌预定信息等,用户可以对需要的菜品进行购买、预定餐桌等。用户可以管理个人资料、查询菜品、在线点餐和预定餐桌、管理订单等,用户的个人资料是由管理员添加用户资料时产生,用户的订单内容由用户在购买菜品时产生,用户预定信息由用户在预定餐桌操作时产生。 本系统的功能设计为管理员、用户两部分。管理员为菜品管理、菜品分类管理、用户管理、订单管理等,用户的功能为查询菜品,在线点餐、预定餐桌、管理个人信息等。 管理员负责用户信息的删除和管理,用户的姓名和手机号都可以由管理员在此功能里看到。管理员可以对菜品的信息进行管理、审核。本功能可以实现菜品的定时更新和审核管理。本功能包括查询餐桌,也可以发布新的餐桌信息。管理员可以查询已预定的餐桌,并进行审核。管理员可以管理公告和系统的轮播图,可以安排活动。管理员可以对个人的资料进行修改和管理,管理员还可以在本功能里修改密码。管理员可以查询用户的订单,并完成菜品的安排。 当用户登录进系统后可以修改自己的资料,可以使自己信息的保持正确性。还可以修改密码。用户可以浏览所有的菜品,可以查看详细的菜品内容,也可以进行菜品的点餐。在本功能里用户可以进行点餐。用户可以浏览没有预定出去的餐桌,选择合适的餐桌可以进行预定。用户可以管理购物车里的菜品。用户可以管理自己的订单,在订单管理界面里也可以进行查询操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值