当前位置:文档之家› 贪吃蛇c程序设计报告含c代码

贪吃蛇c程序设计报告含c代码

贪吃蛇c程序设计报告含c代码
贪吃蛇c程序设计报告含c代码

贪吃蛇

一实验目的

1、了解AVR ATmega128试验箱的基本构成

2、熟悉键盘的工作原理和设置

3、熟悉点阵的工作原理和设置

4、熟悉液晶显示器的工作原理和设置

5、熟悉语音播放的工作原理和设置

6、熟悉AVR ATmega128的中断功能

7、初步掌握用C语言编程的能力

二实验内容:

1、设计题目:

根据液晶显示器中的提示,通过对4*4键盘的按键输入,选择游戏的难度,继而控制点阵中点列的移动、长度的增加,只有在规定的时间(30秒、20秒、10秒)内完成任务(吃10

个),就可游戏胜利,否则失败。同时在游戏的开始、胜利、失败时都将伴随着声音的输出。三硬件原理

1、AVR ATmega128单片机及片外选址电路

2、LDM点阵显示电路

3、LCD液晶显示电路

4、键盘连接电路及语音输出连接电路

四程序流程图

(1)、主函数

只有在规定的时间内完成“吃下”10个点,游戏才能成功,除了上图中的当第一点碰触到自身点导致失败情况下,在规定的时间内没有完成任务,将会导致中断相应,推出程序运行,最终游戏失败。

(2)、随机点产生函数void _rand(void)

函数中应用了产生随机点的函数rand(),其头文件必须包括“#include

(3)、第一点的操作函数void operate(unsigned char in)

产生第一点运动后的在点阵中显示的码值(数组change[])

Leader_i,leader_j分别为第一点相对于点阵中左上角上的点的绝对坐标值,其中每一个点的直径长设为1。

(4)、擦除函数void _eraser(void)

产生被擦除点的码值的反(eraser[])

由于最后一个点的位置可以由第一个点根据先前操作逆走N步得到,所以

eraser_i=leader_i+n1-n2和eraser_j=leader_j+n3-n4得到被擦除点相对于点阵左上点的绝对坐标。由于eraser_i、eraser_j可能为负值,因而为求得最后一个点在点阵中的位置,使其任意加一足够大的能被8整除的正整数(设为800),再与8除求余。即:

