基于C + + 的游戏设计.docx

上传人:b****1 文档编号:13808429 上传时间:2023-06-17 格式:DOCX 页数:14 大小:217.26KB
下载 相关 举报
基于C + + 的游戏设计.docx_第1页
第1页 / 共14页
基于C + + 的游戏设计.docx_第2页
第2页 / 共14页
基于C + + 的游戏设计.docx_第3页
第3页 / 共14页
基于C + + 的游戏设计.docx_第4页
第4页 / 共14页
基于C + + 的游戏设计.docx_第5页
第5页 / 共14页
基于C + + 的游戏设计.docx_第6页
第6页 / 共14页
基于C + + 的游戏设计.docx_第7页
第7页 / 共14页
基于C + + 的游戏设计.docx_第8页
第8页 / 共14页
基于C + + 的游戏设计.docx_第9页
第9页 / 共14页
基于C + + 的游戏设计.docx_第10页
第10页 / 共14页
基于C + + 的游戏设计.docx_第11页
第11页 / 共14页
基于C + + 的游戏设计.docx_第12页
第12页 / 共14页
基于C + + 的游戏设计.docx_第13页
第13页 / 共14页
基于C + + 的游戏设计.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于C + + 的游戏设计.docx

《基于C + + 的游戏设计.docx》由会员分享,可在线阅读,更多相关《基于C + + 的游戏设计.docx(14页珍藏版)》请在冰点文库上搜索。

基于C + + 的游戏设计.docx

基于C++的游戏设计

学号:

 

实习论文(本科)

学院数学与统计学院

专业统计学

年级2013级

姓名

论文题目基于C++的2048游戏设计

指导教师职称讲师

成绩

 

2016年10月16日

基于C++的2048游戏设计

学生姓名:

学号:

学院:

数学与统计学院专业:

统计学

指导教师:

职称:

讲师

摘要:

专业实习,是教学计划中的一门重要的必修课和综合实践课程,是培养学生的专业素质和实际能力的重要实践环节。

通过此次的C++实习,掌握了程序设计的基本理论与方法,能够运用基本代码进行简单的程序设计,运行基本的游戏程序。

关键词:

C++;设计;程序

TheGameDesignof2048BasedonC++

Abstract:

Theimportantrequiredcourseintheteachingplanandcomprehensivepracticecurriculum,professionalinternships,istocultivatethestudents'professionalqualityandpracticalabilityoftheimportantlinkofpractice.ThroughtheC++practice,wegraspthebasictheoryandmethodofprogramdesign,beabletousebasiccodetobuildsimpleprogramandrunit.

Keywords:

C++;Design;Program

前言

这次实习是我们毕业前的一次实践性实习。

为了拓展我们的知识面,增强我们对所学知识的应用能力,增加我们在社会竞争中的经验,锻炼和提高我们的综合素质,以便在以后毕业后能真正走入社会,并且能够在生活和工作中很好地处理各方面的问题,学校特地从北京达内科技集团聘请了专业的C++工程师讲师来对我们进行专业实训,进一步运用所学知识分析和解决实际专业问题,从而为就业打下良好的基础。

1实习前的准备

学校对我们的实习非常重视,本着通过实习来检验本专业教学中存在的问题,改进教学工作的目的,提前就为我们联系好了与专业相关的单位来做实习培训。

在正式进入机房实训前,讲师还专门做了一场关于实习内容的分享会,介绍了实习的基本情况、基本要求、实习项目的基本情况,学习和了解实习项目的相关文件和资料,帮助我们更系统地了解和熟悉接下来的实习课程内容。

2实习目的

1.培养理论联系实际的思想作风和工作作风;

2.培养作为计算机类工作人员的专业素质;

3.培养独立或与团队一起开展信息处理工作的基本业务能力。

3实习任务

1.通过实际操作,了解并逐步熟悉掌握C++;

2.掌握常用软件的熟练操作,为今后所期望的专业方向做准备;

3.在教师指导下,利用C++编程,完成独立的游戏编程任务;

4.最后在实习指导老师的指导下,参与信息处理与计算工作,完成一篇相关的实习论文(或实习记录)。

4实习内容

4.12048游戏简介

2048游戏是一款简单而流行的数字游戏,属于益智游戏。

操作界面上有16个格子,初始时会有两个格子上安放了两个数字2,每次可以选择上下左右其中一个方向去滑动。

每滑动一次,所有的数字方块都会往滑动的方向靠拢。

两个相同数字方块撞在一起之后合并成为他们的和。

每次操作之后会在空白的方格处随机生成一个2或者4(其他模式会有所改变),最终得到一个“2048”的方块就是胜利了。

由于规则简单,各种版本和平台上均有该款游戏。

相信有不少人都玩过它,但是操作界面只有半个巴掌大的一个游戏,背后却要用到类似随机数的产生、大批量数据的处理、UI设计等任务,真的不算是一个很简单的工作。

本次的游戏程序设计任务将运用C++来实现。

4.22048模块需求分析

