软件工程导论实习报告
安徽工业大学计算机学院 “程序设计综合实习【软】”报告
题目:关于“贪吃蛇”游戏的课程报告
姓名:刘玉路 学号: 学院: 专业:软件工程 班级:指导教师:
完成日期:2011年6月5日
内容
课程设计任务书
目录
一、可行性研究报告 ............................... 4 1. 项目由来 ................................... 4 2. 可选方案 ................................... 4 3. 可行性 ..................................... 4 4. 结论 ....................................... 4 二、需求规格说明 ................................. 4 1. 目标 ........................................ 4 2. 功能需求 ................................... 5 3. 数据需求 ................................... 5 三、总体设计 . .................................... 5 1. 软件结构 .................................... 5 四、详细设计 . .................................... 6 1. 各模块算法流程图 ............................ 6 五、程序源代码 . .................................. 7 六、程序测试 . ................................... 10 1. 测试内容和结果表+运行效果抓图 .............. 10 2. 测试效果 .................................. 11 七、总结 . ....................................... 11 1. 项目评价 ................................... 11 2. 不足之处 ................................... 11 3. 心得体会 ................................... 11
一、可行性研究报告
1. 项目由来
对“贪吃蛇”这一经典游戏进行的课程设计以加深对软件工程思
想的理解与认识,以便在以后的编程中熟练应用。
2. 可选方案
对原有的游戏代码进行一定程度上的改进吗,通过增加函数以实
现更多游戏控制功能。
3. 可行性
本程序是在原有的游戏代码的基础上进行修改而得的,所以个人可独立完成,只需要一定的时间进行熟悉现有代码并进行修改设计,技术上要求较简单,设备资源(计算机)方便获取,成本较低,可行性较高。
4. 结论
本系统可以马上开始实施,并进可能的做到提前完成。从人力资源的角度来说,尽量独立完成。从开发成本角度来说,将支出成本降到最低。所以可选方案即为最优方案。
二、需求规格说明
1. 目标
本文主要描述连连看游戏应用程序的软件要求,目的是为了清晰地描述用户使用本软件必须要完成的任务和定义开发人员必须实现软件功能,使用户利用程序能够完成他们的任务。
2. 功能需求
由主函数读入用户的命令,进行判断,如果命令符合预定规则,
则确认请求,并执行相应的命令,执行后对屏幕进行更新,然后读入第二条命令,如此往复。
3. 数据需求
在数据结构的选取,我们选择了链表,链表具有用多少空间就开多少空间的优点,使程序执行更稳定,高效。
三、总体设计
1. 软件结构
四、详细设计
1. 各模块算法流程图
五、程序源代码
#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; }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,"D:\\tc20\\BGI"); cleardevice(); }
void DrawK(void) {
setcolor(11);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
for(i=50;i
{
rectangle(i,40,i+10,49); rectangle(i,451,i+10,460); }
for(i=40;i
rectangle(50,i,59,i+10); rectangle(601,i,610,i+10); } }
void GamePlay(void) {
randomize(); food.yes=1; 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) {
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]; }
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
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]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
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); }
if(snake.life==1) break;
key=bioskey(0); if(key==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; } }
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(); }
六、程序测试
1. 测试内容和结果表+运行效果抓图
2. 测试效果
七、总结
1. 项目评价
本程序在原有的代码基础上进行修改,使一些错误得到改正,提高了游戏的可玩性和控制性,并且耗时较短,对设备资源和人力资源的要求较低,成本最大程度上得到了控制,同时锻炼了实验操作者的文档书写能力。
2. 不足之处
(1)没有解决死局的问题。
(2)没有实现提示的功能。
(3)没有实现重排的功能。
3. 心得体会
总的来说,这次练习贪吃蛇游戏收获很大,达到了实习锻炼的目的。自己的C 语言设计能力得到了提高,体验了软件开发过程,培
第11页共12页
养了项目开发的分析能力和程序设计能力。在这次练习中我通过了解贪吃蛇这个游戏体会到了编程的快乐,也体会到了那种做成功的喜悦,当我们遇到问题时能够相互合作去解决问题,不仅程序问题成功解除了,同时也加深了印象、加强了我们思考的深度。
总之,这次实习让我学到了很多有用的东西,也相信在我今后的学习生活中会发挥很大的作用。
第12页共12页