c语言实训贪吃蛇报告书 贪吃蛇算法的C语言程序设计报告

作者&投稿:范迹 (若有异议请与网页底部的电邮联系)
《高级语言程序设计》课程设计 实验报告

题目:贪吃蛇
专业:计算机
班级: 软件
姓名:
成绩:
指导教师:

完成日期:2008年09月23日

一、目的
1. 进一步掌握和利用C语言进行程设计的能力;
2、 进一步理解和运用结构化程设计的思想和方法;
3、 初步掌握开发一个小型实用系统的基本方法;
4、 学会调试一个较长程序的基本方法;
5、 学会利用流程图或N-S图表示算法;
6、 掌握书写程设计开发文档的能力(书写课程设计报告);

二、内容与设计思想。
(1).系统功能与分析(填写你所设计的菜单及流程图)。

功能:进行贪食蛇游戏
分析:定义键盘方向键操作,随机数发生器产生食物,并分别利用函数判断贪食蛇的长度及游戏是否成功等.
并能够输入游戏成绩.

(2).数据结构

struct Food
{
int x;/*食物的横坐标*/
int y;/*食物的纵坐标*/
int yes;/*判断是否要出现食物的变量*/
}food;/*食物的结构体*/

struct Snake
}
int x[N];
int y[N];
int node;/*蛇的节数*/
int direction;/*蛇移动方向*/
int life;/* 蛇的生命,0活着,1死亡*/
}snake;

(3).模块设计
根据功能需要:
源文件 :#include <stdio.h>
#include <graphics.h>
#include <stdlib.h>
#include <dos.h>

函数名 功能
void main() 游戏主程序
void Init(void); 图形驱动
void Close(void); 图形结束
void DrawK(void); 开始画面
void GameOver(void); 结束游戏
void GamePlay(void); 玩游戏具体过程
void PrScore(void); 输出成绩

(3)总体设计思想:
利用图形驱动,制作美观的游戏界面.
通过随机函数产生随机数,控制游戏过程食物的出现.
定义键盘操作,控制游戏过程蛇的移动方向.
画出边界,并判断游戏是否结束.
统计游戏过程蛇吃的食物数量,计算并输出游戏成绩.

(4)调试过程: 测试数据及结果,出现了哪些问题,如何修改的

这里,你就写一下你平时出错的地方,与如何修改的.这里我也不好帮你写.

(5)程序有待改进的地方及本次实习的收获和建议

收获:加深认识了程序编译过程的中团队合作的重要性.
提高了自己的编程能力

(7)源程序清单(主要代码)

清单只要将上面的程序全部粘帖就可以了.

游戏的程序不同的人实现方法各不相同.
没有看你的程序我们也无法给你正确的回答.
报告应该按照你的程序来写.
另外,写报告其实很简单.
只要你知道程序里某个函数的具体实现方式就很容易写的.
建议你把程序也发上来吧.

程序有了那就该按你的程序写报告啊 就这么给个要求 谁知道怎么写啊

C语言简易课程设计贪吃蛇~

