贪吃蛇游戏程序说明2

合集下载

C语言贪吃蛇程序设计说明书

C语言贪吃蛇程序设计说明书

C语言贪吃蛇程序设计说明书题目:贪吃蛇游戏学校: 系别: 专业班级: 姓名: 学号: 指导老师: 日期:一、设计题目:贪吃蛇是一款经典的休闲游戏,一条蛇在密闭的围墙内,随机出现一个食物,通过控制方向键操作小蛇不停的朝着食物前进,直到吃掉食物。

每吃一个食物,小蛇都会长长一截,随之难度增大;当小蛇头撞到墙或自己时,小蛇死亡。

二、功能设计:本游戏要求实现以下几个功能:(1) 用上、下、左、右键控制游戏区蛇的运动方向,使之吃食而使身体变长;(2) 用户可以调节蛇的运行速度来选择不同的难度;(3) 游戏分多个难度级别;(4) 用户可自选颜色;(5) 记录成绩前五名的游戏玩家;(6) 增加背景音乐;(7) 提高障碍物和游戏级别。

三、程序模块图:贪吃蛇游戏初画控设帮始图制置助模模模模化块块块块墙蛇食移食死变成等音体身物动物亡长绩级效2四、算法流程图:开始初始化界面和蛇身放置食物获取按键开始运动碰到边界是否否蛇吃到食是蛇长大蛇死亡是继续否结束3五、函数原型与功能 1.主函数:void main()启动程序,触动其他函数。

2.初始化:void init ()设置背景框大小、蛇体初始值,随机产生食物。

3.随机产生食物:void setfoodcrd()设置食物生成坐标,0表示食物被吃。

4.画食物:void showfood()用矩形框来画食物5.画蛇:void showsnake()根据蛇的坐标和节数,循环用矩形框来画蛇。

6.蛇移动:void snakemove() 根据按键,重设坐标7.改变蛇的方向:void changeskdir()响应用户的运动方向8.判断蛇是否死亡:void judgeslod判断蛇是否碰到自己或墙。

9.判断蛇是否吃到食物:void judgefood()判断是否吃到食物,吃食后变0,蛇增长一节。

10.结束游戏:void gameover()结束话语,并执行下一步。

六、基本代码#include<graphics.h> #include<conio.h>#include<stdio.h>#pragma comment(lib,"Winmm.lib")#include "MyTimer.h" #define SIZEMAX 100 /*蛇最大长度*/ #define SPEED 100 /*初始速度*/ #define len 20 /*蛇宽度*/#define lm 10 /*蛇每次移动距离*/ #define initlen 600 /*初始化窗口正方形的长度*/ #define Min_snakelen 2 /*蛇的最小长度*/typedef struct {int x,y;}DIR;int snakelen=Min_snakelen; /*蛇的长度*/4int isfood=1; /*食物状态*/ int isover=0; /*游戏状态*/int ispause=1; /*暂停状态*/int ismusic=1; /*音乐播放状态*/ char dir; /*记录蛇运动的方向*/ char c='d';DIR snake[500],food; /*定义蛇节点和食物的类型*/ int speed=SPEED;void drawmap() /*画地图函数*/ {IMAGE img;char str[10];loadimage(&img,"贪吃蛇.jpg"); /*游戏界面*/putimage(0,0,&img);loadimage(&img,"7.jpg"); /*侧栏提示*/putimage(600,0,&img);sprintf(str,"%d",snakelen);setfont(30,0,"宋体");setbkmode(TRANSPARENT);outtextxy(620,10,"操作说明:");setfont(20,0,"宋体");outtextxy(615,50,"awsd控制方向键");outtextxy(615,80,"p键暂停");outtextxy(615,110,"o键继续");outtextxy(615,200,"esc键退出");outtextxy(615,140,"l键暂停音乐");outtextxy(615,170,"k键继续播放");outtextxy(730,250,str);outtextxy(620,250,"蛇当前长度");}void init() /*初始化蛇函数*/ {int i;IMAGE img;snake[0].x=9*len+lm;snake[0].y=4*len+lm;loadimage(&img,"1.jpg");putimage(snake[0].x-lm,snake[0].y-lm,&img); for(i=1;i<snakelen;i++){snake[i].x=len*(9-i)+lm;snake[i].y=len*4+lm;5loadimage(&img, "2.jpg");putimage(snake[i].x-lm,snake[i].y-lm, &img); }}void showsnake() /*画蛇函数*/ {int i;IMAGE img;loadimage(&img, "1.jpg");putimage(snake[0].x-lm,snake[0].y-lm , &img);loadimage(&img, "2.jpg");for(i=1;i<snakelen;i++)putimage(snake[i].x-lm,snake[i].y-lm, &img); }void snakemove() /*画动蛇函数*/ {int i;int mx=snake[0].x;int my=snake[0].y;switch(dir){case 'a':mx-=len;break;case 'd':mx+=len;break;case 'w':my-=len;break;case 's':my+=len;break;default:break;}for(i=snakelen-1;i>=0;i--){snake[i+1].x=snake[i].x;snake[i+1].y=snake[i].y;}snake[0].x=mx;snake[0].y=my;showsnake();}int ceshiover() /*检测游戏结束函数*/ {int i;if(snake[0].x<0||snake[0].x>30*len-lm||snake[0].y<0||snake[0].y>30*len-lm)return 1;for(i=1;i<snakelen;i++)6{if(snake[0].x==snake[i].x&&snake[0].y==snake[i].y) return 1;}return 0;}int foodinsnake() /*检测食物是否在蛇上函数*/ {for(int i=0;i<snakelen;i++)if(food.x==snake[i].x&&food.y==snake[i].y)return 1;elsereturn 0;}void showfood() /*画食物函数*/{IMAGE img;do{food.x=(rand()%30)*len+lm;food.y=(rand()%30)*len+lm;}while(foodinsnake());loadimage(&img, "3.jpg");putimage(food.x-lm,food.y-lm , &img);isfood=0;}void kmusic(){if(ismusic==0)mciSendString("pause mymusic",NULL,0,NULL);if(ismusic==1)mciSendString("resume mymusic",NULL,0,NULL);}void playbkmusic() /*播放背景音乐函数*/{mciSendString("open 超级玛丽.mp3 alias mymusic", NULL, 0, NULL); mciSendString("play mymusic repeat", NULL, 0, NULL);}void playgame() /*玩游戏函数*/{c='d'; //蛇开始向右移动isover=0;7snakelen=Min_snakelen;dir='d';IMAGE img;MyTimer t; //定义精确延时对象int T=200; // 延长时间drawmap(); //画游戏地图init(); //画小蛇初始位置while(!isover){if(ispause){snakemove();FlushBatchDraw(); //批量绘图EndBatchDraw(); //结束批量绘图if(snake[0].x==food.x&&snake[0].y==food.y){ snakelen++;isfood=1;}if(isfood)showfood();if(snakelen<35)T=200-3*snakelen;t.Sleep(T);BeginBatchDraw(); // 开始批量绘图模式,防止闪烁问题drawmap();loadimage(&img, "3.jpg"); // 加载食物图片putimage(food.x-lm,food.y-lm , &img);};//按键控制if(kbhit())c=getch();switch(c){case 'a':if(dir!='d'){dir=c;}break;case 'd':if(dir!='a'){dir=c;}break;case 'w':if(dir!='s'){8dir=c;}break;case 's':if(dir!='w'){dir=c;}break;case 27: exit(0); break; //游戏退出case 'p': ispause=0;break; //p暂停case 'o': ispause=1;break; //o继续游戏case 'l': ismusic=0;break; //l暂停音乐case 'k': ismusic=1;break; //k继续播放default:break;}kmusic(); //音乐控制播放//判断游戏结束if(ceshiover())isover=1;//判断是否重新再来HWND wnd = GetHWnd(); //获取窗口句柄if(isover)if (MessageBox(wnd, "游戏结束。

幼儿园贪吃蛇益智游戏教案详细介绍

幼儿园贪吃蛇益智游戏教案详细介绍

幼儿园贪吃蛇益智游戏教案详细介绍1. 概述幼儿园教育是孩子成长过程中至关重要的一部分,而益智游戏在幼儿园教学中扮演着重要的角色。

而其中,贪吃蛇益智游戏因其简单易懂的规则和寓教于乐的特点,被广泛应用于幼儿园教学中。

本文将针对幼儿园贪吃蛇益智游戏进行详细介绍和教案共享,帮助老师更好地利用这一游戏进行教学。

2. 游戏规则幼儿园贪吃蛇益智游戏是一款在幼儿园教学中广泛使用的游戏。

游戏规则简单:孩子扮演一条小蛇,通过操作键控制小蛇的方向,吃食物并长大,但不能碰到墙壁或者自己的身体。

这款游戏不仅能培养孩子的操作能力,还可以培养孩子对空间的感知能力,并且在游戏过程中,孩子还会学会控制自己的情绪和思维。

3. 游戏目的幼儿园贪吃蛇益智游戏的目的在于通过游戏的方式引导幼儿学习,让他们在快乐的氛围中掌握知识,培养他们的逻辑思维能力和动手能力。

通过这款游戏,孩子们能够在愉快的氛围中学习,培养他们的观察力和逻辑思维能力,使得教学更加生动有趣,并且能够提高孩子们的学习积极性。

4. 游戏教学在教学中,老师可以结合幼儿园的实际情况,设计不同的游戏场景。

可以设计成果园中的一颗果树,小蛇需要吃水果变长,同时要躲避掉不断移动的障碍物。

老师可以利用这些游戏场景引导幼儿学习有关水果、形状、颜色等知识。

通过这样的游戏教学,能够让孩子们在快乐的氛围中学到更多的知识,增强他们的记忆力和学习能力。

5. 个人观点作为一名教学者,我个人非常看重幼儿园益智游戏在教学中的应用。

而对于幼儿园贪吃蛇益智游戏,我认为它不仅能够让孩子们从中获得乐趣,还能够在游戏过程中培养他们的思维能力和动手能力。

