文档介绍:第22章 C语言程序课程设计:游戏
前面学习了很多C语言的基础知识,很多读者已经对具体的应用稍有了解,但如何把一些零散的知识点贯穿起来,形式一个完整的项目,是一种技术上的突破。本章就通过几个好玩的游戏案例,从C语言本身的开发过程入手,教读者把前面的知识点再深入掌握一遍。
黑白棋
本节案例学习一个小游戏:黑白棋。从游戏开发的功能需要求开始,然后让读者知道究竟设计成一个什么样的结果,最后给出开发的代码。
程序功能要求
程序说明:黑白棋也叫苹果棋或翻转棋,它是一款经典的策略性游戏。它使用8×8的棋盘,分别由两人执黑子和白子轮流下棋,最后子多方为胜方。游戏中只要用自己的两个棋子夹住对方的棋子,便能使对方的棋子全部变色,变成自己的棋子颜色。到一方或双方都无子可下的时候,统计各方得分,保留棋子最多者就是胜者。
程序要求:根据黑白棋的规则,编制黑白棋游戏。
输出结果:绘制基础黑白棋面板,并能够进行游戏操作。
输入输出样例
黑白棋游戏就是要求在机器上实现黑白棋游戏的功能,程序的输出图示如图22-1所示。
程序分析
参阅黑白棋游戏的规则,可以知道该游戏的核心是:当其中一方的棋子夹住另一方的棋子后,被夹住的棋子要变色,如图22-2所示,变色后如图22-3。被夹住的棋子可以是在水平、垂直、斜线三个方向中的任意一个。为了便于理解本节的程序,下面介绍一些程序中用到的主要功能函数。程序的整体设计思路如图22-4。
程序初始化
程序初始化部分就是运行程序,开始进行黑白棋游戏。同时初始化棋盘标志数组board_flag,此数组为8行8列,记录棋盘每个方格的状态。其值含义如表22-1所示。
初始化图形设备
初始化图形设备就是在屏幕上绘制程序运行的图形界面,图形界面是程序可视化的基础,为此需要调用系统函数initgraph(int far *gdriver, int far *gmode, char far *path)函数初始化图形设备。函数的主要参数如下。
*gdriver:图形驱动序号变量指针;
*gmode:图形驱动器模式序号变量指针;*pdriver:图形驱动程序所在目录路径;
绘制棋盘
棋盘是进行黑白棋游戏的基础,所有棋子都要在此平台上进行相应的操作,因此绘制8×8的棋盘要先于其他部分,该部分调用绘图函数,根据坐标绘制网格并进行填充。,以下是绘制棋盘功能函数的具体实现代码。
交替绘制黑白棋
当黑棋在棋盘中确定落子以后,那么在棋子出现的初始位置应该马上显示白子;同理,当白棋在棋盘中确定落子以后,在棋子出现的初始位置应该马上出现黑子。程序中,棋子出现的初始位置的坐标设为(-1,0)。此时需要注意,棋子在初始位置时,只能往右移动,其他方向都不可移动。显示初始位置棋子和其颜色的函数为show_init(int pat);以下是可以移动的棋子出现在初始位置,交替出现黑白子的功能函数的具体实现代码。参数pat表明了棋子显示的颜色,当pat为0时,棋子为黑色;当pat为1时,棋子为白色。
游戏(同时判断是否有一方胜利)
游戏时移动棋子,需注意如下三点:
第一,只能在棋盘范围之内;
第二,移动到下一棋格后,回复当前棋格被占之前的状态;
第三,按Enter键,准备放置棋子时,需要判断当前位置是否符合放置棋子的条件。此部分流程如图22-5所示。