eraser_i=(eraser_i+800)%8,eraser_j=(eraser_j+800)%8。后经eraser[eraser_i]=~(1<

(5)、状态保存函数void status_save(void)

将前一状态与第一点移动后产生的第一点新码值(change[])进行或运算,再与产生的被擦除点显示码值的反(eraser[])进行与运算,得到新的显示状态(除随机点)的码值。

(6)、第一点的操作过程记录函数void renew(unsigned char in)

根据需要记录第一个点的N个运行过程(设为20)

(7)、吃点函数void eat(unsigned char in)

将记录的随机点显示码值的数组font[]清零,让第一个点再向前操作一步,但不擦除最后一个点,用来实现吃点效果。最后调用产生随机点函数重新产生一随机点。

(8)、结合函数void join(void)

用于产生要显示的码值。将表示状态的数组status[]与表示随机点的数组font[]进行或运算就可以实现。

(9)、测试函数unsigned char test(unsigned char *tester)

这个函数在程序中用于两个地方,一是在产生随机点的函数中,如果产生的随机点在“蛇”身上(返回值为2),则重新产生随机点;二是在第一个操作完一步后,判断此时第一点的位置,如果在“蛇”身上(返回值为2),则游戏失败。

(10)、液晶显示器显示函数void print_message(char *message)

用于显示字符串message。

(11)、函数void start(void)、void _win(void)、void lose(void) 用于在游戏开始时、胜利时、失败时的液晶显示、语音输出以及LED点阵输出。

(12)、难度选择函数void choose(void)

根据液晶显示的提示,选择游戏难度等级。在按确认键后开中断。程序流程图如下:

(13)、中断程序SIGNAL(SIG_OVERFLOW3)

用于限制游戏进行的时间,在规定时间内完成游戏任务,则关中断,中断程序不在执行,如果在规定时间没有完成,则调用失败函数(lose()),游戏失败。程序流程图如下:

五.c程序代码:

/****************************************************

DOS 游戏,贪吃蛇。编辑器Win-TC,编译器TC 2内核。

作者:樊毅。

时间:年10 月10 日。

注意:贪吃蛇的数据结构要用双向链表实现,因为蛇没有吃到食物时,是在蛇头前加一个节点作为新的蛇头,把蛇尾删去,实现移动一格,同时,蛇长不变。

从尾部删除链表的一个节点就必须用双向链表了。

****************************************************/

#include

#include

#include

#include

#include

#include

#include

#include

/*定义地图小格的边长*/

#define SIZE 10

#define UP 0x4800

#define DOWN 0x5000

#define LEFT 0x4B00

#define RIGHT 0x4D00

#define ENTER 0x1C0D

void fill(int x,int y,int xx,int yy,int color); void initg();

void win_title();

int win_menu();

void block(int x,int y,int color);

void draw_map();

void init_snake();

void prints();

void free_snake();

void snake_move();

void init_map();

void food();

void game();

void print_scores();

void pr_warn(int x,int y);

void help();

enum {d_up,d_down,d_left,d_right} DIR=d_left; /*定义一个全局的方向类型的枚举变量DIR,初始方向为左。其值前面加"d_"和全局变量的键值区分。*/

struct snake/*定义蛇体的每个小方块的数据结构。*/

{

char x; /*每个蛇体方块结构的x,y记录蛇体方块的方块坐标。方块坐标就是以一个方块为单位的坐标。*/

char y;

struct snake *pre; /*蛇体前指针,指向前一个蛇体方块结构的开始*/

struct snake *next; /*蛇体后指针,指向后一个蛇体方块结构的开始*/

} *HEAD=NULL,*TAIL=NULL; /*定义两个全局的结构体指针用于保存蛇头和蛇尾的位置*/ char OVER[]="Game Over !"; /*用于游戏失败输出的字符串。*/

char WIN[]="You Win !"; /*用于游戏胜利输出的字符串。*/

char MAP[40][60]; /*定义一个全局变量数组,用于标记地图方格属性.空地,蛇身,食物.*/

int GAME=0; /*定义一个全局变量GAME 对游戏状态进行记录。,不结束游戏.1,结束游戏.*/

int LENGTH=3; /*定义一个全局变量LENGTH 记录蛇体长度。初始长度为.*/

int DIFF=0; /*定义游戏难度全局变量。*/

int DELAY=20; /*定义延时时间全局变量。单位是百分之一秒,即,0.01秒.初始值,表示延时.2秒。*/

int S_SIZE=sizeof(struct snake); /*定义一个全局变量用来存放struct snake 结构所占字节数,方便使用。*/

/*****************************************

下面是,填充一定范围的函数,x,y是填充范围的左上角坐标,xx,yy是右下角坐标。color是填充颜色。bar()函数中,x,y

加, xx,yy减,是因为边框线有宽度,所以,要把填充范围往内缩一点。

*****************************************/

void fill(int x,int y,int xx,int yy,int color) /*以(x+1,y+1)为左上角,以(xx-1,yy-1)为右下角,用指定颜色填充此范围。*/

{

setfillstyle(SOLID_FILL,color); /*SOLID_FILL表示以单一的实体颜色填充,color是填充颜色。*/

bar(x+1,y+1,xx-1,yy-1); /*以(x+1,y+1)为左上角,以(xx-1,yy-1)为右下角画条形。*/

}

void initg() /*把显示器初始化成图像模式,屏幕的大小为640 * 480 像素。函数中还有错误检查程序。*/

{

int gdriver,gmode,errorcode;

gdriver=VGA; /*图形驱动器*/

gmode=VGAHI; /*图形模式*/

registerbgidriver(EGAVGA_driver); /*该函数告诉连接程序在连接时把EGAVGA 的驱动程序装入到用户的执行程序中*/

initgraph(&gdriver,&gmode,""); /*初始化图形系统*/

errorcode = graphresult(); /*返回最后一次不成功的图形操作的错误代码,没有错误返回*/

if (errorcode !=0)

{

printf("\n\terror:\t%s\n", grapherrormsg(errorcode));/*grapherrormsg返回一个错误信息串的指针*/

getch(); /*从控制台无回显地取一个字符,不需要回车。就是为了等待用户按键以后,退出整个程序。*/

exit(1);

}

}

void win_title() /*绘制游戏主菜单页面的标题字符串。*/

{

char str1[]="DOS Game Snake";

char str2[]="by Fine Fan";

setviewport(200,55,440,140,1); /*以(200,55)为左上角,(440,140)为右下角设置一个视口。*/

settextjustify(0,2); /*设置字符串横向左对齐,纵向顶部对齐。*/

settextstyle(0,0,2); /*设置字符串字体为第一个对应的字体,第二个表示水平输出,字体大小为。*/

setcolor(WHITE);

outtextxy(10,10,str1);

outtextxy(20,50,str2);

}

void draw_menu(int i) /*根据i的取值,画出不同状态的菜单。*/

{

int midx,midy;

char start[]="Start";

char exit[]="Exit";

char help[]="Help";

midx=getmaxx()/2; /*midx表示窗口的中心的X坐标,getmaxx()函数返回当前图像窗口的X坐标的最大值,下一行类似。*/

midy=getmaxy()/2;

setviewport(midx-40,midy-30,midx+40,midy+60,0);

settextjustify(0,2); /*设置字符串横向左对齐,纵向顶部对齐。*/

settextstyle(0,0,2); /*设置字符串字体为第一个对应的字体,第二个表示水平输出,字体大小为。*/

switch(i)

{

case 0:

clearviewport();

fill(0,0,80,30,YELLOW); /*i为时,把第一个选项"Start"高亮。*/

setcolor(GREEN); /*将当前图形屏幕的当前画笔颜色置为绿色,“GREEN”必须全部大写。*/

outtextxy(3,10,start);

outtextxy(10,40,help);

outtextxy(10,70,exit);

break;

case 1:

clearviewport();

fill(0,30,80,60,YELLOW);

setcolor(GREEN);

outtextxy(3,10,start);

outtextxy(10,40,help);

outtextxy(10,70,exit);

break;

case 2:

clearviewport();

fill(0,60,80,90,YELLOW);

setcolor(GREEN);

outtextxy(3,10,start);

outtextxy(10,40,help);

outtextxy(10,70,exit);

break;

}

}

int win_menu() /*制作主菜单窗口,玩家选择"Start"返回,选择"Exit"返回。*/ {

int key,i=0; /*key记录键盘返回值,i根据按键变化,必须初始化为,因为后面的

draw_menu()函数先要根据i值绘出菜单的初始画面。退出后win_menu()函数返回i的值。*/

do

{

draw_menu(i);

key=bioskey(0); /* bioskey(0) 函数会使整个程序在此处暂停,直到用户按下键盘的任何一个键。*/

if(key==UP)

{

if(i==0) continue; /*i等于时,已经是最小值了,不能再减小了,所以结束此次循环。*/

i--;

}

if(key==DOWN)

{

if(i==2) continue; /*i等于时,已经是最大值了,不能再增大了,所以结束此次循环。*/

i++;

}

if(key==ENTER) break;

}

while(1);

return i;

}

void block(int x,int y,int color) /*填充小方块的函数.x,y是小方块的方块坐标。*/

{

fill(x*SIZE,y*SIZE,x*SIZE+SIZE,y*SIZE+SIZE,color); /*此处本来应该将前一对坐标分别加,后一对坐标分别减,才能把小

方块之间的分隔线留出来,但是,fill()函数中已经做了这一步,所以此处不用做了。用此函数画

蛇体的小方块时也一样,坐标不用再变化了,因为fill()函数已经把空隙留出来了。*/

}

void help() /*输出按键说明画面。*/

{

char h1[]="Key Up to turn up.";

char h2[]="Key Down to turn down.";

char h3[]="Key Left to turn left.";

char h4[]="Key Right to turn right.";

char h5[]="Key Enter to enter or return.";

setviewport(0,0,639,479,0); /*建立一个全屏视口,因为坐标从开始,所以,虽然横向有个像素,但,横坐标最大值是,纵坐标同理,横纵坐标一定不能超过最大值

639 和479,否则,会出错,例如,建立的视口不是全屏,而是,只占据部分屏幕的视口。*/

fill(0,0,639,479,LIGHTGRAY);

setcolor(RED);

setlinestyle(0,0,3);

rectangle(3,3,636,476);

settextjustify(0,2); /*设置字符串横向左对齐,纵向顶部对齐。*/

settextstyle(0,0,2); /*设置字符串字体为第一个对应的字体,第二个表示水平输出,字体大小为。*/

setcolor(BLUE);

outtextxy(30,30,h1);

outtextxy(30,70,h2);

outtextxy(30,110,h3);

outtextxy(30,150,h4);

outtextxy(30,190,h5);

while(1) /*等待玩家按Enter键,返回主菜单。*/ {

if(bioskey(1))

{

if(bioskey(0)==ENTER) return;

}

}

}

void draw_map() /*绘制游戏的地图。*/

{

char map_title[]="Game Snake Scores:";

int i=0,j=0;

cleardevice(); /*清除全屏的显示内容。*/

setviewport(20,40,620,80,0); /*建立地图标题栏的视口。屏幕中心像素坐标为(320,240),由此可以算出setviewport() 函数的前四个坐标参数的值。*/

fill(0,0,600,40,YELLOW); /*将地图标题栏填充底色为黄色.*/

setcolor(WHITE);

rectangle(-3,-3,603,40);

settextjustify(0,2); /*设置字符串横向左对齐,纵向顶部对齐。*/

settextstyle(0,0,2); /*设置字符串字体为第一个对应的字体,第二个表示水平输出,字体大小为。*/

setcolor(LIGHTBLUE); /*设置地图标题文字的颜色。*/

outtextxy(10,10,map_title);

setviewport(20,80,620,440,0); /*建立地图的方块部分的视口,大小为,600 * 360.可以划分成60 * 36 个小方块.地图的方块部分应该重新建立视口,方便以后进行蛇体是否

出界的判断条件的设定,方便以后放置食物时,食物坐标的设定。*/

setcolor(WHITE);

rectangle(-3,0,603,363); /*画地图边框线,*/

for(i=0;i<600;i+=SIZE)

for(j=0;j<360;j+=SIZE)

{

fill(i,j,i+10,j+10,LIGHTGRAY);

}

}

void init_snake() /*初始化蛇体,产生游戏刚开始时的三个蛇体方块的数据。因为,有时要从尾部删除蛇尾节点,所以必须用双向链表。*/

{ /*最初的三个蛇体方块的方块坐标分别为

(40,10)(41,10)(42,10)。*/

struct snake *p;

HEAD=p=(struct snake *)malloc(S_SIZE);

p->x=40;

p->y=10;

p->pre=NULL;

MAP[10][40]=1; /*二维数组对应一块平面区域时,行坐标是纵坐标y,列坐标是横坐标x。*/

p->next=(struct snake *)malloc(S_SIZE);

p->next->pre=p;

p=p->next;

p->x=41;

p->y=10;

MAP[10][41]=1;

p->next=(struct snake *)malloc(S_SIZE);

p->next->pre=p;

p=p->next;

c语言课程设计贪吃蛇设计

. 《C语言程序设计》课程设计 题目:贪吃蛇游戏设计 学院:信息学院 专业:网络工程 姓名:李益双 学号:1101010121 班级:信息A1111班 指导教师:罗成 职称:讲师 完成日期:2012年6月

目录 1、前言 (3) 2、摘要 (4) 3、项目背景 (5) 4、需求分析 (6) 5、概要设计 (7) 6、详细设计与测试 (8) 601 定义蛇身的数据结构 (8) 602算法设计与程序流程图 (8) 602.1贪吃蛇算法设计 (8) 602.2程序流程图 (9) 603光标移动的设计与实现 (10) 603.1显示水平围墙的实现 (10) 603.2显示分数的实现 (11) 603.3接受玩家按键信息的实现 (11) 603.4游戏结束时显示信息的实现 (11) 604 贪吃蛇游戏主干的设计 (12) 604.1游戏的初始化与加载的实现 (12) 604.2食物随机产生的实现 (13) 604.3蛇身的增长设计 (14) 604.4蛇身的显示与移动的设计实现 (15)

604.5蛇的头部与物体碰撞的而设计实现 (16) 7、编码 (17) 8、结论 (18) 9、参考文献 (19) 10、致谢 (19) 前言 C语言,是一种通用的、过程式的编程语言,广泛用于系统与应用软件的开发。具有高效、灵活、功能丰富、表达力强和较高的移植性等特点,在程序员中备受青睐。 C语言是由UNIX的研制者丹尼斯·里奇(Dennis Ritchie)于1970年由肯·汤普逊(Ken Thompson)所研制出的B语言的基础上发展和完善起来的。目前,C语言编译器普遍存在于各种不同的操作系统中,例如UNIX、MS-DOS、Micro soft Windows及Linux等。C语言的设计影响了许多后来的编程语言,例如C+ +、Objective-C、Java、C#等。 1980年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局(American National Standard Institution)为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言的标准。1980年代至今的有关程式开发工具,一般都支持符合ANSI C的语法。

贪吃蛇(C语言知识学习)

#include #include #include #include #include //蛇头移动方向 #define UP 1 #define DOWN 2 #define LEFT 3 #define RIGHT 4 //死亡判定(怼墙或怼自己) #define KISSASS 1 #define KISSWALL 2 //坐标转化 #define POINT(x,y) ((y)*80+(x)+1) //将(x,y)坐标转化为一个int类数值#define GETX(x) (((x)-1)%80)//将int类数值提取出原先的x #define GETY(y) (((y)-1)/80)//同理,提取出y HANDLE Console;

void Position(int x, int y); //移动光标到(x,y)//Windows.h void DrawMap();//画墙 void ShowText(char *text);//根据字符串的长短智能打印出包围字符串的笑脸void ResetSnake();//初始化贪吃蛇 int RefreshSnake();//更新蛇的移动 void CreatFood();//生成食物 void Draw();//画出蛇身和食物 void RefreshScreen();//屏幕刷新 void GameOver(int Type);//游戏结束条件 int Gaming();//代码跑起来 char play = 0; ////值为1则继续游戏,值为0游戏退出 char pause = 0; //值为1则暂停,值为0游戏继续 char direction; //蛇头方向 int snake[500]; //snake[0]为蛇头 int body; //蛇身体长度 int newbody;//吃完食物新长的蛇身 int addHead,deleteT ail;//增加蛇头擦去蛇尾,使贪吃蛇动起来 int food = 0; //食物

C语言课程设计报告——贪吃蛇源程序

C 语言课程设计(小游戏贪吃蛇的程序设计报告) 设计人: 班级: 201 年月号

目录一:概述 1:研究背景及意义 2:设计的任务与需要知识点3:具体完成设计内容 二:需求分析 1:功能需求 2:操作方法 三:总体设计 1:模块划分 2:数据结构设计 四:详细设计 1:主空摸块设计 2:绘制游戏界面 3:游戏的具体过程 4:游戏的结束处理 5:显示排行榜信息模块 五:程序的调试与测试1:动画与音乐同步 2:蛇的运行 3:终止程序 六:结论 七::结束语 八:程序清单 九:参考文献

一. 概述 本课程设计以软件工程方法为指导,采用了结构化,模块化的程序设计方法,以C语言技术为基础,使用Turbo C++3、0为主要开发工具,对贪吃蛇游戏进行了需求分析,总体设计,详细设计,最终完成系统的实现与测试。 1、1 研究的背景及意义 随着社会的发展,人们生活的节奏日益加快,越来越多的人加入了全球化的世界。人们不再拘泥与一小块天地,加班,出差成了现代人不可避免的公务。而此时一款可以随时随地娱乐的游戏成为了人们的需要。此次课程设计完成的贪吃蛇小游戏,正就是为了满足上述需求而设计出来的。贪吃蛇游戏虽小,却设计诸多的知识点。通过开发贪吃蛇游戏系统,可使读者初步了解使用软件工程的与那个发,技术与工具开发软件的过程,进一步掌握结构化,模块化的程序设计方法与步骤,进一步掌握总体数据结构设计,模块划分方法,掌握局部变量,全局变量,结构体,共用体,数组,指针,文件等数据结构的使用方法,掌握图形,声音,随机数等多种库函数的使用方法,学习动画,音乐,窗口,菜单,键盘等多项编程技术,进一步学会软件调试,测试,组装等软件测试方法,为后续课程的学习与将来实际软件开发打下坚实的基础。 1、2 设计的任务与需要的知识点 1、2、1 课程设计主要完成的任务 1)、通过编写“贪吃蛇游戏”程序,掌握结构化,模块块化程序设计的思想,培养解决实际问题的能力。 2) 有同步播放动画,声音效果。 3) 设计好数组元素与蛇,食物的对应关系。 4) 随机产生食物。 5) 有分数统计,排行榜,分数存储等功能。 通过此次课程设计,希望使读者能更深入的理解与掌握课程教学中的基本概念,培养读者应用基本技术解决实际问题的能力,从而进一步提高分析问题与解决问题的能力。 1、2、2需要掌握与运用的知识点 1、2、3本次课程设计需要掌握与运用如下的知识点: 1) 数组的应用。 2) 全局变量的使用。 3) 按键处理。 4)结构体的应用。 5)图形,音乐与动画的有关知识。 6)随即函数的使用。 7)文件的基本出操作。 8) 结构化,模块化的设计方法。