通过这样的方式,能够有效提高孩子们的学习兴趣,让他们在愉快的氛围中掌握更多的知识。

6. 总结幼儿园贪吃蛇益智游戏作为一款益智游戏,在幼儿园教育中起着重要的作用。

通过游戏的方式,能够培养孩子们的思维能力和动手能力,让他们在快乐的氛围中学习知识。

老师们可以结合实际情况,设计场景化的教学内容,让幼儿在游戏中学习,享受成长的乐趣。

_贪吃蛇游戏_说明书

_贪吃蛇游戏_说明书

湖南工业大学课程设计任务书2012 — 2013 学年第一学期计算机与通信学院学院(系、部)通信工程专业班级姓名学号课程名称:面向对象程序设计设计题目:贪吃蛇游戏完成期限:自2013 年 1 月7 日至2013 年 1 月13 日共 1 周内容及任务一、设计的主要技术参数(1) 游戏中共有贪吃蛇的长度和走向;(2) 随机生成食物(3) 通过响应定时器来实时更新。

二、设计任务(内容)(1) 随机生成贪吃蛇和食物;(2) 控制贪吃蛇的走动;(3) 食物消除判定,已经碰壁判定。

三、设计工作量一周进度安排起止日期工作内容1月7日-1月7日综合我们所学的知识,讨论设计的课题,制定用户需求。

1月8日-1月8日针对用户需求进行组员间的分工。

进一步熟悉自己的模块。

1月8日-1月12日一起完成开发,查找可能的漏洞,修改程序,直至完成程序。

1月13日-1月13日完成设计文档和课程设计说明书。

主要参考资料1.谭浩强.C++面向对象程序设计[M].北京:清华大学出版社,2006.2. Visual C++从入门到精通[M].北京:人民邮电出版社,2010指导教师(签字):年月日系(教研室)主任(签字):年月日面向对象程序设计设计说明书贪吃蛇游戏起止日期:2013 年1 月7 日至2013 年1 月13 日学生姓名班级学号成绩指导教师(签字)计算机与通信学院2013年1 月13日目录一、需求分析 (4)1.1、选题 (4)1.2、功能 (4)1.3、重要的MFC (4)二、概要设计 (4)2.1、设计思路 (4)2.2、程序框图 (5)三、详细设计 (6)四、调试分析 (8)五、用户使用说明 (8)六、测试结果 (9)七、附录或参考资料 (10)一、需求分析1.1、选题接到课程设计任务后,我们对曾经非常感兴趣的几款经典小游戏作了分析并筛选,然后发现使用MFC类库都可以完成这些游戏的编译,但是我们刚刚学习,还不能完全掌握MFC类的使用和复杂的算法,但是我们相信通过一个简单的贪吃蛇游戏可以让我们对MFC得到充分的锻炼。

贪吃蛇设计说明书

贪吃蛇设计说明书

贪吃蛇设计说明书贪吃蛇设计说明书开发小组成员:目录1.需求陈述 (3)2.软件结构 (3)2.1用例图 (3)2.2类图 (4)2.3状态图---------------------------------------------------------------4 3.程序描述 (4)3.1功能 (5)3.2性能 (5)3.3输入项目 (5)3.4输出项目 (6)3.5算法 (6)3.6程序逻辑 (6)4.测试要点-----------------------------------------75.对象设计-------------------------------------------------------------------71.需求陈述1.用户需要开发一款命名为贪吃蛇的休闲小游戏2.开始游戏时,存在一条向右运动的小蛇和蛇需要吃掉的豆3.用户通过键盘的“上下左右”键控制小蛇分别向“上下左右”运动来吃掉豆,同时增加自身的长度4.小蛇吃掉游戏规定数量的豆后,游戏结束5.游戏分为初级、中级、高级6.小蛇不能碰到边界7.小蛇自身不能碰撞8.游戏可以暂停和重新开始9.游戏完成后计算所得分数10.游戏在任何时候都可以退出2.软件结构1.用例图2.类图3.状态图3.程序描述3.1功能小蛇可以通过方向键进行方向的变化。

屏幕上随机的出现豆,贪吃蛇在运动的过程中蛇头可以吃掉出现的的豆。

吃掉豆后,蛇的身体会增长一节。

当蛇的身体碰到四周的墙壁或者是自己的身体时,游戏会结束。

并且,在屏幕的上方有一个分数牌显示,游戏开始时分数为0,每当蛇吃掉一个豆,分数会增加10分。

而在游戏的过程中,玩家可以按菜单上的退出键或点击界面的关闭按钮退出游戏。

3.2性能本款游戏在界面设计上清晰明了、美观大方;在操作上简单、易懂。

有效率高,不易出错的优点。

本游戏着重于娱乐大众,并且有锻炼反应速度的特点。

3.3输入项目1)用户在界面菜单的操作有点击“开始”、“暂停”、“结束”、“重新开始”、“初级”、“中级”、“高级”。

c语言贪吃蛇小游戏程序课程设计

c语言贪吃蛇小游戏程序课程设计

学生课程设计报告一、课程设计内容贪吃蛇小游戏程序设计(贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记10分,接着又出现食物,等待蛇来吃,如果蛇在移动中身体交叉蛇头撞倒自己身体则游戏结束。

)二、技术路线使用VC++6.0作为开发环境,采用控制台的形式完成整个游戏的开发,没有用到MFC。

加入了pcc32.h的头文件及库文件,用于对控制台打印效果的控制。

同时也加入了PlaySound()函数,实现了对菜单选择,游戏开始,游戏结束的音效控制。

游戏栏和输出栏的同时打印,数据的更新打印效果,没有采用双线程的方法实现。

接收用户键盘输入信息,实现游戏暂停,重新开始,菜单选择和进入菜单。

三、设计与实现1.游戏基本功能:游戏有开始菜单界面,并有开始游戏,游戏帮助,关于游戏,退出游戏四个选项游戏初始化后,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个方向键控制蛇移动,蛇在移动过程中撞到墙壁将不会死亡,而是穿过围墙继续行进,但是如果蛇身体交叉蛇头撞到自己的身体,则游戏结束。

同时,游戏过程中可暂停游戏,并有积分系统,且积分每满一定值,蛇的运行速度也会逐步增加。

2.函数定义和声明(1)头文件#include<iostream>#include<windows.h>#include<conio.h>#include<time.h>#include<stdlib.h>#include "mmsystem.h" #pragma comment (lib,"winmm.lib")#include"pcc32.h"#pragma comment(lib, "pcc32_vc6.lib") using namespace std; #define UP 72//定义上下左右常量#define DOWN 80#define LEFT 75#define RIGHT 77#define ESC 27#define SPACE 32//空格#define ENTER 13//回车(2)函数声明void GamePrint();//游戏开始画面函数void Gameinit();//游戏初始化函数void Sweep_Screem();//清屏函数void Gotoxy(int , int); //光标移动函数void Hid_Cursor();//光标隐藏函数void Snake_Move();//蛇运动函数int Create_Food();//食物产生函数void Pwall();//画墙函数void Key();//键盘操作和处理函数void Hit_Wall();//判断是否撞墙void Eat_Itself();//判断是否咬到自己void Whether_Eat();//判断蛇是否吃到食物void GameRun();//游戏运行函数void SurFace();//开始菜单界面void GameOver(); //游戏结束判断函数void Pause();//游戏暂停函数void MyCount1();//统计边栏,用来做提示void MyCount2();//统计边栏,用来做一些统计void Menu( int );//开始界面void Inti_Data();//初始化数据(3)变量声明int X, Y;//食物坐标int Map[79][24]={{0}};//地图尺寸,其实有食物记为1int over = 0;//用来标记游戏结束int score = 0;//记录分数int speed = 130;//记录速度int ColoArray[15]={15,1,2,3,4,5,6,7,8,9,10,11,12,13,14} ;//自己定义的用来控制颜色的数组int length = 3;//初始化蛇的长度为3int Key_Menu;//开始菜单界面用的零时按键3.主函数int main()int main() //主函数{START:Inti_Data();fixConsoleSize(18,15);Hid_Cursor();SurFace();PlaySound(TEXT("m22.wav"), NULL, SND_FILENAME | SND_ASYNC );fixConsoleSize(105,25);GamePrint();Gameinit();GameRun();while(over) //如果游戏结束了,是否重新开始。

贪吃蛇游戏的说明

贪吃蛇游戏的说明

贪吃蛇游戏说明一、游戏简介主要功能:(1)通过游戏设置的等级设置进入游戏,在游戏过程中可以选择速度快慢程度来选择游戏的难易度。

(2)可以选择有边界阻碍和无边界阻碍的。

界面功能:(3)游戏的的窗口菜单是自定义的,简单设计了几个菜单项,方便选择开始游戏,离开游戏,速度快慢,有无边界。

(4)在游戏界面的右下方有一个显示当前的得分情况,方便便用户来了解自己的战绩。

操作功能:其中游戏的主操作键是↓↑→←。

不仅可以通过菜单来进行操作,还可以通过快捷键开操作(crtrl+N --- New Game,ctrl+Q--- Exit)二、实现步骤1、设置30×40的界面和颜色,设置控制台窗口标题,然后自定义菜单2、设置一些主要的功能,游戏的开始,离开,难易度和有无墙壁(代码参考)3、设置蛇和豆子的位置大小和颜色4、在设置时考虑蛇移动的方向,通过在蛇头没有撞到自身和边界的前提下,判断蛇是否吃到食物,若吃到了食物,则需要将吃到的食物作为蛇头,否则需要在原来蛇头的下一个坐标作为蛇头,而蛇尾需要被去除,同时加分。