首先分析了这款游戏的功能需求。

2048游戏一般由以下几个模块来构成:

1.矩阵方块;

2.控制模块;

3.计算模块;

4.输出模块。

每个模块来实现2048游戏的各项功能:

方向移动、方块合并、记录当前数据和输出计分结果、游戏胜利或失败后执行结束游戏操作等。

4.3UI界面的规划设计

首先进行UI界面的规划设计。

创建一个800×600的背景模块,在模块左侧这里我们需要16个方块,按照4×4的规格排列整齐。

模块右侧的空白区域需要添加功能键:

上、下、左、右、重置、关闭。

另外我们还需要再添加一个计分标签,用来计算并输出游戏得分。

最后按照模块功能与人的操作习惯,将标签分别排列在合适的位置。

最终的UI界面如图1所示:

图1

UI界面(矩阵方块)设计完成以后,接着来开始程序代码的编写。

4.4头文件的需求分析

首先分析需要用到的头文件。

第一步需要生成随机数,第二步要为16个矩形模块填充随机数所对应的图片,第三步为操作界面添加背景,第四步在游戏成功或失败时即时输出信息。

分析完成以后将所有需要用到的头文件都写入show.cpp文件里:

#include"show.h"

#include"ui_show.h"

#include

#include

#include

#include

#include

QDialog(parent),

ui(newUi:

:

Show)

4.5随机数的生成

接下来我们开始写入生成两个随机数和分数从零开始的代码,同时加入图片加载和声明面板对象的代码:

