基于Java的动物换位游戏软件
动物换位游戏JAVA课设

6.1 总体流程图 .............................................7 6.2 程序代码...............................................8
2.设计要求
设计 GUI 界面的动物换位游戏,游戏的结果是让左右两组动物交换位置。具体内容如下: 程序分为 4 个级别,用户可以通过界面上提供的菜单选择“初级”、“中级”、“高级”、“自定义” 这 4 个级别。对于“初级”级别,在水平排列的 7 块石头上的左右各有 3 个类型相同的动物,中间 的石头上没有动物;对于“中级”级别,在水平排列的 9 块石头上的左右各有 4 个类型相同的动物, 中间的石头上没有动物;对于“高级”级别,在水平排列的 11 块石头上的左右各有 5 个类型相同的 动物,中间的石头上没有动物;对于“自定义”级别,用户可以输入自己想设置的一个动物数量(输 入的数必须是偶数),在水平排列的 N 块石头上的左右各有(N-1)/2 个类型相同的动物,中间的石头 上没有动物。
5.类详细设计(画 UML 图)
ChangeAnimalWindow 类是 javax.swing 包中的 JFrame 的一个子类,并实现了 ActionListener 接口,标明该类的主要成员变量和方法的 UML 图如图 5-1 所示。
以下是 UML 图中有关数据和方法的详细说明:
图 5-1 ChangeAnimaБайду номын сангаасWindow 类的 UML 图
工作计划与进度安排: 第 18 周:布置课程设计任务,查阅资料,分组设计,程序调试。 第 19 周:程序调试,编写课程设计报告,验收,答辩。
java课程设计斗兽棋

java课程设计斗兽棋一、教学目标本章节的教学目标是使学生掌握Java编程基础,能够运用Java编写简单的斗兽棋游戏。
具体目标如下:1.知识目标:–了解Java编程语言的基本语法和结构。
–掌握面向对象编程的基本概念,如类、对象、继承、多态等。
–学习Java标准库的相关知识,如集合框架、输入输出等。
2.技能目标:–能够使用Java开发工具,如Eclipse、IntelliJ IDEA等。
–能够编写Java程序,实现基本的输入输出、控制结构、函数调用等。
–能够运用面向对象编程思想,设计并实现具有继承、多态等特征的程序。
3.情感态度价值观目标:–培养学生对编程的兴趣和热情,提高学生的问题解决能力。
–培养学生团队合作精神,学会与他人交流和分享。
–培养学生良好的编程习惯,如代码规范、注释清晰等。
二、教学内容本章节的教学内容主要包括以下几个方面:1.Java编程语言基本语法和结构。
2.面向对象编程的基本概念,如类、对象、继承、多态等。
3.Java标准库的相关知识,如集合框架、输入输出等。
4.斗兽棋游戏的规则和逻辑实现。
具体的教学大纲如下:1.第1-2课时:Java编程语言基本语法和结构。
2.第3-4课时:面向对象编程的基本概念。
3.第5-6课时:Java标准库的相关知识。
4.第7-8课时:斗兽棋游戏的规则和逻辑实现。
三、教学方法本章节的教学方法采用讲授法、案例分析法和实验法相结合的方式。
1.讲授法:用于讲解Java编程语言基本语法和结构、面向对象编程的基本概念以及Java标准库的相关知识。
2.案例分析法:通过分析斗兽棋游戏的案例,使学生掌握游戏的规则和逻辑实现。
3.实验法:让学生动手编写Java程序,巩固所学知识,提高编程能力。
四、教学资源本章节的教学资源包括教材、参考书、多媒体资料和实验设备。
1.教材:选用《Java编程思想》作为主要教材,辅助以《Java核心技术》等参考书。
2.多媒体资料:提供Java编程语言基本语法和结构、面向对象编程的基本概念等视频教程。
JAVA代码 flappy Bird(飞翔的小鸟)附图