三、游戏截图(无墙壁)(有墙壁)四、代码(其中标记的地方是参考的)function snake(cmd)global SNAKE WALL LEVEL BOARD DIRECTION RUNNING FOOD BONUS PAUSEif ~nargincmd = 'init';endif ~(ischar(cmd)||isscalar(cmd))return;endswitch cmdcase'init'scrsz = get(0,'ScreenSize');f = figure('Name','Snake',...'Numbertitle','off',...'Menubar','none',...'Color',[.95 .95 .95],...'DoubleBuffer','on',...'Position',[(scrsz(3)-400)/2 (scrsz(4)-300)/2 400 300],...'Colormap',[.1 .71 0;.3 .4 .4;0 0 0;1 1 0],...'CloseRequestFcn',sprintf('%s(''Stop'');closereq;',mfilename),...'KeyPressFcn',sprintf('%s(double(get(gcbf,''Currentcharacter'')))',mf ilename));FileMenu = uimenu(f,'Label','&File');uimenu(FileMenu,'Label','NewGame','Accelerator','N','Callback',sprintf('%s(''NewGame'')',mfilenam e));uimenu(FileMenu,'Label','Exit','Accelerator','Q','Separator','on','Ca llback',sprintf('%s(''Stop'');closereq',mfilename));LevelMenu = uimenu(f,'Label','&Level');uimenu(LevelMenu,'Label','1','Callback',sprintf('%s(''Level'')',mfile name))uimenu(LevelMenu,'Label','2','Callback',sprintf('%s(''Level'')',mfile name))uimenu(LevelMenu,'Label','3','Callback',sprintf('%s(''Level'')',mfile name))uimenu(LevelMenu,'Label','4','Callback',sprintf('%s(''Level'')',mfile name),'checked','on')uimenu(LevelMenu,'Label','5','Callback',sprintf('%s(''Level'')',mfile name))WallMenu = uimenu(f,'Label','&Wall');uimenu(WallMenu,'Label','Nowall','Callback',sprintf('%s(''Wall'')',mfilename),'checked','on')uimenu(WallMenu,'Label','Wall','Callback',sprintf('%s(''Wall'')',mfil ename))% Create The axesaxes('Units','normalized',...'Position', [0 0 1 1],...'Visible','off',...'DrawMode','fast',...'NextPlot','replace');% Add the boardBOARD = image(getTitle,'CDataMapping','scaled');axis imageset(gca,...'XTick',NaN,...'YTick',NaN)text(40,30,'0',...'FontUnits','normalized', ...'FontSize',0.03, ...'FontName','FixedWidth',...'FontWeight','bold',...'Color',[1 1 1],...'VerticalAlignment','baseline', ...'HorizontalAlignment','right',...'Tag','Score');SNAKE = [14,20;14,19;14,18;14,17;14,16];WALL = zeros(30,40);LEVEL = 4;case 28 % leftif SNAKE(2,2)~=mod(SNAKE(1,2)-2,40)+1DIRECTION = cmd;endcase 29 % rightif SNAKE(2,2)~=mod(SNAKE(1,2),40)+1DIRECTION = cmd;endcase 30 % upif SNAKE(2,1)~=mod(SNAKE(1,1)-2,30)+1DIRECTION = cmd;endcase 31 % downif SNAKE(2,1)~=mod(SNAKE(1,1),30)+1DIRECTION = cmd;endcase'Level'% Change of Levelset(get(get(gcbo,'Parent'),'Children'),'checked','off') set(gcbo,'checked','on')LEVEL = length(get(gcbo,'Label'));case'Wall'% Change of Wallset(get(get(gcbo,'Parent'),'Children'),'checked','off') set(gcbo,'checked','on')WALL = zeros(30,40);switch get(gcbo,'Label')case'No wall'case'Wall'WALL([1 30],:) = 1;WALL(:,[1 40]) = 1;endfeval(mfilename,'Stop')case'ShowScore'% Change of Show Scoreswitch get(gcbo,'checked')case'on'set(gcbo,'checked','off')set(findobj(gcbf,'Tag','Score'),'Visible','off') case'off'set(gcbo,'checked','on')set(findobj(gcbf,'Tag','Score'),'Visible','on') endcase'NewGame'set(findobj(gcbf,'Tag','Score'),'String','0')SNAKE = [14,20;14,19;14,18;14,17;14,16];DIRECTION = 29; % rightBONUS = 0;PAUSE = false;feval(mfilename,'Food')feval(mfilename,'Start')case'Start'% Start GameRUNNING = true;bonusCounter = 0;foodCounter = 0;while(RUNNING)if ~PAUSESNAKE = circshift(SNAKE,1);SNAKE(1,:) = SNAKE(2,:);switch DIRECTIONcase 28 % leftSNAKE(1,2) = mod(SNAKE(1,2)-2,40)+1;case 29 % rightSNAKE(1,2) = mod(SNAKE(1,2),40)+1;case 30 % upSNAKE(1,1) = mod(SNAKE(1,1)-2,30)+1;case 31 % downSNAKE(1,1) = mod(SNAKE(1,1),30)+1;end% Check if snake hits any barrierif WALL(SNAKE(1,1),SNAKE(1,2)) || ...sum(ismember(SNAKE(2:end,1),SNAKE(1,1))+... ismember(SNAKE(2:end,2),SNAKE(1,2))==2)pause(.3)delete(findobj(gcbf,'Tag','Bonus'))feval(mfilename,'Stop')set(BOARD,'CData',getGameOver)else% Check if snake eats bonusif isequal(SNAKE(1,:),BONUS)% Update scorescorehandle = findobj(gcbf,'Tag','Score'); set(scorehandle,'String',...num2str(LEVEL*ceil(bonusCounter/3)+... str2double(get(scorehandle,'String')))) bonusCounter = 1;endif BONUSbonusCounter = bonusCounter-1;if bonusCounter<=0delete(findobj(gcbf,'Tag','Bonus'))BONUS = 0;endend% Check if snake eats foodif isequal(SNAKE(1,:),FOOD)% Snake Grows!SNAKE(end+1,:) = SNAKE(end,:);% Update scorescorehandle = findobj(gcbf,'Tag','Score'); set(scorehandle,'String',...num2str(LEVEL+str2double(get(scorehandle,'String'))))% Spawn new foodfeval(mfilename,'Food')if ~BONUS % only update if no bonus existbonusCounter = bonusCounter+15;foodCounter = foodCounter+1;endif foodCounter==4 % Spawn new bonus every fourth Food feval(mfilename,'Bonus')foodCounter = 0;endendfeval(mfilename,'DrawBoard')endendpause(.3/LEVEL)endcase {112 32} % Pause GamePAUSE=~PAUSE;if PAUSE && RUNNINGset(BOARD,'CData',getPause)endcase'Stop'% Stop GameRUNNING = false;set(BOARD,'CData',getTitle)case'Food'% Put food onto game boardCData = WALL;for i=1:size(SNAKE,1)CData(SNAKE(i,1),SNAKE(i,2)) = 1;endind = find(CData'==0);ind = ind(ceil(rand*length(ind)));FOOD = [ceil(ind/40) mod(ind-1,40)+1];case'Bonus'% Put bonus onto game boarddelete(findobj(gcbf,'Tag','Bonus'))CData = WALL;for i=1:size(SNAKE,1)CData(SNAKE(i,1),SNAKE(i,2)) = 1;endCData(FOOD(1,1),FOOD(1,2)) = 1;ind = find(CData'==0);ind = ind(ceil(rand*length(ind)));BONUS = [ceil(ind/40) mod(ind-1,40)+1];text(BONUS(2),BONUS(1),'\heartsuit',...'Color',[1 0 0],...'FontUnits','normalized',...'FontSize',.065,...'HorizontalAlignment','Center',...'VerticalAlignment','Middle',...'Tag','Bonus')case'DrawBoard'% Draw the Game BoardCData = WALL;for i=1:size(SNAKE,1)CData(SNAKE(i,1),SNAKE(i,2)) = 2;endCData(FOOD(1),FOOD(2)) = 4;set(BOARD,'CData',CData)endfunction [ico,map]=getIcon()% create simple icon matrixico = ones(13)*3;ico(:,1:4:13) = 1;ico(1:4:13,:) = 1;ico(6:8,6:8) = 2;ico(6:8,10:12) = 2;ico(10:12,10:12) = 2;map = [0 0 0;.5 .5 .6;[148 182 166]/255;];function title = getTitle()title = zeros(30,40);title([42 43 47 48 72 73 77 78 104 105 106 107 108 134 135 136 137 138 ... 164 165 166 167 168 222 223 224 225 226 227 228 252 253 254 255 256 ... 257 258 282 283 312 313 344 345 346 347 348 374 375 376 377 378 404 ... 405 406 407 408 464 465 466 494 495 496 522 523 527 528 552 553 557 ... 558 582 583 587 588 612 613 614 615 616 617 618 642 643 644 645 646 ... 647 648 672 673 674 675 676 677 678 727 728 729 730 731 732 733 734 ... 735 736 737 738 757 758 759 760 761 762 763 764 765 766 767 768 787 ... 788 789 790 791 792 793 794 795 796 797 798 824 825 826 854 855 856 ... 882 883 887 888 912 913 917 918 972 973 974 975 976 977 978 1002 ... 1003 1004 1005 1006 1007 1008 1032 1033 1037 1038 1062 1063 1067 ... 1068 1092 1093 1097 1098 1122 1123 1124 1125 1126 1152 1153 1154 ... 1155 1156]) = 3;function gameover = getGameOver()gameover = zeros(30,40);gameover([95 96 97 98 99 100 101 102 103 104 109 110 111 112 113 114 ... 125 126 127 128 129 130 131 132 133 134 139 140 141 142 143 144 155 ... 156 163 164 167 168 175 176 185 186 193 194 197 198 205 206 215 216 ... 219 220 221 222 223 224 229 230 231 232 233 234 245 246 249 250 251 ...252 253 254 259 260 261 262 263 264 335 336 337 338 339 340 341 342 ... 343 344 347 348 349 350 351 352 353 354 365 366 367 368 369 370 371 ... 372 373 374 377 378 379 380 381 382 383 384 395 396 399 400 415 416 ... 425 426 429 430 445 446 455 456 457 458 459 460 461 462 463 464 467 ... 468 469 470 471 472 473 474 485 486 487 488 489 490 491 492 493 494 ... 497 498 499 500 501 502 503 504 575 576 577 578 579 580 581 582 583 ... 584 587 588 589 590 591 592 593 594 595 596 605 606 607 608 609 610 ... 611 612 613 614 617 618 619 620 621 622 623 624 625 626 635 636 647 ... 648 651 652 655 656 665 666 677 678 681 682 685 686 695 696 697 698 ... 699 700 701 702 703 704 707 708 711 712 715 716 725 726 727 728 729 ... 730 731 732 733 734 737 738 741 742 745 746 755 756 785 786 817 818 ... 819 820 821 822 823 824 827 828 829 830 831 832 833 834 835 836 847 ... 848 849 850 851 852 853 854 857 858 859 860 861 862 863 864 865 866 ... 887 888 891 892 917 918 921 922 935 936 937 938 939 940 941 942 943 ... 944 949 950 953 954 955 956 965 966 967 968 969 970 971 972 973 974 ... 979 980 983 984 985 986 995 996 999 1000 1003 1004 1025 1026 1029 ... 1030 1033 1034 1055 1056 1059 1060 1063 1064 1067 1068 1069 1070 ... 1071 1072 1075 1076 1085 1086 1093 1094 1097 1098 1099 1100 1101 ... 1102 1105 1106]) = 1;function pause = getPause()pause = zeros(30,40);pause([41 42 43 44 45 46 47 48 49 50 71 72 73 74 75 76 77 78 79 80 101 ... 102 103 104 105 106 107 108 109 110 131 132 136 137 161 162 166 167 ... 193 194 195 223 224 225 283 284 285 313 314 315 341 342 346 347 371 ... 372 376 377 401 402 406 407 431 432 433 434 435 436 437 461 462 463 ... 464 465 466 467 491 492 493 494 495 496 497 551 552 553 554 555 556 ... 581 582 583 584 585 586 616 617 646 647 671 672 673 674 675 676 677 ... 701 702 703 704 705 706 707 731 732 733 734 735 736 737 791 792 796 ... 797 821 822 826 827 853 854 855 856 857 883 884 885 886 887 913 914 ... 915 916 917 971 972 973 974 975 976 977 1001 1002 1003 1004 1005 ... 1006 1007 1031 1032 1036 1037 1061 1062 1066 1067 1091 1092 1096 ... 1097 1121 1122 1123 1124 1125 1151 1152 1153 1154 1155]) = 1;。

