一、井字棋
//三子棋游戏: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;i n"); 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;i
n"); 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



