栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言:利用简单的数组知识完成的小游戏

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言:利用简单的数组知识完成的小游戏

一、井字棋

//三子棋游戏:TIC-TAC-TOE 
//2022-02-25 朱文杰 
//#include
#include
#include //time  获取时间戳 头文件 
#include //srand rand 函数头文件 
#define ROW 3 //行 
#define COL 3 //列 

void Menu();//菜单函数申明 
void OpenShow();//游戏开始函数申明 
void OverShow();//游戏结束函数申明 
void Game_Proc();//游戏处理函数申明 
void Game();	//游戏函数申明 
void Board_init(char Board[ROW][COL],int row,int col);//棋盘数据初始化函数申明 
void Board_Display(char Board[ROW][COL],int row,int col);//棋盘打印函数申明 
void Player_Turn(char Board[ROW][COL],int row,int col);//玩家操作函数申明
void Computer_Turn(char Board[ROW][COL],int row,int col);//电脑操作函数申明
char IsWin(char Board[ROW][COL],int row,int col);//胜负判断函数申明:返回4个值:游戏状态 玩家赢o 电脑赢x 平局p  继续c
int IsFull(char Board[ROW][COL],int row,int col);//判断棋盘满没满 
int Scores = 0;//积分累计 

int main()
{
	Game_Proc();//游戏处理函数 
}

void Game()	//游戏函数
{
		char Board[ROW][COL]={0};//定义棋盘数组 
		char ret = 0;//接受胜负判断返回值 
		Board_init(Board,ROW,COL);//棋盘初始化 
										       		
		Board_Display(Board,ROW,COL); //打印棋盘	
		while(1)	//下棋循环 
		{
			//玩家下棋
					Player_Turn(Board,ROW,COL);	//玩家回合:将子落到数组中去	 
					Board_Display(Board,ROW,COL); //打印棋盘
			//判断胜负
			 ret = IsWin(Board,ROW,COL);
			 if(ret!='c')
			 {
			 	break;
			 } 
			//电脑下棋	
					Computer_Turn(Board,ROW,COL);
					Board_Display(Board,ROW,COL); //打印棋盘
			//判断胜负
			ret = IsWin(Board,ROW,COL);
			 if(ret!='c')
			 {
			 	break;
			 } 		
		}
	if(ret == 'o')
	{
		printf("恭喜玩家取得胜利!v0/ n");
		printf("您获得了666积分n");
		Scores +=666; 
	}
	else if(ret =='x')
	{
		printf("惜败!壮士,请重头来过!T_Tn"); 
		printf("您减少了250积分n");
		Scores -=250; 
	}
	else
	{
		printf("您与呆头电脑博弈的难解难分!n"); 
		Scores -=10;
		printf("您减少了10积分n");
	}	
}