贪吃蛇小游戏

贪吃蛇小游戏

贪吃蛇小游戏
贪吃蛇是一款经典的小游戏,目标是控制一条蛇在一个有限的空间中吃食物,
不断变长并避免碰到自己的身体或墙壁。

游戏的规则和玩法如下:
1. 开始游戏时,玩家将看到一个空白的游戏区域,蛇的初始长度为1个单位,
并且处于静止状态。

2. 游戏区域中随机生成一些食物,食物通常是一个小点或者一个水果图标。

3. 玩家通过控制蛇的方向键来移动蛇的头部,蛇的身体会跟随头部的移动而变化。

4. 当蛇的头部接触到食物时,蛇会吃掉食物并增加一个单位的长度。

5. 当蛇移动时,蛇的身体会跟随头部的移动,之前的头部会变成身体的一部分。

这意味着蛇会越来越长。

6. 游戏的目标是尽可能地吃到更多的食物,使蛇的长度变得更长。

7. 玩家需要避免蛇的头部碰到自己的身体或者游戏区域的墙壁,一旦发生碰撞,游戏结束。

8. 游戏通常会记录玩家吃到的食物数量或者蛇的长度,并在游戏结束时显示最
终得分。

9. 为了增加游戏的挑战性,玩家可以尝试不同的策略和技巧,例如控制蛇的速度、避免陷入死胡同、利用周围的墙壁等。

10. 一些版本的贪吃蛇游戏还会添加一些特殊的食物或道具,例如加速道具、减速道具、穿墙道具等,这些道具可以增加游戏的变化和乐趣。

总之,贪吃蛇是一款简单而有趣的小游戏,玩家需要灵活控制蛇的移动,尽量
吃到更多的食物,并避免碰到自己的身体或墙壁。

通过不断尝试和探索,玩家
可以提高自己的技巧和策略,享受游戏带来的挑战和乐趣。

贪吃蛇程序设计

贪吃蛇程序设计

贪吃蛇程序设计贪吃蛇是一款经典的电子游戏,其设计简单却极具挑战性,深受各个年龄段玩家的喜爱。

下面将详细介绍贪吃蛇程序的设计过程,包括基本规则、程序结构、实现方法以及可能的扩展功能。

基本规则贪吃蛇游戏的基本规则如下:1. 游戏界面是一个矩形网格,蛇在网格中移动。

2. 蛇由多个方块组成,初始时通常只有几个方块。

3. 玩家通过键盘控制蛇头的移动方向。

4. 蛇在吃到食物后,身体长度会增加一节。

5. 如果蛇头撞到自己的身体或屏幕边缘,游戏结束。

程序结构贪吃蛇程序主要包括以下几个部分:1. 游戏界面:显示蛇、食物和网格。

2. 蛇的移动逻辑:控制蛇的移动方向和速度。

3. 食物生成逻辑:随机在界面上生成食物。

4. 碰撞检测:检测蛇是否吃到食物或撞到自己及屏幕边缘。

5. 分数和生命值:记录玩家的得分和剩余生命。

实现方法1. 初始化- 设置游戏界面的大小。

- 初始化蛇的位置和长度。

- 随机生成食物的位置。

2. 游戏循环- 监听键盘输入,更新蛇头的移动方向。

- 根据移动方向更新蛇的位置。

- 检查蛇是否吃到食物,如果是,则增加蛇的长度和分数,并生成新的食物。

- 检查蛇是否撞到自己的身体或屏幕边缘,如果是,则结束游戏。

- 刷新游戏界面,显示当前的蛇、食物和分数。

3. 绘制界面- 使用图形库或API绘制网格、蛇和食物。

4. 处理用户输入- 监听键盘事件,根据用户的输入改变蛇的移动方向。

5. 碰撞检测- 检查蛇头是否与食物重叠,如果是,则触发吃食物的逻辑。

- 检查蛇头是否与蛇身其他部分重叠,如果是,则游戏结束。

- 检查蛇头是否到达屏幕边缘,如果是,则游戏结束。

可能的扩展功能1. 多种难度级别:根据游戏难度调整蛇的移动速度或食物的生成频率。

2. 特殊食物:例如,某些食物可以让蛇短暂加速或获得保护,避免碰撞。

3. 自定义皮肤:允许玩家选择或设计蛇和食物的外观。

4. 多人模式:支持多个玩家在同一设备或网络上进行游戏。

5. 成就系统:为玩家设置各种成就目标,增加游戏的可玩性。

贪吃蛇游戏程序的设计说明

贪吃蛇游戏程序的设计说明

测控技术与仪器专业课程设计题单班级0982011 学生某某课程名称计算机课程设计课题贪吃蛇游戏程序设计设计要求 1.学习游戏设计有关知识。

2.设计贪吃蛇游戏程序。

3.调试并修改程序。

4.完成课程设计论文。

课题发给日期2011年6月25日课程设计完成日期2011年7月09日指导教师余某某评语:贪吃蛇游戏学生:某某班级:0882011指导老师:余某某摘要:编写C语言程序实现贪吃蛇游戏,贪吃蛇游戏是一个深受人们喜爱的游戏,一条蛇在密闭的围墙,在围墙随机出现一个食物,通过按键盘上的四个光标键控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇的身体长一节,同时计10分,接着又出现食物,等待被蛇吃掉,如果蛇在移动过程中,撞到墙壁或身体交叉蛇头撞到自己的身体游戏结束。

作为一个完整的程序,必须考虑人机交流与用户体验。

游戏的界面不能太丑,更不能连个简单的界面都没有。

游戏应该有个比较漂亮的界面,在有必要硬件支持和软件的支持下,游戏开发者必须最大限度的使游戏美观。

游戏的美观是一方面,游戏的在素质是另一方面。

一个游戏的优劣,最终由玩家决定。

在游戏与玩家见面之前,游戏开发者要设计一种让玩家投入的游戏模式,并且在一定的游戏规则下进行。

关键词:贪吃蛇流程图c语言源程序目录1 前言 (1)2 课设容 (3)2.1课设目的 (3)2.2设计功能 (3)2.3结构设计 (7)3结论 (11)参考文献 (15)附录A (16)1 前言C语言是一种易学易懂的通用程序设计语言,由于它具有功能性强,运用简洁,灵活兼有高级语言与低级语言的优点,以及“目标程序效率高”可移植性和能在各种系统上普遍实现等特点使它成为当今世界上的主流程序设计语言之一,同时被选作目前全世界广泛应用,同时也是大学生必修的科目。

作为一位当代的大学生更要很好的利用它,学好一门设计语言,实现学以至用。

制作C程序报告,可以巩固和加深自己对C语言课程的基本知识的理解和掌握,并且能够掌握C语言编程和程序调试的基本技能。

贪吃蛇小游戏

贪吃蛇小游戏

贪吃蛇小游戏贪吃蛇是一款经典的小游戏,目标是控制一条蛇吃食物并尽可能长大,同时避免撞到自己或墙壁。

规则和玩法:1. 游戏开始时,玩家控制一条短小的蛇在一个有边界的区域内移动。

2. 蛇的移动是基于格子的,每次移动一格,可以向上、下、左、右四个方向移动。

3. 在区域内随机生成食物,玩家的任务是让蛇吃到食物,每吃到一个食物,蛇的长度加一。

4. 当蛇头碰到自己的身体或撞到墙壁时,游戏结束。

5. 游戏中可以设置一些特殊的障碍物,如墙壁或障碍物块,蛇不能穿过它们。

6. 游戏中还可以设置一些特殊的道具,如加速道具或减速道具,它们会影响蛇的移动速度。

7. 游戏可以根据蛇的长度或时间进行计分,玩家可以尝试在有限的时间内尽可能地吃到更多的食物。

