1、数字排序拼图游戏 【摘要】:Java语言的学习热潮并没有因为时间的推移而消退,相反,由于计算机技术的发展所带来的新应用的出现,Java越来越流行,这种情况是以往程序设计语言在其生存周期内所不多见的。Java语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应用十分合拍,可以覆盖大部分的需求;二是因为SUN公司不断推出新的版本,完善Java自身的功能。有了这两点,Java语言成为程序员首选的程序设计开发工具就在情理之中了。 【关键字】:Java;发展;程序设计 一 引言 现代科学技术的发展,改变了人类的生活,作为新世纪的大学生,应该站在时代发展的前沿,掌握现代科学技术知识,
2、以适应社会的发展,能够独立完成面临的任务,作为一名有创新意识的新型人才。 拼图游戏是广受欢迎的一种智力游戏,它的变化多端,难度不一,让人百玩不厌。个性化的拼图,拼凑的不仅仅是一张照片,而是一个故事,一段回忆,一缕温情。每一片的单片都有它自己的位置,就像每段回忆都有它的故事,你要将它放在专属的地方,放对了就慢慢丰富起来,放错了就无法完整。 二 设计大作业的目的与要求 1.1 设计目的 JSP/JAVA是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完JSP/JAVA课程后,进行的一次全面的综
3、合训练,JAVA程序的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。 1.2 设计的实验环境 硬件要求能运行Windows XP操作系统的微机系统。JAVA程序设计语言及相应的集成开发环境,J2SDK和ECLIPSE开发工具。 1.3 设计的预备知识 熟悉JAVA语言及ECLIPSE开发工具。 1.4 设计要求 按大作业指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。要求学生
4、能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JAVA程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。 三 需求分析 一款游戏项目的确立是建立在各种各样的需求上面的,这种需求往往来自于玩家的实际需求或者是出于公司自身发展和实力的情况,其中玩家的实际需求也就是说市场需求最为重要.面对游戏拥有不同知识和理解层面的玩家,项目的负责人(
5、或者游戏制作人)对玩家需求的理解程度,在很大程度上决定了此类游戏开发项目的成败.因此如何更好地的了解,分析,明确玩家需求,并且能够准确,清晰以文档的形式表达给参与项目开发的每个成员,保证开发过程按照满足玩家需求为目的正确项目开发方向进行,是每游戏开发项目管理者需要面对的问题。 拼图游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。我通过所学的JSP设计了一个操作简单、界面美观的拼图游戏。 在制作这个拼图游戏之前,要熟悉Canvas屏幕类,来控制方格的移动。运用MyCanvas为16个方格加载数字,并初使化坐标,形成四行四列。将表单、屏幕、与事件处理融合使用。加深知识的记忆与熟悉,为更
6、好地学习JSP打下结实的基础。 本作品是单人小游戏,适用于任何时候玩耍,因此未来的修改空间十分开阔。属于益智小游戏,简单易懂,技术要求相对较低,所以比较适合青少年玩耍。 四 拼图游戏发展概况 拼图玩具已经有约235年的历史了。早在1760年,法英两国几乎同时出现这种既流行又有益的娱乐方式。把一张图片粘在硬纸板上,然后把它剪成不规则的小碎片。最初这些图片都是有教育意义的,要么附有适于年轻人阅读的短文,要么向新兴资产阶级传授历史或地理知识。 到19世纪初,新的大规模生产工业技术赋予了拼图明确的形式。以前庞大笨重的拼图由边缘光滑的碎片排列组成,轻微的震动就能使它们分开。在1840年左右,德国
7、和法国的拼图制造商用联锁的咬接机来切割拼图,现代的拼图迷们都很熟悉这种形式。他们用软木材、夹板和纸板代替硬木薄板,大大降低了成本。最终价格低廉的拼图被各阶层的消费者接受,很快在孩子们、成年人和老年人中掀起玩拼图狂潮一直持续到当今社会。 五 Java文件分析 1、成员变量描述(如表一所示): 成员变量描述 变量类型 名称 面板 Jpanel panel 拼图行数 int row 拼图列数 Int cal 面板数组 Jpanel Panel[] 控制变量 boolean Stop 按钮 JButton Butt
8、on[][] 图片路径接口 String path 表 一 2、源代码分析: (1)运用画布的继承监听命令: public class MyCanvas extends JPanel implements MouseListener { boolean hasAddActionListener=false; //设置方格的动作监听器的标志位,TRUE为已经添加上动作事件,FALSE是尚未添加动作事件 Cell cell[];//定义方格 Rectangle cellNull;//定义空方格区域 public MyCanvas() {
9、 this.setLayout(null); this.setSize(500,500); cellNull=new Rectangle(300,300,200,200); //空方格区域在第四行每四列 cell=new Cell[16]; Icon icon; for (int i = 0; i < 4; i++) { //为9个方格加载数字,并初使化坐标,形成三行三列 for(int j=0;j<4;j++){ icon=new ImageIcon("pictrue/pic_"+pictureID+"_"+(i*4+j+1)+".jp
10、g"); cell[i*3+j]=new Cell(icon); cell[i*3+j].setLocation(j*100,i*100); this.add(cell[i*3+j]); }} this.remove(cell[15]);//移除最后一个多余的方格} public void reLoadPictrue(){ (2)对方格进行重新排序,并运用时间添加控制循环: public void Start(){ while(cell[0].getBounds().x<=100&&cell[0].getBounds
11、).y<=100){//当第一个方格距左上角较近时 int x=cellNull.getBounds().x; int y=cellNull.getBounds().y; int direction=(int)(Math.random()*4); //产生0-4,对应空方格的上下左右移动 if(direction==0){ //空方格左移动,与左侧方格互换位置,左侧方格右移动 x-=100; if(test(x,y)){ for(int j=0;j<8;j++){ if((cell[j].getBounds()
12、x==x)&&(cell[j].getBounds().y==y)){ //依次寻找左侧的按钮 cell[j].move("RIGHT",100); cellNull.setLocation(x,y); break;//找到后跳出for循环 }}} }else if(direction==1){//RIGHT x+=200; if(test(x,y)){ for(int j=0;j<15;j++){ if((cell[j].getBounds().x==x)&&(cell[j].get
13、Bounds().y==y)){ cell[j].move("LEFT",200); cellNull.setLocation(x,y); break; }}} }else if(direction==3){//UP y-=100; if(test(x,y)){ for(int j=0;j<15;j++){ if((cell[j].getBounds().x==x)&&(cell[j].getBounds().y==y)){ cell[j].move("DOWN",200
14、); cellNull.setLocation(x,y); break; }}} }else{//DOWN y+=200; if(test(x,y)){ for(int j=0;j<15;j++){ if((cell[j].getBounds().x==x)&&(cell[j].getBounds().y==y)){ cell[j].move("UP",200); cellNull.setLocation(x,y); break;
15、 }}} } if(!hasAddActionListener) //如果尚未添加动作事件,则添加 for(int i=0;i<8;i++) //为第个方格添加动作事件,这样单击按钮就能移动了 cell[i].addMouseListener(this); hasAddActionListener=true;} private boolean test(int x,int y){ if((x>=0&&x<=200)||(y>=0&&y<=200)) return true; else return false; }
16、 六 运行调试与分析讨论 1.初始运行,界面如图一所示: 图一 2.运行结果,图片顺序打乱,则开始进行拼图游戏,运用鼠标,移动图片。当游戏完成时,如图二所示: 图二 七 设计大作业的体会与小结 一个编程语言最强大的地方不是它是容易学,或者难学,而是它拥有一个强大的库。JAVA是一个完全面向对象的语言,JAVA的命名规则是很容易让人接受的。而且容易背编程人员记住。经过几天的实践训练,对JAVA的综合应用能力有了较大的提高,另外对JAVA的特点有了更深层次的认识。这次设计中使用的代码虽然不长,但类与类之间也有很强的逻辑关系,这就是面向对象语言的最大优势,这样可使编程者更
17、轻松的运用JAVA。 做这次大作业我最大的体会就是不仅熟练地掌握了书本上的知识,还学到了很多书本上没有的知识。在编写完程序,按照老师的建议,我把程序一遍一遍的改,从老师那我了解到,一个好的程序,应该能让别人容易读懂,所以变量名尽量用英文单词而不要用单个字母表示,还有代码中应该要有足够多的注释。当遇到某个功能无法实现时,我会上网先百度,看看网上有没有好的解决方案,找不到的话就去问老师,通过老师提供的接口、类等,然后查询那个帮助文档。 经过这次大作业使我对JAVA图形用户界面的有关知识有了更深入了解,通过大作业,能够达到全面、深入理解和掌握所学内容,能够进行简单的分析和判断。这次大作业,虽说在
18、设计过程中遇到了很多的困难,但是在老师的细心指导下,很多不会的问题都迎刃而解了。此次大作业一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。是对自己学习的一次很好的检验。能完成这次的大作业,和身边的同学和老师的帮助分不开的。在此对李旭老师的指导表示感谢,还有帮助过我的一些同学,在此也表示谢意。在今后的学习中我也会更加努力的。 参考文献 [1] 丁振凡. Java语言实用教程(第1版)[M]. 北京:北京邮电大学出版社, 2005.2 [2] 王海坤.程序设计类课
19、程教学中学习兴趣的培养与探索[J].科协论坛,2010,(5). [3] 韦宇炜,聂笃宪.软件工程大作业教学模式探讨[J].考试周刊,2010,(11). [5] 王立丰.J2EE大作业指导[M].北京:北京大学出版社,2008,(8). [6] 朱文球,李长云,满君丰.以就业为导向的IT人才培养实训教学模式探讨[J].福建电脑,2008,(11). [7] 高伟,郭瑾,张昊. 基于JAVA技术的中国象棋游戏设计与实现[J]. 大连民族学院学报, 2007, (05) . [8] 刘应平,郭永宁. 浅谈Java学习中的几个概念问题[J]. 福建电脑, 2008, (08) . [9
20、] 侯青,李磊. Java与Java Applet和JavaScript间的混编方法[J]. 信息技术, 2009, (08) . [10] 周凤英 ,文惺. Java游戏开发Step by Step系列之三——Java游戏开发起步 [J]. 电脑爱好者, 2003, (14) . [11] 周凤英 ,文惺. Java游戏开发Step by Step系列之二——Java游戏开发规则[J]. 电脑爱好者, 2003, (13) . [12] 周凤英 ,文惺. Java游戏开发Step by Step系列之一——Java游戏开发基础[J]. 电脑爱好者, 2003, (12) .






