短学期总结模板

时间:2024.4.8

计算机与信息学院20##-20##1学期

手机游戏开发

短学期实践项目

总结

(计算机科学与技术专业20##级)

班级:_____计算机091_________

 学号:

姓名:

计算机与信息学院

安卓连连看游戏

一、需求概述

在手机游戏的早期,大多数开发者都是想要玩转设备,学习技巧和快速攻关的狂热分子。在我们的生活中有许多游戏,但游戏不同,他也会给玩家带来不同的感受和生活理念。随着我国动画游戏开发水平的不断提高,许多游戏软件不断涌现。随着游戏平台从游戏机到电视游戏机,然后从PC机向手机游戏发展,中间进过了很多的集数的更新和变革,但随着新技术的发展和生活水平质量的提高,手机变为普及而小巧,家庭和学校教育对游戏软件提出了新的要求,那就是手机游戏软件要同时兼备教育和娱乐两种功能,使学生在游戏中开发思维,学习知识。结合我们身边很多人对反应思维不够快的,心理素质不够而对游戏游玩却非常感兴趣,所以希望所开发的“连连”游戏能提高他们的思维敏捷性和时间应变能力,将脑力,智力发掘的事情转到游戏中来,让学习者能在学习中体会游戏带来的快乐,在游戏中练习思维和能力,即可以学到知识又可以体会快乐,这是我开发这款这款游戏开发的主要目的。我相信手机平台的游戏也会拥有巨大的市场空间,也随着3G的开通和应用,手机游戏必然会迎来新的一轮游戏热潮。

该项目总结主要阐述一面向对象的程序开发语言eclipse为开发工具,基于智能手机Android之上设计的一个连连看游戏。我想在有Java的只能手机上都可以运行吧。手机是我们生活中不可缺少的工具,这些小游戏可以带给我们快乐和放松的心情。

二、分析与设计

2.1背景及需求分析

开发手机游戏要有创新性和实用性,也要有一定的技术难度。所以本人对网上的游戏产品作了广泛的调查,总结了开发休闲游戏一定要有下面的特点:

⑴要有吸引力,界面美观

⑵有一定的技术难度和科学性

⑶在游戏过程中能够锻炼出逻辑思维能力、勉捷的反应能力、超强的记忆力、耐力、意志力。

⑷具有一定的文化内涵,将一些基础知识融入其中,达到寓教于乐的效果。

结合我们的学习情况和平时做事,都需要敏锐的洞察力和思维反应能力,学生从小学到大学,有很多活动或者节目游戏都需要考验你这个,然后开发这个游戏可以使游戏过程来培养你的能力。让游戏者随时都可以玩,可以一个人玩、跟电脑玩或上网跟网友玩,并且实现计时计分功能,让游戏更刺激、更好玩、更有魅力。

2.2功能架构设计

短学期总结模板

2.3类结构设计

游戏由六个类组成,如图所示

(1)主界面对话框类:主要负责主界面及菜单的显示,棋子消除、消除提示及换盘操作,同时还要负责时间控制等。

(2) 棋子类:主要负责棋子的选中,配对及查找。

(3)连接线类:主要负责棋子中连接线的绘画。

(4)英雄榜对话框类:主要负责游戏等级记录的更新。

(5)背景音乐播放类:主要负责游戏中背景音乐的播放。

(6)帮助对话框类:主要负责帮助提示的显示及其它辅助信息

2.4出错处理设计

当游戏中出现错误,采用弹出对话框的方式来提示用户出现错误,并可采用中止当前游戏并重新开始新游戏的方法来处理游戏中的错误。

2.5连连看游戏的详细设计

1时间限制模块的算法设计

时间限制模块的算法主要分为如下几步:

①在游戏开始时,设置当前限制时间(nOverTime)为60秒。

②设定一个时间定时器TIMER1,时间间隔为1000ms 。

③当每一次时间间隔到时,就把当前限制时间减少一秒。

④如果游戏中有一对棋子消除时,就把限制时间增加三秒。

⑤如果限制时间变成零秒,说明游戏结束,弹出结束提示对话框。如果当前游戏等级超过记录等级,还要弹出英雄榜对话框对话。

2消除相同棋子模块的算法设计

消除相同棋子模块的算法主要分为如下几步:

①当鼠标单击棋子时,保存到棋子坐标及类型到第一次选中变量中。

②得到鼠标第二次选中的棋子坐标及类型。

③比较两次棋子类型,如果相同,转步骤(4)。如果不相同,转步骤(5)。

④画一条连接线,并消除这对棋子,退出等待下一次鼠标选择。

⑤把鼠标第二次选中的棋子坐标及类型赋值给第一次选中变量。

3消除提示模块的算法设计

消除提示模块的算法主要分为如下几步:

①判断提示次数变量的值,如果等于0,结束。

②查找当前棋盘中相同的棋子。

③在相同棋盘中,查找可以消除的棋子。

④给出提示连线,提示次数变量减少1。

4棋子换盘模块的算法设计

棋子换盘模块的算法主要分为如下几步:

①保存当前棋盘数组中的数据到临时数组中。

②循环的从临时数组中,随机取出数据保存到棋盘数组中。

三、关键代码分析

CtrlView类          //判断消除图形关键代码

publicclass CtrlView extends GameView{

    publicfinalint GAMETIME=300;

    publicfinalint UPTIME=1;

    publicint PROCESS_VALUE=300;

    publicstaticbooleanCURRENT_CH=false;

    publicint CURRENT_TYPE=0;

    private Point C_POINT;

    private Point P_POINT;

    LinkedList li;

    public CtrlView(Context context, AttributeSet attrs) {     

        super(context, attrs);

        initType();

       initGrid();

       much=(row-2)*(col-2);

       

    }

    public CtrlView(Context context, AttributeSet attrs, int defStyle) {

    super(context, attrs, defStyle);

    initType();

       initGrid();

       much=(row-2)*(col-2);

   

    }

    publicboolean onTouchEvent(MotionEvent event) {

       if (event.getAction()!=MotionEvent.ACTION_DOWN)

           returnsuper.onTouchEvent(event);

      

       int selX=(int)(event.getX()/width);

       int selY=(int)(event.getY()/height);     

      

       if(grid[selX][selY]==0)

           returntrue;

       else

       {

           if(CURRENT_CH==false)

           {

              select(selX,selY);

              CURRENT_CH=true;

              P_POINT =new Point(selX,selY);

           }

           else

           {

              C_POINT =new Point(selX,selY);

              lineType=0;

              if(checkLink(P_POINT,C_POINT))

              {                

                  isLine=true;

                  much=much-2;

                  if(0

                  {

                     PROCESS_VALUE=PROCESS_VALUE+UPTIME;

                  }

                  invalidate();

                  mRedrawHandler.sleep(300);

              }

              CURRENT_CH=false;

           }

       }

      

      

       returntrue;

    }

   

    publicvoid reset()

    {

       CURRENT_CH=false;

       CURRENT_TYPE=0;

       C_POINT=null;

       P_POINT=null;

       lineType=0;

       isLine=false;

       Point[] p=null;

       initType();

       initGrid();

       much=(row-2)*(col-2);

       invalidate();

    }

    publicvoid rearrange()

    {

       CURRENT_CH=false;

       CURRENT_TYPE=0;

       C_POINT=null;

       P_POINT=null;

       lineType=0;

       isLine=false;

       Point[] p=null;

       List temp=new ArrayList();

       for(int i=0;i

       {

           for(int j=0;j

           {

              if(grid[i][j]!=0)

              {

                  temp.add(grid[i][j]);

              }

           }

       }

       type.clear();

       Random ad=new Random();

       for(int i=0;i

       {

           type.add(temp.get(i));         

       }

       temp.clear();

       temp=null;

       for(int i=0;i

       {

           for(int j=0;j

           {

              if(grid[i][j]!=0)

              {

                  int index=ad.nextInt(type.size());

                  grid[i][j]=type.get(index);

                  type.remove(index);

              }

           }

       }

       invalidate();

    }

    private RefreshHandler mRedrawHandler = new RefreshHandler();

    class RefreshHandler extends Handler {

        @Override

        publicvoid handleMessage(Message msg) {

        isLine=false;

        grid[P_POINT.x][P_POINT.y]=0;

           grid[C_POINT.x][C_POINT.y]=0;

        CtrlView.this.invalidate();

        }

        publicvoid sleep(long delayMillis) {

        this.removeMessages(0);//移除信息队列中最顶部的信息(从顶部取出信息)

            sendMessageDelayed(obtainMessage(0), delayMillis);//获得顶部信息并延时发送

        }

    };

    publicclass Point

    {

       publicint x;

       publicint y;

       public Point(int newx,int newy)

       {

           this.x=newx;

           this.y=newy;

       }

       publicboolean equals(Point p)

       {

           if(p.x==x && p.y==y)

              returntrue;

           else

              returnfalse;

       }

    }

    privateboolean horizon(Point a, Point b)  

    {  

        if(a.x == b.x && a.y == b.y)

            returnfalse;  

        int x_start = a.y <= b.y ? a.y : b.y;  

        int x_end = a.y <= b.y ? b.y : a.y;  

        for(int x = x_start + 1; x < x_end; x++) 

            if(grid[a.x][x] != 0){  

                returnfalse;  

            } 

        p=new Point[]{a,b};

        lineType=H_LINE;

        returntrue;  

    } 

privateboolean vertical(Point a, Point b)  

{  

    if(a.x == b.x && a.y == b.y)  

        returnfalse;  

    int y_start = a.x <= b.x ? a.x : b.x;  

    int y_end = a.x <= b.x ? b.x : a.x;  

    for(int y = y_start + 1; y < y_end; y++)  

        if(grid[y][a.y] != 0)  

            returnfalse

    p=new Point[]{a,b};

    lineType=V_LINE;

    returntrue;  

privateboolean oneCorner(Point a, Point b)  

{  

    Point c = new Point(a.x, b.y);  

    Point d = new Point(b.x, a.y);  

    if(grid[c.x][c.y] == 0)  

    {  

        boolean method1 = horizon(a, c) && vertical(b, c);

        p=new Point[]{a,new Point(c.x,c.y),b};

        lineType=ONE_C_LINE;

        return method1;  

    }  

    if(grid[d.x][d.y] == 0)  

    {  

        boolean method2 = vertical(a, d) && horizon(b, d);

        p=new Point[]{a,new Point(d.x,d.y),b};

        lineType=ONE_C_LINE;

        return method2;  

    } else 

    {  

        returnfalse;  

    }  

class Line  

    {  

        public Point a;  

        public Point b;  

        publicint direct;  

        public Line()  

        {  

        }  

        public Line(int direct, Point a, Point b)  

        {  

            this.direct = direct;  

            this.a = a;  

            this.b = b;  

        }  

    } 

private LinkedList scan(Point a, Point b)  

    {  

        li = new LinkedList(); 

        for(int y = a.y; y >= 0; y--)  

            if(grid[a.x][y] == 0 && grid[b.x][y] == 0 && vertical(new Point(a.x, y), new Point(b.x, y)))  

              li.add(new Line(0, new Point(a.x, y), new Point(b.x, y)));  

        for(int y = a.y; y < row; y++)  

            if(grid[a.x][y] ==0 && grid[b.x][y] ==0 && vertical(new Point(a.x, y), new Point(b.x, y)))  

                li.add(new Line(0, new Point(a.x, y), new Point(b.x, y)));  

        for(int x = a.x; x >= 0; x--)  

            if(grid[x][a.y] == 0 && grid[x][b.y] ==0 && horizon(new Point(x, a.y), new Point(x, b.y)))  

                li.add(new Line(1, new Point(x, a.y), new Point(x, b.y)));  

        for(int x = a.x; x < col; x++)  

            if(grid[x][a.y] == 0 && grid[x][b.y] == 0 && horizon(new Point(x, a.y), new Point(x, b.y)))  

                li.add(new Line(1, new Point(x, a.y), new Point(x, b.y)));  

        return li;  

  } 

privateboolean twoCorner(Point a, Point b)  

{  

    li = scan(a, b);  

    if(li.isEmpty())  

        returnfalse;  

    for(int index = 0; index < li.size(); index++)

    {  

        Line line = (Line)li.get(index);  

        if(line.direct == 1)

        {  

            if(vertical(a, line.a) && vertical(b, line.b))

            {  

              p=new Point[]{a,line.a,line.b,b};

              lineType=TWO_C_LINE;

                returntrue;  

            }    

        }

        elseif(horizon(a, line.a) && horizon(b, line.b))

        {  

        p=new Point[]{a,line.a,line.b,b};

        lineType=TWO_C_LINE;

            returntrue;  

        }  

    }  

    returnfalse;  

publicboolean checkLink(Point a,Point b){  

    if(grid[a.x][a.y] != grid[b.x][b.y])//如果图案不同,直接为false  

           returnfalse;  

       if(a.x == b.x && horizon(a, b))  

           returntrue;  

       if(a.y == b.y && vertical(a, b))  

           returntrue;  

       if(oneCorner(a, b))  

           returntrue;  

       else 

           return twoCorner(a, b);  

}

四、体会与总结

    通过开发这个项目和编写相关的程序代码,我体会最为深刻的一点就是系统架构和设计模式的重要性。即使是对于一个再小的程序,你已经做过但却忘记了,再做一次又何妨,代码的组织和系统架构都是非常重要的,还因为这关系到日后的维护以及扩展。在开始配置eclipse环境和编写那些代码的时候,我很模糊,没有什么头绪,实在做不下去了,也不敢问老师。后来经过我详细的了解,参阅相关的资料,询问老师同学后,才慢慢的做下去,能坚持下去,一步步的分析连连看的算法,把代码有效的组织起来,即系统架构,然后开发出这个连连看游戏程序。

     设计这个程序后,我感觉自己不仅实际动手能力有所提高,更重要的是进一步激发了我对专业知识的兴趣,是理论与实际得到了一次很好的结合,并能够结合实际存在的问题在专业领域内进行更深入的学习。对于我们计算机专业的学生来说,实际能力的培养至关重要,但偏偏在课堂教学上很少能接触,仅仅有理论知识也远远不够,必须走向实践,才会了解工作需要什么,自己要学什么。经过这次游戏开发设计,使我了解到了自身状况与实际需要的差距,我会在以后的学习中更加努力,在课间课后及时补充相关知识,在课后多操作,从而走上程序开发的专业道路。

                                                  20##年1月5日

要求:至少不少于1500字,采用A4纸打印。

更多相关推荐:
学期总结模板

20xx年下学期工作总结(20xx年上学期计划)(黑体、小二、加粗)这一年对我们策划部全体成员来说是一个既平凡又独特的一年,回顾这段时间来工作的点点滴滴,我们感到无比欣慰。在这一年中,我们不论是部长还是部员,都…

学校工作总结模板

ⅩⅩ中学20xx-20xx学年年度工作总结ⅩⅩ中学20xx年x月x日ⅩⅩ中学20xx-20xx学年年度本年度,在上级教育主管部门的关怀指导下,在社会各界的关心支持下,在全校教职工的共同努力下,学校领导班子带领…

学期工作总结模板

学期工作总结模板题目青岛大学学生会部门年度学期工作总结例:青岛大学学生会秘书处20xx—20xx年度第一学期工作总结开头(主要内容为对本学期工作的简单总结)例:在本学期,秘书处依照学生会的工作宗旨和发展方向,积…

个人学期总结模版

20xx20xx年第一学年个人学期总结秘书处XXX20xx1221个人学期工作总结导语讲述这一年在学生会中的体会感悟之类字数在45行一常规工作二活动方面1公文培训针对于全体成员2配合其他部门的活动三工作中的不足...

XX部学期工作总结模板

XX部20xx年秋季学期工作总结部门工作简介详见下面例文一常规工作二学生活动三问题及改进四展望未来字体标题黑体二号小标题黑体小二正文仿宋三号学生会xxx部基础医学院12级20xx年3月26日工作总结季学期工作总...

部门学期工作总结模板

土木工程学院社区学生会秘书处20xx秋季学期工作总结时间如白驹过隙,转眼间20xx年秋季学期社区学生会的工作已经接近尾声。本学期,我们土木工程学院社区学生会秘书处着眼于大局,尽自己所能,积极配合学院及社区学生会…

大学学生会学期工作总结

时光荏苒,20xx-20xx第二学期即将结束,在过去的一学期里,我院学生会在学校领导的亲切关怀下,在我院领导、老师的悉心指导下,在同学们的大力支持和积极配合下,群策群力,务实创新,团结进取,努力树立财公学院学生…

班主任 学期教学工作总结模板

荣昌区清流镇民族小学班主任本学期管理工作总结20xx年1月

班主任工作总结模板

20xx20xx学年0609班第一学期班主任工作总结本学期在各位领导各位老师的帮助下全班同学的齐心努力下顺利完成的本学期的各项工作任务现总结如下一主要工作与成绩1抓班级常规教育管理对学生的仪容仪表常抓不懈行为习...

初一上学期工作总结工作总结范文大全

初一上学期工作总结工作总结范文大全初一上学期工作总结初一上学期工作总结刘支进福州屏东中学20xx年月回顾这半年的班主任工作有以下几点体验和收获一抓好班风学风建设打好基本功1良好的班风是一个班级取得成功的关键刚一...

教师学期工作小结范文

教师学期工作小结范文总结本我任教中我发现本班大部分学生都聪明灵活力丰富上课思维活跃发言积极成绩较为但也有少数几个基础比较薄弱思考速度慢书写速度慢对新知的理解也比较慢同时本班学生对计算较为马虎对应用题审题不慎常出...

20xx年教师个人学期工作总结范文

20xx年教师个人学期工作总结范文我能够坚持以邓小平理论和三个代表重要思想指导工作实践认真贯彻落实科学发展观事业心强识大体顾大局时刻立足本职坚持与时俱进不断创新教学方法工作求实求细求真作风正派廉洁奉公严于律已政...

学期总结模板(13篇)