术语和技巧:1. 蛇身:指蛇的身体部分,蛇的长度会随着吃到食物而增加。

2. 蛇头:指蛇的前端,也是蛇的移动方向。

3. 食物:蛇需要吃的东西,吃到食物可以增加蛇的长度。

4. 墙壁:游戏边界,蛇不能穿过墙壁。

5. 障碍物:游戏中的一些特殊障碍,蛇不能穿过它们。

6. 加速道具:使蛇的移动速度加快,提高游戏难度。

7. 减速道具:使蛇的移动速度减慢,提供更多的时间来思考和规划移动方向。

一些技巧和策略:1. 尽量避免蛇头碰到蛇身或墙壁,这会导致游戏结束。

2. 规划好蛇的移动方向,避免蛇头撞到自己的身体。

3. 利用加速道具来提高游戏难度,但要小心不要让蛇头撞到自己或墙壁。

4. 尽量吃到更多的食物,增加蛇的长度,但要注意不要让蛇头撞到自己的身体。

5. 如果游戏中有障碍物,要注意规避它们,不要让蛇撞到障碍物。

希望以上的解释能帮助你理解贪吃蛇小游戏的玩法和规则。

尽情享受游戏的乐趣吧!。

贪吃蛇程序文档

贪吃蛇程序文档

1.需求分析1.1问题的描述本程序主要是一个交互式的游戏程序,通过玩家的键盘上下左右键控制贪吃蛇的运动方向。

程序会根据您按下的键判断贪吃蛇走向。

这个程序的关键是表示蛇的图形以及蛇的移动。

用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块。

移动时必须从蛇头开始,所以蛇不能向相反方向移动,也就是蛇尾不能改作蛇头。

如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向移动,一步移动一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头移动,图形的实现是从蛇头的新位置开始画出蛇,这时由于没有清屏的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来社会多一节身体,所以将蛇的最后一节用背景色覆盖。

食物的出现和消失也是画圆形和覆盖圆形。

1.2基本要求应用Visual C++的MFC进行可视化编程,完成一个贪吃蛇小程序。

程序包含snake.EXE可执行文件和所有的可编译程序源码;能够实行游戏的开始、结束、得分和计时;屏幕上能够显示游戏规则和游戏的注意事项。

2.概要设计2.1数据结构数据结构是指相互之间存在一定关系的数据元素的集合。

按照视点的不同,数据结构分为逻辑结构和存储结构。

数据的逻辑结构(logical structure)是指数据元素之间逻辑关系的整体。

所谓逻辑关系是指数据元素之间的关联方式或邻接关系。

根据数据元素之间逻辑关系的不同,数据结构分为四类:集合;线性结构;树结构;图结构。

数据的逻辑结构属于用户视图,是面向问题的,反映了数据内部的构成方式。

为了区别于数据的存储结构,常常将数据的逻辑结构称为数据结构。

数据的存储结构(storage structure)又称为物理结构,是数据及其逻辑结构在计算机中的表示,换言之,存储结构除了数据元素之外,必须隐式或显示地存储数据元素之间的逻辑关系。

通常有两种存储结构:顺序存储结构和链接存储结构[1]。

贪吃蛇程序中的重要代码如下:动态数组:CArray<CPoint,CPoint> m_aBody // 保存蛇身点类:CPoint m_pAim / /保存一个食物目标的坐标函数:void CSnakeView::IniAim() //随机函数生成食物的X 和Y坐标voidCSnakeView::IniGame()//改函数对游戏初始化定义游戏的初始状态void CSnakeView::ReDisplay(CPoint pPoint)//刷新游戏区域中pPoint处的一个小方格void CSnakeView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) //判断键盘按钮事件CView::OnTimer(nIDEvent) //计时器函数来重画屏幕程序的功能是实现对贪吃蛇游戏的开始,如下图所示2.3各模块之间的调用关系及算法设计用流程图示出程序的主要控制流程和处理流程,其图形如下:3 详细设计构思如下:首先,设计者考虑设计一个可以游动的蛇。

贪吃蛇VB编程详解2

贪吃蛇VB编程详解2

VB编程有点象搭积木,一个游戏可以由几个小程序组成,然后通过特定的方式联系在一起。

玩贪吃蛇游戏时,注意到游戏主要由以下几部分做法组成:1.随机出现的食物的做法食物的颜色是随机出现,食物为一个小圆,外框线是黑色的2.键盘控制按钮控制蛇运行的做法3.食物吃掉,蛇身加长的做法4.蛇死时的闪动的做法5.蛇撞墙或撞自身后游戏结束的做法蛇头为圆形,有外框线,蛇身为方形,颜色是随机的,有外框线我找到了一个贪吃蛇的VB代码,仔细的把这个贪吃蛇代码根据以上几部分分解开来,就象把一个搭好的积木城堡又重新拆解成一块块的积木。

贪吃蛇VB代码详解——键盘控制蛇运行的做法课程作业报告容2.1 在VB应用程序里设计好小游戏(贪吃蛇向前、向左向右和向后爬行),共有控件如下:2.2控件的属性Form1:默认值,宽度和高度尺寸适中shape设为0-Rectangle FillStyle选为0-SolidShape1(3) 表示蛇身FillColor在调色版中选一种颜色BorderStyle选择1-Solid Shape选择0-Rectangle FillStyle选为0-SolidTimer:默认值设计界面如下图所示2.3如何给小游戏添加菜单栏选择VB的菜单栏中的工具菜单,在工具菜单中选择菜单编辑器一项,给贪吃蛇——键盘控制按钮控制蛇爬行小游戏再添加一个菜单栏,打开游戏菜单后,里面有两个选顶,一个是开始,一个是结束标题游戏(主菜单)开始结束名称(代码)Game Start Exit2.4游戏代码说明,其中的Runstep为蛇身方格的宽度,在下图说明中为10,但在实际游戏中为400个点,以下是代表四个方向(游戏代码)的四个选项:Case 0 Shape1(0).Left = Shape1(0).Left -RunstepLeft方向减往左走的蛇注意蛇行走的方向为横向Shape1(0).Left -RunstepCase1 Shape1(0).Top = Shape1(0).Top -RunstepTop方向减往下走的蛇注意蛇行走的方向为纵向Shape1(0).Top -RunstepCase 2 Shape1(0).Left = Shape1(0).Left +RunstepLeft方向加往右走的蛇注意蛇行走的方向为横向Shape1(0).Left +RunstepCase 3 Shape1(0).Top = Shape1(0).Top +RunstepTop方向加往上走的蛇注意蛇行走的方向为纵向Shape1(0).Top +Runstep另外还有就是用键盘的四个方向键控制蛇往前后左右的行走,我一开始也搞不清楚为什么用Case 37 ,Case 38,Case 39,Case 40这四个代表键盘的KeyCode能代表四个方向,好在我查到了两个贪吃蛇代码,全是37、38、39、40这个个KeyCode,我就觉得很奇怪,结果代表键盘的四个方向的代码真的是用37—38—39—40来表示的,因为我从贪吃蛇是单独分离出来的贪吃蛇往前后左右爬行的小游戏运行后可以用键盘控制的请看游戏代码吧:3.游戏代码一个是窗体(Form1)代码,还有一个是模块代码,本来想把他们二合一成为窗体代码的,可是是从原来的游戏中分离出来的,所以还有一个为模块(Module1)的代码Form1代码:Const Runstep = 400‘定义常量,即蛇身为一个shape的宽度‘变量在模块中定义,窗体中没有定义Private Sub exit_Click()Timer1.Interval = 0End SubPrivate Sub form_load()‘载入窗体,初始化蛇身为一个数组shape1(i)Dim i As IntegerFor i = 0 To 3 Step 1snake_init(i).x = Shape1(i).Leftsnake_init(i).y = Shape1(i).TopNext iEnd SubPrivate Sub Form_KeyDown(KeyCode As Integer, shift As Integer) Select Case KeyCodeCase 37‘蛇不可以退着走,但可以拐弯If Runway <> 2 Then Runway = 0End IfCase 38If Runway <> 3 Then Runway = 1End IfCase 39If Runway <> 0 Then Runway = 2End IfCase 40If Runway <> 1 Then Runway = 3End IfEnd SelectEnd SubPrivate Sub start_Click() Timer1.Interval = 1000 Call init_gameEnd SubPrivate Sub Timer1_Timer()snake_point.x = Shape1(0).Leftsnake_point.y = Shape1(0).TopSelect Case RunwayCase 0Shape1(0).Left = Shape1(0).Left - Runstep Call move_snakeCase 1Shape1(0).Top = Shape1(0).Top - Runstep Call move_snakeCase 2Shape1(0).Left = Shape1(0).Left + Runstep Call move_snakeCase 3Shape1(0).Top = Shape1(0).Top + Runstep Call move_snakeEnd SelectEnd Sub注解:在Form1中对Form1 load即载入窗体后,对蛇身做了一个定位,再把游戏菜单中的开始和结束做了一个说明,即开始Timer1.Interval =1000,结束Timer1.Interval = 0,然后再说明Timer1的用法,然后是用键盘控制蛇爬行的用法都做了说明,但是在键盘控制蛇爬行时对Runway变量没有做定义和说明,还有定义蛇的四个行走方向对Call move_snake(函数)也没有做说明,在开始游戏是有一个重要的代码Call init_game也会在模块中说明,(开始我做游戏代码是就没有Call init_game这一项代码,也没有说明,结果程序是可以运行的,而且蛇也会向四个方向爬行的,但是运行的路线是不一样的)在Form1没有说明的这几个方面会在模块中一一提到,并解释清楚。

贪吃蛇程序设计说明书

贪吃蛇程序设计说明书

贪吃蛇程序设计说明书贪吃蛇游戏程序设计说明书题目:贪吃蛇游戏学校:系别:专业班级:姓名:学号:指导老师:日期:一、设计题目:贪吃蛇是一款经典的休闲游戏,一条蛇在密闭的围墙内,随机出现一个食物,通过控制方向键操作小蛇不停的朝着食物前进,直到吃掉食物。