//判断棋盘满没满函数 
//功能:判断棋盘满没满 0有空格 1 满了 
int IsFull(char Board[ROW][COL],int row,int col)	
{
		int i = 0;
		int j = 0;
		for(i=0;in");
	while(1)
	{
			x = rand()%row;
			y = rand()%col;
			if(Board[x][y] == ' ')//如果是空格子,就填一个x 如果不是就重新改生成坐标落子 
			{
				Board[x][y] = 'x';
				break; 
			} 	
			
	}
	 
} 
//玩家操作函数
//功能;玩家操作落子 
void Player_Turn(char Board[ROW][COL],int row,int col)	
{
	int x = 0;
	int y = 0;
	
	printf("请输入棋盘中你落子的坐标:n"); 
	
	while(1)
	{
			scanf("%d %d",&x,&y);
		
			if(x>0&&x<=3&&y>0&&y<=3)//判断落子坐标是否已经下过 
			{
				if(Board[x-1][y-1] == ' ')//如果合法 
				{
					Board[x-1][y-1]='o';break; //输入完就退出循环 
				} 
				else 
				{
					printf("坐标非法:当前坐标已落子或超出棋盘范围n例如1 1:表示第1行第1列请重新输入:n");	
				}	
			}

			else 
			{
				printf("坐标非法:当前坐标已落子或超出棋盘范围n例如1 1:表示第1行第1列请重新输入:n");	
			}
		
	}
}
//棋盘初始化函数
//功能: 将3*3个落子位置填空格 
void Board_init(char Board[ROW][COL],int row,int col)	//棋盘初始化函数,让每行每列填数据的地方为空格 
{
	int i = 0;
	int j = 0;
	for(i = 0;in");
		scanf("%d",&input);
		switch(input)
		{
			case 1: OpenShow();Game();
			
				break;
				
			case 0: OverShow();
				break;
			default: printf("选择错误,请重新选择^-^n");
			break;
			
		}
		
	}while(input);	//1执行下去,0 不执行退出 
	
} 

//界********************************************面显示函数********************************************// 
void Menu()//菜单函数
{
	printf("***********************************n");
	printf("*****                         *****n");
	printf("*****    Welcome to  Here     *****n");
	printf("*****         三子棋          *****n");
	printf("*****      TIC-TAC-TOE        *****n");
	printf("*****     输入1:开始游戏     *****n");
	printf("*****     输入0:退出游戏     *****n");
	printf("*****   当前您的积分为:%-5d  *****n",Scores);
	printf("*****             by Remained *****n");
	printf("***********************************n");
	
}
void OverShow()//游戏结束函数
{
	printf("***********************************n");
	printf("*****         游戏退出        *****n");
	printf("*****       ^_^ Bye-Bye!     *****n");
	printf("***********************************n");	
}
void OpenShow()//游戏开始函数
{
	printf("***********************************n");
	printf("*****         游戏开始        *****n");
	printf("*****       !^0^!  !^0^!      *****n");
	printf("***********************************nnn");	
}



	
								          		

二、扫雷.简易版

//扫雷游戏:Mine Sweeper/ Win Mine 
//思路:布置雷->排查雷->提示/炸死 
#include 
#include 
#include 
#define ROW 9 	//行 
#define COL 9 	//列 
//棋盘扩大一圈 
#define ROWS 11 //行plus 
#define COLS 11 //列plus 

#define Number_Mine 5//10个雷 

int Scores= 0;//积分累计 
//界面显示函数声明 
void Menu();//菜单显示声明 
void OverShow();//游戏结束界面函数声明 
void OpenShow();//游戏开始界面函数声明 
//游戏函数声明
void Game_Proc();//游戏处理函数申明 
void Game();	//游戏函数申明 
//数组
void InitBoard(char Board[ROWS][COLS],int rows,int cols,char set);			//数组数据初始化函数申明 
void DisplayBoard(char Board[ROWS][COLS],int row,int col);					//实时打印棋盘函数申明 
void SetMine(char Mine[ROWS][COLS],int row,int col) ;			 			//布置雷函数申明 
void FindMine(char Mine[ROWS][COLS],char Show[ROWS][COLS],int row,int col); //扫雷函数申明 
int GetMineNum(char Mine[ROWS][COLS],int x,int y);							//获取周边雷个数 
int main()
{
	printf("            游戏须知^-^n>>首行首列表示x,y轴标度n>>输入坐标后,显示的数字表示以自己为中心周边8个位置雷的个数n"); 
	printf("避开所有地雷即可取得游戏胜利!n祝您游戏愉快!n"); 
	Game_Proc();
} 
void Game()	//游戏函数申明 
{
	//1.布置好雷的信息
	char Mine[ROWS][COLS]={0}; 
	//2。排查出雷的信息 
	char Show[ROWS][COLS]={0};
	//初始化数组
	InitBoard(Mine,ROWS,COLS,'0'); 
	InitBoard(Show,ROWS,COLS,'*'); 	
	//打印雷区

	DisplayBoard(Show,ROW,COL); 	
	SetMine(Mine,ROW,COL);//布置雷 
//	DisplayBoard(Mine,ROW,COL);//显示雷 
//扫雷
	FindMine(Mine,Show,ROW,COL); 	//因为仅对中级的9行9列数组进行扫雷 
}
//游戏处理函数
//功能:整个游戏过程 
void Game_Proc()
{
	int input = 0;
	srand((unsigned int)time(NULL));
		do
	{
		Menu();
		printf("请做出您的选择:>n");
		scanf("%d",&input);
		switch(input)
		{
			case 1: OpenShow();Game();
			
				break;
				
			case 0: OverShow();
				break;
			default: printf("选择错误,请重新选择^-^n");
			break;
			
		}
		
	}while(input);	//1执行下去,0 不执行退出 
	
} 
int GetMineNum(char Mine[ROWS][COLS],int x,int y)//计算周边雷的个数: 算法:'1'-'0'=1  
{
	
	return (Mine[x-1][y-1]+Mine[x][y-1]+Mine[x+1][y-1]+Mine[x-1][y]+
		Mine[x+1][y]+Mine[x-1][y+1]+Mine[x][y+1]+Mine[x+1][y+1]-8*'0');
	
}
void FindMine(char Mine[ROWS][COLS],char Show[ROWS][COLS],int row,int col)
{
	int x = 0;
	int y = 0;
	int Win = 0;
	printf("请输入排查雷的坐标:>n");
	while(Win=1&&x<=row&&y>=1&&y<=col)//坐标合法 
			{
				if(Mine[x][y]=='1')//碰到雷了	
				{
					DisplayBoard(Mine,ROW,COL); //打印下现在的情况 
					printf("很遗憾,你炸了!TmTn"); 
					break; 
				} 
				else//不是雷 ,计算xy坐标周围几个雷 
				{
					int count = GetMineNum(Mine,x,y);
					Show[x][y]=count+'0';
					DisplayBoard(Show,row,col);
					Win++;
				} 
			}
			else
			{
				printf("坐标位置非法,请重新输入坐标n例如:第一行第一列:1 1n"); 
			} 	
	} 
	if(Win==row*col-Number_Mine)
	{
		Scores +=520;
		printf("恭喜你!排雷成功!!获得520积分!n");
	}
	
	 
}
void SetMine(char Board[ROWS][COLS],int row,int col)
{
	int count =0;
	count = Number_Mine;//10个雷 
		while(count)
	{
		int x = rand()%row+1;//1-9
		int y = rand()%col+1;//1-9 
		if(Board[x][y] == '0')
		{
			Board[x][y]='1';
			count --; 
		}
	}
	
} 
void InitBoard(char Board[ROWS][COLS],int rows,int cols,char set)
{
	int i = 0;
	int j = 0;
	for(i=0;i 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/766758.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号