三一文库(www.31doc)
〔计算机专业实习实习报告模板 5100字〕

         

 

  BI UID UIVRSIY

  计算机专业实习

  实习报告

  班    级:    11计算机1班      学    号:    201114600112        姓    名:      张伟              指
导教师:      卢朝辉          专业名称:  计算机科学与技术

  信 息 工 程 学 院

  20xx年 6 月 27 日

  河北联合大学实习报告

  Adroid小游戏之2048

  1 概述

  1.1 游戏背景

  《小3传奇》的悲剧以及《2048》的崛起。


  近期,新出的一款叫做《2048》的安卓手游十分的火爆,几乎游戏下载排行榜的前10名都能看到“它的身影”。然而并不是每一个人都知道一件事,那是一个关于“2048”诞生的故事。

  故事的发展是这样的,《2048》的祖先是一款名为《rs》(中文名为《小3传奇》)的手游。《小3传奇》的两位开发者花了近一年半时间才开发出这个游戏的核心玩法,却在其上架App sor后仅21天就被《1024》抄了过去。最让人意想不到的是,《2048》则更为迅速,19岁的Gabril Cirulli只用了一个星期改编前两者游戏,却获得最大的成功,《rs》却不被人知。

商务演讲  而到了现在,这类游戏从发布到现在,不管是App Sor还是Adroid市场,下载量已经远远超越了千万,网上各种版本的都有,比如朝代版,后宫版,甲乙丙版,生肖版等。

  1.2 游戏开发


  由于本人十分喜欢《2048》这款手游,在了解了本次课程设计是设计一个Adroid平台下的软件之后,就选定了《2048》作为本次课程论文的课题。

  在此次课程论文的制作过程中,我将运用我在《移动平台开发技术》学习到的知识以及java编程知识通过网上现有的资料尝试完成此次课程的开发。

  1.3论文内容安排

  要开发这一款游戏,要根据以下几步来完成:

  1)首先是要对这款游戏的代码分析。对整一个游戏,要将各个部位分割成其对应部位的功能代码,并且逐一去分析实现其中不同的功能。

  2)其次是游戏的流程。在做好每一个部分的代码之后,就需要把所创造的各个关键部分
拼接起来,因此,就需要先把该游戏的流程一步一步的弄清楚。

  3)再者是对《2048》这一款游戏的算法分析。对于整个游戏而言,最主要的心脏就是这一款游戏的算法,游戏好不好,就看这一款游戏的算法是不是符合逻辑。《2048》这一款游戏的算法分为上下左右自个方向的,具体的下面分析。

  4)《2048》中每个格子的数据和颜的刷新。在每一次移动之后,几乎在这4*4的每一个方格上的数据都会变化,因此在每一次移动之后,每一个方格上的数据都要刷新一次。相对的,每一个数的背景颜是不同的,也就是说,在每一次数据刷新的时候,每一个方格上的颜也要同样的刷新一次。