每吃一个食物,小蛇都会长长一截,随之难度增大;当小蛇头撞到墙或自己时,小蛇死亡。

二、功能设计:本游戏要求实现以下几个功能:(1)用上、下、左、右键控制游戏区蛇的运动方向,使之吃食而使身体变长;(2)用户可以调节蛇的运行速度来选择不同的难度;(3)游戏分多个难度级别;(4)用户可自选颜色;(5)记录成绩前五名的游戏玩家;(6)增加背景音乐;(7)提高障碍物和游戏级别。

三、程序模块图:贪吃蛇游戏初始化图模块控制模块设置模块帮助模块墙体蛇身食物移动食物死亡变长绩等级音效四、算法流程图:是否否是否是开始初始化界面和蛇身放置食物获取按键开始运动碰到边界蛇吃到食蛇长大蛇死亡继续结束五、函数原型与功能1.主函数:void main()启动程序,触动其他函数。

2.初始化:void init ()设置背景框大小、蛇体初始值,随机产生食物。

3.随机产生食物:void setfoodcrd()设置食物生成坐标,0表示食物被吃。

4.画食物:void showfood()用矩形框来画食物5.画蛇:void showsnake()根据蛇的坐标和节数,循环用矩形框来画蛇。

6.蛇移动:void snakemove()根据按键,重设坐标7.改变蛇的方向:void changeskdir()响应用户的运动方向8.判断蛇是否死亡:void judgeslod判断蛇是否碰到自己或墙。

9.判断蛇是否吃到食物:void judgefood()判断是否吃到食物,吃食后变0,蛇增长一节。

10.结束游戏:void gameover()结束话语,并执行下一步。

六、基本代码#include#include#include#pragma comment(lib,"Winmm.lib")#include "MyTimer.h"#define SIZEMAX 100 /*蛇最大长度*/#define SPEED 100 /*初始速度*/#define len 20 /*蛇宽度*/#define lm 10 /*蛇每次移动距离*/#define initlen 600 /*初始化窗口正方形的长度*/ #define Min_snakelen 2 /*蛇的最小长度*/ typedef struct {int x,y;}DIR;int snakelen=Min_snakelen; /*蛇的长度*/int isfood=1; /*食物状态*/int isover=0; /*游戏状态*/int ispause=1; /*暂停状态*/int ismusic=1; /*音乐播放状态*/char dir; /*记录蛇运动的方向*/char c='d';DIR snake[500],food; /*定义蛇节点和食物的类型*/int speed=SPEED;void drawmap() /*画地图函数*/ {IMAGE img;char str[10];loadimage(&img,"贪吃蛇.jpg"); /*游戏界面*/ putimage(0,0,&img);loadimage(&img,"7.jpg"); /*侧栏提示*/putimage(600,0,&img);sprintf(str,"%d",snakelen);setfont(30,0,"宋体");setbkmode(TRANSPARENT);outtextxy(620,10,"操作说明:");setfont(20,0,"宋体");outtextxy(615,50,"awsd控制方向键");outtextxy(615,80,"p键暂停");outtextxy(615,110,"o键继续");outtextxy(615,200,"esc键退出");outtextxy(615,140,"l键暂停音乐");outtextxy(615,170,"k键继续播放");outtextxy(730,250,str);outtextxy(620,250,"蛇当前长度");}void init() /*初始化蛇函数*/ {int i;IMAGE img;snake[0].x=9*len+lm;snake[0].y=4*len+lm;loadimage(&img,"1.jpg");putimage(snake[0].x-lm,snake[0].y-lm,&img); for(i=1;i<snakelen;i++)< p="">{snake[i].x=len*(9-i)+lm;snake[i].y=len*4+lm;loadimage(&img, "2.jpg");putimage(snake[i].x-lm,snake[i].y-lm, &img); }}void showsnake() /*画蛇函数*/{int i;IMAGE img;loadimage(&img, "1.jpg");putimage(snake[0].x-lm,snake[0].y-lm , &img); loadimage(&img, "2.jpg");for(i=1;i<snakelen;i++)< p="">putimage(snake[i].x-lm,snake[i].y-lm, &img); }void snakemove() /*画动蛇函数*/{int i;int mx=snake[0].x;int my=snake[0].y;switch(dir){case 'a':mx-=len;break;case 'd':mx+=len;break;case 'w':my-=len;break;case 's':my+=len;break;default:break;}for(i=snakelen-1;i>=0;i--){snake[i+1].x=snake[i].x;snake[i+1].y=snake[i].y;}snake[0].x=mx;snake[0].y=my;showsnake();}int ceshiover() /*检测游戏结束函数*/{int i;if(snake[0].x<0||snake[0].x>30*len-lm||snake[0].y<0||snake[0].y>30*len-lm) return 1;for(i=1;i<snakelen;i++)< p="">{if(snake[0].x==snake[i].x&&snake[0].y==snake[i].y) return 1;}return 0;}int foodinsnake() /*检测食物是否在蛇上函数*/ {for(int i=0;i<snakelen;i++)< p="">if(food.x==snake[i].x&&food.y==snake[i].y)return 1;elsereturn 0;}void showfood() /*画食物函数*/{IMAGE img;do{food.x=(rand()%30)*len+lm;food.y=(rand()%30)*len+lm;}while(foodinsnake());loadimage(&img, "3.jpg");putimage(food.x-lm,food.y-lm , &img);isfood=0;}void kmusic(){if(ismusic==0)mciSendString("pause mymusic",NULL,0,NULL);if(ismusic==1)mciSendString("resume mymusic",NULL,0,NULL);}void playbkmusic() /*播放背景音乐函数*/{mciSendString("open 超级玛丽.mp3 alias mymusic", NULL, 0, NULL);mciSendString("play mymusic repeat", NULL, 0, NULL);}void playgame() /*玩游戏函数*/{c='d'; //蛇开始向右移动isover=0;snakelen=Min_snakelen;dir='d';IMAGE img;MyTimer t; //定义精确延时对象int T=200; // 延长时间drawmap(); //画游戏地图init(); //画小蛇初始位置while(!isover){if(ispause){snakemove();FlushBatchDraw(); //批量绘图EndBatchDraw(); //结束批量绘图if(snake[0].x==food.x&&snake[0].y==food.y){ snakelen++;isfood=1;}if(isfood)showfood();if(snakelen<35)T=200-3*snakelen;t.Sleep(T);BeginBatchDraw(); // 开始批量绘图模式,防止闪烁问题drawmap();loadimage(&img, "3.jpg"); // 加载食物图片putimage(food.x-lm,food.y-lm , &img);};//按键控制if(kbhit())c=getch();switch(c){case 'a':if(dir!='d'){dir=c;}break;case 'd':if(dir!='a'){dir=c;}break;case 'w':if(dir!='s'){dir=c;}break;case 's':if(dir!='w'){dir=c;}break;case 27: exit(0); break; //游戏退出case 'p': ispause=0;break; //p暂停case 'o': ispause=1;break; //o继续游戏case 'l': ismusic=0;break; //l暂停音乐case 'k': ismusic=1;break; //k继续播放default:break;}kmusic(); //音乐控制播放//判断游戏结束if(ceshiover())isover=1;//判断是否重新再来HWND wnd = GetHWnd(); //获取窗口句柄if(isover)if (MessageBox(wnd, "游戏结束。

贪吃蛇说明书

贪吃蛇说明书

贪吃蛇说明书
蛇的活动区域是由若干个小方格组成的。

当这些小方格呈现灰色时,便表示蛇身。

设整个区域由m×n个方格组成,最左上角的方格坐标为(0, 0)。

蛇是由若干个邻的方格组成的,将这些方格的坐标依蛇头至蛇尾的次序存入到一个数组中便代表了蛇身。

当蛇在游戏区域中“游动”一格时,所对应的数组操作应该是,将新的位置坐标插入到数组头部,同时将数组中最后一个元素删除。

这项工作可以用一个一般的数组来完成,但当进行插入操作时需要自己移动数组中的元素;也可以使用CArray来完成这些工作,CArray的成员函数提供了需要的操作,这样做简单一些。

游戏使用四个方向键来控制蛇的前进方向,在Onkeydown消息处理函数中,根据不同的方向键设置了成员变量m_nDirect的值。

当在菜单中选择开始时,启
动了定时器,游戏开始。

在定时器消息处理函数中,根据m_nDirect的值判断出蛇的下一个位置。

如果没有超出边界或碰到自身,则蛇可以移动到新位置。

如果吃到了食物,则在CArray中只插入而不删除最后一个元素,蛇身长度增加。

当蛇移动一格时,只有蛇头和蛇尾的位置需要重绘,为此专门编写了成员函数ReDisplay来刷新一个小格。

当蛇身碰到游戏区域边界和蛇身时游戏结束,游戏区域显示游戏运行的时间及玩家得分。

贪吃蛇游戏说明书

贪吃蛇游戏说明书

贪吃蛇游戏说明书学院:计算机工程系专业班级:学号:学生:指导教师:青岛理工大学琴岛学院教务处2011年 7 月 8 日一、游戏说明:贪吃蛇小游戏是一款有趣的益智游戏,可以锻炼大脑的反应能力,在游戏与挑战中娱乐放松自己。

最初的蛇只有3节,随机某个地方出现一个食物,蛇从食物上走过即可吃掉食物并使自己的长度增加一节,游戏自动计时计分,撞到外侧的墙壁或自身会判定为游戏失败。

玩家可以自主设置游戏难度,改变蛇的运动速度,更加人性化。

另外,本游戏新添作弊功能,使游戏更具娱乐性。

二、操作说明:(一)游戏1. 开始:打开游戏之后,点击“开始游戏”按键,以开始游戏。

如图1所示图12.暂停/退出:在游戏进行中,如果因为有事离开可以选择暂停游戏或者退出游戏,当前的游戏会暂停或者退出,暂停的游戏再一次点击暂停游戏可以继续进行。

如图2所示图2(二)设置1.难度设置:游戏设中等为默认难度,用户可自主选择高/中等/容易任意难度,改变蛇的运动速度进行挑战。

