(完整版)Java连连看毕业课程设计
java课程设计报告连连看
java课程设计报告 连连看一、课程目标知识目标:1. 让学生掌握Java基础语法,包括变量声明、数据类型、运算符等。
2. 使学生了解面向对象编程的基本概念,如类、对象、继承、封装等。
3. 帮助学生掌握Java中常用类库和API的使用,如Array、ArrayList等。
4. 让学生学会运用Java编写图形用户界面(GUI)程序。
技能目标:1. 培养学生运用Java语言解决实际问题的能力,特别是在连连看游戏设计中的逻辑思维和编程技巧。
2. 提高学生分析问题、设计解决方案的能力,学会使用Java实现游戏的基本功能。
3. 培养学生团队合作精神,学会在项目中分工合作、共同推进项目进度。
情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发他们主动探索新技术、新方法的积极性。
2. 培养学生面对问题时的耐心和毅力,让他们体会到编程过程中的成就感。
3. 引导学生树立正确的价值观,认识到编程对于社会发展的重要性,激发他们为我国信息技术产业的发展贡献力量的责任感。
课程性质分析:本课程为Java编程课程设计,旨在通过实际项目——连连看游戏的设计与实现,巩固和拓展学生所学Java知识,提高编程实践能力。
学生特点分析:学生已具备一定的Java基础,了解基本语法和面向对象编程,但实际编程经验不足,需要通过本课程加强实践操作。
教学要求:1. 注重理论与实践相结合,引导学生将所学知识运用到实际项目中。
2. 鼓励学生积极参与讨论,培养解决问题的能力和团队合作精神。
3. 关注学生个体差异,提供个性化指导,确保每位学生都能在课程中取得进步。
二、教学内容1. Java基础语法回顾:变量声明、数据类型、运算符、控制流程(条件语句、循环语句)。
教材章节:第一章至第三章2. 面向对象编程:类与对象、构造方法、封装、继承、多态。
教材章节:第四章至第六章3. Java常用类库和API:String类、Array、ArrayList、泛型。
JAVA课程设计连连看游戏的开发
JAVA课程设计连连看游戏的开发湖南涉外经济学院课程设计报告课程名称:程序设计实训报告题目:连连看游戏的开发学生姓名:所在学院:专业班级:学生学号:指导教师:2013年6月20日课程设计任务书报告题目连连看游戏的开发完成时间2013-6学生姓名专业班级职称讲师总体设计要求和技术要点设计一个连连看游戏程序,游戏程序的功能需求如下:游戏区是一个包含了多种不同花色游戏牌的二维棋盘,棋盘的行数和列数可以自行定义。
每一种花色的游戏牌的数量都是偶数。
两张花色相同的游戏牌的之间的路径如果满足以下条件,这两张游戏牌即可消去:路径连线由不多于3条的水平和垂直的线段构成,任何一条线段都不能穿越其他的游戏牌,但可以不在棋盘中,路径两端的游戏牌必须具有相同的花色。
游戏只要用鼠标即可进行操作。
最初棋盘里布满了游戏牌,游戏开始时进行计时。
第一次使用鼠标点击棋盘中的游戏牌,该游戏牌此时为“被选中”,以特殊方式显示;再次以鼠标点击其他游戏牌,若该游戏牌与被选中的游戏牌两者花色相同,且把第一张游戏牌到第二张游戏牌连起来,中间的线段不超过3条,则消掉这一对游戏牌,否则第一张游戏牌恢复成未被选中状态,而第二张游戏牌变成被选中状态。
每消去一对游戏牌,应检查棋盘内是否至少还存在一对能消去的游戏牌,如果不存在,则在原有位置对游戏牌进行重排,直到至少存在一对能够消去的游戏牌。
如果在指定的时间内消去了所有的游戏牌,游戏胜利;如果时间耗尽还未能消除全部的游戏牌,游戏失败。
要求每人独立完成,使用主流开发工具,尽可能采用面向对象方法,在设计判断两张相同花色游戏牌能否消去的算法时,尽可能使用状态空间搜索算法(如回溯法、分支限界法等),要求代码的具有一定的可读性、可维护性和可扩充性。
可以参考教师给定的程序或者其他程序,但程序和报告严禁全盘抄袭。
工作内容及时间进度安排第11周~第12周:对需要开发的软件进行需求分析和软件设计第13周:论证方案设计第14周~第16周:程序设计第17周:测试、修改程序,撰写报告第18周:验收答辩课程设计成果1.与设计内容对应的软件程序2.课程设计总结报告摘要近年来,Java作为一种新的编程语言,以其可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。
java连连看课程设计
java连连看课程设计一、课程目标知识目标:1. 学生能理解Java连连看游戏的基本原理和规则。
2. 学生能掌握运用Java编程语言实现连连看游戏的界面布局和基本逻辑。
3. 学生能掌握使用二维数组存储和管理游戏数据的方法。
4. 学生能理解并能运用事件监听机制实现游戏交互。
技能目标:1. 学生能运用所学知识,独立编写并调试Java连连看游戏的简单版本。
2. 学生能通过分析问题,设计合理的算法解决问题,如使用深度优先搜索或广度优先搜索进行路径查找。
3. 学生能运用调试技巧找出并修正程序中的错误,提高代码质量。
情感态度价值观目标:1. 学生培养对编程的兴趣,激发探究精神和创新意识。
2. 学生通过团队协作,培养沟通能力和团队精神,增强合作解决问题的能力。
3. 学生在游戏编程实践中,体验编程带来的成就感,增强自信心。
课程性质:本课程为实践性较强的Java编程课程,通过设计与实现连连看游戏,让学生将所学理论知识应用于实际编程中,提高学生的编程实践能力。
学生特点:学生处于初中年级,对游戏有较高的兴趣,具备一定的编程基础,喜欢动手实践。
教学要求:教师应注重理论与实践相结合,引导学生主动探究,培养学生的编程思维和解决问题的能力。
在教学过程中,关注学生的个体差异,提供个性化指导,确保学生能够达到预定的学习目标。
通过分解课程目标为具体的学习成果,便于后续的教学设计和评估。
二、教学内容1. 游戏原理介绍:讲解连连看游戏的基本规则和原理,引导学生理解游戏的逻辑结构。
- 教材章节:第一章 Java概述,第三节 Java程序的基本结构。
2. 界面设计与实现:教授如何使用Java的Swing图形用户界面工具包设计连连看游戏的界面。
- 教材章节:第五章 图形用户界面,第一节 Swing概述,第二节 常用Swing组件。
3. 数据存储与处理:使用二维数组存储游戏数据,讲解如何进行数据的初始化和管理。
- 教材章节:第四章 数组,第一节 数组的概念,第二节 二维数组。
连连看java代码课程设计
连连看java代码课程设计一、课程目标知识目标:1. 理解Java基本语法,掌握连连看游戏的核心算法;2. 学会使用Java编写图形用户界面,实现游戏窗口的布局与设计;3. 了解Java事件处理机制,能编写鼠标点击事件监听器。
技能目标:1. 培养学生运用Java语言解决实际问题的能力;2. 提高学生分析问题、设计算法、编写代码、调试程序的综合技能;3. 培养学生的创新思维和团队协作能力,通过分组完成任务,提高沟通与协作效率。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习积极性,增强自信心;2. 培养学生面对困难时,保持积极的心态,勇于尝试,不断克服挫折;3. 培养学生的集体荣誉感,通过团队协作,共同完成任务,体验成功的喜悦。
分析课程性质、学生特点和教学要求,本课程将目标分解为以下具体学习成果:1. 学生能独立完成连连看游戏的Java代码编写,实现游戏的基本功能;2. 学生能通过小组合作,共同优化游戏界面,提升用户体验;3. 学生在课程学习过程中,能主动探究新知识,勇于挑战更高难度的编程任务;4. 学生在学习过程中,培养良好的编程习惯,注重代码规范和团队协作。
二、教学内容根据课程目标,教学内容主要包括以下几部分:1. Java基本语法:- 数据类型、变量、常量- 运算符、表达式、流程控制(分支、循环)- 数组、字符串2. Java图形用户界面设计:- Swing图形用户界面库简介- JFrame、JPanel容器组件- 布局管理器(边界布局、流布局等)3. Java事件处理机制:- 事件监听器、事件源- 鼠标事件、键盘事件- 事件适配器、事件处理线程4. 连连看游戏核心算法:- 游戏规则、数据结构设计- 算法实现(路径查找、消去逻辑等)- 游戏界面与逻辑分离教学大纲安排如下:1. 第一阶段(2课时):Java基本语法复习与巩固2. 第二阶段(2课时):Swing图形用户界面设计3. 第三阶段(2课时):Java事件处理机制4. 第四阶段(4课时):连连看游戏核心算法分析与实现教学内容与教材关联章节:1. 《Java程序设计》第3章:Java基本语法2. 《Java程序设计》第6章:Swing图形用户界面设计3. 《Java程序设计》第7章:Java事件处理机制4. 《Java程序设计》实例分析:连连看游戏案例三、教学方法针对本课程的教学目标和内容,采用以下多样化的教学方法:1. 讲授法:- 对于Java基本语法、Swing图形用户界面设计、Java事件处理机制等基础知识点,采用讲授法进行教学,使学生在短时间内掌握必要的理论知识;- 讲授过程中注重启发式教学,引导学生主动思考问题,提高课堂互动性。
JAVA连连看游戏课程设计
JAVA连连看游戏课程设计一、教学目标本课程的目标是让学生掌握Java编程基础,学会使用Java语言编写简单的连连看游戏。
通过本课程的学习,学生应达到以下目标:1.知识目标:–理解Java语言的基本语法和编程概念;–掌握面向对象编程的基本思想和方法;–了解常用的数据结构和算法。
2.技能目标:–能够使用Java语言编写简单的程序;–能够运用面向对象编程思想解决实际问题;–能够独立完成连连看游戏的设计和实现。
3.情感态度价值观目标:–培养学生的编程兴趣和自信心;–培养学生解决问题的能力和创新精神;–培养学生团队协作和沟通交流的能力。
二、教学内容本课程的教学内容主要包括以下几个部分:1.Java语言基础:介绍Java语言的基本语法、数据类型、运算符、控制结构等。
2.面向对象编程:讲解类的定义、属性、方法、继承、多态等概念,并引导学生学会使用面向对象的思想解决问题。
3.常用数据结构和算法:介绍数组、链表、栈、队列等基本数据结构,以及排序、查找等常用算法。
4.连连看游戏设计与实现:引导学生运用所学知识设计和实现一个简单的连连看游戏,包括游戏界面设计、逻辑处理、算法实现等。
三、教学方法本课程采用多种教学方法相结合的方式,以激发学生的学习兴趣和主动性:1.讲授法:教师讲解基本概念、语法和算法,引导学生掌握知识要点。
2.案例分析法:通过分析实际案例,让学生学会运用所学知识解决实际问题。
3.实验法:学生动手编写代码,实践所学知识,培养编程能力和解决问题的能力。
4.小组讨论法:学生分组讨论,共同完成游戏设计,培养团队协作和沟通交流的能力。
四、教学资源本课程所需教学资源包括:1.教材:《Java编程入门》或其他同类教材;2.参考书:《Java核心技术》等;3.多媒体资料:PPT、教学视频等;4.实验设备:计算机、网络等。
教学资源应支持教学内容和教学方法的实施,丰富学生的学习体验,提高学习效果。
五、教学评估为了全面、客观地评估学生的学习成果,本课程采用以下评估方式:1.平时表现:评估学生在课堂上的参与程度、提问回答等情况,以反映学生的学习态度和积极性。
JAVA课程设计连连看(含代码)
Java程序课程设计任务书1、主要内容:本程序基本实现了小游戏连连看的功能,玩家找出游戏中2个相同图案的方块,如果它们之间的连接线不多于3根直线,则将其连接起来,就可以成功将图案相同的方块消除,否则不会消失,当游戏中已没有满足条件的图案时,点击重列,可重新排序,游戏结束会跳出所得分数,该游戏的特点是与自己竞争,超过自己之前所创纪录。
2、具体要求(包括技术要求等):a. 该游戏界面为方格类型,由纵6横7的直线平行垂直交叉组成,分别是6行5列方块拼接,共有30格小方块。
方块上随机分布一些数字,数字的要求是至少两两相同,位置随机打乱。
b.当将相同数字的方块连接,但要满足只能至少单边无阻碍呈直线趋势连接,否则无效,若连接一对成功就消失于界面,继续游戏,直到游戏结束,并能返回所得分数。
c. 重列按钮(帮助)的功能:游戏过程中,遇到困难难以寻找下一符合要求的一对数字,可按左下按钮重置重新排列方可继续游戏。
d. 退出按钮:击左下方的“退出游戏”按钮,即可结束游戏。
e.运用基于SWING的图形用户界面设计知识等。
3、学习并掌握以下技术:Java等4、熟练使用以下开发工具:Jcreate 等实现系统上述的功能。
三、计划进度12月28日-12月29 日:课程设计选题,查找参考资料12月30日-12月31日:完成需求分析、程序设计1月1日-1月3日:完成程序代码的编写1月4日-1月6日:系统测试与完善1月7日-1月8日:完成课程设计报告,准备答辩四、主要参考文献[1] (美)埃克尔著陈昊鹏,饶若楠等译. Java编程思想[J]. 机械工业出版社,2005[2](美)Gary J.Bronson著张珑刘雅文译. Java编程原理[J]. 清华大学出版社,2004[3](美)Michael Morrison著徐刚,于健,薛雷译. 游戏编程入门[J]. 人民邮电出版社,2005.9[4](美)Wendy Stahler著冯宝坤,曹英译. 游戏编程中的数理应用[J]. 红旗出版社,2005[5](美)克罗夫特(David Wallace Croft)著彭晖译. Java游戏高级编程[J]. 清华大学出版社,2005[6](美)David Brackeen著邱仲潘译. Java游戏编程[J]. 科学出版社,2004[7] 聂庆亮编著. Java应用开发指南[J]. 清华大学出版社,2010[8] 耿祥义,张跃平编著. Java面向对象程序设计[J]. 清华大学出版社,2010[9] 杨绍方编著. Java编程实用技术与案例[J]. 清华大学出版社,2000.11[10] 明日科技编著. Java编程全能词典[J]. 电子工业出版社,2010摘要随着Java语言的不断发展和壮大,现在的Java已经广泛的应用于各个领域,包括医药,汽车工业,手机行业,游戏,等等地方。
Java课程设计连连看游戏(含代码)
Java程序课程设计任务书一、主要任务与目标1、了解图形用户界面的概念;2、了解AWT的基本体系结构,掌握窗口的基本原理;3、掌握几种布局管理器的使用方法;4、掌握java的事件处理机制;5、了解Swing的基本体系结构,掌握Swing组件的使用方法;6、掌握java小程序的工作原理和使用方法;7、该游戏还将设置退出,再来一局按钮,并实现相应的功能。
8、设计一个用户注册登录界面二、主要内容与基本要求游戏规则是模仿网络上普通的连连看游戏,主要是鼠标两次点击的图片能否消去的问题。
当前,前提是点击两张相同的图片,若点击的是同一张图片或者两张不同的图片,则不予处理。
在两张想同图片所能连通的所有路径中,如果存在一条转弯点不多于两个的路径,就可以消去;如果没有,则不予处理。
该游戏由30张不同的图片组成,游戏开始将会出现30张随机组合的图片,在规则下点击两张相同的图片后图片将会消失。
图片全部消完为游戏成功。
游戏还将设置退出,再来一局的按钮,和倒计时的功能,方便用户进行操作。
并且有一个用户登录注册界面,玩家必须登录以后才可以进行游戏。
三、计划进度12月28日~ 12月29日:课程设计选题,查找参考资料12月30日~ 12月31日:阅读参考书籍,收集资料,完成需求分析1月1日~ 1月3日:系统的代码设计及实现,数据库设计与实现1月4日~ 1月5日:系统的调试,修改,完善1月6日~ 1月7日:完成课程设计报告,准备答辩四、主要参考文献[1] 刘宝林.Java程序设计与案例习题解答与实验指导[M].[2] 王鹏何云峰.Swing图形界面开发与案例分析[M].[3](美)Karl Avedal , Danny Ayers, Timothy Briggs. JSP编程指南[M]. 电子工业出版社, 2004,47-125.[4](美)Mark Linsenbardt. JSP在数据库中的应用与开发[M]. 希望电子出版社,2005,210-236.[5] Dianne Phelan,Building a simple web database application[C].IEEE InternationalProfessional Communication Conference, 2004, 79-86.[6](美)Karl Avedal,Danny Ayers,Timothy Briggs.JSP编程指南[M].电子工业出版社,2006,47-125.[7] Dianne Phelan,Building a simple web database application[C].IEEE InternationalProfessional Communication Conference, 2005, 79-86.[8] Altendorf. Eric, Hohman. Moses, Zabicki. Roman. Using J2EE on a large,web-based project[J]. IEEE Software.2002,19(02):81-89.摘要当今社会,休闲型游戏越来越得到人们的喜爱,我所做的毕业设计实例“连连看游戏的设计与实现”是近几年来网络上非常流行的一种二维休闲游戏,它对电脑配置要求不高,娱乐性强,易于上手。
连连看课程设计java
连连看课程设计java一、教学目标本课程旨在通过学习Java编程语言中的“连连看”游戏开发,让学生掌握以下知识目标:1.理解Java编程语言的基本语法和结构。
2.学习使用Java编程语言实现简单的游戏逻辑。
3.掌握使用Java编程语言中的图形用户界面(GUI)设计游戏界面。
在技能目标方面,学生需要能够:1.使用Java编程语言独立完成一个简单的游戏程序。
2.分析并解决游戏开发过程中遇到的问题。
3.能够团队合作,共同完成游戏开发项目。
在情感态度价值观目标方面,我们期望学生:1.培养对计算机编程的兴趣和热情。
2.学会欣赏团队合作的力量,培养团队精神。
3.通过对游戏的开发,培养创新思维和解决问题的能力。
二、教学内容本课程的教学内容将围绕Java编程语言和“连连看”游戏开发展开。
具体内容包括:1.Java编程语言的基本语法和结构。
2.Java编程语言中的图形用户界面(GUI)设计。
3.“连连看”游戏的基本逻辑和规则。
4.使用Java编程语言实现“连连看”游戏。
教学大纲安排如下:第一周:Java编程语言的基本语法和结构。
第二周:Java编程语言中的图形用户界面(GUI)设计。
第三周:“连连看”游戏的基本逻辑和规则。
第四周:使用Java编程语言实现“连连看”游戏。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法,如:1.讲授法:用于教授Java编程语言的基本语法和结构。
2.讨论法:通过小组讨论,让学生共同解决问题,培养团队精神。
3.案例分析法:分析已有的游戏案例,让学生了解游戏开发的流程和技巧。
4.实验法:让学生动手实践,独立完成“连连看”游戏的开发。
四、教学资源为了支持教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:《Java编程语言》。
2.参考书:《Java GUI编程》。
3.多媒体资料:教学PPT、游戏开发案例视频。
4.实验设备:计算机、网络环境。
通过以上教学资源,我们将丰富学生的学习体验,提高教学效果。
JAVA课程设计—连连看最终版要点
JAVA课程设计报告实验题目:“连连看”游戏程序设计小组成员:王飞铭、毛建平、陈银银、黄庭威成员分工:组长:王飞铭王飞铭:actionPerformed():重来一局按钮的响应事件及remove()判断移去方法毛建平:xiao()消去方法、estimateEven()方法陈银银:init()方法:游戏主界面和main()方法实现产生随机数方法、fraction()刷新黄庭威:randomBuild()方法(一):内容:1:功能需求和分析:(1)该游戏界面为:数字方格类型,由6竖7横的直线平行垂直交叉而组成,分别是6行5列凹方块拼接,共有30格小方块。
方块上随机分布一些数字,数字的要求是至少两两相同,位置随机打乱。
(2)游戏规则是:将相同数字的方块连接,但要满足只能至少单边无阻碍呈直线趋势连接,否则视为无效,如果一对数字连接成功,那么就会消失在界面,并且分数标签会加分,继续游戏,直到游戏结束。
(3)帮助项目:在游戏过程中,如果出现没有可以连接的数字对时候,可按界面下方按钮刷新重新排列,便可以可继续游戏。
(4)退出游戏:可以鼠标点击“退出”按钮,结束游戏。
(5)再来一局:本局结束或者中途不想继续玩本局,可以点击界面下方的再来一局,系统会自动再次重新开始。
(二):主要方法:首先我们定义了一个lianliankan类,实现了接口ActionListener:1)init()方法:实现游戏主界面;2)randomBuild()方法:用来产生游戏按钮上的随机数;3) fraction()方法:游戏界面最上面用来加分;4)reload()方法:用来刷新,重载,窗体界面;5)estimateEven()方法:判断按钮数字是否满足消去的条件linePassOne()方法:判断第一按钮同左右侧空按钮之间⑦rowPassOne()方法:判断第一按钮同列空按钮与第二按钮;6)actionPerformed(ActionEvent e)方法:用来实现重来一局按钮的响应事件;7)main(String[] args)方法:主函数;8)xiao()方法:消去方法(三):界面要求:用图形界面实现,参考下系统流程图如下NO(四):代码设计package数字版;/**本游戏是连连看,上面出现的都是数字,点击两个相邻的或者之间没有第三个的,便可以消去。
连连看课程设计java
连连看课程设计java一、课程目标知识目标:1. 掌握Java基本语法和数据类型,理解变量和常量的概念;2. 学会使用Java中的控制结构,包括条件语句和循环语句;3. 了解Java中的数组及其应用,能够编写简单的数组操作程序;4. 理解面向对象编程的基本概念,掌握类的定义、方法和属性的使用。
技能目标:1. 能够运用所学知识,设计并实现“连连看”游戏的基本功能;2. 培养编程思维,提高问题分析能力和解决问题的能力;3. 学会使用Java集成开发环境(IDE),熟练编写、调试和运行Java程序。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习主动性和积极性;2. 培养学生的团队合作意识,学会与他人共同解决问题;3. 培养学生严谨、认真的学习态度,养成良好的编程习惯。
本课程针对初中年级学生,充分考虑了学生的认知水平、兴趣和实际需求。
课程内容紧密联系教材,以“连连看”游戏为载体,将Java编程知识融入到实际项目开发中,提高学生的实践能力。
通过本课程的学习,期望学生能够掌握Java编程的基本知识,培养编程思维,提高解决问题的能力,同时形成积极、严谨的学习态度。
二、教学内容1. Java基本语法和数据类型:变量定义与使用,数据类型(整型、浮点型、字符型、布尔型)。
2. 控制结构:条件语句(if-else、switch),循环语句(for、while、do-while)。
3. 数组:数组的定义和初始化,数组的基本操作(遍历、排序、查找)。
4. 面向对象编程基础:类的定义,方法(构造方法、实例方法),属性。
5. “连连看”游戏设计与实现:- 游戏规则和界面设计;- 游戏逻辑实现:随机生成图案,配对消除;- 用户交互:鼠标点击事件处理;- 游戏胜负判定。
教学内容依据教材章节进行组织,分为基础知识和项目实践两部分。
基础知识部分按照以下顺序展开:1. 第1章:Java概述和开发环境配置;2. 第2章:Java基本语法和数据类型;3. 第3章:控制结构;4. 第4章:数组;5. 第5章:面向对象编程基础。
java课程设计连连看
java课程设计连连看一、教学目标本课程的目标是让学生掌握Java编程的基础知识,能够运用Java语言编写简单的程序。
具体分为以下三个部分:1.知识目标:学生需要了解Java语言的基本语法、数据类型、控制结构、类与对象等基本概念。
2.技能目标:学生能够使用Java语言编写简单的控制台应用程序,掌握基本的编程技巧。
3.情感态度价值观目标:培养学生对编程的兴趣,使其认识到编程在现代社会的重要性,培养学生的创新精神和团队合作意识。
二、教学内容教学内容主要包括Java语言的基本语法、数据类型、控制结构、类与对象等。
具体安排如下:1.第一章:Java语言概述,介绍Java语言的起源、特点和应用领域。
2.第二章:基本语法,讲解Java语言的基本语法规则,包括变量、常量、运算符等。
3.第三章:数据类型,介绍Java语言的数据类型系统,包括整数类型、浮点类型、字符类型等。
4.第四章:控制结构,讲解Java语言的控制结构,包括条件语句、循环语句等。
5.第五章:类与对象,介绍Java语言的面向对象编程思想,包括类的定义、对象的创建、方法的重载等。
三、教学方法为了激发学生的学习兴趣和主动性,我们将采用多种教学方法,包括:1.讲授法:讲解基本概念和语法规则,让学生掌握Java语言的基础知识。
2.案例分析法:通过分析实际案例,让学生了解Java语言的应用场景,提高编程能力。
3.实验法:让学生动手编写程序,巩固所学知识,培养实际操作能力。
四、教学资源我们将提供丰富的教学资源,包括:1.教材:《Java编程入门》,为学生提供系统的学习材料。
2.参考书:《Java核心技术》,为学生提供深入学习的参考。
3.多媒体资料:PPT、视频教程等,帮助学生更好地理解知识点。
4.实验设备:计算机、网络等,为学生提供实践操作的环境。
五、教学评估为了全面、客观地评估学生的学习成果,我们将采取以下评估方式:1.平时表现:通过课堂参与、提问、讨论等方式,评估学生的学习态度和积极性。
java实现连连看课程设计
java实现连连看课程设计一、课程目标知识目标:1. 掌握Java编程语言的基本语法和结构;2. 理解面向对象编程思想,能够运用类和对象进行程序设计;3. 学会使用Java中的数组存储和管理数据;4. 掌握Java图形用户界面编程,实现连连看游戏的界面设计和布局。
技能目标:1. 能够运用所学知识,独立完成连连看游戏的编写和调试;2. 提高问题分析能力,学会将实际问题转化为计算机程序;3. 培养逻辑思维和编程实践能力,提高编程效率。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习积极性;2. 培养学生的团队协作精神,学会与他人合作解决问题;3. 增强学生的自信心,勇于面对挑战,克服困难;4. 培养学生严谨、细心的学习态度,养成良好的编程习惯。
课程性质:本课程为信息技术学科的一节实践性课程,结合连连看游戏的开发,让学生在实践中掌握Java编程知识。
学生特点:学生处于八年级,具备一定的信息技术基础,对编程有一定的了解,但实践经验不足。
教学要求:注重理论与实践相结合,充分调动学生的积极性,引导学生主动参与课堂讨论和实践操作。
通过完成连连看游戏项目,培养学生的编程能力和解决问题的能力。
在教学过程中,关注学生的个体差异,给予个性化指导,确保每个学生都能达到课程目标。
将课程目标分解为具体的学习成果,以便进行教学设计和评估。
二、教学内容1. Java基本语法与结构复习:回顾变量、数据类型、运算符、控制语句等基础知识,确保学生具备编写Java程序的基础能力。
教材章节:第一章 Java语言概述及基础语法。
2. 面向对象编程:介绍类与对象的概念,理解封装、继承、多态等面向对象特性,并通过实例演示如何运用。
教材章节:第二章 面向对象编程。
3. 数组的使用:讲解数组的定义、初始化、遍历和应用,为游戏数据存储打下基础。
教材章节:第三章 数组与字符串。
4. Java图形用户界面编程:介绍Swing库的基本组件,重点讲解容器、布局管理器和事件处理机制。
java课程设计报告连连看
java课程设计报告连连看一、课程目标知识目标:1. 学生能掌握Java基础语法,包括变量声明、数据类型、运算符和表达式。
2. 学生能理解并运用基本的控制结构,如顺序结构、分支结构和循环结构。
3. 学生能掌握数组的使用,包括一维数组、二维数组的定义和操作。
4. 学生能理解面向对象编程的基本概念,如类、对象、封装、继承和多态。
技能目标:1. 学生能运用所学知识设计并实现一个简单的“连连看”游戏,展示其逻辑思维和编程能力。
2. 学生通过编写代码,培养解决问题的能力,学会分析问题、设计算法和数据结构。
3. 学生能使用调试工具检查并修正程序中的错误,提高程序调试能力。
情感态度价值观目标:1. 学生培养对编程的兴趣,激发学习Java的热情,树立学习信心。
2. 学生养成合作学习、团队协作的良好习惯,培养沟通能力和团队精神。
3. 学生认识到编程对解决实际问题的价值,提高对信息技术的认识,培养创新意识和实践能力。
课程性质:本课程为实践性较强的学科,结合理论知识与实际操作,培养学生的编程能力和逻辑思维。
学生特点:学生为初中年级,具备一定的逻辑思维和数学基础,对新鲜事物充满好奇,但注意力容易分散,需要激发学习兴趣。
教学要求:结合学生特点,教师应注重启发式教学,引导学生主动探索,关注个体差异,提高学生的实践操作能力和创新能力。
通过本课程的学习,使学生能够将所学知识应用于实际编程中,达到学以致用的目的。
后续教学设计和评估将围绕以上课程目标展开,确保学生达到预期学习成果。
二、教学内容1. Java基础语法- 变量声明与赋值- 数据类型与转换- 运算符与表达式- 顺序结构程序设计2. 控制结构- 分支结构(if、if-else、switch)- 循环结构(for、while、do-while)3. 数组- 一维数组的使用- 二维数组的使用4. 面向对象基础- 类的定义与对象创建- 封装(私有化属性、公有方法)- 继承与多态5. 游戏设计- “连连看”游戏规则与逻辑- 界面设计与实现- 程序流程控制教学大纲:第一周:Java基础语法学习,包括变量声明、数据类型、运算符和表达式。
JAVA课程设计—连连看最终版要点(良心出品必属精品)
JAVA课程设计报告实验题目:“连连看”游戏程序设计小组成员:王飞铭、毛建平、陈银银、黄庭威成员分工:组长:王飞铭王飞铭:actionPerformed():重来一局按钮的响应事件及remove ()判断移去方法毛建平:xiao()消去方法、estimateEven()方法陈银银:init()方法:游戏主界面和main()方法实现黄庭威:randomBuild() 产生随机数方法、fraction()刷新方法(一):内容:1:功能需求和分析:(1)该游戏界面为:数字方格类型,由6竖7横的直线平行垂直交叉而组成,分别是6行5列凹方块拼接,共有30格小方块。
方块上随机分布一些数字,数字的要求是至少两两相同,位置随机打乱。
(2)游戏规则是:将相同数字的方块连接,但要满足只能至少单边无阻碍呈直线趋势连接,否则视为无效,如果一对数字连接成功,那么就会消失在界面,并且分数标签会加分,继续游戏,直到游戏结束。
(3)帮助项目:在游戏过程中,如果出现没有可以连接的数字对时候,可按界面下方按钮刷新重新排列,便可以可继续游戏。
(4)退出游戏:可以鼠标点击“退出”按钮,结束游戏。
(5)再来一局:本局结束或者中途不想继续玩本局,可以点击界面下方的再来一局,系统会自动再次重新开始。
(二):主要方法:首先我们定义了一个lianliankan类,实现了接口ActionListener:1) init()方法:实现游戏主界面;2) randomBuild()方法:用来产生游戏按钮上的随机数;3) fraction()方法:游戏界面最上面用来加分;4) reload()方法:用来刷新,重载,窗体界面;5) estimateEven()方法:判断按钮数字是否满足消去的条件linePassOne()方法:判断第一按钮同左右侧空按钮之间⑦rowPassOne()方法:判断第一按钮同列空按钮与第二按钮;6)actionPerformed(ActionEvent e)方法:用来实现重来一局按钮的响应事件;7)main(String[] args)方法:主函数;8)xiao()方法:消去方法(三):界面要求:用图形界面实现,参考下系统流程图如下开始初始化设置开始界面画表格初始化数值游戏游戏是否结束显示游戏结束画面游戏结束NOYes(四):代码设计package 数字版;/**本游戏是连连看,上面出现的都是数字,点击两个相邻的或者之间没有第三个的,便可以消去。
连连看java课程设计
连连看java课程设计一、课程目标知识目标:1. 理解Java语言的基本语法和程序结构;2. 掌握连连看游戏的逻辑设计和实现方法;3. 学会使用Java编程解决实际问题。
技能目标:1. 能够运用Java语言编写连连看游戏的界面和功能;2. 能够运用条件语句和循环语句实现游戏逻辑;3. 能够运用数组管理游戏数据,提高编程能力。
情感态度价值观目标:1. 培养学生对编程的兴趣,激发学习积极性;2. 培养学生解决问题的能力,增强自信心;3. 培养学生团队协作意识,提高沟通能力。
课程性质:本课程为实践性较强的Java编程课程,通过设计并实现连连看游戏,让学生在实践中掌握Java编程技能。
学生特点:学生具备一定的Java基础,对编程感兴趣,喜欢动手实践。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,以学生为主体,充分调动学生的积极性和创造性。
将课程目标分解为具体的学习成果,以便于后续教学设计和评估。
二、教学内容1. Java基本语法复习:变量、数据类型、运算符、控制结构;2. 面向对象基础:类与对象、构造方法、成员变量、成员方法;3. 数组的使用:声明、初始化、遍历、排序;4. Java Swing图形用户界面:窗体、按钮、标签、布局管理器;5. 事件处理机制:事件监听器、事件适配器;6. 连连看游戏逻辑设计:游戏规则、数据存储、界面设计;7. 游戏功能实现:随机生成、匹配消除、计分与计时;8. 游戏测试与优化:功能测试、性能优化、用户体验。
教学内容安排与进度:第一课时:Java基本语法复习,面向对象基础;第二课时:数组的使用,Java Swing图形用户界面;第三课时:事件处理机制,连连看游戏逻辑设计;第四课时:游戏功能实现,测试与优化。
教学内容与教材关联:本教学内容与《Java编程思想》第四章至第七章内容相关,涉及基本语法、面向对象、数组和Swing图形用户界面等方面的知识。
通过本章节学习,学生能够将所学理论知识运用到实际项目中,提高编程实践能力。
课程设计报告Java实现游戏连连看(有源代码)
2.4流程图如下图2 主函数流程图图3 游戏进行流程图图4 使用炸弹流程图图5 计算时间流程图图6 开始游戏后画面用户选择两张一样的图片,通过鼠标进行选取,如果用户两次点击的图片不相同,那么系统认为用户没有点(鼠标记数归0),以完成用户以后的选取工作。
如果用户选择的是相同的图片(如第八行第二列和第八行第三列),那么系统会消除这两张图片,并使鼠标记数为0,并消除这两张图片的标记,使里面的图片被标记在外面。
以便用户可以进行以后的选择。
图7 消除三对后画面用户也可使通过使用“炸弹”功能进行消除图片。
方法是点击菜单中的“炸弹”选项使用,点击后如果界面上有两张可以相连的相同图片就随机消除两张可以相连的相同的图片(如第一行第一列河第一行第四列)。
图8 使用炸弹后画面炸弹数目是有限的,默认数目为三,每使用一次“炸弹”功能,炸弹数目就会自动减一,当炸弹数目为零时(使用三次“炸弹”功能)。
并且用户想再次使用炸弹时,系统会弹出对话框提示用户,并把菜单中“炸弹”选项变为灰色(用户不可使用)。
图9 炸弹使用光后画面当系统开始游戏后,系统会在后台记录时间,如果在用户还没有消除所有图片时,系统时间到了,那么系统会弹出对话框,提示用户,时间到了,游戏失败。
图10 时间到时的画面当用户点击确定后,系统还会弹出对话框询问用户是否重新开始,用户选择“是”时,系统会开始新游戏;当用户选择“否”时,系统会返回开始界面;当用户选择“取消”时,系统会返回提示时间到的界面。
图11 点击确定时的画面如果在时间未到时,用户使所有的图片都消失(两两消除,直到最后一对),系统会提示用户游戏以通过,点“确定”后回到开始界面。
图12 通关画面4.设计体会通过这次课程设计我学到了不少东西,也发现了大量的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
因而,通过课程设计之后,把以前所学过的知识重新温故。
有些在设计过程中已解决,有些还有待今后慢慢学习,只要认真学就会有更多的收获。
Java语言课程设计报告格式(连连看)
西安科技大学Java语言课程设计报告题目:基于j2me平台的连连看游戏开发班级:学号:姓名:2011年 1 月 6日目录1设计题目及具体要求 (1)2 总体设计说明书 (3)3 详细设计与实现 (6)4 系统测试 (20)5 设计小结 (20)1设计题目及具体要求1.1题目需求<<连连看>>来源于街机游戏<<四川麻将>>和<<中国龙>>,是给一堆图案中的相同图案进行配对的简单游戏。
2003年,一个名叫朱俊的网友将这种游戏模式搬到个人电脑上,立刻成为办公一族的新宠,并迅速传遍了世界各地。
<<连连看>>考验的是玩家的眼力和记忆力,在有限的时间内,只要把所有能连接的相同的图案,两个一对的找出来,没找出一对(用鼠标点击配对),它们就会自动消失,只要把所有的图案全部消掉就可获得胜利。
开始制作游戏时,主要要解决的问题有以下几个方面:如何设置整个游戏的界面;如何控制连连看游戏中随机图片的生成且每种图片必须为偶数个;游戏开始后,判断键盘两次点击的图片能否消去,即图片是否相同且图片之间路径的判断.设计该游戏仅供学习、研究之用,应用目标是让使用该软件的用户能够在闲暇之时放松一下自己。
设计该游戏是因为对手机游戏的喜爱,以及对QQ游戏中的连连看的了解,所以就产生了自己模仿一个的想法。
由于本软件是模仿其他类似软件开发的,所以只能供学习、研究之用。
1.2实现环境及工具简介1.2.1 开发环境(1)硬件环境处理器:800MHz以上CPU或是更高。
内存:128MB(建议 196MB)。
硬盘空间:20MB。
(2)软件环境操作系统:Windows 98 或是Windows 2000/Windows NT Server 4.0。
开发工具:eclipse-SR2-win32J2ME Wireless Toolkit 2.21.2.2运行环境Nokia(诺基亚) Nokia Developer's Suite 支持J2ME平台的手机。
java课程设计报告连连看
java课程设计报告连连看一、教学目标本课程的教学目标是使学生掌握Java编程的基本语法和编程思想,培养学生解决实际问题的能力。
具体分为以下三个部分:1.知识目标:使学生了解Java编程的基本语法、数据结构、控制流程、面向对象编程等知识。
2.技能目标:培养学生能够使用Java编写简单的程序,解决实际问题。
3.情感态度价值观目标:培养学生热爱编程,勇于探索,勤于实践的科学精神。
二、教学内容根据课程目标,本课程的教学内容主要包括Java基本语法、数据结构、控制流程、面向对象编程等。
具体安排如下:1.第一章:Java入门,介绍Java编程的基本概念和环境配置。
2.第二章:Java基本语法,介绍变量、数据类型、运算符、输入输出等。
3.第三章:控制流程,介绍条件语句、循环语句等。
4.第四章:数据结构,介绍数组、链表、栈、队列等。
5.第五章:面向对象编程,介绍类、对象、继承、多态等。
6.第六章:异常处理,介绍异常的概念和处理机制。
7.第七章:文件操作,介绍文件的读写和操作。
8.第八章:综合案例,使用Java解决实际问题。
三、教学方法为了激发学生的学习兴趣和主动性,本课程将采用多种教学方法,如讲授法、讨论法、案例分析法、实验法等。
具体如下:1.讲授法:用于讲解Java的基本语法、数据结构、控制流程等知识。
2.讨论法:用于探讨面向对象编程的理念,引导学生主动思考。
3.案例分析法:通过分析实际案例,使学生掌握Java编程解决实际问题的方法。
4.实验法:安排上机实验,让学生动手实践,巩固所学知识。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:《Java编程思想》2.参考书:《Java核心技术》3.多媒体资料:教学PPT、视频教程等。
4.实验设备:计算机、网络环境等。
五、教学评估本课程的评估方式包括平时表现、作业、考试等,旨在全面、客观、公正地反映学生的学习成果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要关键字:发展,java,连连看,程序设计;现代科学技术的发展,改变了人类的生活,作为新世纪的大学生,应该站在时代发展的前沿,掌握现代科学技术知识,以适应社会的发展,能够独立完成面临的任务,作一名有创新意识的新型人才。
Java语言的学习热潮并没有因为时间的推移而消退,相反,由于计算机技术的发展所带来的新应用的出现,Java越来越流行,这种情况是以往程序设计语言在其生存周期内所不多见的。
Java语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应用十分合拍,可以覆盖大部分的需求;二是因为SUN公司不断推出新的版本,完善Java自身的功能。
有了这两点,Java语言成为程序员首选的程序设计开发工具就在情理之中了。
连连看游戏是一种很流行的小游戏,记得在小时候去游戏厅玩的时候就有两台专门的连连看的机器(当然当时不叫这个名字),一个是连麻将牌、另一个是连水果图片。
当时的麻将牌分好几层,相邻层的牌还可以连,看得人眼花缭乱。
作为一个java初学者,我所编辑的“悠嘻猴连连看”小游戏,只有几个基本功能:“开始”“再来一局”炸弹“重新开始”“退出”。
我所选中给出的游戏界面很漂亮,不过似乎图形只有一层,而且数量也不是很多,只有64张图,降低了不少难度。
目录摘要 (I)第1章需求分析 (1)1.1功能分析 (1)1.2流程图 (2)第2章详细设计 (3)2.1课程设计目的 (3)2.2课程设计的实验环境 (3)2.3课程设计的预备知识 (3)2.4课程设计要求 (3)2.5连连看算法设计 (4)2.6类的实现方法 (4)2.6.1 成员变量 (4)2.6.2 方法设计 (5)第3章测试分析 (7)3.1程序运行情况 (7)3.2测试计划及分析 (9)3.2.1检验的先后顺序 (9)3.2.2程序异常处理 (9)第4章课程设计总结 (10)附件A (1)参考资料 (26)第1章需求分析1.1 功能分析每次用户选择两个图形,如果图形满足一定条件(两个图形一样,且这两个图形之间存在转弯少于3的路径),则两个图形都能消掉。
给定任意具有相同图形的两个格子,我们需要寻找这两个格子之间在转弯最少的情况下,经过格子数目最少的路径。
如果这个最优路径的转弯数目少于3 ,则这两个格子可以消去。
将界面中相同的猴子图片消去,游戏限时1000秒,如果在规定的时间内没有完成,就会跳出对话框“笨蛋!游戏时间到!GAME OVER !!!”的字样。
如果玩家赢了这局,还没有过瘾的话,可以单击“再来一局”。
判断游戏是否结束。
如果所有图形全部消去,或者游戏玩家不可能再消去任意两个格子的时候,游戏应该结束。
后一种情况,我们称之为“死锁”。
在死锁的情况下,我们也可以暂时不终止游戏,而是随机打乱局面,使得打破“死锁”局面。
不管怎样,我们需要判别游戏当前状态是否为“死锁”状态。
我们首先思考问题:怎么判断两个图形能否相消?前面分析中,我们已经知道,两个图形能够相消,当且仅当这两个图形相同,且它们之间存在路径转弯数目小于3。
因此,我们主要需要解决的问题还是,怎样求出相同图形之间的最短路径?这个最短的路径,我们首先需要保证转弯数目最少。
在转弯数目最少的情况下,经过的格子数目要尽可能地少。
在经典的最短路问题中,我们需要求出经过格子数目最少的路径。
而这里,要保证转弯数目最少,需要把最短路问题的目标函数修改为从一个点到另一个点的转弯次数。
虽然,目标函数修改了,但算法的框架仍然可以保持不变。
广度优先搜索是解决经典最短路问题的一个思路。
我们看看在新的目标函数(转弯数目最少)下,如何用广度优先搜索来解决图形A(x1,y1)和图形B(x2,y2)之间的最短路问题。
1.2 流程图第2章详细设计2.1课程设计目的《JAVA程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。
实践教学环节是必不可少的一个重要环节。
本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
2.2 课程设计的实验环境硬件要求能运行Windows 9.X操作系统的微机系统。
JAVA程序设计语言及相应的集成开发环境,UltraEdit-32开发工具。
2.3 课程设计的预备知识熟悉JAVA语言及UltraEdit-32开发工具。
2.4 课程设计要求按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JAVA程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。
同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。
2.5 连连看算法设计在检验两个方块能否消掉的时候,我们要让两个方块同时满足两个条件才行,就是两者配对并且连线成功。
* 分3种情况:(从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路经。
这样就会有三条路经。
若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了)* 1.相邻* 2. 若不相邻的先在第一个按钮的同行找一个空按钮。
1).找到后看第二个按钮横向到这个空按钮所在的列是否有按钮。
2).没有的话再看第一个按钮到与它同行的那个空按钮之间是否有按钮。
3).没有的话,再从与第一个按钮同行的那个空按钮竖向到与第二个按钮的同行看是否有按钮。
没有的话路经就通了,可以消了.* 3.若2失败后,再在第一个按钮的同列找一个空按钮。
1).找到后看第二个按钮竖向到这个空按钮所在的行是否有按钮 2).没有的话,再看第一个按钮到与它同列的那个空按钮之间是否有按钮。
3).没有的话,再从与第一个按钮同列的那个空按钮横向到与第二个按钮同列看是否有按钮。
没有的话路经就通了,可以消了。
* 若以上三步都失败,说明这两个按钮不可以消去。
2.6类的实现方法2.6.1 成员变量成员变量也叫类的属性,一般带有访问控制属性的,而全局变量虽然也有类的属性,但全局变量严重影响了封装和模块化,一般的全局变量前面要加上static和 fina属性其中,static使该变量任何类都可用(方法 ClassName.全局变量名) ,而 fina则使得变量不可更改,基本上算是常量了,这也在一定程度上防止对变量的非法修改。
表 2-6-1 成员变量2.6.2 方法设计方法名称为任何合乎语法的识别字,返回值类型是方法执行结果返回给调用者的数据类型,void表示没有返回值,参数行(parameter list)是调用时给予的参数声明,两个以上的参数声明以逗号隔开,若没有参数则参数行为空白,调用时每一个参数对应一个参数值(argument)大括号内为方法本体,也称为方法程序模块(block),包含声明(declarations)和语句(statements),声明也可以掺杂在语句之间。
一个方法不能声明在另一个方法内。
表 2-6-2 方法定义第3章测试分析3.1程序运行情况连连看游戏规则很简单,就是点中两个互相匹配并且可以通过不多于两个折点的折线连在一起的方块后,这两个方块就可以消掉。
图1初始界面菜单选项中,包括“开始游戏”、“重新开始”、“炸弹”、“退出”功能。
当选择炸弹功能时:每次含有三个炸弹,所炸的位置也是随机的;图2 游戏界面粗略想来,由于用户每次只能消除一对图形,即只会用到一个最短路径,但由于实现并不知道用户会选择哪一对图形,所以需要事先计算出所有可能的最短路径并保存起来。
此外,采用这种方法的话似乎每次用户消去一对相同图像之后都需要重新计算出当前所有可能被连接的相同图形之间最短路径,这是因为当某些图像被消去之后可能会产生很多新路径,而我们又不能确定这些空出来的格子到底能够影响哪些路径,所以就只好都重新计算一遍。
其缺点很明显就是每次消去图形动作之后重新计算所有可能的最短路径所需要消耗的时间;而该方法的优点则是可以很快地判断两个相同图形之间是否存在满足条件的最短路径。
如果用户很厉害,每次都能选中可以消除的图形对,那么用这种方法浪费的时间就会相当可观,毕竟用户未选中的其他可以连接的图形对之间的最短路径都被浪费掉了;而如果用户很差劲,每轮选择的次数都远远大于当前可能的连接数量时,该方法就会比书中正文提到的方法高效。
但这种情况是比较少的,因为在整个游戏中用户主要是会用眼睛“找”而不是频繁的用鼠标去“试”。
所以总的来看,维护所有最短路径的方法的效率相对比较低。
游戏结束后,在页面出现对话框,询问玩家是否进行下一局。
3.2测试计划及分析3.2.1检验的先后顺序在检验两个方块能否消掉的时候,我们要让两个方块同时满足两个条件才行,就是两者配对并且连线成功。
所以,这里应该先检验配对,如果该条件不成立的话,就不要再进行连线检查了,这样可以避免很多不必要的复杂运算。
当然,如果你在做这个游戏的时候,配对规则不够如此简单的话,那么就看哪个算起来麻烦就把它放在后面。
3.2.2程序异常处理本程序没有涉及到程序的异常处理,只有关于“死锁”问题,本质上还是判别两个格子是否可以消去的问题。
最直接的方法就是,对于游戏中尚未消去的格子,两两都计算一下,它们是否可以消去。
此外,从上面的广度优先搜索可以看出,我们每次都是扩展出起始格子A(x1,y1)能够到达的格子。
也就是说,对于每一个格子,我们可以调用一次上面的扩展过程,得到所有可以到达的格子,如果这些格子中有任意一个跟起始格子的图形一致,则它们可以消去,目前游戏还不是“死锁”状态。
第4章课程设计总结通过这次课程设计还使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,并且还发现了自己的许多不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
但通过这次课程设计之后,一定把以前所学过的知识重新温故。
我完成了这次JAVA课程设计,不过这只是我学习路上的驿站。
我相信我在未来的学习中会记住从本次课程设计中所学到的东西,并将它用到未来的学习中去。
在这里谢谢老师的指导,我会更加努力的学习附件A********************************************************** * 类名: MainFrame* 作用: 自定义主类,对鼠标拖拽的初始界面进行声明** 继承的父类: JFrame类 ** 实现的接口: Strings*********************************************************** import java.awt.*;import javax.swing.*;import cn.elva.Settings;import cn.elva.model.Map;public class MainFrame extends JFrame{private static final long serialVersionUID = 1L;炸弹的次数private int bombCount = Settings.BOMBCOUNT;private JPanel jContentPane = null;private JMenuBar menuBar = null;private JMenu fileMenu = null;private JMenuItem reloadItem = null;private JMenuItem startItem = null;炸弹private JMenuItem bombItem = null;private JMenuItem exitItem = null;private MapUI mapUI = null;游戏开始时间private long startTime;结束时间private long endTime;private Timer timer = null;private JMenuItem tiprivate JMenuBar initMenuBar(){if (menuBar == null){menuBar = new JMenuBar();fileMenu = new JMenu("菜单");startItem = new JMenuItem("开始游戏");startItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){reload();}});reloadItem = new JMenuItem("重新开始");reloadItem.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){reload();}});bombItem = new JMenuItem("炸弹");bombItem.addActionListener(new ActionListener(){ public void actionPerformed( ActionEvent e ){ if( bombCount==0 ){JOptionPane.showMessageDialog(MainFrame.this,"三枚炸弹已用完!!!" );bombItem.setEnabled(false);return;}mapUI.bomb();bombCount--;}});exitItem = new JMenuItem("退出");exitItem.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.exit(0);}});fileMenu.add(startItem);fileMenu.add(reloadItem);fileMenu.add( bombItem );fileMenu.add(exitItem);menuBar.add(fileMenu);}return menuBar;}public static void main(String[] args){自动生成方法存根SwingUtilities.invokeLater(new Runnable(){public void run(){MainFrame thisClass = new MainFrame();thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);thisClass.setVisible(true);}});}public MainFrame(){super();initialize();}private void initialize(){this.setSize(650, 650);this.setTitle("llk");this.setJMenuBar(initMenuBar());this.setTitle("悠嘻猴连连看");}private void reload(){mapUI = new MapUI();startTime = System.currentTimeMillis() 1000;endTime = startTime + Settings.PERTIME;jContentPane = new JPanel();jContentPane.setLayout(new BorderLayout());jContentPane.add(mapUI);this.setContentPane(jContentPane);this.validate();Map.LEFTCOUNT = Settings.ROWS * Settings.COLUMNS;initTimer();bombItem.setEnabled(true);bombCount=Settings.BOMBCOUNT;}private void initTimer(){ActionListener actionListener = new ActionListener(){public void actionPerformed(ActionEvent e){startTime = System.currentTimeMillis() 1000;if (startTime == endTime){JOptionPane.showMessageDialog(MainFrame.this, "笨蛋!时间到! GAME OVER!!");int result = JOptionPane.showConfirmDialog(MainFrame.this,"重玩一次?", "Again", JOptionPane.YES_NO_CANCEL_OPTION);if (result == JOptionPane.YES_OPTION){reload();}else{jContentPane.setVisible(false);validate();}}}};timer = new javax.swing.Timer(1000, actionListener);timer.start();}}********************************************************** * 类名: MapUI* 作用: 定义按钮和炸弹功能** 继承的父类: JPanel类 ** 实现的接口: Stings *********************************************************** import java.awt.*;import javax.swing.*;import cn.elva.Settings;import cn.elva.model.ArrayPoint;import cn.elva.model.Map;public class MapUI extends JPanel implements ActionListener{ private static final long serialVersionUID = 1L;棋子数组,用按钮来表示private ChessButton[] chesses = null;数据模型private Map map = new Map();判断当前点击的棋子是否是第二次选中的private boolean two = false;前面点的那个棋子private ArrayPoint priviousPoint;第二次选中的棋子private ArrayPoint currPoint;构造函数public MapUI(){super();initialize();}初始化函数private void initialize(){initChesses();GridLayout gridLayout = new GridLayout(Settings.ROWS + 2, Settings.COLUMNS + 2);gridLayout.setHgap(2);gridLayout.setVgap(2);this.setLayout(gridLayout);this.setSize(300, 200);放置按钮,按行for (int row = 0; row < Settings.ROWS + 2; row++){ for (int col = 0; col < Settings.COLUMNS + 2; col++){ add(chesses[row * (Settings.COLUMNS + 2) + col]);}}}private void initChesses(){int[][] values = map.getMap();初始化棋子,和数据模型里保持一样this.chesses = new ChessButton[(Settings.ROWS + 2)* (Settings.COLUMNS + 2)];for (int row = 0; row < 10; row++){for (int col = 0; col < 10; col++){通过二维的数据模型坐标得到一维的棋子坐标int index = row * (Settings.COLUMNS + 2) + col;对棋子的数据模型,即ArrayPoint对象进行设置,指定此棋子具体的位置和值chesses[index] = new ChessButton(row, col, values[row][col]);添加监听器chesses[index].addActionListener(this);将外围的一圈设为不可见,行,列为0 和为最大值的情况if (row == 0 || row == (Settings.ROWS + 2 - 1) || col == 0|| col == (Settings.COLUMNS + 2 - 1)){chesses[index].setVisible(false);}}}}public void clearCheese(ArrayPoint priviousPoint, ArrayPoint currPoint){处理匹配,看两点是否联通int[][] values = map.getMap();将模型中对应的棋子设为0values[priviousPoint.getI()][priviousPoint.getJ()] = 0;values[currPoint.getI()][currPoint.getJ()] = 0;使两个已经消除的按钮不可见int index1 = priviousPoint.getI() * (Settings.COLUMNS + 2) + priviousPoint.getJ();int index2 = currPoint.getI() * (Settings.COLUMNS + 2) + currPoint.getJ();chesses[index1].setVisible(false);chesses[index2].setVisible(false);如果棋子总数已为0,则程序结束if (map.LEFTCOUNT == 0){JOptionPane.showMessageDialog(this, "恭喜您通过!!");}}*** 事件监听器处理函数,也是处理棋子消除的地方*public void actionPerformed(ActionEvent e){获得当前的柜子ChessButton button = (ChessButton) e.getSource();获得当前棋子的数据结构ArrayPoint p = button.getPoint();如果已有两个棋子选中, 则进行判断操作if (two){currPoint = p;if( map.match(this.priviousPoint, this.currPoint)){ clearCheese(this.priviousPoint, this.currPoint);}设置为没有两个按钮的选中的状态two = false;}else{将当前点击的棋子赋给变量priviousPointthis.priviousPoint = p;标志位设为TRUE,用于点击下个棋子的时候使用two = true;}}炸弹的功能public void bomb(){int[][] values = map.getMap();ArrayPoint p1 = null;ArrayPoint p2 = null;for (int row = 1; row < Settings.ROWS + 1; row++){ for (int col = 1; col < Settings.COLUMNS + 1; col++){ if (values[row][col] != 0){p1 = new ArrayPoint(row, col, values[row][col]);for (int i = 1; i < Settings.ROWS + 1; i++){for (int j = 1; j < Settings.COLUMNS + 1; j++){if (values[i][j] != 0){p2 = new ArrayPoint(i, j, values[i][j]);}else{continue;}if (map.match(p1, p2)){clearCheese(p1, p2);return;}}}}}}}}********************************************************** * 类名: ChessButton* 作用: 初始化游戏中鼠标点击按钮** 继承的父类: JButton类 ** 实现的接口: 没有 *********************************************************** import .*;import javax.swing.*;import cn.elva.Settings;import cn.elva.model.ArrayPoint;public class ChessButton extends JButton{protected ArrayPoint point = null;public ChessButton(int row, int col, int value){this(new ArrayPoint(row, col, value));}public ChessButton(ArrayPoint point){this.point = point;String name ="Resource"+point.getValue() + Settings.RELEX;URL url = ChessButton.class.getResource(name);ImageIcon icon = new ImageIcon( url );this.setIcon(icon);}构造函数,使用默认值public ChessButton(){this(new ArrayPoint(0, 0, 0));}返回当前按钮代表的位置和值public ArrayPoint getPoint(){return point;}public void setPoint(ArrayPoint point){this.point = point;}}*********************************************************** 接口名:Settings** 作用: 声明各个变量大小***********************************************************package cn.elva;public interface Settings{行数public static final int ROWS = 8;列数public static final int COLUMNS=8;图片后缀名public static final String RELEX=".gif";每局所花时间(秒)public static final int PERTIME = 600;判断的时间间隔public static final int PER = 1;炸弹的使用次数public static final int BOMBCOUNT = 3;}*********************************************************** 类名: Map* 作用: 连入图片并声明游戏规则*********************************************************** package cn.elva.model;import java.util.Random;import cn.elva.Settings;public class Map {public static int LEFTCOUNT = Settings.ROWS * Settings.COLUMNS;让其最外层的数据不显示,可以解决边框消除不掉的情况private int[][] map = new int[Settings.ROWS + 2][Settings.COLUMNS + 2];出现的不同图片个数private int maxKinds = 4;public Map(){init();}public int[][] getMap(){return map;}private void init(){int[] tempArr = new int[Settings.ROWS * Settings.COLUMNS];int len = tempArr.length;根据图片的种类数来确定数组大小,如有64张图片,每四个为一样的,则需要图片数为644=16for (int i = 0; i < len maxKinds; i++){tempArr[i * 4] = i + 1;tempArr[i * 4 + 1] = i + 1;tempArr[i * 4 + 2] = i + 1;tempArr[i * 4 + 3] = i + 1;}打乱一维数组内数据的排列random(tempArr);填充到二维数组中for (int i = 1; i < Settings.ROWS + 1; i++){for (int j = 1; j < Settings.COLUMNS + 1; j++){this.map[i][j] = tempArr[(i - 1) * Settings.COLUMNS+ (j - 1)];}}}private void random(int[] array){Random random = new Random();int len = array.length;for (int i = len; i > 0; i--){int j = random.nextInt(i);int temp = array[i - 1];array[i - 1] = array[j];array[j] = temp;}}*** 判断是否在一条直线上,这里不去比较两者值是否相等,主要用于后面两个拐点的情况* p1之前的点* p2当前所点的点* true 相通,false 不通*public boolean oneLineWithoutValue(ArrayPoint p1, ArrayPoint p2){ if ( true;}else if (verticalMatch(p1, p2)){return true;}return false;}*** 判断是否在一条直线上,其中包括了垂直和水平两种情况* p1之前的点* p2当前所点的点* true 相通,false 不通*public boolean oneLine(ArrayPoint p1, ArrayPoint p2){if (p1.value != p2.value){return false;}if (oneLineWithoutValue(p1, p2)){return true;}return false;}*** 竖线上的判断* p1之前的点* p2当前所点的点* true 相通,false 不通*public boolean verticalMatch(ArrayPoint p1, ArrayPoint p2){if (p1.j != p2.j){return false;}if (p1.i > p2.i){ArrayPoint temp = null;temp = p1;p1 = p2;p2 = temp;}之间的相隔的棋子数int spaceCount = p2.i - p1.i;如果相邻,直接消除if (spaceCount == 1 && p1.value == p2.value){return true;}for (int i = p1.i + 1; i < p2.i; i++){ArrayPoint point = new ArrayPoint(i, p1.j, map[i][p1.j]);只要其值为0就表示没有棋子if (point.value != 0){return false;}}return true;}*** 水平方向的判断* p1之前的点* p2当前所点的点* true 相通,false 不通*public boolean false;}if (p1.j > p2.j){ArrayPoint temp = null;temp = p1;p1 = p2;p2 = temp;}水平相隔棋子数int spaceCount = p2.j - p1.j;如果相邻,直接消除if (spaceCount == 1 && p1.value == p2.value){return true;}for (int i = p1.j + 1; i < p2.j; i++){ArrayPoint p = new ArrayPoint(p1.i, i, map[p1.i][i]);if (p.value != 0){return false;}}return true;}*** 判断前后点击的是不是同一个点,i,j相同就是一个点* p1之前的点* p2当前所点的点* true 相通,false 不通*private boolean isSameOne(ArrayPoint p1, ArrayPoint p2){if (p1.i == p2.i && p1.j == p2.j){return true;}else{return false;}}*** 带一个拐点的情况,但不比较值的大小是否相等* p1之前的点* p2当前所点的点* true 相通,false 不通*public boolean oneConnerWithoutValue(ArrayPoint p1, ArrayPoint p2){ 获取P1水平方向的拐点ArrayPoint p1H = new ArrayPoint(p1.i, p2.j, map[p1.i][p2.j]);获取P1垂直方向的拐点ArrayPoint p1V = new ArrayPoint(p2.i, p1.j, map[p2.i][p1.j]);if ( true;}}if (verticalMatch(p1, p1V) && (p1V.value == 0)){if ( true;}}return false;}*** 带一个拐点的情况* p1之前的点* p2当前所点的点* true 相通,false 不通*public boolean oneConner(ArrayPoint p1, ArrayPoint p2){获取P1水平方向的拐点ArrayPoint p1H = new ArrayPoint(p1.i, p2.j, map[p1.i][p2.j]); 获取P1垂直方向的拐点ArrayPoint p1V = new ArrayPoint(p2.i, p1.j, map[p2.i][p1.j]); if (p1.value != p2.value){return false;}if (oneConnerWithoutValue(p1, p2)){return true;}return false;}*** 带两个拐点的情况,分四个方向走,上下左右,只要一个方向通过,即通过* p1初始点* p2 结束点* true 相通,false 不通*public boolean twoConner(ArrayPoint p1, ArrayPoint p2){if (p1.value != p2.value){return false;}int count = 0;ArrayPoint temp = null;左for (int col = p1.j - 1; col >= 0; col--){temp = new ArrayPoint(p1.i, col, map[p1.i][col]);if ((temp.value == 0) && this.oneLineWithoutValue(p1, temp)){ if (this.oneConnerWithoutValue(temp, p2)){return true;}}else{break;}}右count = Settings.COLUMNS + 2 - p1.j;for (int col = p1.j; col < Settings.COLUMNS + 2; col++){ temp = new ArrayPoint(p1.i, col, map[p1.i][col]);if ((temp.value == 0) && oneLineWithoutValue(p1, temp)){ if (oneConnerWithoutValue(temp, p2)){return true;}}}上count = p1.i;for (int row = count - 1; row >= 0; row--){temp = new ArrayPoint(row, p1.j, map[row][p1.j]);if ((temp.value == 0) && oneLineWithoutValue(p1, temp)){ if (oneConnerWithoutValue(temp, p2)){return true;}}}下for (int row = p1.i + 1; row < Settings.ROWS + 2; row++){ temp = new ArrayPoint(row, p1.j, map[row][p1.j]);if ((temp.value == 0) && oneLineWithoutValue(p1, temp)){if (oneConnerWithoutValue(temp, p2)){return true;}}}return false;}*** 判断两点是否匹配,包括直线,一个拐点,两个拐点三种情况 * p1初始点* p2结束点* true 相通,false 不通*public boolean match(ArrayPoint p1, ArrayPoint p2){ if (this.isSameOne(p1, p2)){return false;}if (oneLine(p1, p2)){map[p1.i][p1.j] = 0;map[p2.i][p2.j] = 0;LEFTCOUNT -= 2;return true;}if (oneConner(p1, p2)){map[p1.i][p1.j] = 0;map[p2.i][p2.j] = 0;LEFTCOUNT -= 2;return true;}if (twoConner(p1, p2)){map[p1.i][p1.j] = 0;map[p2.i][p2.j] = 0;LEFTCOUNT -= 2;return true;}return false;}}********************************************************** * 类名: ArrayPoint* 作用: 用数据结构定义每行列的按键*********************************************************** package cn.elva.model;public class ArrayPoint{protected int i; 表示行protected int j; 表示列protected int value; 表示值public ArrayPoint( int i,int j,int value ){this.i =i;this.j =j;this.value = value;}public String toString( ){return i+","+j+","+value;}public int getI(){return i;}public void setI(int i){this.i = i;}public int getJ(){return j;}public void setJ(int j){this.j = j;}public int getValue(){return value;}public void setValue(int value){ this.value = valu。