元旦休息几天  5)最后是可不可以继续游戏的检测。当屏幕上没有没有写有数据的方格并且屏幕上的数据没有哪两个相邻的数据是一样的两个数,那么就判定为游戏结束。

  - 2 -


  河北联合大学实习报告 2 功能设计

  2.1 设计界面

  在设计整个2048游戏之前先得设计一个2048的游戏界面,只有有了游戏界面,才能够进行2048这一款游戏的下一步设计,这是创建2048小游戏的最基础的步骤。

  2048这一款游戏的界面是4*4方格的,于是就需要在界面上设置4*4的方格,有了这些方格之后才能在方格上面装卡片(Card),然后才能继续游戏。

  pai);

  pai);

  方格下面继而显示分数(Scor)和最高分数(BsScor)。

  }  cavas.draLi(0, is.gig(), is.gid(), is.gig(), priva void oDraBordr(Cavas cavas) {      pai.sSadr(ull); pai.sSrokid(16); pai.sColor(Color.I); cavas.draLi(0, 0, 0, is.gig(), pai); cavas.draLi(0, 0, is.gid(), 0, pai); cavas.draLi(is.gid(), 0, is.gid(), is.gig(),

  2.2 游戏设计

韭菜盒子的家常做法  在2048游戏的界面设计好了之后,要求完成最核心的玩法就是卡片在于界面上4*4的移动,于是下一步的操作就是对卡片的具体设置,以下是一部分关键代码。

  (1)创建一个卡片

  priva Card gCard(i um){

  Card c;

  i (cards.siz()0) {

  c = v(0);

  }ls{

  c =  Card(gCox());

  addVi(c);

  }

  c.sVisibiliy(Vi.VISIBL);


  - 3 -

  河北联合大学实习报告龙的画法

  c.sum(um);

  rur c;

  }

  (2) 类Card继承了ramLayou,目的是作为游戏中的卡片,卡片各个数字和样式的实现: public void sum(i um) {

  is.um = um;


  i (um=0) {

  labl.sx("");

  }ls{

  labl.sx(um+"");}

  sic (um) {

  cas 0:

  labl.sBackgroudColor(0x00000000);//透明

  brak;

  cas 2:

  ??

  daul:

  labl.sBackgroudColor(0x3c3a32);

  brak;

  } }

  (3) 卡片设计好了之后根据游戏要求判断在某一操作下同一方向上的卡片是否可以相加,
可以相加的部分进行数据合并。

  //合并相同数据

  i addscod = 0;

  or(i p=0;p4;p++){
lol生日查询
  or(i q=3;q0;q--){

  - 4 - i(arrays[q][p]==arrays[q-1][p]arrays[q][p]!=0){  lag_mov = ru;  rrays[q][p]+=arrays[q-1][p];  addscod+=arrays[q][p];  arrays[q-1][p]=0;  q--;  }}}

  河北联合大学实习报告

  2.3 事件监听

  对于2048这个游戏经过之前对游戏界面的设计、对游戏元素卡片的创建和定义好了之后,最终目的是要使我们能够控制卡片进行移动,目标是使卡片能够根据我们的命令进行向上、向下、向左、向右的四个方向上的移动,这个需要加上4个方位的事件监听。

  @Ovrrid public boola olig(Moiov 1, Moiov 2, loa vlociyX,                loa vlociyY) { loa X=2.gX()-1.gX(); loa Y=2.gY()-1.gY(); ial i LIG_Mi_DISAC =50; i(XLIG_Mi_DISACMa.abs(vlociyX)Ma.abs(vlociyY)){  oRig(); }ls i(X-LIG_Mi_DISACMa.abs(vlociyX)Ma.abs(vlociyY)){  oL(); }ls i(YLIG_Mi_DISACMa.abs(vlociyX)Ma.abs(vlociyY)){  oDo(); }ls i(Y-LIG_Mi_DISACMa.abs(vlociyX)Ma.abs(vlociyY)){  } rur als; } oUp();

  以上是事件监听的部分关键代码,事件监听创建好了之后,整个游戏大部分要求已经完成了。


  2.4 游戏最终实现

  从游戏的角度来说,这个2048游戏有界面,有元素,可以移动已经基本完成了,但作为有个游戏而言最后还有几步没有完善。

  为了能够最终完整的实现整个游戏的功能,先绘制一个简单的流程图,整理一下思路。

  - 5 -

  河北联合大学实习报告

 

  - 6 -


  河北联合大学实习报告

  (1)初始化

  进入游戏,初始化4*4表格,并随机产生两个数字(2或者4);

  二维数组is.abls表格循环存入数据;

  radom1, radom2 ,radom11, radom22四个随机数可以确定两个2的xy位置;

  方法umbr里面,根据位置i,j和级别um可以确定一个新的数字;创建背景cll和cll上面的数字标签cllLabl;并根据um确定是否显示cllLabl;最后给cll关联一个daa数据;特别说明这里的umbr:um不是精灵上面的数字而是精灵的级别,比如umbr=11 则数字是1024。

  (2)游戏结束的判断

  每次发生卡片移动,都要检查游戏还能否继续,是否已经结束。使用函数CckCompl()完成游戏是否失败的检查。

  (3)游戏的计分

  在卡片的每一次移动的时候判断是否有两个相同数字进行相加,凡是有相见的两个数字其相加所得的和需要存入计分中,其中如果游戏获得了最高分要对最高分进行保存。

  public class BsScor {

  } priva SardPrrcs sp; public BsScor(Cox cox){  sp = cox.gSardPrrcs("bsscor", cox.MOD_PRIVA);} public i gBsScor(){  i bsscor = sp.gI("bsscor", 0); rur bsscor;} public void sBsScor(i bsScor){    dior dior = sp.di(); dior.puI("bsscor", bsScor); diormi();}


  3 实习收获及心得体会

  经过了几天的努力终于把2048这个游戏完成了,想当初看这个游戏玩法简单又内容简单,没想到制作起来是这样“浩大”的一个工程。在这短短的几天时间里,参考了许多的相关资料,有时候感觉很辛苦不想再做下去了,但是又想试试看挑战一下自己的能力能不能完成这样一个任务,于是又在网上到了不少对我很有帮助的材料、视频,为了自己的目标就这样一点一点地去完成这个项目。

  这几天里让我学习到了制作小游戏的基本步骤,首先要创建一个页面,然后再对页面进行相应的设置,再者要对对象进行设置,最后要使游戏能够听我们的指挥我们要插入一个事件监听,而且其中还需要结合各种算法才能实现这样的一个小小的小游戏,真是“麻雀虽小,五脏俱全”。

  最终运行出来的结果因为本人能力实在有限,完成不了用户自定义背景这个目标,而且在
游戏结束之后最终得分无法显示在结束界面上,这让我意识到自身能力的不足,还有许许多多的知识等

  - 7 -

  河北联合大学实习报告

  待着我去了解、去学习。虽然如此,但是看着最终运行出来的结果,还是给了我很大的鼓舞和安慰,这一次制作2048小游戏的经验让我受益匪浅,感受到了这个项目是我要正真用心认认真真完成的一件事,这真是一个难得的学习的过程。
一笔勾销的意思
  - 8 -