选择的难度在游戏窗口显示。

2.声音:“背景声音开/关”,游戏默认开背景声音,点击则可以关闭,再一次点击则可以重新打开。

3.作弊开/关:游戏新加作弊功能,点击作弊开/关,蛇便可以穿过墙循环往复,游戏便不会结束,并可以继续其他功能,再次点击此处,作弊便可以关掉,正常进行游戏。

图3所示图3(三)帮助1.帮助:点击“帮助”,出现“关于Snake”及“游戏规则”。

如图4所示图42.游戏规则:点击“游戏规则”,出现对话框包含“游戏介绍”及“操作规则”的相关内容。

根据操作规则进行游戏。

如图5所示图5(四)其它1.操作规则:(1)游戏操作:键盘操作控制蛇的运动方向,方向键以及w、s、a、d分别对应向上、下、左、右移动。

(2)游戏快捷键:F1:帮助,Space:暂停/开始,F2:开始,F3:退出程序。

2.得分/用时:游戏自动计时。

当蛇吃掉一个食物时,游戏自动计分加1分。

如图6所示图63.游戏结束时点击提示对话框里的“确定”,恢复游戏主窗口。

贪吃蛇小游戏

贪吃蛇小游戏

贪吃蛇小游戏
贪吃蛇是一款经典的小游戏,玩家需要控制一条蛇在一个有限的区域内移动并吃食物,以使蛇身变长。

游戏的目标是尽可能地吃到更多的食物,同时避免撞到自己的身体或撞墙。

游戏规则如下:
1. 开始游戏时,玩家控制的蛇只有一个头部,初始长度为1。

2. 蛇的移动由玩家控制,可以使用键盘上的方向键来控制蛇的移动方向(上、下、左、右)。

3. 蛇每移动一步,身体的每个部分都会向前移动一格,蛇的头部会向玩家指定的方向移动一格。

4. 游戏区域内会随机生成食物,蛇需要吃掉食物才能增加长度。

5. 当蛇吃到食物时,蛇的长度会增加一格,并在尾部生成新的身体部分。

6. 如果蛇撞到自己的身体或撞墙,则游戏结束。

为了提高游戏的乐趣和挑战性,可以考虑以下技巧和策略:
1. 尽量利用整个游戏区域,避免让蛇的身体占据太多空间,以便有更多的机会移动和吃到食物。

2. 注意蛇头的移动方向,避免频繁改变方向,以免撞到自己的身体。

3. 预测食物的位置,尽量使蛇头朝向食物的方向移动,以更快地吃到食物。

4. 控制蛇的速度,适当调整移动的速度,以便更好地控制蛇的位置和方向。

5. 利用蛇的身体长度,可以通过蛇的身体绕过障碍物或自己的身体,以获得更好的移动路径。

通过这些规则、技巧和策略,玩家可以享受到贪吃蛇游戏的乐趣,并挑战自己
的反应能力和操作技巧。

不断尝试不同的策略和方法,可以使游戏更具挑战性和乐趣。

贪吃蛇游戏详细设计说明书

贪吃蛇游戏详细设计说明书

详细设计说明书1 引言1.1 编写目的本说明书在概要设计的基础上,对贪吃蛇游戏的各模块、程序、子系统分别进行了实现层面上的要求和说明。

软件开发小组的产品实现人员阅读和参考本说明进行代码的编写和测试。

本说明书预期的读者是软件开发小组的产品实现人员。

1.2 背景说明:系统名称:贪吃蛇游戏任务提出者:手机策划人员开发者:软件开发小组的产品实现人员用户:NOKIA手机用户运行该程序系统的计算中心:NOKIA手机芯片1.3 定义1.节:一条蛇可以看成由许多正方形的“小格子”拼凑成,称作节。

节是蛇身上最小的单位。

2.链表:用来保存每一段的状态,链表的元素单位是节。

且链表的第一个元素表示蛇的头部。

3.坐标系:以左上角那点为(0,0),向右则x递增,向下则y递增。

1.4 参考资料张海藩:《软件工程导论》第五版清华大学出版社肖刚等:《实用软件文档写作》清华大学出版社2 程序系统的组织结构2.1每个模块和子程序的名称、标识符:1Ground类:1)private int TYPE;2)public int[][] rocks=new int[Global.WIDTH][Global.HEIGHT];3)public void setGround(int type){}根据不同的Type值将rocks的不同下标的元素设为1,其他元素为0。

4)public boolean isSnakeEatRock(Snake snake){}判断蛇头的所在的位置在数组rocks中的值是否为1,如果是1,则表示蛇吃到了石头,返回TRUE,否则返回FALSE。

5)public Point getPoint(){}产生一组随机数(x,y),是食物的坐标6)public void drawMe(Graphics g){}将数组rocks中值为1的元素填充为石头颜色。

2Snake类:1)public static int x,y;2)private int oldDirection,newDirection;用于判断newDirection和oldDirection是否为相反方向,用于选取有效方向。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

