贪吃蛇游戏C语言程序设计 c语言贪吃蛇游戏代码

好多图挂了 看我csdn博客吧http://blog.csdn.net/neolone/article/details/6648757

《计算机程序设计》课程设计报告

课 题 名 称贪吃蛇游戏

班级软件1班

姓名 neolone


目录

1 需求分析... 1

2 系统分析和设计... 1

2.1 数据结构的设计和选择的理由... 1

2.2 系统模块划分和模块结构... 2

2.3 流程图... 3

2.4 数据类型、全局变量和函数说明... 3

3 程序测试和运行结果... 4

4 课程报告小结... 5

4.1分数重叠显示... 5

4.2速度太快... 5

4.3食物可能出现在蛇身上... 5

附录A:程序源代码... 6


1 需求分析

【阐述课程设计应该完成的功能】

使用键盘的上下左右,来控制蛇的运动方向,ESC键退出,并显示得分。

2 系统分析和设计

2.1 数据结构的设计和选择的理由

本游戏中涉及的主要数据结构是如何表示运动的蛇、食物状态等问题。
2.1.1从游戏参考画面中我们可以看到,贪吃蛇的身体是一节节的,由一个个大小相同的方块组成,那么我们可以用一个(x,y)坐标为左上角的、固定宽度的正方形来表示一节蛇身。为表示连续的多节身体,那么我们可以采用数组(或链表,或线性表)等数据结构来表示。下面以数组方式为例:
struct Point {
int x,y;
}

struct Point nodes[MAX_LENGTH];//蛇身数组,MAX_LENGTH为最大蛇长

贪吃蛇是在不断的运动的,我们研究蛇的运动可以发现这样的特点:
1. 蛇头由键盘控制,键盘不操作时,保持原有方向运动;(用intdirection;表示)
2.运动时,蛇身后面一节移动到前面一节的位置。当我们用nodes[0]表示蛇头的时候,nodes[1]运动到nodes[0]处;nodes[2]运动到nodes[1]处...。
3. 吃到一个食物以后,蛇身会增加一节。即该数组中的有效数据个数加一。(用int length;表示)
贪吃蛇游戏C语言程序设计 c语言贪吃蛇游戏代码

根据上面的情况,我们可以设计蛇的数据结构如下:
struct Snake {
struct Pointnodes[MAX_LENGTH];//蛇身数组,保存每节蛇身的坐标。MAX_LENGTH为最大蛇长
intlength;//当前蛇长
intdirection; //蛇头运动方向
intlive;//蛇活的,还是已经死了?
}

2.1.2关于食物,有两个属性:
1. 坐标位置
2. 状态:存在,或被吃。
故我们用以下结构表示:
struct Food {
struct Pointposition; //食物的位置
intexist;//存在?还是被吃?
}

2.2 系统模块划分和模块结构

void main() {

init();

l=1;

while(l)

{

select();

gamePlay();

}

close();

}

2.3 流程图

2.4 数据类型、全局变量和函数说明

2.4.1数据类型

struct Point{

intx,y;

};

struct Snake{

structPointnodes[MAX_LENGTH];

intlength;

intdirection;

intlive;

} snake;

struct Food{

structPointposition;

intexist;

} food;

2.4.2全局变量

Score\得分

left,top,right,bottom\游戏区域范围

lastx,lasty\用来保存最后一节蛇的位置

keyCode\用来保存按下的键

2.4.3函数说明

voidinit(void);\初始化程序,给一些初始值赋值

voidgamePlay(void);\游戏主循环

voidclose(void);\关闭游戏

voiddrawWall(void);\画墙

voidcreateFood(void);\创造一个食物

voiddrawFood(void);\画出食物

voiddrawSnake(void);\画出蛇

voiddrawScore(void);\画出分数

inttouchWall(void);\判断是否碰到墙

inttouchSelf(void);\判断是否碰到自己

voidgameOver(void); \游戏结束

voidmoveSnake(void);\移动蛇

int oppositeDirection(intkeyCode);\判断是否方向有误

intfoodEat(void); \判断是否吃到食物

voidexpandSnake(void);\把蛇增长一节

3 程序测试和运行结果


----------------------------------------------------------------------------选择速度开始或退出

----------------------------------------------------------------------------------------游戏运行中

--------------------------------------------------------------------------------------------------------游戏结束

4 课程报告小结

【遇到的问题及解决方法分析等】

4.1分数重叠显示

解决方法:每次都用一块黑的矩形覆盖

setfillstyle(1,16);

bar(4 5,45,150,80);

4.2速度太快

解决方法:循环delay

for(d=0;d<4;d++)

delay(GAME_SPEED);

4.3食物可能出现在蛇身上

解决方法:依次判断,若重叠则重新生成食物

void createFood() {

inti;

label:

food.position.x=left+10*((int)rand());

food.position.y=top+10*((int)rand());

for(i=0;i<=snake.length-1;i++){

if(snake.nodes[i].x==food.position.x&&snake.nodes[i].y==food.position.y)

gotolabel;

}

附录A:程序源代码


这是资源地址,源代码http://download.csdn.net/source/3483954

设计报告http://download.csdn.net/source/3483963

  

爱华网本文地址 » http://www.aihuau.com/a/25101016/312150.html

更多阅读

C程序设计---练习题四

第9章编译预处理1.以下程序的输出结果是()A、9B、6C、36D、18#define f(x) x*xmain( ){ int a=6,b=2,c;c=f(a) / f(b);

声明:《贪吃蛇游戏C语言程序设计 c语言贪吃蛇游戏代码》为网友鬼心窍分享!如侵犯到您的合法权益请联系我们删除