欢迎来到天天文库
浏览记录
ID:51015180
大小:205.50 KB
页数:16页
时间:2020-03-17
《五子棋游戏C语言.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、五子棋游戏程序设计(C语言实现)一、设计任务与目标设计两个人对战的五子棋游戏,游戏开始界面是显示游戏的规则,然后让用户输入命令以确定游戏是否开始,如果用户确定开始,那么要显示棋盘,接下来到了最重要的几步,两个玩家交替落子,当连续五个棋子在一条直线上时,一方赢棋,游戏结束。其中,有些问题就是平时基本的输入输出问题,例如:游戏规则,可以直接打印。棋盘的显示也是一般的图形输出问题,但是稍微复杂一些。需要改进的地方和达到的目标是:1、游戏的初始界面显示的是游戏规则,当玩家确定开始的时候要清除界面来显示棋盘。2、棋盘和棋子的显示,界面(棋子和棋盘)容易分
2、辨,这要从颜色和图形上加以区分。3、要求一方用‘W’(上)、‘S’(下)、‘A’(左)、‘D’(右),另一方用‘↑’、‘↓’、‘←’、‘→’来移动光标,再分别用‘Z’和‘空格’键确定落子。4、当一方走棋时,另一方的按键应该设置为无效。5、游戏进行时打印提示信息,当一方赢棋后,要显示赢棋的字符,并询问玩家是否继续开始。6、可以随时退出游戏或重新开始游戏。二、方案设计与论证首先设置游戏的初始界面,采用白色背景和红色前景,这可以调用‘conio.h’库函数实现打印游戏规则。询问玩家是不是开始游戏,通过选择YN来确定。其中会遇到这样的问题:当玩家输入
3、的不是‘Y(y)’或者‘N(n)’时应该怎么办呢?如果采用scanf函数来接收命令,这样会显示一个不满足要求的字符,于是可以用getch函数来接收命令,判断输入的字符是否为‘Y(y)’和‘N(n)’,如果是再显示出来。为了界面的简洁,进入游戏前先清除屏幕,调用‘system()’函数来实现。然后打印棋盘,可以把背景设置为湖蓝色,这样棋盘和棋子更容易分辨。游戏开始后棋盘用黑色显示,这样易于区分。具体的思路是:由于棋盘是网格状的,所以选择一个基本图形字符串‘十’,通过循环打印而构成一张大图。接下来确定落子的位置,这需要通过改变光标的位置来实现,考虑
4、到是在vc6.0环境下编译文件,c语言中的有些库函数并不支持,所以选择了’gotoxy()’函数并结合‘window.h’下的函数,通过键盘按键控制达到光标移动功能。定义一个二维数组来记录棋子落点数据,当棋盘上的某一个位置有棋子时,能判断这个位置不能再落子了。因为游戏设置的是两个玩家操作不同的按键来控制的,所以当一方走棋时,另一方的按键要设置成无效,采用的办法是过滤接收的字符。例如,当玩家一走棋时,只有当输入的字符为‘W’、‘A’、‘S’、‘D’、‘Z’、‘Q’、‘Esc’时,才响应,而‘↑’、‘↓’、‘←’、‘→’、‘空格’以及其他字符则不响
5、应。最后是判断输赢。根据五子棋规则,如果连续的五个相同颜色的棋子在一条直线上就算赢。于是用代码实现时,就确定了基本的思路:利用for循环来遍历棋盘上的落点。这里有四种情况,分别是从左往右,从上往下,从左下往右上,从左上往右下,判断是否有五子连续在一直线上,并且连续五个位置记录的数据相等时就打赢某一方赢了。要重新开始就输入‘Q’。一、程序框图或流程图,程序清单与调用关系程序清单:函数声明功能Main()主函数voiddrawqipan()画棋盘voidgotoxy()光标定位voidmovegb()移动光标voidluozi()落棋子voidju
6、dgewin()判断输赢voidsystem()系统函数intstartgame()游戏初始界面voidinitdata()初始化游戏数据程序调用关系:maingotoxy()luozi()gotoxy()InitData()gotoxy()StartGame()System()movegb()gotoxy()drawqipan()judgewin()gotoxy()程序流程图:voidmovegb()luozi()Press落子键是棋手1落子键落白棋落黑棋结束是是开始开始press光标键移动光标是是输出否结束Voiddrawqipan()vo
7、idjudgewin()否棋子数小于五棋子为黑棋传来棋子数棋手1赢是是棋手2赢结束i=1,j=1i++否i<20否是否输出‘十’是j++是ij<20是结束intStartGame()开始打印游戏规则是否开始游戏否返回真是返回假结束四、全部源程序清单#include#include#include#defineplay1up'w'#defineplay1down's'#defineplay1left'a'#defineplay1right'd'#defineplay2up72#define
8、play2down80#defineplay2left75#defineplay2right77#defineplay1lq'z'#definepla
此文档下载收益归作者所有