.C语言程序设计之贪吃蛇一.程序功能介绍贪吃蛇游戏是一个经典小游戏,一条蛇在封闭围墙里,围墙里随机浮现一个食物,通过按键盘四个光标键控制蛇向上下摆布四个方向挪移,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,同时记 10 分,接着又浮现食物,等待蛇来吃,如果蛇在挪移中撞到墙或者身体交叉蛇头撞倒自己身体游戏结束.二.程序整体设计说明一个游戏要有开始部份,运行部份,结束部份〔实际上开始部份与运行部份是一体的〕 .2.1设计思路这个程序的关键是表示蛇的图形以与蛇的挪移.用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示.挪移时必须从蛇头开始, 所以蛇不能向相反方向挪移,也就是蛇尾不能改作蛇头.如果不按任何键,蛇自行在当前方向上前移,当游戏者按了有效的方向键后,蛇头朝着指定的方向挪移,一步挪移一节身体,所以当按了有效的方向键后,先确定蛇头的位置,然后蛇身体随着蛇头挪移,图形的实现是从蛇头的新位置开始画出蛇 ,这时由于没有庆平的原因,原来蛇的位置和新蛇的位置差一个单位,所以看起来社会多一节身体,所以将蛇的最后一节用背景色覆盖.食物的浮现和消失也是画矩形块和覆盖矩形块2.2数据结构设计与用法说明开始部份:游戏是运行在图形模式下的,所以第一步一定是初始化图形模式,接着要有开始的界面,就像书有封面一样,我设置了一个游戏的标题画面,除了游戏标题画面我还设置了一个欢迎画面.标题画面以后,还要为游戏的运行部份作初始化,包括绘制游戏运行时的背景,对游戏某些重要变量的初始化.运行部份:作为游戏的核心部份,这里包括的函数比较多,也就是模块比较多,首先让我摹拟一下贪吃蛇的游戏模式:某个世界上蓦地浮现一条蛇,它很短,它的运动神经异常,它没法住手自己的多动症在它的世界里就惟独食物,它很饿,也很贪吃;同样在不明原因的情况下,食物从天而降,可惜的是没有落到嘴边;饥饿的主人公, 不管它有没有毒,也不问食物的来历,径直向食物爬去;它吃到食物啦,它超出想象的同化能力让食物很快的成为自己身体的一部份 ,它的身子变长啦.当它吃到第一颗食物时,上帝有给它第二颗,于是它吃了第二颗,于是又变长了,于是又有第三颗……它的身子是向来的加长,它不管自己过长身体的麻烦——转身不便, 继续吃下去,现在它是直接把巴X 大,好让食物有个绿色通道.但是在某天的下午, 它咬到了自己,它才想起自己是一条毒蛇,于是晕死过去〔不是毒死〕;又或者它往食物冲锋的时候,它失去控制,撞到了墙上.第一轮循环:第一步,浮现食物;第二步,蛇不停运动;第三步,检查蛇是撞到自己或者墙壁;由第四步起游戏有两条支线〔A、B〕:A :第四步,蛇没有碰到自己或者墙壁,蛇继续前进,绘制蛇的动作;第五步, 判断蛇是否吃到食物,如果蛇吃到食物,身子变长,原来的食物消失;第六步,让玩家输入控制指令,让蛇在下一轮循环的第二步改变运动方向;第七步,第二轮循环的第一步,重复第一轮的步骤;B:第四步,蛇碰到自己或者墙壁,终止游戏.结束部份:游戏结束时,显示"GAME OVER〞,已是约定俗成的规律了,我的游戏也不例外.除了游戏结束画面外,我还设置了一个游戏退出画面,"善始善终〞嘛.有了上述的大致划分,我把整个程序划分成〔13+2〕个模块〔其实就是函数〕依据所需要处理的任务要求,规划输入数据和输出结果,决定存放数据的数据结构.C 语言中数据结构集中体现在数据类型上,因此在进行C 语言程序设计时,应统筹规划程序中所使用的变量,数组,指针等,以与它们的类型等.这点是很重要的,如果在此期间选择不合适的变量或者数组,将来修改就十分艰难.现在分析一下贪吃蛇游戏中元素,继而得出与它们对应的在程序中的描述:蛇:基本描述:长度,颜色,位置.对应数据与数据类型:长度—虽然可以用坐标表示,但是这样的话,运算量将很大,所以换算成较大的单位—节数,以固定长度的每节描述;坐标--整型;颜色--整型;位置--X,Y 坐标.增加的描述:蛇运动的方向,蛇的生命.对应数据与数据类型:这些描述是为了与程序的按键的输入部份与判断游戏结束部份相联系而设的.方向惟独四个方向:上下摆布.可以设置与之对应的四个整型数: 3、4、2、1.生命就惟独两种情况:死或者生,对应0 或者1.食物:基本描述:颜色,位置.对应数据与数据类型:由于颜色设成固定的,所以再也不讨论.位置—X、Y 坐标.增加的描述:食物的存在.对应数据与数据类型:这是为了避免重复浮现食物而设置的,与绘制食物的函数有联系.惟独两个值:0 或者1 〔没有食物或者有食物〕其他的元素:墙,由于它在显示上是作为背景而存在的,所以并没有什么说明实际的墙壁就是四条直线组成的边框,由坐标描述.还需要的变量:键盘键入的键值〔作为全局变量,整型〕;时常要使用的循环变量;自定义的填充图案;说明文字的字符数组;游戏的记分;游戏的速度〔蛇的速度〕 .2.3各模块的功能与程序说明主要模块的实现思路和算法的流程图说明:关键所在——蛇不停挪移的Snakemove<>:蛇的不停挪移,就是蛇的下一节取代前一节的位置 ,在计算机中就是蛇下一节的位置坐标变成前一节的位置坐标 .在上文中,已定义蛇的位置坐标为数组类型,一组坐标对应一节的位置,假设有i+1 节,由0 到i 节,第i 节的坐标取第i-1 节的坐标,第 i-1 节的坐标取第 i-2 节的坐标……直到第 1 节取第 0 节的坐标. 而第0 节的坐标,即蛇头的坐标要往某个方向变化,变化量为蛇每节的长度.蛇的这种坐标轮换需要循环语句使其继续下去.用一个小矩形表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用两节表示:蛇没有碰到自己或者墙壁,蛇继续前进:游戏结束时,显示"GAME OVER〞三.程序源代码与注释:#define N 200#include <graphics.h>#include <stdlib.h>#include <dos.h>#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011bint i,key;int score=0;/*得分*/int gamespeed=50000;/*游戏速度自己调整*/ struct Food{intx;/*食物的横坐标*/inty;/*食物的纵坐标*/int yes;/*判断是否要浮现食物的变量*/ }food;/*食物的结构体*/struct Snake{intx[N];inty[N];int node;/*蛇的节数*/int direction;/*蛇挪移方向*/int life;/* 蛇的生命,0 活着,1 死亡*/}snake;void Init<void>;/*图形驱动*/void Close<void>;/*图形结束*/void DrawK<void>;/*开始画面*/void GameOver<void>;/*结束游戏*/void GamePlay<void>;/*玩游戏具体过程*/ void PrScore<void>;/*输出成绩*//*主函数*/void main<void>{Init<>;/*图形驱动*/DrawK<>;/*开始画面*/GamePlay<>;/*玩游戏具体过程*/Close<>;/*图形结束*/}/*图形驱动*/void Init<void>{intgd=DETECT,gm;initgraph<&gd,&gm,"c:\\tc">;cleardevice<>;}/*开始画面,左上角坐标为〔50,40〕,右下角坐标为〔610,460〕的围墙*/void DrawK<void>{/*setbkcolor<LIGHTGREEN>;*/setcolor<11>;setlinestyle<SOLID_LINE,0,THICK_WIDTH>;/*设置线型*/for<i=50;i<=600;i+=10>/*画围墙*/{rectangle<i,40,i+10,49>; /*上边*/rectangle<i,451,i+10,460>;/*下边*/}for<i=40;i<=450;i+=10>{rectangle<50,i,59,i+10>; /*左边*/rectangle<601,i,610,i+10>;/*右边*/}}/*玩游戏具体过程*/void GamePlay<void>{randomize<>;/*随机数发生器*/food.yes=1;/*1 表示需要浮现新食物,0 表示已经存在食物*/snake.life=0;/*活着*/snake.direction=1;/*方憧憬右*/snake.x[0]=100;snake.y[0]=100;/*蛇头*/snake.x[1]=110;snake.y[1]=100;snake.node=2;/*节数*/PrScore<>;/*输出得分*/while<1>/*可以重复玩游戏,压ESC 键结束*/{while<!kbhit<>>/*在没有按键的情况下,蛇自己挪移身体*/{if<food.yes==1>/*需要浮现新食物*/{food.x=rand<>%400+60;food.y=rand<>%350+60;while<food.x%10!=0>/*食物随机浮现后必须让食物能够在整格内,这样才可以让蛇吃到*/food.x++;while<food.y%10!=0>food.y++;food.yes=0;/*画面上有食物了*/}if<food.yes==0>/*画面上有食物了就要显示*/{setcolor<GREEN>;rectangle<food.x,food.y,food.x+10,food.y-10>;}for<i=snake.node-1;i>0;i-->/*蛇的每一个环节往前挪移,也就是贪吃蛇的关键算法*/{snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];}/*1,2,3,4 表示右,左,上,下四个方向,通过这个判断来挪移蛇头*/switch<snake.direction>{case 1:snake.x[0]+=10;break;case 2: snake.x[0]-=10;break;case 3: snake.y[0]-=10;break;case 4: snake.y[0]+=10;break;}for<i=3;i<snake.node;i++>/*从蛇的第四节开始判断是否撞到自己了, 因为蛇头为两节,第三节不可能拐过来*/{if<snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]>{GameOver<>;/*显示失败*/snake.life=1;break;}}if<snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||snake.y[0]>455>/*蛇是否撞到墙壁*/{GameOver<>;/*本次游戏结束*/snake.life=1; /*蛇死*/}if<snake.life==1>/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/break;if<snake.x[0]==food.x&&snake.y[0]==food.y>/*吃到食物以后*/{setcolor<0>;/*把画面上的食物东西去掉*/rectangle<food.x,food.y,food.x+10,food.y-10>;snake.x[snake.node]=-20;snake.y[snake.node]=-20;/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake.node++;/*蛇的身体长一节*/food.yes=1;/*画面上需要浮现新的食物*/score+=10;PrScore<>;/*输出新得分*/}setcolor<4>;/*画出蛇*/for<i=0;i<snake.node;i++>rectangle<snake.x[i],snake.y[i],snake.x[i]+10,snake.y[i]-10>;delay<gamespeed>;setcolor<0>;/*用黑色去除蛇的的最后一节*/rectangle<snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+10,snake.y[snake.node-1]-10>;} /*endwhile〔!kbhit〕*/if<snake.life==1>/*如果蛇死就跳出循环*/break;key=bioskey<0>;/*接收按键*/if<key==ESC>/*按ESC 键退出*/break;elseif<key==UP&&snake.direction!=4>/*判断是否往相反的方向挪移*/snake.direction=3;elseif<key==RIGHT&&snake.direction!=2>snake.direction=1;elseif<key==LEFT&&snake.direction!=1>snake.direction=2;elseif<key==DOWN&&snake.direction!=3>snake.direction=4;}/*endwhile<1>*/}/*游戏结束*/void GameOver<void>{cleardevice<>;PrScore<>;setcolor<RED>;settextstyle<0,0,4>;outtextxy<200,200,"GAME OVER">;getch<>;}/*输出成绩*/void PrScore<void>{charstr[10];setfillstyle<SOLID_FILL,YELLOW>;bar<50,15,220,35>;setcolor<6>;settextstyle<0,0,2>;sprintf<str,"score:%d",score>;outtextxy<55,20,str>;}/*图形结束*/void Close<void>{getch<>;closegraph<>;}四.课程设计总结课程设计是培养学生综合运用所学知识 ,分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在.因此,作为二十一世纪的大学生来说,掌握程序开辟技术是十分重要的,而 C 语言又是最常见,功能最强大的一种高级语言,因此做好 C 语言课程设计是十分必要的.回顾起此次课程设计,我仍感慨颇多.从拿到题目到完成整个编程,从理论到实践,在整整半个月的日子里,我学到不少不少的东西.不仅可以巩固以前所学过的知识,而且学到了不少在书本上所没有学到过的知识.通过这次课程设计,我懂得了理论与实际相结合是很重要的,惟独理论知识是远远不够的,惟独把所学的理论知识与实践相结合起来,才干真正提高自己的实际动手能力和独立思量的能力.在设计的过程中,可以说得是艰难重重.但这毕竟第一次做的,难免会遇到各种各样的问题.同时在设计的过程中我也发现了自己的不少不足之处 ,对一些前面学过的知识理解得不够深刻,掌握得不够坚固,比如说结构体,指针等等.通过这次课程设计,我把前面所学过的知识又重新温故了一遍.我做的是贪吃蛇游戏.虽然这只是一个简单的游戏,但对我一个初学者来说却还是一个很大的艰难.加之是第一次做课程设计,所以第一天上午在机房做了两节课却还丝毫没有发展,最主要是不知从何开始.这个时候我才懊悔上课的时候没有认真的听讲.可是现在一切都晚了,还好时间还算充裕,就拿出书本重新学习了一下.特殊是结构体,指针的部份,几乎是一片空白.无非经过几天的努力,大体上把课本上的知识点重新看了一遍,知识点也都基本是撑握了,所以一下一步就是开始正式的编程序了.我先在网上下了一篇类似的程序,经过子细的研究,终于读懂了C 语言编程的基本过程和方法.编程是一件很枯燥很无聊的事情,但是出于完成作业,得到学分的压力,还是强迫自己坚持下去,按照老师所说的模块化思想,分部份的进行编写.编程是一件高精度、模X 化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行.所以认真子细就非常重要了.开始的时候真的感觉编程是一件很无聊的事情,无非当一个程序运行成功的时候,那种欢跃是无法言语的.经过几天的努力,终于把程序完成为了,尽管程序还是有不少错误和漏洞,无非还是很高兴的.无论如何是自己的劳动成果,是自己经过努力得到的成绩,是自己进步的证明.通过这次课程设计,我对 C 语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才干更好地学习它 .我也发现我的好多不足之处,首先是自己在指法上还不行,时常按错字母,通过学习也有所改进;再者,我对C 语言的一些标准库函数不太了解;还有对函数调用的正确使用不够熟悉,对 C 语言中时常浮现的错误还不了解.通过实践的学习,我认识到学好计算机要重视实践操作.不仅仅是学习C 语言,还是其它的语言,以与其它的计算机方面的知识都要重在实践.所以在以后的学习过程中,我会更加注重实践操作,努力学好计算机技术.在课程设计过程中,收获知识,提高能力的同时,我也学到了不少人生的哲理, 懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪.这是一个让人受益匪浅的过程.注:部份材料源自百度百科。

相关文档
最新文档