{

ui->setupUi(this);

srand(time(NULL));

for(inti=0;i<4;i++){

for(intj=0;j<4;j++){

map[i][j]=0;

}

}

sui();

sui();

fen=0;

QPixmappix(":

/image/bj.jpg");//加载图片

QPalettepalette;//声明画板对象

palette.setBrush(this->backgroundRole(),QBrush(pix));//设置画板样式

this->setPalette(palette);//设置到我们的面板上

}

voidShow:

:

sui(){

do{

intx=rand()%4;

inty=rand()%4;

if(map[x][y]==0){

if(rand()%20==4)

map[x][y]=4;

else

map[x][y]=2;

break;

}

}while

(1);

}

4.6图片资源的导入和加载

将所有准备好的图片资源载入设计程序,以便后续的图片加载工作。

随后我们进入为16个矩形模块和背景加载其各对应随机数图片的设计过程,这个模块以地址形式实现:

voidShow:

:

paintEvent(QPaintEvent*){

QImageimg;

img.load(":

/image/"+QString:

:

number(map[0][0])+".png");

ui->show_1->setPixmap(QPixmap:

:

fromImage(img));

img.load(":

/image/"+QString:

:

number(map[0][1])+".png");

ui->show_2->setPixmap(QPixmap:

:

fromImage(img));

img.load(":

/image/"+QString:

:

number(map[0][2])+".png");

ui->show_3->setPixmap(QPixmap:

:

fromImage(img));

img.load(":

/image/"+QString:

:

number(map[0][3])+".png");

ui->show_4->setPixmap(QPixmap:

:

fromImage(img));

img.load(":

/image/"+QString:

:

number(map[1][0])+".png");

ui->show_5->setPixmap(QPixmap:

:

fromImage(img));

img.load(":

/image/"+QString:

:

number(map[1][1])+".png");

ui->show_6->setPixmap(QPixmap:

:

fromImage(img));

img.load(":

/image/"+QString:

:

number(map[1][2])+".png");

ui->show_7->setPixmap(QPixmap:

:

fromImage(img));

img.load(":

/image/"+QString:

:

number(map[1][3])+".png");

ui->show_8->setPixmap(QPixmap:

:

fromImage(img));

img.load(":

/image/"+QString:

:

number(map[2][0])+".png");

ui->show_9->setPixmap(QPixmap:

:

fromImage(img));

img.load(":

/image/"+QString:

:

number(map[2][1])+".png");

ui->show_10->setPixmap(QPixmap:

:

fromImage(img));

img.load(":

/image/"+QString:

:

number(map[2][2])+".png");

ui->show_11->setPixmap(QPixmap:

:

fromImage(img));

img.load(":

/image/"+QString:

:

number(map[2][3])+".png");

ui->show_12->setPixmap(QPixmap:

:

fromImage(img));

img.load(":

/image/"+QString:

:

number(map[3][0])+".png");

ui->show_13->setPixmap(QPixmap:

:

fromImage(img));

img.load(":

/image/"+QString:

:

number(map[3][1])+".png");

ui->show_14->setPixmap(QPixmap:

:

fromImage(img));

img.load(":

/image/"+QString:

:

number(map[3][2])+".png");

ui->show_15->setPixmap(QPixmap:

:

fromImage(img));

img.load(":

/image/"+QString:

:

number(map[3][3])+".png");

ui->show_16->setPixmap(QPixmap:

:

fromImage(img));

ui->fen->setText(QString:

:

number(fen));

}

4.7主体算法的分析和实现

接下来进入主要的算法设计步骤。

在此根据2048游戏算法的功能需求和功能模块,对主要算法进行分析并实现。

对于控制模块,一共有上、下、左、右、重置、关闭六个控制功能键。

对于左移功能键的算法,每点击一次,所有的数字方块都会往滑动的方向靠拢。

两个相同数字方块撞在一起之后合并成为他们的和。

每次操作之后会在空白的方格处随机生成一个2或者4。

此时分数也在累计增加。

这一部分中重置和关闭这两个功能键相对与其他功能键独立,而上、下、左、右四个功能键的算法有一定的相似之处,所以以下仅详细展示左移功能键的代码。

现在开始对这六个功能键进行代码编写:

voidShow:

:

on_pushButton_3_clicked()

{

//reset

for(inti=0;i<4;i++){

for(intj=0;j<4;j++){

map[i][j]=0;

}

}

sui();

sui();

fen=0;

update();

}

voidShow:

:

on_clo_clicked()

{

//clo

this->close();

}

voidShow:

:

on_pushButton_2_clicked()

{

//up

for(intk=0;k<3;k++){

for(inti=1;i<4;i++){

for(intj=0;j<4;j++){

if(map[i-1][j]==0){

map[i-1][j]=map[i][j];

map[i][j]=0;

}

else{

if(map[i][j]==map[i-1][j]){

map[i-1][j]=map[i-1][j]+map[i][j];

map[i][j]=0;

fen+=map[i-1][j];

}

}

}

}

}

if(go()==1){

sui();//产生随机数

}

update();//更新界面

}

Show:

:

~Show()

{

deleteui;

}

 

voidShow:

:

on_pushButton_clicked()

{

//right

}

voidShow:

:

on_pushButton_5_clicked()

{

//down

}

voidShow:

:

on_pushButton_4_clicked()

{

//left

}

4.8游戏结束的判断

最后一个需解决的问题就是对于游戏是否结束的判断,其主要体现在控制和计算模块。

如果游戏未能达成任务而失败,输出“失败”和“游戏结束”的信息,同时只有关闭和重置功能键可以被操作:

intShow:

:

go(){

for(inti=0;i<4;i++){

for(intj=0;j<4;j++){

if(map[i][j]==0){

return1;

}

}

}

return-1;

}

voidShow:

:

pan(){

intarr[4][2]={-1,0,0,-1,0,1,1,0};

for(inti=0;i<4;i++){

for(intj=0;j<4;j++)

{

if(map[i][j]==0)

{

return;

}

else

{

for(intloop=0;loop<4;loop++)

{

intx=i+arr[loop][0];

inty=j+arr[loop][1];

if(x<0||x>3||y>3||y<0)

{

continue;

}

elseif(map[x][y]==0)

{

return;

}

elseif(map[i][j]==map[x][y])

{

return;

}

}

}

}

}

if(QMessageBox:

:

question(this,tr("失败"),tr("游戏结束");

QMessageBox:

:

Yes|QMessageBox:

:

No,QMessageBox:

:

Ok)==QMessageBox:

:

Yes)

{

on_pushButton_3_clicked();

}

else

{

this->close();

}

}

以上我们对2048这个游戏的程序设计部分的工作已经完全结束,接下来构建程序,检查并修改错误,就可以打开并运行这个游戏了。

4.9游戏最终运行成果

最终的游戏界面如图2所示:

图2

点击右侧功能键,即可开始游戏。

5个人总结

通过这次实习我很好地掌握了如何将C++实际运用到游戏开发中去,检验了自己学习的成效、检测了自己的所缺。

这就形成了从实践中学习,从学习中实践的良性循环。

这是一个很好的锻炼机会,能将所学的理论知识联系于实际,我感觉学习与实践是密不可分的。

当今中国经济飞速发展,国内外经济不断变化,在机会越来越多的同时,也出现了更多的题目,有了更多更艰巨的挑战,这也就对人才的要求越来越高。

我们不仅要学好课本里的知识,还要主动走进社会,积极在实践中学习其他的东西,不断增加自己的经验,全方面武装自己,才能在这个社会有立足之地甚至拥有不败之地。

参考文献

[1] 谭浩强.C程序设计教程[M].清华大学出版社,2007.

[2] 荣钦科技.Visual C++游戏编程基础[M].电子工业出版社,2005.

[3] 王浩.Visual C++游戏开发经典案例详解[M].清华出版社,2010.

[4]刘明军.C语言程序设计[M].电子工业出版社,2007.

[5]凌云.C语言程序设计与实践[M].机械工业出版社,2010.

[6]StanleyB.LippmanC++primer[M].人民邮电出版社,2006.

[7]SteveMaguire.编程精粹[M].人民邮电出版社,2009.

[8]AndrewKoenig.C陷阱与缺陷[M].人民邮电出版社,2008.

(此文档部分内容来源于网络,如有侵权请告知删除,文档可自行编辑修改内容,供参考,感谢您的配合和支持)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2