C语言课程设计报告——贪吃蛇源程序之欧阳家百创编

欧阳家百创编 C 语言课程设计 欧阳家百(2021.03.07) (小游戏贪吃蛇的程序设计报告) 设计人: 班级: 201年月号

欧阳家百创编目录 一:概述 1:研究背景及意义 2:设计的任务与需要知识点 3:具体完成设计内容 二:需求分析 1:功能需求 2:操作方法 三:总体设计 1:模块划分 2:数据结构设计 四:详细设计 1:主空摸块设计 2:绘制游戏界面 3:游戏的具体过程 4:游戏的结束处理 5:显示排行榜信息模块 五:程序的调试与测试 1:动画与音乐同步 2:蛇的运行 3:终止程序 六:结论 七::结束语 八:程序清单 九:参考文献

一.概述 本课程设计以软件工程方法为指导,采用了结构化,模块化的程序设计方法,以C语言技术为基础,使用Turbo C++3.0为主要开发工具,对贪吃蛇游戏进行了需求分析,总体设计,详细设计,最终完成系统的实现与测试。 1.1 研究的背景及意义 随着社会的发展,人们生活的节奏日益加快,越来越多的人加入了全球化的世界。人们不再拘泥与一小块天地,加班,出差成了现代人不可避免的公务。而此时一款可以随时随地娱乐的游戏成为了人们的需要。此次课程设计完成的贪吃蛇小游戏,正是为了满足上述需求而设计出来的。贪吃蛇游戏虽小,却设计诸多的知识点。通过开发贪吃蛇游戏系统,可使读者初步了解使用软件工程的和那个发,技术和工具开发软件的过程,进一步掌握结构化,模块化的程序设计方法和步骤,进一步掌握总体数据结构设计,模块划分方法,掌握局部变量,全局变量,结构体,共用体,数组,指针,文件等数据结构的使用方法,掌握图形,声音,随机数等多种库函数的使用方法,学习动画,音乐,窗口,菜单,键盘等多项编程技术,进一步学会软件调试,测试,组装等软件测试方法,为后续课程的学习和将来实际软件开发打下坚实的基础。 1.2 设计的任务和需要的知识点 1.2.1 课程设计主要完成的任务 1). 通过编写“贪吃蛇游戏”程序,掌握结构化,模块块化程序设计的思想,培养解决实际问题的能力。 2) 有同步播放动画,声音效果。 3) 设计好数组元素与蛇,食物的对应关系。 4) 随机产生食物。 5) 有分数统计,排行榜,分数存储等功能。 通过此次课程设计,希望使读者能更深入的理解和掌握课程教学中的基本概念,培养读者应用基本技术解决实际问题的能力,从而进一步提高分析问题和解决问题的能力。 1.2.2需要掌握和运用的知识点 1.2.3本次课程设计需要掌握和运用如下的知识点: 1) 数组的应用。 2) 全局变量的使用。 3) 按键处理。 4)结构体的应用。 5)图形,音乐和动画的有关知识。 6)随即函数的使用。 7)文件的基本出操作。 8) 结构化,模块化的设计方法。 1.3具体完成的设计内容 在本次课程设计中需要完成的任务有:包含命令,全局变量的定义和宏定义,函数声明等(50行),主控模块(MAIN函数,14行),动画,音乐播放模块(DRAWSNOW函数,33行),画出游戏开始界面模块,具体游戏过程模块,游戏结束处理模块。开发中工作量约为215行源代码。 二 .需求分析 贪吃蛇游戏是个简单的小游戏,能让游戏者的身心得到娱乐,从而能够更好地投入到学习或工作当中。虽然现在市面上出来这各种各样的游戏版本,可是贪吃蛇这类的小游戏其市场还是相当大的,因为它玩法简单易行,不论是手机,还是小游戏机,都能很顺利的运行。对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的,这样的小游

