对有一个游戏程序本身来说,需要很多的函数调用,这样才能有条不紊的写好游戏代码,所以对这个三子棋小游戏而言,我选择多文件编写,主要分为头文件、源文件、和主源文件。很显然,头文件则是去包含本次编程所用到的所有头文件以及函数和变量的声明等,源文件则是去定义并且编写各种函数,主源文件简单的说,就是去玩这个游戏。 以上则是对本次游戏编写,所有的声明,菜单,三子棋游戏面板设置以及去展示这个面板,再通过人和人机的移动,去在二维数组3*3的面板中进行显示,最终判定是否胜利。 上面就是一个简单的菜单代码,只要在主源代码中调用就可以实现 这就是一个简单的主源文件的代码,用户去选择游戏的选项,选择错误重新输入,选择2,则死循环结束,选择1进入game函数,后面我们则需要将编写的面板,人物以及电脑移动函数在game中调用,则就会实现这个三子棋小游戏,下面我们在对面板框架进行编写: 一个简单的二维数组框架就编写完成,接下来就是去展示这个框架: 人物移动只有在二维数组(数组下标从0开始,而输入的二维左边需要与打印的面板坐标对应)面板框架中移动才可以,所以党输入超出框架或者在该格子已经有棋子,也就会输入对应的2和1,而在game函数中就需要对其进行编写(这里咱们先放在这,最后调用该函数时再说明) 当然再最后game函数的编写我也会写出来,接下来就是去定义人机随机的移动函数: 这里就是使用随机数,让他只再0到2中变化,便于做到人机再框架内下棋 本函数就是将人或者人机每下一次棋子的面板结果反馈给game,通过game去判定游戏接下来是什么状况。下面就到了我们的大boss,就是我们的game函数: 这就是game函数的代码,再函数中调用了initboard函数,showboard函数,peoplemove函数,judgeresult函数, computermove函数,还有我们刚才所说的种下一个随机数,在 computermove函数中使用,在game函数中,人下一次棋子,判断一次结果,人机下一次棋子后,再判断一次棋子,最终循环一次显示一次面板,当然如果无论谁下一次棋子都显示一次面板也是可以的,但是这需要给人机下棋设置一个时间,这样可以看出,人机的下棋动态。 继续加油!!!!
接下来,我们就开始本次代码之旅#ifndef _chess_h #define -chess_h #include<stdio.h> #include<windows.h> #include<time.h> #include<stdlib.h> #pragma warning(disable:4996) #define Line 3 //3行 #define Col 3 //3列 #define Black 'O' //人移动的棋子 #define White 'X' //人机移动的棋子 #define pingju 'P' //平局 #define jixu 'N' //继续游戏 void game(); void menu(); void initboard(char board[Line][Col], int line, int col); // void showboard(char board[Line][Col], int line, int col); char judgeresult(char board[Line][Col], int line, int col); void computermove(char board[Line][Col], int line, int col); #endif
下面,我们展示本次游戏编程的源文件,也就是对上面声明的函数进行依此定义void menu() { printf("##########################n"); printf("### 欢迎来到三子棋小游戏 ###n"); printf("##########################n"); printf("1.开始游戏 2.结束游戏n"); printf("##########################n"); printf("您的选择是:n"); }
下面就是主源代码include"chess.h" int main() { int select=0; menu() ; int cou=1; while(cou){ scanf("%d",&select); switch(select){ case 1: game(); break; case 2: cou=0; // 结束死循环 break; default: printf("您输错了!,请重新输入n"); break; } } system("pause"); return 0; }
void initboard(char board[Line][Col],int line,int col) { int i = 0; for (; i < line; i++){ for (int j = 0; j < col; j++){ board[i][j] = ' '; } } }
void showboard(char board[Line][Col], int line, int col) { printf("| |1|2|3|n"); for (int i = 0; i < line;i++){ printf("---------n"); printf("|%d|%c|%c|%c|n", i+1, board[i][0], board[i][1], board[i][2]); } }
这就是框架的展示的图片,接下来我么那就需要去人物以及电脑如何移动的函数进行编写(这里的所有函数都将在game函数中被调用):int peoplemove(char board[Col][Line], int line, int col) { int i = 0; int j = 0; printf("您走一步:"); scanf("%d %d", &i, &j); if (i > 0 && i <= 3 && j <= 3 && j > 0){ if (board[i-1][j-1] != ' '){ return 1; } else{ board[i][j] = Black; return 0; } } return 2; }
下面就是人机的移动,当然人机就是随机的数所以我们先要在game函数中去种下一个随机数,再人机移动函数中去使用他,这里我们可以用这个:srand((unsigned long)time(NULL));
void computermove(char board[Line][Col], int line, int col) { while (1){ int t = rand(); int i = t%line; int j = t%col; if (board[i][j] == ' '){ board[i][j] = White; break; } } }
接下来,就是,再人机或者人没走一次,都要去进行判定,是人赢了,还是人机赢了,还是平局,或者是游戏没结束,还得继续,所以我们就需要去定义每次下棋之后的结果:char judgeresult(char board[Line][Col], int line, int col) { int i = 0; for (; i < line; i++){ if (board[i][0]!=' '&&board[i][0] == board[i][1] && board[i][1] == board[i][2]){ return board[i][1]; } } for (; i < col; i++){ if (board[0][i] != ' '&&board[0][i] == board[1][i] && board[1][i] == board[2][i]){ return board[1][i]; } } if (board[0][0] != ' '&&board[0][0] == board[1][1] && board[1][1] == board[2][2]){ return board[1][1]; } if (board[0][2] != ' '&&board[0][2] == board[1][1] && board[1][1] == board[2][0]){ return board[1][1]; } for (; i < line; i++){ for (int j = 0; j < col; j++){ if (' ' == board[i][j]){ return pingju; } } } return jixu; }
void game() { char board[Line][Col]; char w='0'; initboard(board,Line,Col); srand((unsigned long)time(NULL)); while (1){ showboard(board, Line, Col); int z = peoplemove(board, Line, Col); { if (2 == z || 1 == z){ printf("输入错误,请重输!"); continue; } else{ printf("该你了n"); } } w = judgeresult(board, Line, Col);{ if ('N' != w){ break; } computermove(board, Line, Col); w = judgeresult(board, Line, Col);{ if ('N' != w){ break; } } } } w = judgeresult(board, Line, Col); showboard(board, Line, Col); switch (w){ case 'X':printf("恭喜您。您赢了!"); break; case 'O':printf("很遗憾,您输了!"); break; case 'P':printf("平局!"); break; default: break; } }
好了,这就是简单的三子棋游戏,代码虽然很长,但是通过多文件,函数的调用,就显的有条不紊,所以,对于C语言,逻辑还是非常重要!!!!
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算