Linux应用开发课程设计报告
项目名称 贪吃蛇
学号:
姓名: 张浩
专业: 软件工程专业
班级: 14软工软设1班
指导教师: 郭俊颖
南 阳 理 工 学 院 软 件 学 院
2016年12月
一需求分析
问题描述
①蛇与食物出现的位置;
②蛇的游动;
③怎样实现蛇撞到自身会死;
④怎样判断蛇撞到墙;
2基本要求
实现蛇在不断吃到食物后分数增加,实现蛇的游动。
需实现的主要功能
①蛇与食物不能出现在一起;
②蛇撞到自身以及墙都会死;
③蛇吃到事物后,长度增加同时分数增加一
⑤随着分数的增加,关卡难度增加
设计实现方案
将蛇头的坐标以及蛇身的坐标都用二维数组表示出来,规定第一个下标为0则代表蛇头,为i则为蛇身,第二个下标为0代表横坐标,为1代表纵坐标,foodx代表食物横坐标,foody代表食物纵坐标,当蛇头坐标与事物坐标相等时则表示蛇吃到了事物,长度加一。方向变化为:当向上走时,横坐标不变,纵坐标减减;向下走时,横坐标不变,纵坐标加加;向左走时纵坐标不变,横坐标--;向右走时纵坐标不变,横坐标++。
2系统设计
分功能描述和设计流程图
当用户打开贪吃蛇时,进入主界面,主界面有开始及退出两个选项,当用户点击开始时,进入第二个界面(游戏界面),左侧为游戏界面,右上方显示分数与等级,当用户控制蛇吃到事物时分数会增加,当分数增加到5,15,20时,等级会提升。右下方为上下左右开始返回键,用户可以控制上下左右来操控蛇的游动方向,当用户点击开始时游戏则开始,当用户点击返回时,则退回到主界面。
。设计流程图如图2-1所示:
2-1 设计流程图
3系统实现
贪吃蛇的界面和代码
图3–1信息详情界面
贪吃蛇的核心代码:
void GameWidget::timeoutSlot()
{
//判断是否知道食物
if(snake[0][0]==foodx&&snake[0][1]==foody)
{
//吃到食物发出声音
sound->play();
//如果吃到食物,食物坐标更新
int i=0;
foodcount++;
score++;
str1=QString::number(score);
scoreshow->setText(str1);
QTime t;
t= QTime::currentTime();
qsrand(t.msec()+t.second()*1000);
foodx=qrand()%COL;
foody=qrand()%ROW;
while(i<=foodcount)
{
i++;
if(snake[i][0]==foodx&&snake[i][1]==foody)
{
foodx=qrand()%COL;
foody=qrand()%ROW;
i=0;
}
}
switch(score)
{
case 5:timer->setInterval(450);level++;break;
case 10:timer->setInterval(400);level++;break;
case 15:timer->setInterval(350);level++;break;
}
str2=QString::number(level);
levelshow->setText(str2);
}
memcpy(snake1,snake,sizeof(snake));
//实现蛇的游动
for(int i=foodcount;i>=1;i--)
{
snake[i][0]=snake[i-1][0];
snake[i][1]=snake[i-1][1];
}
switch(direction)
{
case UP:snake[0][1]--;break;
case DOWN:snake[0][1]++;break;
ca