基于VC的贪吃蛇游戏的C语言代码

#include #include #include #include #define U 1 #define D 2 #define L 3 #define R 4 //蛇的状态,U:上;D:下;L:左 R:右 typedef struct SNAKE //蛇身的一个节点 { int x; int y; struct SNAKE *next; }snake; //全局变量// int score=0,add=10;//总得分与每次吃食物得分。 int status,sleeptime=200;//每次运行的时间间隔 snake *head, *food;//蛇头指针,食物指针 snake *q;//遍历蛇的时候用到的指针 int endgamestatus=0; //游戏结束的情况,1:撞到墙;2:咬到自己;3:主动退出游戏。 //声明全部函数// void Pos(); void creatMap(); void initsnake(); int biteself(); void createfood(); void cantcrosswall(); void snakemove(); void pause(); void gamecircle(); void welcometogame(); void endgame(); void gamestart(); void Pos(int x,int y)//设置光标位置 { COORD pos; HANDLE hOutput; pos.X=x;

C语言贪吃蛇

------------ 大学 C语言程序设计课程设计(论文)题目:贪吃蛇 院(系): 专业班级: 学号: 学生姓名: 指导教师: 教师职称: 起止时间:

课程设计(报告)任务及评语 院(系):教研室: 学号学生姓名专业班级 程序设计 (报告) 题目 贪吃蛇 程序设计(报告)任务 程序设计的任务与要求: (1)掌握C语言编程的基础知识。 (2)较熟练地编写C语言应用程序。 (3)了解C语言的常用标准函数、编程技巧、异常处理。 (5)联系已学过的内容,巩固所学的理论,增强独立工作能力。 (6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。 (7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。 课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。 指 导 教 师 评 语 及 成 绩 成绩:指导教师签字: 2011年 1 月 4 日

目录 第1章 C语言课程设计的实训目的与要求 (1) 1.1 C语言课程设计目的 (1) 1.2 C语言课程设计的实验环境 (1) 1.3 C语言课程设计的预备知识 (1) 1.4 C语言课程设计要求 (1) 第2章 C语言课程设计内容 (2) 2.1程序功能介绍 (2) 2.2程序整体设计说明 (2) 2.2.1设计思路 (2) 2.2.2数据结构设计及用法说明 (3) 2.2.4各模块的功能及程序说明 (7) 2.2.5程序结果 (8) 2.3程序源代码及注释 (10) 第3章 C语言课程设计总结 (17) 参考资料.. (20)

c语言程序贪吃蛇课程设计报告范文

高级语言程序设计 课程设计报告 Experiment Designing reporter 课程名称:高级语言程序设计 英文名称 : C Program Experiment Designing 专业:自动化 111 学号: XXX 姓名: XXX 指导教师: XXX 日期: 2012 年 6月 17日至 2011 年6 月 20 日 山东工商学院信电学院

山东工商学院信电学院自动111班第一组“贪吃蛇课程设计报告“一:课程设计内容 程序功能介绍 贪吃蛇游戏是一个经典小游戏,深受众多玩家喜爱,其规则是:一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。此游戏不仅能锻炼人的思维敏捷性,而且还可以提高玩家的逻辑判断能力。 设计思路 我们小组称设计本次课题——贪吃蛇的思路为“贪快速上手贪吃蛇三步曲”: 第一步: 寻找到一个真正可以运行的已用C编好的贪吃蛇。 因为我们毕竟从未看到过用C编游戏的程序,让我们两手一抹黑的开始编写是有一定的困难的,如果我们自己找一个已经设计好的程序,以此为跳板实现我们想要达到的效果,那么肯定是高效的。所以我们组统一决定,去寻找一个可以运行的C编译的贪吃蛇。 第二步: 运行游戏并了解游戏程序。 我们认为,只有你运行并了解一个游戏,才能知道游戏里需要什么样的改进和创新,如果你自己本身就没玩过这个游戏,那么你就是再有技术,你也永远改进和改编不了一个游戏,因为你根本不知道你在干什么。 同样重要的是了解游戏程序。因为只有看懂了程序,才能实现对他的改编,才能游刃有余。 第三步: 寻找模块并分类,而后进行改编。 寻找到你想要改变的游戏内容的控制模块,比如,我想要增加一堵墙,那 第一页共十六页 自动化 111

C语言课程设计报告——贪吃蛇源程序

C 语言课程设计 (小游戏贪吃蛇的程序设计报告)

设计人: 班级: 201 年月号

目录一:概述 1:研究背景及意义 2:设计的任务与需要知识点 3:具体完成设计内容 二:需求分析 1:功能需求 2:操作方法 三:总体设计 1:模块划分 2:数据结构设计 四:详细设计 1:主空摸块设计 2:绘制游戏界面 3:游戏的具体过程 4:游戏的结束处理 5:显示排行榜信息模块 五:程序的调试与测试 1:动画与音乐同步 2:蛇的运行 3:终止程序 六:结论 七::结束语 八:程序清单 九:参考文献

一.概述 本课程设计以软件工程方法为指导,采用了结构化,模块化的程序设计方法,以C 语言技术为基础,使用Turbo C++3.0为主要开发工具,对贪吃蛇游戏进行了需求分析,总体设计,详细设计,最终完成系统的实现与测试。 1.1 研究的背景及意义 随着社会的发展,人们生活的节奏日益加快,越来越多的人加入了全球化的世界。人们不再拘泥与一小块天地,加班,出差成了现代人不可避免的公务。而此时一款可以随时随地娱乐的游戏成为了人们的需要。此次课程设计完成的贪吃蛇小游戏,正是为了满足上述需求而设计出来的。贪吃蛇游戏虽小,却设计诸多的知识点。通过开发贪吃蛇游戏系统,可使读者初步了解使用软件工程的和那个发,技术和工具开发软件的过程,进一步掌握结构化,模块化的程序设计方法和步骤,进一步掌握总体数据结构设计,模块划分方法,掌握局部变量,全局变量,结构体,共用体,数组,指针,文件等数据结构的使用方法,掌握图形,声音,随机数等多种库函数的使用方法,学习动画,音乐,窗口,菜单,键盘等多项编程技术,进一步学会软件调试,测试,组装等软件测试方法,为后续课程的学习和将来实际软件开发打下坚实的基础。 1.2 设计的任务和需要的知识点 1.2.1 课程设计主要完成的任务 1). 通过编写“贪吃蛇游戏”程序,掌握结构化,模块块化程序设计的思想,培养解决实际问题的能力。 2) 有同步播放动画,声音效果。 3) 设计好数组元素与蛇,食物的对应关系。 4) 随机产生食物。 5) 有分数统计,排行榜,分数存储等功能。 通过此次课程设计,希望使读者能更深入的理解和掌握课程教学中的基本概念,培养读者应用基本技术解决实际问题的能力,从而进一步提高分析问题和解决问题的能力。 1.2.2需要掌握和运用的知识点 1.2.3本次课程设计需要掌握和运用如下的知识点: 1) 数组的应用。 2) 全局变量的使用。 3) 按键处理。 4)结构体的应用。 5)图形,音乐和动画的有关知识。 6)随即函数的使用。 7)文件的基本出操作。