#define N 200
#include
#include
#include
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
int i,key;
int score=0;/*得分*/
int gamespeed=50000;/*游戏速度自己调整*/
struct Food
{
int x;/*食物的横坐标*/
int y;/*食物的纵坐标*/
int yes;/*判断是否要出现食物的变量*/
}food;/*食物的结构体*/
struct Snake
{
int x[N];
int y[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)
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\c");
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]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;
else
if(key==UP&&snake.direction!=4)
/*判断是否往相反的方向移动*/
snake.direction=3;
else
if(key==RIGHT&&snake.direction!=2)
snake.direction=1;
else
if(key==LEFT&&snake.direction!=1)
snake.direction=2;
else
if(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)
{
char str[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语言代码,觉得挺好玩的
答:。。4555555555555

用C语言写贪吃蛇的代码,怎么让蛇不能反向走呢?大神在哪里??部分代码如下...
答:墙有坐标撒,以左下角为坐标原点,蛇每走一步加入判断:蛇方向是上,判断蛇头的位置是否与右上角的纵坐标相等,相等就是撞墙;其他方向类似。蛇的身体是一个(x,y)的一系列坐标链表,每走一步除了判断墙体,再判断蛇头的坐标-反向坐标,与坐标集合的第二个节点相比,是否相等,相等就是反向操作;再...

贪吃蛇大作战-游戏体验报告
答:于是,我个人把它定位为一款 既杀时间又不烧脑 ,老少咸宜的游戏。关于游戏的体验:1.无尽模式, 绝对的杀时间神器。如果你刚好有时间精力,又够小心和耐力,感觉你能玩到地老天荒。我妹上次玩到2w多分的时候,实在坚持不下去让贪吃蛇自己撞墙死了。厉害的玩家甚至可以玩到霸屏,走自己的路让别人无...

c语言贪吃蛇源代码怎么用?
答:C语言贪吃蛇源代码必须经过相应的C/C++编译器编译成EXE文件后才能运行。 由于我们通常使用的操作系统是Windows系统,而在该系统下最长用的C/C++编译器是VC++编译器,目前在大专院校常用的版本还是VC++6.0 下面就以VC++6.0来说明编译过程: 1.在VC++6.0中通过“File”菜单下的 “Open”子菜单打开贪吃蛇代码 2.在VC++...

C语言的贪吃蛇源代码
答:贪吃蛇游戏,由于是C++源码 且 用到Windows API ,是控制台界面不是图形界面,需要用VC++6.0 或 VC++2010 在windows环境编译运行。如果符合上述条件一定可以编译运行zjlj,2015.3.16*/#define DEBUG 0 //当程序在调试阶段时 DEBUG为 1#include<iostream>#include<windows.h>#include#include<conio.h>using namespace...

c语言贪吃蛇转向问题
答:计时器time,键盘捕捉函数getkey(),随机产生新身体newBody()。程序开始->屏幕中心产生一个“蛇”->得到按键命令后移动->计时器++time后,按照上次得到的按键命令方向移动->得到新按键命令转向->得到新“身体”->撞墙(自身)结束游戏 产生蛇:屏幕确定地点选取三个位置,放置三个Body,在第一次接收...

用C语言编写 贪吃蛇的思路什么怎么样的
答:2011-05-01 C语言编写贪吃蛇需要用哪些函数?? 2008-12-31 用C语言编写贪吃蛇的游戏需要哪些方面的知识 2 2013-08-31 用C语言怎么做贪吃蛇游戏 7 2016-03-14 C语言贪吃蛇程序好复杂,我看了网上教程才一步步会一点点,自己... 1 2018-05-11 C语言编写贪吃蛇怎么才能让蛇动起来呀? 2009-06-20 用c语言...

贪吃蛇c语言代码
答:include<stdio.h> include<stdlib.h> include<Windows.h> include<conio.h> include char gamemap[20][40];//游戏地图大小 20*40 int score=0;//当前分数 //记录蛇的结点 int x[800];//每个结点的行编号 int y[800];//每个结点的列编号 int len = 0;//蛇的长度 //记录水果信息 int...

跪求c语言贪吃蛇代码,运行环境:vc++6.0 或者code blocks,以前在网站...
答:include<stdio.h> include<stdlib.h> include include<conio.h> typedef struct snake { int a;int b;struct snake *u;struct snake *n;}snake,*snake1;typedef struct food { int a;int b;}food;void main(){ char c,c0 = 'd';int i,j,k,n=1,t,at;snake p,q;snake *dd,*dd...

大学期末作业,用c语言代码做一个实训管理系统,主要功能菜单有:实训基 ...
答:题目一:贪吃蛇游戏 问题描述:贪吃蛇是一个深受人们喜爱的游戏,一条蛇在密闭的围墙内,在围墙内随机出现一个食物,通过按键盘上的四个光标控制蛇向上下左右四个方向移动,蛇头撞到食物,则表示食物被蛇吃掉,这时蛇身子长一节,同时积分10分,接着又出现食物,等待被蛇吃掉,如果在蛇移动的过程中,撞...