BufferedImage image;
int x, y;
int width, height;
int size;//鸟的大小。用于做碰撞检测。
//增加属性计算鸟的位置
double g;//重力加速度
double t;//两次位置的时间
double v0;//初始速度
//画笔再转回来
g2.rotate(bird.alpha, bird.x, bird.y);
Font f = new Font(Font.SANS_SERIF, Font.BOLD, 40);
g.setFont(f);
g.drawString("" + score, 43, 63);
g.setColor(new Color(255, 255, 255));
alpha = -Math.PI / 2;
}
return hit;
}
public boolean hit(Column c) {
//鸟飞进柱子范围
if (x > c.x - size / 2 - c.width / 2
&& x < c.x + size / 2 + c.width / 2) {
//是否在间隙内
boolean hit = y-size / 2 < 0 ;
return hit;
}
public boolean hit(Ground ground) {
boolean hit = y + size / 2 > ground.y;
if (hit) {
//把鸟放在地上
java宠物管理系统代码

Java宠物管理系统代码简介Java宠物管理系统是一款基于Java开发的宠物管理软件。
该系统旨在帮助用户方便地管理和记录宠物信息,包括宠物的基本信息、健康状态以及日常需求等。
用户可以通过该系统进行宠物信息的增删改查,同时还可以添加日程提醒和设置健康检查等功能,以方便管理自己的宠物。
功能特点1.宠物信息管理:用户可以添加宠物的基本信息,包括宠物的名称、品种、年龄等。
同时,用户可以修改和删除已有的宠物信息。
2.喂食管理:用户可以记录每天喂食的情况,包括喂食的时间、食物种类和食量等,以便掌握宠物的饮食情况。
3.运动管理:用户可以记录宠物的运动情况,包括每天运动的时间和方式等,以帮助宠物保持健康的身体状况。
4.日程提醒:用户可以设置宠物的日常提醒事项,如定时喂食、定时遛狗等,系统将会在设定的时间提醒用户。
5.健康检查:用户可以记录宠物的健康检查情况,包括宠物的体温、体重、疫苗注射情况等,以便及时发现宠物的健康问题。
6.数据备份与恢复:系统支持用户将宠物信息进行备份,并且可以在需要的时候恢复已备份的数据。
系统架构Java宠物管理系统采用三层架构设计,分为表示层、业务逻辑层和数据访问层。
表示层(Presentation Layer)表示层负责与用户进行交互,接收用户输入的指令和数据,并显示处理结果。
在本系统中,表示层主要由交互界面和用户输入输出模块构成。
业务逻辑层(Business Logic Layer)业务逻辑层是系统的核心部分,负责处理用户指令和数据,进行逻辑判断和业务处理。
在本系统中,业务逻辑层主要包括宠物信息管理模块、喂食管理模块、运动管理模块、日程提醒模块和健康检查模块。
数据访问层(Data Access Layer)数据访问层负责与数据库进行交互,实现数据的增删改查操作。
在本系统中,数据访问层主要由数据库管理模块和数据操作模块构成。
使用说明1.安装环境:确保已经安装Java运行环境(JRE)。
换位消除小游戏编程实现

换位消除小游戏编程实现在这篇文章中,我们将介绍如何使用编程来实现一款名为“换位消除”的小游戏。
游戏的目标是消除所有相同颜色的方块,通过不断交换它们的位置来完成。
1. 游戏规则在“换位消除”游戏中,你将面对一个方块矩阵,每个方块上都有不同的颜色。
你的目标是通过交换两个相邻方块的位置,以消除所有相同颜色的方块。
当你成功消除一组相同颜色的方块时,它们将从屏幕上消失,并且上方的方块将填充空缺位置。
你需要通过合理的移动来消除所有方块,同时尽可能地获得高分。
2. 编程实现为了实现这个游戏,我们将使用Python编程语言。
首先,我们需要创建一个游戏矩阵,其中包含不同的颜色方块。
我们可以使用二维数组来表示矩阵,例如:```pythongame_matrix = [['R', 'B', 'G'],['R', 'G', 'B'],['B', 'R', 'G']]```在这个例子中,‘R’代表红色,‘B’代表蓝色,‘G’代表绿色。
你可以根据自己的喜好定义其他的颜色。
3. 交换方块接下来,我们需要编写一个函数来交换两个方块的位置。
此函数将接受两个方块的坐标作为参数,并将它们在游戏矩阵中的位置进行交换。
下面是一个示例实现:```pythondef swap_blocks(x1, y1, x2, y2):temp = game_matrix[x1][y1]game_matrix[x1][y1] = game_matrix[x2][y2]game_matrix[x2][y2] = temp```4. 消除方块当两个相邻方块的颜色相同时,我们可以将它们从游戏矩阵中移除。
为了实现这个功能,我们可以编写一个函数来检查游戏矩阵中的相同颜色方块,并将它们标记为待删除。
下面是一个示例实现:```pythondef remove_blocks():rows = len(game_matrix)cols = len(game_matrix[0])marked_for_removal = [[False] * cols for _ in range(rows)]for i in range(rows):for j in range(cols):if i < rows - 1 and game_matrix[i][j] == game_matrix[i + 1][j]: marked_for_removal[i][j] = Truemarked_for_removal[i + 1][j] = Trueif j < cols - 1 and game_matrix[i][j] == game_matrix[i][j + 1]: marked_for_removal[i][j] = Truemarked_for_removal[i][j + 1] = Truefor i in range(rows):for j in range(cols):if marked_for_removal[i][j]:game_matrix[i][j] = ' '```在上面的代码中,我们使用一个二维布尔数组来记录需要删除的方块位置。
java偏牧极限生存同款整合包分享

java偏牧极限生存同款整合包分享java偏牧极限生存(Java Mansuetude Survival)是一款备受玩家喜爱的游戏模式,它要求玩家在一个极端条件下生存并取得胜利。
为了方便玩家获得更好的游戏体验,许多开发者和玩家都创造了各种各样的整合包,为玩家提供更多的资源和玩法。
本文将分享一款优秀的Java偏牧极限生存整合包,并对整合包的内容和特点进行深入评估。
【1】介绍与理解Java偏牧极限生存是一种特殊的游戏模式,它虽然不是游戏的官方设定,但却深受玩家喜爱。
玩家需要在一个资源稀缺、生存环境恶劣的世界中尽可能长时间地生存下去。
这需要玩家具备良好的战略思维、忍耐力和对环境的敏锐感知力。
而整合包则是为了方便玩家在游戏中加入更多的资源、方块和功能,提供更多样化的游戏体验。
这些整合包通常由开发者根据玩家的需求和喜好来定制,包含了各种各样的模组(mod)和插件 (plugin)。
这些模组和插件能够扩展游戏的内容,提供更多的挑战和机会,使游戏更富有深度和广度。
【2】整合包介绍在Java偏牧极限生存同款整合包中,我们可以发现许多有趣和创新的模组和插件。
整合包中包含了丰富的资源包,可以美化游戏的画面和音效,提升玩家的沉浸感。
整合包还加入了更多的地形生成模组,使玩家能够探索到更加多样化和刺激的地形,例如山脉、丛林和沙漠。
再次,整合包中加入了更多的生物模组,增加了游戏中各种各样的生物,有些甚至是稀有的或具有特殊能力的生物,让玩家在生存的同时还能感受到更多的乐趣和挑战。
整合包还增加了一些新的物品和工具,给玩家提供更多的选择和策略性。
新增的物品可以帮助玩家更容易地获取食物、水源和建筑材料,以应对极端环境。
新增的工具可以提高玩家的采集和战斗效率,让他们能够更好地应对各种挑战和敌人。
【3】个人观点与理解对于我个人而言,Java偏牧极限生存同款整合包能够为游戏带来更丰富的体验。
通过加入更多的资源和功能,整合包不仅为玩家提供了更多的游戏内容,也带来了更多的挑战和乐趣。
跳一跳游戏(Android应用使用Java开发)

跳一跳游戏(Android应用使用Java开发)跳一跳游戏是一款简单而又富有挑战性的休闲游戏,经常出现在我们的手机屏幕上。
本文将介绍跳一跳游戏的开发过程,使用Java语言在Android平台上实现。
1. 游戏概述跳一跳是一款基于物理引擎的游戏,玩家通过点击屏幕来控制角色跳跃,目的是在不碰到障碍物的情况下尽可能远地跳跃。
游戏界面简洁明了,操作简单直观,非常受欢迎。
2. 技术要求为了实现跳一跳游戏,我们需要使用Java语言进行Android应用开发。
除此之外,还需要掌握Android开发框架和物理引擎的使用,以及基本的游戏逻辑设计。
3. 开发环境搭建首先,我们需要安装Android Studio,这是一款专门用于Android应用开发的集成开发环境(IDE)。
然后,我们需要下载并配置Java Development Kit(JDK),确保Android Studio可以正常编译和运行我们的代码。
4. 项目创建在Android Studio中,我们可以通过创建一个新项目来开始跳一跳游戏的开发。
在创建项目的过程中,我们可以选择一些基本的配置,例如应用名称、包名、最低支持的Android版本等。
5. 游戏界面设计跳一跳游戏的界面主要由两个部分组成:游戏区域和角色。
游戏区域通常是一个类似于方块的地图,上面有随机生成的障碍物。
角色则是一个小球,玩家通过点击屏幕来控制角色的跳跃。
6. 游戏逻辑设计在跳一跳游戏中,玩家通过点击屏幕控制角色的跳跃力度。
跳跃的力度决定了角色跳跃的高度和距离。
玩家需要在不碰到障碍物的情况下跳跃到另一个平台上,每次跳跃成功都会获得一定的分数。
7. 物理引擎应用为了实现跳一跳游戏中的物理效果,我们可以使用一些开源的物理引擎库,例如Box2D。
物理引擎可以模拟真实世界中的物理效果,使得角色的跳跃和碰撞更加逼真。
8. 分数统计与排名为了增加游戏的竞争性和挑战性,我们可以在跳一跳游戏中添加分数统计和排名功能。
使用Java制作贪吃蛇游戏

近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。
Eclipse是一个开放源代码的、基于Java的可扩展开发平台,同时它也是是著名的跨平台的自由集成开发环境,它以其友好的开发界面、强大的组件支持等优点,得到广大程序员的接受和认可。
贪吃蛇是人们手机中是一个很常见的一个经典小游戏,人们对它并不陌生,在紧张的现实生活中给人们带来了不少的乐趣,编写这个贪吃蛇小游戏能让人们在业余时间里适当的放松,保持好的心态。
在这个程序中我采用了Java中的图形用户界面技术,同时引入了线程来编写。
本次设计主要是对我之前所学Java知识的一个巩固,不仅提高了我综合运用以前所学知识的能力,同时也锻炼了我的实际动手能力。
整个游戏代码简单易懂,用户在娱乐的同时也可以简单的看一下代码,有助于初涉Java者语言水平的提高。
贪吃蛇的核心算法是如何实现移动和吃掉食物,在当前运动方向上头指针所指的位置之前添加一个节点,然后删除尾节点,最后把链表中的所有节点依次画出来,这样就可以达到移动的效果。
对是否吃到食物,需要对蛇和食物进行碰撞检测,检测未碰撞在一起则只需要执行移动操作,碰撞在一起时表示吃到食物,则只需把食物入队即可,即在蛇的节点链表上再添加一个节点,从而达到身体增长的效果。
本次设计的重点之处在于编程思想的形成,设计图像界面,产生随机食物及其位置。
难点在于程序编写中,整个程序框架的架构。
这就要求我们不仅要对这个游戏的玩法特别熟悉,而且还要熟练掌握Java 语言。
实现贪吃蛇的四个类模块,分别为游戏界面、蛇、食物和方向。
其具体设计如下:1产生游戏界面Yard.java包括界面的位置、大小的设定,绘制游戏界面,启动键盘监听器。
1)在launch()中添加代码:this.setBounds(200,200,COLS*BLOCK_SIZE,ROWS*BLOCK _SIZE);设定界面的位置、大小。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录1. 软件主要功能 (2)2. 类总体设计 (2)2.1 类组合关系图 (2)2.2 系统流程图 (3)2.3 主类 (4)2.4 其他类 (4)2.4.1 Animal.java (4)2.4.2 Point.java (4)2.4.3 Stone.java (4)2.4.4 HandleMouse.java (4)2.4.5 AutoMoveAnimal.java (4)2.4.6 Customdlg.java (4)2.4.7 People.java (4)2.4.8 Record.java (4)2.4.9 ShowRecordDialog.java (4)3. 类详细设计 (4)3.1 主类 (4)3.2 其他类 (6)4. 关键成员函数代码 (7)5. 软件运行结果 (15)结论 (16)参考文献 (16)1. 软件主要功能采用java技术设计动物换位游戏软件,设计要求如下:(1)程序分为3个级别,用户可以通过界面上提供的菜单来选择“初级”、“中级”和“高级”这三个级别。
对于“初级”级别,在水平排列的7块石头上的左右各有3个类型相同的动物,中间的石头上没有动物;对于“中级”级别,在水平排列的9块石头上的左右各有4个类型相同的动物,中间的石头上没有动物;对于“高级”级别,在水平排列的11块石头上的左右各有5个类型相同的动物,中间的石头上没有动物。
(2)用鼠标单击一个动物,如果该动物的前方的石头上没有动物,该动物就跳跃到该石头上,如果该动物前方的石头上有其他的动物,但隔位上的石头没有动物,该动物就越过自己前面的动物跳跃到石头上,其他情形时,该动物不跳跃(跳跃时不能超过2块石头)。
(3)左面的动物只能向右方跳跃,右面的动物只能向左方跳跃。
(4)用户可以通过单击界面上提供的按钮,让程序自动完成动物换位。
(5)可以随时单击界面上提供的按钮,重新开始当前的级别。
(6)用户通过菜单选项,可以选择左、右动物的图像。
2. 类总体设计2.1 类组合关系图在设计动物换位时需要编写10个Java源文件:ChangeAnimalWindow.java、Animal.java、Point.java、Stone.java、HandleMouse.java、AutoMoveAnimal.java、Customdlg.java、People.java、Record.java和ShowRecordDialog.java。
动物换位除了需要编写上述10个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,如:JmenuItem、File和Jbutton类等。
动物换位所用到的一些重要的类以及之间组合关系如图2.1所示。
图2.1 类之间的组合关系2.2 系统流程图图2.2 系统流程图2.3 主类ChangeAnimalWindow类负责创建动物换位的主窗口,该类含有main方法,程序从该类开始执行。
2.4 其他类2.4.1 Animal.javaAnimal类是JPanel的一个子类,创建的对象是ChangeAnimalWindow类的重要成员之一,用来表示“动物”。
2.4.2 Point.javaPoint类负责创建确定位置的对象,使用Point对象,可以确定Animal以及Stone对象在窗体中的位置。
2.4.3 Stone.javaStone类是JButton的一个子类,创建的对象表示“石头”。
2.4.4 HandleMouse.javaHandleMouse类所创建的对象负责处理鼠标事件。
2.4.5 AutoMoveAnimal.javaAutoMoveAnimal类所创建的对象使用算法完成动物的自动换位。
2.4.6 Customdlg.javaCustomdlg类所创建的对象用来设置“自定义”级别的动物数量。
2.4.7 People.javaPeople对象封装用户的名字和成绩,以便ShowRecordDialog对象可以排序。
2.4.8 Record.javaRecord类是javax.swing包中JDialog对话框的子类,当用户成功完成相应级别的游戏时,Record创建的对象负责保存用户的名字和成绩到相应的级别文件中。
2.4.9 ShowRecordDialog.javaShowRecordDialog类是javax.swing包中JDialog对话框的子类,当用户单击查看相应的级别排行榜时,ShowRecordDialog创建的对象负责显示用户的成绩。
3. 类详细设计3.1 主类图3.1 ChangeAnimalWindow类的UML图(1)成员变量●amoutOfAnimal是int型数据,默认值是6。
amoutOfAnimal的值用来确定ChangeAnimalWindow窗体中“动物”的数目,即Animal对象的数目。
●distance是int型数据,默认值是80。
distance的值用来确定Point对象之间的距离,进而可以确定Animal之间,Stone之间的距离以及Animal和Stone对象外观的大小。
●animal是Animal型数组,其长度为amoutOfAnimal。
●point是Point型数组,其长度为amoutOfAnimal+1。
●stone是Stone型数组,其长度为amoutOfAnimal+1。
●handleMouse是HandleMouse类创建的鼠标事件监视器,用来监视animal数组中Animal对象触发的鼠标事件。
●autoMoveAnimal是AutoMoveAnimal类创建的对话框。
通过该对话框可以实现程序自动将左右动物交换位置。
●bar是JMenuBar创建的菜单条,用来添加菜单。
bar被放置在窗口的顶部。
●menuGrade是JMenu创建的菜单,其名字为“选择级别”。
menuImage也是JMenu创建的菜单,其名字为“选择动物图像(JPG,GIF)”。
menuHelp也是JMenu创建的菜单,其名字为“帮助”。
menuHero也是JMenu创建的菜单,其名字为“英雄榜”。
menuGrade、menuImage、menuHero和menuHelp被添加到菜单条bar中。
●oneGradeItem、twoGradeItem、threeGradeItem和custom是JMenuItem创建的菜单项,它们的名字依次为“初级”、“中级”、“高级”和“自定义”,这四个菜单项被添加到菜单项menuGrade中。
leftImage、rightImage和defaultImage也是JMenuItem创建的菜单项,其名字依次为“左面动物的图像”、“右面动物的图像”和“左右面动物的默认图像”,这三个菜单项被添加到菜单项menuImage中。
oneGradeResult、twoGradeResult、threeGradeResult、customGradeResult和limitTime也是JMenuItem创建的菜单项,其名字依次为“初级英雄榜”、“中级英雄榜”、“高级英雄榜”、“自定义英雄榜”、“我超时了吗”,这五个菜单项被添加到菜单项menuHero中。
helpcontent和aboutUs是JMenuItem 创建的菜单项,它们的名字依次为“游戏规则”、和“关于我们”,这两个菜单项被添加到菜单项menuHelp中。
oneGradeItem、twoGradeItem、threeGradeItem和custom以及leftImage、rightImage和defaultImage等菜单项都将当前窗口注册为自己的ActionEvent 事件监视器。
renew、quit和autoButton是JButton创建的按钮对象,名字依次为“重新开始”、“撤销”和“自动演示”。
renew、quit和autoButton都将当前窗口注册为自己的ActionEvent事件监视器。
(2)方法●ChangeAnimalWindow()是构造方法,负责完成窗口的初始化。
●init()方法负责完成Animal、Stone和Point对象的创建。
●setAmoutOfAnimal(int)方法负责设置动物的个数,即amountOfAnimal的值。
●removeAnimalAndStone()方法负责从窗体中移掉动物和石头,即移掉Animal对象和Stone对象。
●needDoing()方法负责执行一些经常需要重复执行的代码。
●actionPerformed(ActionEvent)方法是ChangeAnimalWindow类实现的ActionListener接口中的方法。
ChangeAnimalWindow创建的窗口是oneGradeItem、twoGradeItem、threeGradeItem、custom、leftImage、rightImage、defaultImage等菜单项和renew、quit、autoButton按钮的ActionEvent事件监视器。
当用户选中某个菜单项或单击按钮时,窗口将执行actionPerformed(ActionEvent)方法进行相应的操作。
如果用户选中oneGradeItem、twoGradeItem、threeGradeItem和custom四个菜单项的某一项时,actionPerformed(ActionEvent)方法所执行的操作就是改变amountOfAnimal的值,并执行needDoing()方法,完成必要的初始化。
如果用户选中leftImage和rightImage菜单项的某一个时,actionPerformed(ActionEvent)方法所执行的操作就是改变leftImageFile和rightImageFile的引用。
当用户单击renew按钮时,actionPerformed(ActionEvent)方法所进行的操作是保持当前的amountOfAnimal的值,并执行needDoing()方法,完成必要的初始化,当用户单击quit按钮时,actionPerformed(ActionEvent)方法所进行的操作是撤销当前“动物”的前一次跳跃。
当用户单击autoButton按钮时,actionPerformed(ActionEvent)方法所进行的操作是弹出autoMoveAnimal对话框,用户可以通过该对话框让程序显示动物换位过程。
main(String)方法是程序运行的入口方法。
3.2 其他类图3.2 Animal类的UML图图3.3 Point类的UML图图3.4 Stone类的UML图图3.5 HandleMouse类的UML图图3.6 AutoMoveAnimal类的UML图4. 关键成员函数代码ChangeAnimalWindow.java(主类)import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.ArrayList;import java.io.*;import javax.swing.filechooser.*;public class ChangeAnimalWindow extends JFrame implements ActionListener{int amountOfAnimal=6;int distance=80;Animal [] animal;Point [] point;Stone [] stone;HandleMouse handleMouse;AutoMoveAnimal autoMoveAnimal;File leftImageFile,rightImageFile;File fileOneGrade,fileTwoGrade,fileThreeGrade,filecustomGrade;JButton renew,quit,autoButton=null;JMenuBar bar;JMenu menuGrade,menuImage,menuHelp,menuHero;JMenuItem oneGradeResult,twoGradeResult,threeGradeResult,customGradeResult; JMenuItem oneGradeItem,twoGradeItem,threeGradeItem,limitTime;JMenuItem custom;JMenuItem helpcontent,aboutUs;JMenuItem leftIamge,rightIamge,defaultImage;JPanel pCenter;ShowRecordDialog showDiolag=null;ChangeAnimalWindow(){fileOneGrade=new File("初级英雄排行榜.txt");fileTwoGrade=new File("中级英雄排行榜.txt");fileThreeGrade=new File("高级英雄排行榜.txt");filecustomGrade=new File("自定义英雄排行榜.txt"); pCenter=new JPanel();pCenter.setBackground(Color.pink);pCenter.setLayout(null);handleMouse=new HandleMouse();autoMoveAnimal=new AutoMoveAnimal();leftImageFile=new File("dog.jpg");rightImageFile=new File("cat.jpg");init();bar=new JMenuBar();menuGrade=new JMenu("选择级别");menuImage=new JMenu("选择动物图像(JPG,GIF)");menuHero=new JMenu("英雄榜");menuHelp=new JMenu("帮助");oneGradeItem=new JMenuItem("初级");twoGradeItem=new JMenuItem("中级");threeGradeItem=new JMenuItem("高级");custom=new JMenuItem("自定义");leftIamge=new JMenuItem("左面动物的图像");rightIamge=new JMenuItem("右面动物的图像");defaultImage=new JMenuItem("左右面动物的默认图像"); oneGradeResult=new JMenuItem("初级英雄榜");twoGradeResult=new JMenuItem("中级英雄榜");threeGradeResult=new JMenuItem("高级英雄榜");customGradeResult=new JMenuItem("自定义英雄榜");limitTime=new JMenuItem("我超时了吗");helpcontent=new JMenuItem("游戏规则");aboutUs=new JMenuItem("关于我们");menuGrade.add(oneGradeItem);menuGrade.add(twoGradeItem);menuGrade.add(threeGradeItem);menuGrade.add(custom);menuImage.add(leftIamge);menuImage.add(rightIamge);menuImage.add(defaultImage);menuHero.add(oneGradeResult);menuHero.add(twoGradeResult);menuHero.add(threeGradeResult);menuHero.add(customGradeResult);menuHero.add(limitTime);menuHelp.add(helpcontent);menuHelp.add(aboutUs);bar.add(menuGrade);bar.add(menuImage);bar.add(menuHero);bar.add(menuHelp);setJMenuBar(bar);oneGradeItem.addActionListener(this);twoGradeItem.addActionListener(this);threeGradeItem.addActionListener(this);custom.addActionListener(this);leftIamge.addActionListener(this);rightIamge.addActionListener(this);defaultImage.addActionListener(this);oneGradeResult.addActionListener(this);twoGradeResult.addActionListener(this);threeGradeResult.addActionListener(this);customGradeResult.addActionListener(this);limitTime.addActionListener(this);helpcontent.addActionListener(this);aboutUs.addActionListener(this);renew=new JButton("重新开始");renew.addActionListener(this);autoButton=new JButton("自动演示");autoButton.addActionListener(this);quit=new JButton("撤消");quit.addActionListener(this);JPanel north=new JPanel();north.add(renew);north.add(quit);north.add(autoButton);String mess="互换左右动物位置";JLabel hintMess=new JLabel(mess,JLabel.CENTER);north.add(hintMess);add(north,BorderLayout.NORTH);add(pCenter,BorderLayout.CENTER);JPanel south=new JPanel();south.add(handleMouse);add(south,BorderLayout.SOUTH);setVisible(true);setBounds(60,60,710,300);validate();setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);if(!fileOneGrade.exists()){try { fileOneGrade.createNewFile();}catch(IOException exp){}}if(!fileTwoGrade.exists()){try { fileTwoGrade.createNewFile();}catch(IOException exp){}}if(!fileThreeGrade.exists()){ try { fileThreeGrade.createNewFile();}catch(IOException exp){}}if(!filecustomGrade.exists()){ try { filecustomGrade.createNewFile();}catch(IOException exp){}}handleMouse.gradeFile=fileOneGrade;showDiolag=new ShowRecordDialog();}public void init(){animal=new Animal[amountOfAnimal];point=new Point[amountOfAnimal+1];stone=new Stone[amountOfAnimal+1];int space=distance;for(int i=0;i<point.length;i++){point[i]=new Point(space,100);space=space+distance;}for(int i=0;i<animal.length;i++){animal[i]=new Animal();animal[i].addMouseListener(handleMouse);if(i<animal.length/2){animal[i].setIsLeft(true);}else //if(i>animal.length/2){animal[i].setIsLeft(false);}//else if(i==animal.length/2+1)//{//if(animal[i].equals(animal[i]))//animal[i].setIsLeft(true);//else// animal[i].setIsLeft(false);//}}for(int i=0;i<stone.length;i++){stone[i]=new Stone();pCenter.add(stone[i]);stone[i].setSize(distance*8/9,18);int w=stone[i].getBounds().width;int h=stone[i].getBounds().height;stone[i].setLocation(point[i].getX()-w/2,point[i].getY());point[i].setThisStone(stone[i]);}for(int i=0;i<animal.length;i++){animal[i].setSize(distance*6/7,distance*3/4);int w=animal[i].getBounds().width;int h=animal[i].getBounds().height;pCenter.add(animal[i]);if(i<animal.length/2){animal[i].setIsLeft(true);animal[i].setLeftImage(leftImageFile);animal[i].repaint();animal[i].setLocation(point[i].getX()-w/2,point[i].getY()-h); animal[i].setAtPoint(point[i]);point[i].setThisAnimal(animal[i]);point[i].setIsHaveAnimal(true);}else{animal[i].setIsLeft(false);animal[i].setRightImage(rightImageFile);animal[i].repaint();animal[i].setLocation(point[i+1].getX()-w/2,point[i+1].getY()-h);animal[i].setAtPoint(point[i+1]);point[i+1].setThisAnimal(animal[i]);point[i+1].setIsHaveAnimal(true);}}handleMouse.setPoint(point);handleMouse.setCountTime(true);autoMoveAnimal.setPoint(point);autoMoveAnimal.setStep();}public void setAmountOfAnimal(int m){if(m>=2&&m%2==0)amountOfAnimal=m;}public void removeAnimalAndStone(){for(int i=0;i<point.length;i++){if(point[i].getThisAnimal()!=null)pCenter.remove(point[i].getThisAnimal());}for(int i=0;i<stone.length;i++){if(point[i].getThisStone()!=null)pCenter.remove(point[i].getThisStone());}pCenter.validate();pCenter.repaint();}public void needDoing(){init();handleMouse.initStep();handleMouse.initSpendTime();handleMouse.setCountTime(true);autoMoveAnimal.setPoint(point);}public void actionPerformed(ActionEvent e){if(e.getSource()==oneGradeItem){handleMouse.gradeFile=fileOneGrade;//good.getname("初级英雄排行榜.txt");distance=80;removeAnimalAndStone();setAmountOfAnimal(6);needDoing();}else if(e.getSource()==twoGradeItem){handleMouse.gradeFile=fileTwoGrade;//good.getname("中级英雄排行榜.txt");distance=70;removeAnimalAndStone();setAmountOfAnimal(8);needDoing();}else if(e.getSource()==threeGradeItem){handleMouse.gradeFile=fileThreeGrade;//good.getname("高级英雄排行榜.txt");distance=60;removeAnimalAndStone();setAmountOfAnimal(10);needDoing();}else if(e.getSource()==custom){handleMouse.gradeFile=filecustomGrade;//good.getname("自定义英雄排行榜.txt");Customdlg dialog=new Customdlg(this,"自定义",true);dialog.setVisible(true);amountOfAnimal=dialog.getAmountOfAnimal();distance=560/amountOfAnimal;removeAnimalAndStone();setAmountOfAnimal(amountOfAnimal);needDoing();}else if(e.getSource()==helpcontent){JOptionPane pane=new JOptionPane(String.format("第%1$3d条规则%2$20s\n第%3$3d条规则%4$20s\n第%5$3d条规则%6$20s",1,"左右边的动物分别移动到另一边",2,"左只能向右方跳,右只能向左跳",3,"跳跃最多不能越过2块石头"));JButton btnOk;btnOk=new JButton("确定");pane.setOptions(new JButton[]{btnOk});final JDialog dlghelpList=pane.createDialog(null,"游戏规则");btnOk.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){dlghelpList.dispose();}});dlghelpList.setVisible(true);}else if(e.getSource()==aboutUs){JOptionPane.showMessageDialog(this, "姓名:翟向晨"+'\n'+"学号:1203030322"+'\n'+"班级:12级电信三班 ");}else if(e.getSource()==renew){removeAnimalAndStone();needDoing();}else if(e.getSource()==autoButton){removeAnimalAndStone();needDoing();handleMouse.setCountTime(false);autoMoveAnimal.setStep();int x=this.getBounds().x+this.getBounds().width/2;int y=this.getBounds().y+this.getBounds().height;autoMoveAnimal.setLocation(x,y);autoMoveAnimal.setSize(this.getBounds().width/2,120);autoMoveAnimal.setVisible(true);}else if(e.getSource()==quit){ArrayList<Integer>step=handleMouse.getStep();int length=step.size();int start=-1,end=-1;if(length>=2){end=step.get(length-1);start=step.get(length-2);step.remove(length-1);step.remove(length-2);Animal ani=point[end].getThisAnimal();int w=ani.getBounds().width;int h=ani.getBounds().height;ani.setLocation(point[start].getX()-w/2,point[start].getY()-h); ani.setAtPoint(point[start]);point[start].setThisAnimal(ani);point[start].setIsHaveAnimal(true);point[end].setIsHaveAnimal(false);}}else if(e.getSource()==leftIamge){JFileChooser chooser=new JFileChooser();FileNameExtensionFilter filter = new FileNameExtensionFilter( "JPG & GIF Images", "jpg", "gif");chooser.setFileFilter(filter);int state=chooser.showOpenDialog(null);File file=chooser.getSelectedFile();if(file!=null&&state==JFileChooser.APPROVE_OPTION){leftImageFile=file;for(int i=0;i<animal.length;i++){if(animal[i].getIsLeft()==true){animal[i].setLeftImage(leftImageFile);animal[i].repaint();}}}}else if(e.getSource()==rightIamge){JFileChooser chooser=new JFileChooser();FileNameExtensionFilter filter = new FileNameExtensionFilter( "JPG & GIF Images", "jpg", "gif");chooser.setFileFilter(filter);int state=chooser.showOpenDialog(null);File file=chooser.getSelectedFile();if(file!=null&&state==JFileChooser.APPROVE_OPTION){rightImageFile=file;for(int i=0;i<animal.length;i++){if(animal[i].getIsLeft()==false){animal[i].setRightImage(rightImageFile);animal[i].repaint();}}}}else if(e.getSource()==defaultImage){leftImageFile=new File("dog.jpg");rightImageFile=new File("cat.jpg");for(int i=0;i<animal.length;i++){if(animal[i].getIsLeft()==true)animal[i].setLeftImage(leftImageFile);elseanimal[i].setRightImage(rightImageFile);animal[i].repaint();}}else if(e.getSource()==oneGradeResult){showDiolag.setGradeFile(fileOneGrade);showDiolag.showRecord();showDiolag.setVisible(true);}else if(e.getSource()==twoGradeResult){showDiolag.setGradeFile(fileTwoGrade);showDiolag.showRecord();showDiolag.setVisible(true);}else if(e.getSource()==threeGradeResult){showDiolag.setGradeFile(fileThreeGrade);showDiolag.showRecord();showDiolag.setVisible(true);}else if(e.getSource()==customGradeResult){showDiolag.setGradeFile(filecustomGrade);showDiolag.showRecord();showDiolag.setVisible(true);}else if(e.getSource()==limitTime){if(handleMouse.spendTime>=(5*amountOfAnimal)){JOptionPane.showMessageDialog(this,"在"+(5*amountOfAnimal)+"s里你还没完成!\r\n"+"你太慢了!好逊啊!!!");leftImageFile=new File("pigone.jpg");rightImageFile=new File("pigtwo.jpg");for(int i=0;i<animal.length;i++){if(animal[i].getIsLeft()==true)animal[i].setLeftImage(leftImageFile);elseanimal[i].setRightImage(rightImageFile);animal[i].repaint();}}}validate();}public static void main(String args[]){new ChangeAnimalWindow();}}5. 软件运行结果图5.1 主系统窗体图5.2 游戏演示调试图图5.3 游戏运行调试图图5.4,图5.5 游戏排行榜调试图图5.6 游戏帮助关于我们调试图结论这此课程设计我们做的是“动物换位”游戏,主要是让左右两边相同数量的动物通过中间一个空的石头,左边的动物要全部跳到右边的石头上,右边的动物要全部跳到左边的石头上。