C语言贪吃蛇实验报告

C语言程序设计报告 题目:贪吃蛇游戏的程序设计 院系:西语学院英语教育6班 : 学号:

1.1题目: 设计贪吃蛇小游戏 1.2题目的要求: 玩家通过键盘控制蛇在地图上寻找食物,蛇吃下食物,可以加分,碰到四壁游戏结束。 1.3设计的步骤: ●分析设计题目的要求,即需求分析。 ●总体设计,确定所需模块及模块间调用关系,定义系统中使用的数据类型。 ●详细设计,确定每个模块的功能,绘制主要函数的流程图。 ●编写程序代码,调试程序使其能正确运行。要求书写规范,注意采用缩进格式。函数 名、变量名要见文晓意,注释要简而不失、详而不缀。设计完成的软件要便于操作和使用。 ●程序测试,发现程序中存在的错误并改正。 ●完成报告。 2详细设计说明 2.1课程设计的要求: 通过游戏程序设计,提高编程兴趣与编程思路,巩固C语言中所学的知识,合理的运用资料,实现理论与实际相结合。 ●收集资料,分析课题,分解问题,形成总体设计思路;

●对于设计中用到的关键函数,要学会通过查资料,弄懂其用法,要联系问题进行具 体介绍; ●上机调试,查错,逐步分析不能正常运行的原因,确保所设计的程序正确,并且能 正常运行; ●完成课程设计报告。 2.2程序的功能: 贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或身体交叉蛇头撞倒自己身体游戏结束。 2.3课程设计的思想: 程序关键在于表示蛇的图形及蛇的移动。用一个小圆点来表示蛇的一节身体,身体每长一节,增加一个圆点,蛇头用四节来表示。移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,如果按与蛇运动方向相反的方向键,此游戏就会暂停,再按想前的方向键才能继续游戏,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。食物的出现与消失也是画一个圆点和覆盖原来的圆点。为了便于理解,定义两个结构体:食物与蛇。

