nt direction;/*蛇的移动方向*/ int life; /*蛇的生命,0活着,1死亡*/ }snake; (二)界面 驱动 void Init()函数用于图形界面驱动。 void Init(void) { int gd=DETECT,gm; initgraph(&;gd,&;gm,"c:\\tc"); cleardevice(); } (三)界面初始化 void DrawK()用于图象初始化,即画围墙。 void DrawK(void) { …… } (四)游戏开始 void GameBegin()实现游戏开始界面. void GameBegin(void) { } (五)游戏 void GamePlay()实现游戏的具体过程。 这个函数是游戏的主要部分,难点在表示蛇的新位置并消除前一次的图形。 采用的方法是每次移动的时候从最后一节开始到倒数第二节(因蛇头为两节),将 前一节的坐标赋值给后一节的坐标,移动后只要把最后一节用背景色去除即可, 因为新位置0到n-l节还是要出现在画面上的。 然后蛇头按照方向键来更改位置。 另外,食物的随机出现要确保它的位置在10的倍数位置上,因为蛇的坐标 都是以10为模的,这样的话就可以让蛇吃到,蛇吃到食物的判断是蛇头的坐标 和食物的坐标相等。 其算法过程为: 1)设置初始值。为防止食物总出现在一个位置上,要设置随机数发生器,真 正产生随机数。初始时,蛇只有蛇头,设定一个开始的方向。 2)循环执行,直到按Esc键退出。
3
……
工 计算机科学与技术学科 《C语言程序设计》课程设计阅读报告
1)没有按键的情况下,循环执行。 如果没有食物,随机出现食物;如果有食物,则显示食物,蛇移动身体,根 据蛇的方向改变坐标值, 并判断蛇是否撞到了墙或自己吃了自己,如果出现这两 种情况之一,则蛇死。如果蛇吃到了食物,蛇身体长一节,数组元素增加一个, 身体节数、颜色、分数速度都进行相应的改变。 在新位置画出蛇。 . 2)如果有按键,则识别键值。如果按键为Esc键则结束游戏,程序运行结 束;如果所按键为方向键,则根据该键改变代表蛇方向的变量direction的值,要 考虑相反方向键无效。 void GamePlay(void) { …… } (六)游戏中断 void GameNext()实现第一次跳出游戏后玩家是否继续游戏的判断。 void GameNext(void) { …… } (七)游戏结束 void GameOver()实现游戏的结束画面。 void GameOver(void) { …… } (八)分数和等级的输出 void PrScore()实现分数和等级的输出。 void PrScore(void) { …… } (九)画面结束 void Close(void) {
4
工 计算机科学与技术学科 《C语言程序设计》课程设计阅读报告
…… } 2.2.2 模块的总体调用 模块的总体调用通过main()函数来实现。
主函数是程序的主流程, 首先定义使用到的常数、 全局变量及函数原型说明, 然后初始化图形系统,调用函数GameBegin()后用DrawK()画出开始画面,调用 函数GamePlay(),即玩游戏的具体过程,最后调用GameNext()进行一轮判断决 定是否继续进行游戏。
2.3 详细设计
2.3.1 模块说明 流程图说明 1
系统模块
2 核心模块
5
工 计算机科学与技术学科 《C语言程序设计》课程设计阅读报告 3 中断模块
6
4 结束模块
计算机科学与技术学科 《C语言
程序设计》课程设计阅读
报告 7
工
8
工 计算机科学与技术学科 《C语言程序设计》
课程设计阅读报告
2.3.2算法细节和扩充功能详解 1 蛇在整个过程中变化的算法 规定蛇身长为2,蛇颜色值t=1, 确定蛇的蛇头蛇尾坐标,用画矩形函数画出蛇. 使蛇在整格中. 规定蛇开始运动方向为向右.开始在没按键的情况下,蛇自动向右运动.此时 为蛇尾的坐标被蛇头坐标代替,蛇头坐标被新的坐标取代.接收按键, ,若按下ESC 键 ,则蛇死;若按下方向键,则蛇头坐标作相应的增减.其中按下向上键则蛇头 y-=10;按下向下键则y+=10;按下向右键则x+=10;按下向左键则 x-=10. 蛇吃到食物则身长加一,分数加十.此时重新画蛇.先画四节蛇,然后用黑色涂 去蛇的最后一节. 若过程中蛇碰到墙壁或自身,则蛇死.跳出循环. 2 食物 食