1、Linux应用开发课程设计报告Linux应用开发课程设计报告项目名称 贪吃蛇学号: 姓名: 张浩 专业: 软件工程专业 班级: 14软工软设1班 指导教师: 郭俊颖 南 阳 理 工 学 院 软 件 学 院2016年12月一需求分析1.问题描述蛇与食物出现的位置;蛇的游动;怎样实现蛇撞到自身会死;怎样判断蛇撞到墙;2基本要求实现蛇在不断吃到食物后分数增加,实现蛇的游动。3.需实现的主要功能蛇与食物不能出现在一起;蛇撞到自身以及墙都会死;蛇吃到事物后,长度增加同时分数增加一随着分数的增加,关卡难度增加4.设计实现方案将蛇头的坐标以及蛇身的坐标都用二维数组表示出来,规定第一个下标为0则代表蛇头,为i
2、则为蛇身,第二个下标为0代表横坐标,为1代表纵坐标,foodx代表食物横坐标,foody代表食物纵坐标,当蛇头坐标与事物坐标相等时则表示蛇吃到了事物,长度加一。方向变化为:当向上走时,横坐标不变,纵坐标减减;向下走时,横坐标不变,纵坐标加加;向左走时纵坐标不变,横坐标-;向右走时纵坐标不变,横坐标+。2系统设计分功能描述和设计流程图当用户打开贪吃蛇时,进入主界面,主界面有开始及退出两个选项,当用户点击开始时,进入第二个界面(游戏界面),左侧为游戏界面,右上方显示分数与等级,当用户控制蛇吃到事物时分数会增加,当分数增加到5,15,20时,等级会提升。右下方为上下左右开始返回键,用户可以控制上下左
3、右来操控蛇的游动方向,当用户点击开始时游戏则开始,当用户点击返回时,则退回到主界面。设计流程图如图2-1所示: 2-1 设计流程图3系统实现贪吃蛇的界面和代码图31信息详情界面贪吃蛇的核心代码:void GameWidget:timeoutSlot() /判断是否知道食物 if(snake00=foodx&snake01=foody) /吃到食物发出声音 sound-play(); /如果吃到食物,食物坐标更新 int i=0; foodcount+; score+; str1=QString:number(score); scoreshow-setText(str1); QTime t; t
4、= QTime:currentTime(); qsrand(t.msec()+t.second()*1000); foodx=qrand()%COL; foody=qrand()%ROW; while(isetInterval(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,size
5、of(snake); /实现蛇的游动 for(int i=foodcount;i=1;i-) snakei0=snakei-10; snakei1=snakei-11; switch(direction) case UP:snake01-;break; case DOWN:snake01+;break; case LEFT:snake00-;break; case RIGHT:snake00+;break; /判断蛇是否撞到自身 for(int i=1;iplay(); memcpy(snake,snake1,sizeof(snake); timer-stop(); if(QMessageBo
6、x:question(this,提示,游戏结束,是否重新游戏,QMessageBox:Yes,QMessageBox:No)=QMessageBox:Yes) QTime t; int i; t= QTime:currentTime(); qsrand(t.msec()+t.second()*1000); snake00=qrand()%COL; snake01=qrand()%ROW; direction=qrand()%4; foodx=qrand()%COL; foody=qrand()%ROW; while(i) if(snake00=foodx&snake01=foody) food
7、x=qrand()%COL; foody=qrand()%ROW; i=1; else i=0; foodcount=0; score=0; level=0; str1=QString:number(score); str2=QString:number(level); scoreshow-setText(str1); levelshow-setText(str2); return; /判断蛇是否撞到墙体 if(snake00=COL|snake01=ROW) sound1-play(); memcpy(snake,snake1,sizeof(snake); timer-stop(); if(
8、QMessageBox:question(this,提示,游戏结束,是否重新游戏,QMessageBox:Yes,QMessageBox:No)=QMessageBox:Yes) QTime t; int i; t= QTime:currentTime(); qsrand(t.msec()+t.second()*1000); snake00=qrand()%COL; snake01=qrand()%ROW; direction=qrand()%4; foodx=qrand()%COL; foody=qrand()%ROW; while(i) if(snake00=foodx&snake01=f
9、oody) foodx=qrand()%COL; foody=qrand()%ROW; i=1; else i=0; foodcount=0; score=0; level=0; str1=QString:number(score); str2=QString:number(level); scoreshow-setText(str1); levelshow-setText(str2); else delete this; return ; this-update();4总结通过这次试验,让我学到很多这个学期没有接触过的很多知识,完成一个贪吃蛇的项目;第一步就是先理清思路,设计主界面,主界面是
10、以一具封闭的画布,并在画布的设计蛇体和食物。蛇头如果碰到墙或者与蛇身的某一部分碰到就会死亡;如果蛇头碰到食物,就会自动增加一节蛇身,并更改得分。想要写出好的程序,还是要有扎实的基础,这样遇到问题就不会一筹莫展来。在编程时我们要有想象力,不要拘泥于现有的贪吃蛇游戏,而是要把自己想到的再加上所学的知识,遇到问题不能怕,而是要专心找出问题的原因,再回来看看书本的知识,不懂的还可以问问老师。编程过程还要养成良好的编程习惯,这样不仅自己能够很好看懂自己的代码,也让人家容易看懂自己的代码,而不至于代码知识自己会看,出来问题只有自己会解决而其他人都不会解决;遇到问题时要考虑最简单的解决方案,只有简单的方案不
11、能满足要求时再考虑复杂的方案。最主要编程还是要多与人沟通,不会的不能立即问别人,但是一段时间后解决不了时还是应该向别人请教请教,“三人行必有我师”正是这个意思。通过这次实验,我深刻地体会到了面向对象与面向过程的区别。程序在最初设计时由于面向对象的思想不够成熟,导致在最后想要增加一些新的功能时,出现了一些麻烦。5参考文献1王海粟. Iphone手机安全技术分析J. 技术研究, 2004, 21(1)2张鲜明.解码时尚教皇乔布斯J. 城市环境设计, 2010,12(07)3王嘉琦.初探Xcode中指针和数组的使用J.工程技术,2011,23(06)4(美)科施恩.苹果Mac OS X操作系统标准培训教材M.北京:机械工业出版社,20095葛家澍, 林志军. IPhone应用程序开发入门与实战M. 厦门: 厦门大学出版社, 2001