贪吃蛇C语言课程设计报告

贪吃蛇游戏设计 姓名:张力 学号: 10020323完成日期:月日

一、设计目的 贪吃蛇游戏程序功能的实现主要是建立在二维数组和图形界面的应用上,通过编写游戏程序能够熟悉掌握相关数组和图形函数的运用,提高编程水平,增加编程的兴趣 二、总体设计 主函数 ↓ 图形驱动I n i t画界面D r a w K游戏具体过程G a m e P l a y 图形结束C l o s e ↓ 游戏结束G a m e O v e r输出成绩P r S c o r e 三、详细设计(项目成员及分工、模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等) ①主函数m a i n(): 定义使用的常数,全局变量及函数原型说明,并调用I n i t()函数初始化图形系统;然后调用D r a w K()函数画界面,调用G a m e P l a y()函数实现游戏的具体过程,游戏结束后调用C l o s e()函数关闭图形系统结束程序。 ②画界面函数D r a w K(): 主界面是一个密封的围墙,用两个循环语句分别在水平方向和垂直方向输出连续的宽度和高度均为10个单位的矩形小方块,设置成淡青色,背景颜色为黑色。 ③游戏具体过程函数G a m e P l a y(): 算法过程: a.设置初始值。为防止食物出现在一个位置上,要设置随机数发生器,真正产生随机数。初始时,蛇只有蛇头,设定一个开始方向; b.循环执行,直到按E s c键退出; c.没有按键的情况下,循环执行。 如果没有食物,随机出现食物;食物的随机出现要确保它的位置在10的倍数位置上,因为蛇的坐标都是以10为模的;如果有食物,则显示食物,蛇

C语言贪吃蛇源程序代码双人对抗

C语言贪吃蛇源程序代码双人对抗 #include <conio.h> #include <dos.h> #include <graphics.h> #include <stdlib.h> #include <bios.h> #include <time.h> #include <malloc.h> #define LEFT 100 #define TOP 30 #define RIGHT 538 #define BOTTOM 468 #define SIZE 20 #define SL 100 /*SL表示产生食物的个数*/ typedef struct Snake/*表示蛇的结点*/ { int bx,by; struct Snake *next; }Snake,*SnakeList; SnakeList createsnake(int cx,int cy)/*创建一个蛇头。*/ { SnakeList l; l=(SnakeList)malloc(sizeof(Snake)); l->next=NULL; l->bx=cx; l->by=cy; return l; } void paintsnake(SnakeList l,int scoler,int tcoler)/*输出蛇身的函数,也可作为消去蛇身的函数。*/ { SnakeList p; int x,y; p=l; setfillstyle(SOLID_FILL,scoler); for(;p->next;)

C语言课程设计报告——贪吃蛇源程序

课程设计(小游戏贪吃蛇的程序设计报告) 设计人:刘兵飞 班级:计11-1 学号:21号 2011年12月28号

目录一:概述 1:研究背景及意义 2:设计的任务与需要知识点3:具体完成设计内容 二:需求分析 1:功能需求 2:操作方法 三:总体设计 1:模块划分 2:数据结构设计 四:详细设计 1:主空摸块设计 2:绘制游戏界面 3:游戏的具体过程 4:游戏的结束处理 5:显示排行榜信息模块 五:程序的调试与测试1:动画与音乐同步 2:蛇的运行 3:终止程序 六:结论 七::结束语 八:程序清单 九:参考文献

一.概述 本课程设计以软件工程方法为指导,采用了结构化,模块化的程序设计方法,以C语言技术为基础,使用Turbo C++3.0为主要开发工具,对贪吃蛇游戏进行了需求分析,总体设计,详细设计,最终完成系统的实现与测试。 1.1 研究的背景及意义 随着社会的发展,人们生活的节奏日益加快,越来越多的人加入了全球化的世界。人们不再拘泥与一小块天地,加班,出差成了现代人不可避免的公务。而此时一款可以随时随地娱乐的游戏成为了人们的需要。此次课程设计完成的贪吃蛇小游戏,正是为了满足上述需求而设计出来的。贪吃蛇游戏虽小,却设计诸多的知识点。通过开发贪吃蛇游戏系统,可使读者初步了解使用软件工程的和那个发,技术和工具开发软件的过程,进一步掌握结构化,模块化的程序设计方法和步骤,进一步掌握总体数据结构设计,模块划分方法,掌握局部变量,全局变量,结构体,共用体,数组,指针,文件等数据结构的使用方法,掌握图形,声音,随机数等多种库函数的使用方法,学习动画,音乐,窗口,菜单,键盘等多项编程技术,进一步学会软件调试,测试,组装等软件测试方法,为后续课程的学习和将来实际软件开发打下坚实的基础。 1.2 设计的任务和需要的知识点 1.2.1 课程设计主要完成的任务 1). 通过编写“贪吃蛇游戏”程序,掌握结构化,模块块化程序设计的思想,培养解决实际问题的能力。 2) 有同步播放动画,声音效果。 3) 设计好数组元素与蛇,食物的对应关系。 4) 随机产生食物。 5) 有分数统计,排行榜,分数存储等功能。 通过此次课程设计,希望使读者能更深入的理解和掌握课程教学中的基本概念,培养读者应用基本技术解决实际问题的能力,从而进一步提高分析问题和解决问题的能力。 1.2.2需要掌握和运用的知识点 1.2.3本次课程设计需要掌握和运用如下的知识点: 1) 数组的应用。 2) 全局变量的使用。 3) 按键处理。 4)结构体的应用。 5)图形,音乐和动画的有关知识。 6)随即函数的使用。 7)文件的基本出操作。

