C++课程设计报告.docx
- 文档编号:18495302
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:27
- 大小:1.24MB
C++课程设计报告.docx
《C++课程设计报告.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告.docx(27页珍藏版)》请在冰点文库上搜索。
C++课程设计报告
重庆大学课程设计报告
课程设计题目:
GUI小游戏的设计与实现
学院:
计算机学院
专业班级:
网络1班
年级:
2011级
姓名:
费仁杰,胡吉乾,颜宵鹏
学号:
20115435,20115433,20115434
完成时间:
2013年1月3日
成绩:
指导教师:
杨广超
重庆大学教务处制
课程设计指导教师评定成绩表
学号:
20115435姓名:
费仁杰班级:
11网络工程1班
项目
分值
优秀
(100>x≥90)
良好
(90>x≥80)
中等
(80>x≥70)
及格
(70>x≥60)
不及格(x<60)
评分
参考标准
参考标准
参考标准
参考标准
参考标准
学习态度
15
学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作
学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务
学习态度尚好,遵守组织纪律,基本保证设计时间,按期完成各项工作
学习态度尚可,能遵守组织纪律,能按期完成任务
学习马虎,纪律涣散,工作作风不严谨,不能保证设计时间和进度
技术水平与实际能力
25
设计合理、理论分析与计算正确,实验数据准确,有很强的实际动手能力、经济分析能力和计算机应用能力,文献查阅能力强、引用合理、调查调研非常合理、可信
设计合理、理论分析与计算正确,实验数据比较准确,有较强的实际动手能力、经济分析能力和计算机应用能力,文献引用、调查调研比较合理、可信
设计合理,理论分析与计算基本正确,实验数据比较准确,有一定的实际动手能力,主要文献引用、调查调研比较可信
设计基本合理,理论分析与计算无大错,实验数据无大错
设计不合理,理论分析与计算有原则错误,实验数据不可靠,实际动手能力差,文献引用、调查调研有较大的问题
创新
10
有重大改进或独特见解,有一定实用价值
有较大改进或新颖的见解,实用性尚可
有一定改进或新的见解
有一定见解
观念陈旧
论文(计算书、图纸)撰写质量
50
结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化要求,书写工整或用计算机打印成文;图纸非常工整、清晰
结构合理,符合逻辑,文章层次分明,语言准确,文字流畅,符合规范化要求,书写工整或用计算机打印成文;图纸工整、清晰
结构合理,层次较为分明,文理通顺,基本达到规范化要求,书写比较工整;图纸比较工整、清晰
结构基本合理,逻辑基本清楚,文字尚通顺,勉强达到规范化要求;图纸比较工整
内容空泛,结构混乱,文字表达不清,错别字较多,达不到规范化要求;图纸不工整或不清晰
指导教师评定成绩:
指导教师签名:
年月日
课程设计指导教师评定成绩表
学号:
20115433姓名:
胡吉乾班级:
11网络工程1班
项目
分值
优秀
(100>x≥90)
良好
(90>x≥80)
中等
(80>x≥70)
及格
(70>x≥60)
不及格(x<60)
评分
参考标准
参考标准
参考标准
参考标准
参考标准
学习态度
15
学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作
学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务
学习态度尚好,遵守组织纪律,基本保证设计时间,按期完成各项工作
学习态度尚可,能遵守组织纪律,能按期完成任务
学习马虎,纪律涣散,工作作风不严谨,不能保证设计时间和进度
技术水平与实际能力
25
设计合理、理论分析与计算正确,实验数据准确,有很强的实际动手能力、经济分析能力和计算机应用能力,文献查阅能力强、引用合理、调查调研非常合理、可信
设计合理、理论分析与计算正确,实验数据比较准确,有较强的实际动手能力、经济分析能力和计算机应用能力,文献引用、调查调研比较合理、可信
设计合理,理论分析与计算基本正确,实验数据比较准确,有一定的实际动手能力,主要文献引用、调查调研比较可信
设计基本合理,理论分析与计算无大错,实验数据无大错
设计不合理,理论分析与计算有原则错误,实验数据不可靠,实际动手能力差,文献引用、调查调研有较大的问题
创新
10
有重大改进或独特见解,有一定实用价值
有较大改进或新颖的见解,实用性尚可
有一定改进或新的见解
有一定见解
观念陈旧
论文(计算书、图纸)撰写质量
50
结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化要求,书写工整或用计算机打印成文;图纸非常工整、清晰
结构合理,符合逻辑,文章层次分明,语言准确,文字流畅,符合规范化要求,书写工整或用计算机打印成文;图纸工整、清晰
结构合理,层次较为分明,文理通顺,基本达到规范化要求,书写比较工整;图纸比较工整、清晰
结构基本合理,逻辑基本清楚,文字尚通顺,勉强达到规范化要求;图纸比较工整
内容空泛,结构混乱,文字表达不清,错别字较多,达不到规范化要求;图纸不工整或不清晰
指导教师评定成绩:
指导教师签名:
年月日
课程设计指导教师评定成绩表
学号:
20115434姓名:
颜宵鹏班级:
11网络工程1班
项目
分值
优秀
(100>x≥90)
良好
(90>x≥80)
中等
(80>x≥70)
及格
(70>x≥60)
不及格(x<60)
评分
参考标准
参考标准
参考标准
参考标准
参考标准
学习态度
15
学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作
学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务
学习态度尚好,遵守组织纪律,基本保证设计时间,按期完成各项工作
学习态度尚可,能遵守组织纪律,能按期完成任务
学习马虎,纪律涣散,工作作风不严谨,不能保证设计时间和进度
技术水平与实际能力
25
设计合理、理论分析与计算正确,实验数据准确,有很强的实际动手能力、经济分析能力和计算机应用能力,文献查阅能力强、引用合理、调查调研非常合理、可信
设计合理、理论分析与计算正确,实验数据比较准确,有较强的实际动手能力、经济分析能力和计算机应用能力,文献引用、调查调研比较合理、可信
设计合理,理论分析与计算基本正确,实验数据比较准确,有一定的实际动手能力,主要文献引用、调查调研比较可信
设计基本合理,理论分析与计算无大错,实验数据无大错
设计不合理,理论分析与计算有原则错误,实验数据不可靠,实际动手能力差,文献引用、调查调研有较大的问题
创新
10
有重大改进或独特见解,有一定实用价值
有较大改进或新颖的见解,实用性尚可
有一定改进或新的见解
有一定见解
观念陈旧
论文(计算书、图纸)撰写质量
50
结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化要求,书写工整或用计算机打印成文;图纸非常工整、清晰
结构合理,符合逻辑,文章层次分明,语言准确,文字流畅,符合规范化要求,书写工整或用计算机打印成文;图纸工整、清晰
结构合理,层次较为分明,文理通顺,基本达到规范化要求,书写比较工整;图纸比较工整、清晰
结构基本合理,逻辑基本清楚,文字尚通顺,勉强达到规范化要求;图纸比较工整
内容空泛,结构混乱,文字表达不清,错别字较多,达不到规范化要求;图纸不工整或不清晰
指导教师评定成绩:
指导教师签名:
年月日
重庆大学本科学生课程设计任务书
课程设计题目
GUI小游戏的设计与实现
学院
计算机学院
专业
网络工程
年级
2011级
已知参数和设计要求:
课程设计对游戏内容不做限制,学生需要自行设计游戏的内容和规则,并在课程设计报告中进行描述。
游戏内容可以参考俄罗斯方块、坦克大战等游戏。
要求以小组为单位,用C++实现游戏的主要功能模块。
最后需要提供的材料包括课程设计报告1份,程序拷贝1份(包括源代码和可执行程序),报告用PPT电子文档一份。
学生应完成的工作:
根据面向对象程序设计思想和C++编程技术,设计实现GUI小游戏。
上机调试并能正确运行。
最后提交完整的设计报告和软件程序拷贝,以及报告用PPT电子文档。
目前资料收集情况(含指定参考资料):
《AcceleratedC++:
PracticalProgrammingbyExample》,AndrewKoenig,BarbaraE.Moo著,Addison-Wesley,2000.
《Windows程序设计:
第5版》,CharlesPetzold著,北京大学出版社,2003.
《高级语言C++程序设计编程范例与精解》,周玉龙,刘景编,高等教育出版社,2003.
课程设计的工作计划:
课程设计时间为一周,从18周星期一开始(2012年12月31日),到18周星期五结束(2013年1月4日)。
课程设计以组为单位进行。
每组不能超过4人,不能少于2人。
星期一进行需求分析;星期二进行软件设计;星期三用C++语言实现程序;星期四对程序进行调试,完成课程设计报告;星期五提交程序和课程设计报告,进行评审。
本组由费仁杰(20115435)、胡吉乾(20115433)和颜宵鹏(20115434)3人组成。
费仁杰负责课程设计的查找资料,游戏界面设置及画出贪吃蛇和食物,写实验报告,代码总体检查,制作PPT部分,所进行的工作占总工作量的34%;
胡吉乾负责课程设计的查找资料,通过键盘对贪吃蛇进行方向操作设置穿墙部分,写实验报告及代码注释,制作PPT部分,所进行的工作占总工作量的33%;
颜宵鹏负责课程设计的查找资料,通过键盘对贪吃蛇进行状态操作(加减速)及游戏计分,设置背景音乐,写实验报告,制作PPT部分,所进行的工作占总工作量的33%。
任务下达日期2012年12月21日
完成日期2013年1月3日
说明:
学院、专业、年级均填全称,如:
计算机学院、计算机科学与技术、2010。
课程设计正文
1.需求分析
1.选题
接到课程设计任务后,我们对几款经典小游戏作了分析并筛选,然后根据老是推荐的题目以及自己的编程能力做了选择,决定了编写简单贪吃蛇游戏,锻炼自己通过Qt实现对函数,类的综合运用。
2.功能
先做贪吃蛇界面,再通过键盘上不同按键对贪吃蛇进行操作,如各个方向运动,计分数等等。
2.系统设计(类图、模块图等)
1.设计思路
通过Qt绘图事件及UI界面设置,绘出贪吃蛇游戏界面,并用draw函数画出矩形(至少三个连在一起代表贪吃蛇,单独一个随机出现在除在贪吃蛇身上外界面任意一格),并伴有背景音乐进行游戏。
2.程序框图
3.游戏流程图
3.关键代码描述
snake类头文件代码
#ifndefSNAKE_H
#defineSNAKE_H
#include
/这个ui是namespaceUi里的Widget类,而这个
类又是简单的继承了ui_widget.h里的Ui_Widget类(没有添加任何成员)*/
namespaceUi{
classSnake;
}
/*namespaceUi里的Widget类其实就是个空壳,而他的基类也仅仅是
把此窗口上的所有控件的声明实例化初始化了,仅仅是为了分离ui和其他控制代码*/
classSnake:
publicQWidget
{
Q_OBJECT
public:
explicitSnake(QWidget*parent=0);//explicit和构造函数一起用.explicitconstructor指明构造函数只能显示使用,目的是为了防止不必要的隐式转化.
~Snake();
protected:
voidpaintEvent(QPaintEvent*);
voidkeyPressEvent(QKeyEvent*);
voidtimerEvent(QTimerEvent*);
private:
Ui:
:
Snake*ui;
QSizenodeSize;
QSizegameAreaSize;
QPointgamePoint;
QList
QPointhead;
QPointfood;
intcolumns,rows;
enumDIR{D,R,U,L};//枚举
DIRdirector;
intspeed;
intlevel;
intfoodnumber;
intgrade;
inthigh_grade;
voidgenFood();
boolisOver();
inttimerId;
};
#endifSNAKE_H
头文件snake类中定义了画图函数,键盘操作函数以及计时函数,定义了Qlist类对象snakeBody作为游戏主体贪吃蛇。
snake.cpp文件代码
#include"snake.h"
#include"ui_snake.h"
#include
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
Snake:
:
Snake(QWidget*parent):
QWidget(parent),
ui(newUi:
:
Snake)
{
ui->setupUi(this);
setFocusPolicy(Qt:
:
StrongFocus);//通过Tab键,单击两种方式获得焦点
nodeSize.setWidth(20);
nodeSize.setHeight(20);//设置蛇大小
gamePoint.setX(100);
gamePoint.setY(16);//格子起点坐标
columns=30;
rows=30;
grade=0;
gameAreaSize.setWidth(nodeSize.width()*columns);
gameAreaSize.setHeight(nodeSize.height()*rows);//网格总体大小设置
resize(nodeSize.width()*50,nodeSize.height()*32);//窗口大小
snakeBody< < < director=R;//初始化蛇运动方向,向右 qsrand(QTime(0,0,0).msecsTo(QTime: : currentTime())); genFood(); level=1; speed=240-level*20;//设置贪吃蛇最初速率 fstreamf; f.open("grade.obj",ios: : in);//打开记录游戏分数文件,最初默认 stringline;存入为0 getline(f,line); istringstreamstream(line); stream>>high_grade; ui->lcdNumber_2->display(high_grade);//窗口显示分数 f.close(); ui->gameoverLabel->setVisible(false); } Snake: : ~Snake() { deleteui; } //画图函数,设置游戏界面及画出贪吃蛇 voidSnake: : paintEvent(QPaintEvent*) { QPainterp(this); p.drawPixmap(0,0,QPixmap(": /snake4.png")); p.drawPixmap(100,16,QPixmap(": /snake1.png")); p.drawPixmap(710,16,QPixmap(": /snake3.png"));//游戏背景图片设置 //设置网格范围,即贪吃蛇运动范围 QPainterPathpath1; for(intx=0;x<=columns;x++) { path1.moveTo(gamePoint.x()+x*nodeSize.height(),gamePoint.y()); path1.lineTo(gamePoint.x()+x*nodeSize.height(),gamePoint.y()+gameAreaSize.height()); } for(inty=0;y<=rows;y++) { path1.moveTo(gamePoint.x(),gamePoint.y()+y*nodeSize.width()); path1.lineTo(gamePoint.x()+gameAreaSize.width(),gamePoint.y()+y*nodeSize.width()); //设置终点坐标,自动把上一点当作起点 } p.setPen(QColor(65,65,65,200)); p.drawPath(path1); QPainterPathpath; foreach(QPointnode,snakeBody)//根据数组中每个元素来循环代码块 { path.addRect(gamePoint.x()+node.x()*nodeSize.width(), gamePoint.y()+node.y()*nodeSize.height(), nodeSize.width(), nodeSize.height()); } p.setPen(QColor(12,12,12,300)); p.setBrush(QColor(23,196,45,200)); p.drawPath(path); p.setBrush(QColor(152,0,0,200)); p.drawRect(gamePoint.x()+food.x()*nodeSize.width(), gamePoint.y()+food.y()*nodeSize.height(), nodeSize.width(), nodeSize.height());//画增加长度后的蛇 QPixmapsp(": /snake2.png"); for(inti=0;i { p.drawPixmap(63,594-i*(sp.height()+1),sp);//画桃心,表示速度大小 } } //键盘操作函数,通过键盘控制贪吃蛇运动 voidSnake: : keyPressEvent(QKeyEvent*e) { switch(e->key())//分别赋予director头文件中枚举值,改变运动状态 { caseQt: : Key_Up: if(director==U||director==D) break; else {director=U; break;} caseQt: : Key_Down: if(director==U||director==D) break; else {director=D; break;} caseQt: : Key_Right: if(director==R||director==L) break; else {director=R; break;} caseQt: : Key_Left: if(director==R||director==L) break; else {director=L; break;} caseQt: : Key_N: if(level<10) { level++; speed=240-level*20;//加速 killTimer(timerId); timerId=startTimer(speed); break; } else break; caseQt: : Key_M: //减速 if(level>1) { level--; speed=240-level*20; killTimer(timerId); timerId=startTimer(speed); break; } else break; caseQt: : Key_P: killTimer(timerId);//定时器 break; caseQt: : Key_Space: ui->gameoverLabel->setVisible(false); //“游戏结束”是否显示 ui->lcdNumber->display(grade); QSoundmusic("snake.wav");//设置背景音乐 music.play(); killTimer(timerId); timerId=startTimer(speed); } update(); } //控制贪吃蛇运动状态实现函数 voidSnake: : timerEvent(QTimerEvent*) { inti; head=snakeBody.last(); switch(director) { caseD: head.ry()++;//下 break; caseR: //右 head.rx()++; break; caseU: head.ry()--;//上 break; caseL: //左 head.rx()--; break; } if(isOver()) { killTimer(timerId); ui->gameoverLabel->setVisible(true); //判断游戏是否结束,并显示“游戏结束”字样 if(grade>high_grade) { fstreamf; f.open("grade.obj",ios: : out|ios: : binary); f< high_grade=grade; ui->lcdNumber_2->di
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 报告