vc贪吃蛇c语言代码

#include "stdio.h" #include "stdio.h" #include "windows.h" #include "time.h" #include "setjmp.h" #define MAXNOD 500 #define UP 1 #define DOWN -1 #define LEFT -2 #define RIGHT 2 #define YES 1 #define NO 0 jmp_buf retry; typedef struct{ int x; int y; int status; }Food; typedef struct { int *px; int *py; int direction; int nodlen; int score; }Snack; int gotoxy(int x, int y) { COORD cd; cd.X = x; cd.Y = y; return SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),cd); } void initialization(Snack *pss) { system("color 0e"); pss->px=(int *)malloc(MAXNOD*sizeof(int)); pss->py=(int *)malloc(MAXNOD*sizeof(int)); memset(pss->px,0,MAXNOD); memset(pss->py,0,MAXNOD);

pss->px[0]=0;pss->py[0]=0; pss->px[1]=1;pss->py[1]=0; pss->direction=RIGHT; pss->nodlen=2; pss->score=0; } void getscoresys(Snack scr) { gotoxy(68,7); cprintf("score: %d",scr.score); } int ctrltoi(char ctr) { switch(ctr) { case 'w': return UP; case 's': return DOWN; case 'a': return LEFT; case 'd': return RIGHT ; } } void boundary() { int cnt,y; gotoxy(15,3); for (cnt=0;cnt<45;cnt++) { cprintf("%c",4); } for (y=4;y<20;y++) { gotoxy(15,y); cprintf("%c",219); gotoxy(59,y); cprintf("%c",219); }

C语言课程设计参考题目及写作要求

C语言课程设计参考设计题目 1、学生信息管理 (1)问题描述 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功能: ●系统以菜单方式工作 ●学生信息录入功能(学生信息用文件保存)---输入 ●学生信息浏览功能——输出 ●查询、排序功能——算法 1、按学号查询 2、按姓名查询 ●学生信息的删除与修改(可选项) (2)功能要求 ●界面简单明了; ●有一定的容错能力,比如输入的成绩不在0~100之间,就提示不合法,要求重新 输入; ●最好用链表的方式实现。 (3)算法分析 首先,一个学生包括这么多的属性,应该考虑定义一个结构,其次,我们应该考虑数据的存储形式:是定义一个数组来存储,还是定义一个链表呢?在这里假如我们以数组的方式来存储,当然可以,但是我们知道,假如我们定义一个数组的话,我们首先必须知道学生人数大概是多少,以便我们确定数组的大小,但是题目中没有给出,而且题目要求中有大量的删除、插入操作,所以用链表的方式比较方便。 对于菜单的实现,其实也比较简单,首先我们用printf语句把程序的功能列出来,然后等待用户输入而执行不同的函数,执行完了一个功能后又回到菜单。文件的读写操作大家参照书中的有关文件的章节。 2、学生综合测评系统 每个学生的信息为:学号、姓名、性别、家庭住址、联系电话、语文、数学、外语三门单科成绩、考试平均成绩、考试名次、同学互评分、品德成绩、任课教师评分、综合测评总分、综合测评名次。考试平均成绩、同学互评分、品德成绩、任课教师评分分别占综合测评总分的60%,10%,10%,20%。 A、学生信息处理 (1) 输入学生信息、学号、姓名、性别、家庭住址、联系电话,按学号以小到大的顺序存入文件中。 提示:学生信息可先输入到数组中,排序后可写到文件中。 (2) 插入(修改)同学信息: 提示:先输入将插入的同学信息,然后再打开源文件并建立新文件,把源文件和输入的信息合并到新文件中(保持按学号有序)若存在该同学则将新记录内容替换源内容, (3) 删除同学信息: 提示:输入将删除同学号,读出该同学信息,要求对此进行确认,以决定是否删除将删

贪吃蛇代码-C语言-VC++6.0

/*这是一个贪吃蛇代码,运行环境VC++6.0(亲测完美运行)*/ /*该程序在dos系统下运行,不需要graphics.h头文件*/ /*该程序由C语言小方贡献,谢谢您的支持*/ #include #include #include #include #include #include #define N 21 int apple[3]; char score[3]; char tail[3]; void gotoxy(int x, int y) //输出坐标 { COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); } void color(int b) //颜色函数 { HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ; SetConsoleTextAttribute(hConsole,b) ; } int Block(char head[2]) //判断出界 { if ((head[0] < 1) || (head[0] > N) || (head[1] < 1) || (head[1] > N)) return 1; return 0; } int Eat(char snake[2]) //吃了苹果 { if ((snake[0] == apple[0]) && (snake[1] == apple[1])) { apple[0] = apple[1] = apple[2] = 0; gotoxy(N+44,10); color(13);

课程名称C语言课程设计

课程名称C语言课 程设计

北京化工大学北方学院 课程设计报告 课程名称 C语言课程设计 设计题目贪吃蛇游戏 专业、班级信工0902 学号 090 57 姓名苏灿 指导教师邵兰洁 设计时间 9月29日— 10月11日 年 10月 11 日1.设计目的

本课程设计的目的就是要经过一次集中的强化训练,使学生能及时巩固已学的知识,补充未学的但又必要的内容。进行课程设计目的在于加深对程序设计基础中基础理论和基本知识的理解,促进理论与实践的结合,进一步提高程序设计的能力。具体目的如下: 1.使学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。 2.培养学生综合运用所学知识独立完成课题的能力。 3.培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。 4.提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。 5.培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。 6.对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表示能力进行考核。 2.设计题目及要求 【1】设计题目贪吃蛇游戏 【2】要求

实现如下功能: 贪吃蛇按一个方向运行 判短是否撞到自己 是否撞墙 游戏结束 退出 【3】本程序最大优点是简单易行 综合应用数组、指针、结构体、文件等,对该设计题目进行设计和实现。 一、正文 1.计算法分析设 1.1 模块调用层次图 主函数 ↓ 图形驱动Init 画界面DrawK 游戏具体过程GamePlay 图形结束Close

贪吃蛇代码-C语言

/*这是一个贪吃蛇代码,运行环境VC++6.0,Dev-C也可*/ /*该程序由C语言小方贡献,谢谢您的支持*/ #include #include #include #include #include #include #define N 21 int apple[3]; char score[3]; char tail[3]; void gotoxy(int x, int y) //输出坐标 { COORD pos; pos.X = x; pos.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); } void color(int b) //颜色函数 { HANDLE hConsole = GetStdHandle((STD_OUTPUT_HANDLE)) ; SetConsoleTextAttribute(hConsole,b) ; } int Block(char head[2]) //判断出界 { if ((head[0] < 1) || (head[0] > N) || (head[1] < 1) || (head[1] > N)) return 1; return 0; } int Eat(char snake[2]) //吃了苹果 { if ((snake[0] == apple[0]) && (snake[1] == apple[1])) { apple[0] = apple[1] = apple[2] = 0; gotoxy(N+44,10); color(13); printf("%d",score[0]*10);

c语言贪吃蛇课程设计报告

c语言贪吃蛇课程设计报 告 Revised by Liu Jing on January 12, 2021

C语言课程设计报告 贪 吃 蛇 专业 学生姓名 班级 学号 完成日期 一、游戏规则需求 1、在打开程序后,出现选择界面,里面包含难度选择,其中难度选择能够使程序 出现相应的游戏难度。 2、开始游戏后,W A S D键控制贪吃蛇的移动方向。 3、当贪吃蛇向一个方向移动时,不能立刻向反方向移动。 4、贪吃蛇撞到的自己的身体或者撞到墙时,游戏结束,并输出“GAME OVER!”。 5、贪吃蛇吃到一个食物后,出现白色闪烁一次,身体随之增加一个单位长度。 二、所需数据结构分析 1、所需函数模块 void begin(); //登陆界面

void start(); //鼠标移动事件 void init(); // 初始化游戏 void setfoodcrd(); // 设置食物要出现的坐标 void showfood(); // 在相应的坐标画出食物 void snakemove(); // 移动蛇,实际就是改变蛇各节的坐标void judgeslod(); // 判断蛇是否撞墙或者撞到自己 void judgesef(); // 判断蛇是否吃到食物了 void showsnake(); // 在屏幕上画出蛇 void changeskdir(); // 接受用户输入,改变蛇的前进方向 void gameover(); // 游戏结束 2、蛇及食物数据结构 typedef struct // 定义一个结构体表示坐标 { int x; int y; }COOR; struct FOOD // 定义结构体,来存储食物的相关信息 {COOR crd; // 食物出现的坐标 int flag; // 食物的状态,1表示食物还没被吃,0表示食物被吃了}food; struct SNAKE // 定义结构体,来存储蛇的相关信息 { COOR crd[SIZEMAX]; // 保存蛇的每个结数的坐标,最多有100节

C语言课程设计--贪吃蛇游戏

课程设计报告 课程名称C语言课程设计 设计题目贪吃蛇游戏 2012 年10月11 日

1.设计目的 本课程设计的目的就是要通过一次集中的强化训练,使学生能及时巩固已学的知识,补充未学的但又必要的内容。进行课程设计目的在于加深对程序设计基础中基础理论和基本知识的理解,促进理论与实践的结合,进一步提高程序设计的能力。具体目的如下: 1.使学生更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。 2.培养学生综合运用所学知识独立完成课题的能力。 3.培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。 4.提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。 5.培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。 6.对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。 2.设计题目及要求 【1】设计题目贪吃蛇游戏 【2】要求 实现如下功能: 贪吃蛇按一个方向运行 判短是否撞到自己 是否撞墙 游戏结束 退出 【3】本程序最大优点是简单易行 综合应用数组、指针、结构体、文件等,对该设计题目进行设计和实现。 一、正文

1.计算法分析设 1.1 模块调用层次图 主函数 ↓ 图形驱动Init 画界面DrawK 游戏具体过程GamePlay 图形结束Close ↓ 游戏结束GameOver 输出成绩PrScore 【2】系统模块调用层次图 Main Save insert change renew statistics load

完整版C语言贪吃蛇设计思路和代码详解

完整版C语言贪吃蛇设计思路和代码详解到了本章,你已经学完了大部分C语言的基础知识,详细讲解贪吃蛇代码的条件就具备了。 本教程教你编写的贪吃蛇不依赖TC环境,不依赖任何第三方库,可以在VC 6.0、VS等常见IDE中编译通过,请看下图: 更多效果图请查看:游戏初始化、游戏进行中、游戏结束。 请大家先把贪吃蛇的源码下载下来浏览一下,我们再具体分析,这样将会有更好的效果。 贪吃蛇源代码下载:提取密码:81qm 贪吃蛇设计思路 上图中的红色空心方框(?)表示边框,是贪吃蛇的边界,贪吃蛇不能碰到它,否则就“死掉”,游戏结束。绿色实心方框(?)表示贪吃蛇的活动范围,贪吃蛇可以自由移动,食物(苹果)也会随机出现在这个区域。我们不妨将贪吃蛇的活动范围称为“贪吃蛇地图”,而加上边框就称为“全局地图”。 我们需要记录地图中每一个节点的信息,包括: 位置:也就是第几行几列; 类型:这个节点出现的是贪吃蛇、食物、边框,还是什么都没有(绿色的背景)。 索引:也就是数组下标,稍后会说明是什么意思。 所以需要定义一个结构体二维数组: struct{ char type; int index;

}globalMap[MAXWIDTH][MAXHEIGHT]; 用一维下标和二维下标表示位置;用 type 表示类型,不同的类型用不同的数字代表;用 index 表示索引。 直观上讲,应该将 type 定义为int类型,不过int占用四个字节,而节点类型的取值范围非常有限,一个字节就足够了,所以为了节省内存才定义为char类型。 同时,再建立一个足够大的一维数组,让贪吃蛇在数组内活动: struct{ int x; int y; } snakeMap[ (MAXWIDTH-2)*(MAXHEIGHT-2) ] x、y 表示行和列,也就是 globalMap 数组的两个下标。globalMap 数组中的索引 index 就是 snakeMap 数组的下标。 globalMap 表示了所有节点的信息,而 snakeMap 只表示了贪吃蛇的活动区域。通过 snakeMap 可以定位 globalMap 中的元素,反过来通过 globalMap 也可以找到 snakeMap 中的元素。请看下图: 图1:globalMap 和 snakeMap 的初始对应关系 贪吃蛇向左移动时,headerIndex 指向 404,tailIndex指向 406。 为什么设计的这么晦涩和复杂呢,因为这样设计有以下几个好 处: 贪吃蛇移动时不用处理所有节点,只要添加蛇头、删除蛇尾、重建 globalMap 和 snakeMap 的对应关系就可以; 随机生成食物一次就可以成功,不用担心食物会占用边框或贪吃蛇的位置; 贪吃蛇移动时,不用遍历数组就可以知道是否与自身相撞。

相关主题
文本预览
相关文档 最新文档