当前位置:网站首页 > Java教程 > 正文

java动物换位教程



耿祥义

1995年中国科学技术大学博士毕业,获理学博士学位。1997年从中山大学博士后流动站出站,现任大连交通大学教授。有多年教授Java语言的经验,已编写出版十余部教材。

报告PPT

案列实训——动物换位

1. 设计要求

2. 数据模型

3. 简单测试

4. 视图设计

5. GUI程序

6. 程序发布

7. 课程题目

------------------------------------------------------------------

1. 设计要求

设计GUI界面的动物换位游戏,游戏结果是让左右两组动物交换位置。具体要求如下:

1.在水平排列的7个位置上,左右各有3个类型相同的动物,中间的位置上没有动物。左边动物将其右侧视为自己的前进方向,右边动物将其左侧视为自己的前进方向。

2.用鼠标单击一个动物,如果该动物前方位置上没有动物,该动物就跳跃到该位置上,如果该动物前方位置有其他动物,但相隔一位的位置上没有其他动物,该动物就越过自己前面的动物跳跃至该隔位上,其他情形,该动物不能跳跃(跳跃时不能越过2个位置)。

3.左面的动物只能向右方跳跃,右面的动物只能向左方跳跃。

4.单击撤销按钮,撤销上一次移动的动物,单击重新开始按钮可重新开始游戏。

----------------------------------------------

按着MVC-Model View Control(模型,视图,控制器)的设计思想,展开程序的设计和代码的编写。数据模型部分相当于MVC中的Model角色,视图设计部分给出的界面部分相当于MVC中的View,视图设计部分给出的事件监视器相当于MVC中的Control

-----------------------------------------------

2. 数据模型

Animal类,封装了左右动物共同的属性和行为。

LeftAnimal类,Animal的子类,封装了左边动物的独特行为。

RightAnimal类,Animal的子类,封装了右边动物的独特行为。

Point类,刻画动物可以到达的位置。

ViewForAnimal类,封装制作动物视图的方法。

讲解顺序Animal ,Point

LeftAnimal,RightAnimal

ViewForAnimal

----------------------------------------------------------------------------

3 简单测试

按着源文件中的包语句,将相关的Java源文件保存到:

D:> ch1data

目录中。编译各个源文件,例如:

D:>javac /ch1/data/Animal.java

或一次编译全部源文件:

D:>javac /ch1/data/*.java

1.2节给出的类看作一个小框架,下面用框架中的类编写一个简单的应用程序,测试左右动物运动换位.

★即在命令行,表述对象的行为过程。

★如果表述成功(如果表述困难,说明数据模型不是很合理),那么就为以后GUI程序设计提供了很好的对象功能测试。

★在后续的GUI设计中,仅仅重要的工作是为某些对象提供视图界面,并处理相应的界面事件而已。

将下列AppTest.java源文件按着包名保存到

D: ch1test

目录中,并编译源文件:

D:>javacch1/test/AppTest.java

如下运行AppTest

D:>java ch1.test.AppTest

package ch1.test;

import ch1.data.*;

public class AppTest {

public static void main(String [] args) {

Point [] point = new Point[7]; //创建7个点

for(int i=0;i<point.length;i++) {

point[i] = new Point();

point[i].setX(i);

point[i].setY(10);

}

Animal [] left = new Animal[3]; //3个左边动物

Animal [] right = new Animal[3]; //3个右边动物

for(int i =0;i<left.length;i++ ){ //把左边动物放在点上

left[i] = new LeftAnimal();

left[i].setName(""+i);

left[i].setAtPoint(point[i]);

left[i].setAllCanAtPoint(point);

}

for(int i =0;i<right.length;i++ ){ //把右边动物放在点上

right[i] = new RightAnimal();

right[i].setName(""+i);

right[i].setAtPoint(point[4+i]);

right[i].setAllCanAtPoint(point);

}

input(point);

if(right[0].move()) //让右边第1个动物运动

input(point); //输出各个点上的有、无动物的信息

if(left[2].move())

input(point);

if(left[1].move())

input(point);

if(right[0].move())

input(point);

if(right[1].move())

input(point);

if(right[2].move())

input(point);

if(left[2].move())

input(point);

if(left[1].move())

input(point);

if(left[0].move())

input(point);

if(right[0].move())

input(point);

if(right[1].move())

input(point);

if(right[2].move())

input(point);

if(left[1].move())

input(point);

if(left[0].move())

input(point);

if(right[2].move())

input(point); //恭喜成功了

}

static void input(Point [] point){

for(int i=0;i<point.length;i++){

Animal animal=point[i].getAtPointAnimal();

if(animal!=null)

System.out.print(animal.getName());

else

System.out.print(" ");

}

System.out.println();

}

}

---------------------------------------------------------------------------

4. 视图设计

设计GUI程序除了使用1.2节给出的类以外,需要使用javax.swing包提供的视图(也称Java Swing框架)以及处理视图上触发的界面事件。GUI程序与1.3中简单的测试相比,可以提供更好的用户界面,完成1.1提出的设计要求。

GUI部分设计的类有:

AnimalView类,其实例为动物提供外观显示。

GamePanel类,其实例用于放置动物的外观,并组合负责处理界面事件的监视器。

HandleAnimalMove类,其实例是一个监视器,该监视器负责处理AnimalView视图,即动物视图上触发的MouseEvent事件。当用户在动物视图上按下鼠标时,该监视器让动物执行move()方法、松开鼠标时,该监视器检查用户是否成功地将左右动物互换完毕。

HandleRedo类,其实例是一个监视器,该监视器负责监视按钮上触发的ActionEvent事件,当用户单击按钮触发ActionEvent事件时,该监视器负责撤销用户移动动物的操作。

HandleReStart类,其实例是一个监视器,该监视器负责监视按钮上触发的ActionEvent事件,当用户单击按钮触发ActionEvent事件时,该监视器负责将游戏还原成最初始的样子。

讲解顺序AnimalView GamePanel

HandleAnimalMove HandleRedo HandleReStart

--------------------------------------

5 GUI 程序

按着源文件中的包语句,将1.4节中相关的源文件保存到:

D: ch1view

目录中。编译各个源文件,例如:

D>javac ch1/view/ AnimalView.java

1.21.4节给出的类看作一个小框架,下面用框架中的类编写GUI应用程序,完成1.1给出的设计要。

将下列AppWindow.java源文件按着包名保存到

D:> ch1/gui

目录中,并编译源文件:

D:>javac ch1/gui/AppWindow.java

或一次编译全部源文件:

D:>javac /ch1/view/*.java

建立名字是imagech1同级别文件夹(这里需要在D:盘下建立),并将名字是cat.jpgdog.jpg的图像文件保存到该image中。

AppWindowJFrame的子类,其实例将GamePanel类的实例集成到窗体中,即提供游戏的主界面外观。如下运行AppWindow

D:>java ch1.gui.AppWindow

AppWindow.java

package ch1.gui;

import javax.swing.*;

import java.awt.*;

import ch1.view.GamePanel;

public class AppWindow extends JFrame {

GamePanel gamePanel;

public AppWindow(){

setTitle("动物换位游戏");

gamePanel = new GamePanel();

gamePanel.setAnimalCount(6);

gamePanel.setLeftAnimalImage("image/cat.jpg");

gamePanel.setRightAnimalImage("image/dog.jpg");

add(gamePanel,BorderLayout.CENTER);

gamePanel.setBackground(Color.white);

JPanel northP = new JPanel();

northP.add(gamePanel.buttonReStart);

northP.add(gamePanel.buttonRedo);

add(northP,BorderLayout.NORTH);

setBounds(60,60,9*gamePanel.width+9*gamePanel.gap,300);

validate();

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setVisible(true);

}

public static void main(String args[] ){

AppWindow win = new AppWindow();

}

}

----------------------------------------------------------------------

6 程序发布

可以使用jar.exe命令制作JAR文件来发布软件。

1.)清单文件:

编写如下的清单文件(用记事本保存时需要将保存类型选择为“所有文件(*.*)”)

dongwu.mf

Manifest-Version: 1.0

Main-Class: ch1.gui.AppWindow

Created-By: 1.8

ch1.mf保存到D:,即保存在包名所代表的目录的上一层目录中。

注意:清单中的Manifest-Version1.0之间、Main-Class和主类ch1.gui.AppWindow之间以及Created-By1.8之间必须有且只有一个空格。

2.用批处理文件发布程序

在命令行使用jar命令得到.jar文件:

D:>

jar cfm DongwuGame.jar dongwu.mfch1/data/*.class ch1/view/*.class ch1/gui/*.class

其中参数c表示要生成一个新的jar文件,f表示要生成的jar文件的名字,m表示清单文件的名字。如果没有任何错误提示,D:下产生一个名字是AnimalGame.jar的文件

编写如下的animalGame.bat,用记事本保存该文件时需要将保存类型选择为“所有文件(*.*)”。

animalGame.bat

path .jrebin

pause

javaw -jar DongwuGame.jar

animalGame.batDongwuGame.jarimage文件夹(软件需要其他非class文件)复制到某个文件夹中,例如文件夹2000中。然后将调试程序使用的JDK安装目录下的JRE也复制到2000文件夹中。

可以将2000文件夹作为软件发布,也可以用压缩工具将2000下的所有文件压缩成.zip.jar文件发布。用户解压后,双击animalGame.bat即可运行程序。

如果客户计算机上肯定有JRE,可以不把JRE复制到2000 中,同时去除bat文件中的path.jrebin内容。

-------------------------------

7 课设题目

1).动物换位游戏

在学习本章代码的基础上,改进动物换位游戏,可为程序增加任何合理的并有能力完成的功能,但至少要增加下列所要求的功能。

AppWindow类中增加菜单,该菜单下有三个菜单项,分别是初级,中级和高级。初级时,游戏中的动物是6个,中级时是8个,高级时是10个。

AppWindow类中增加菜单,该菜单下有2个菜单项,分别是“更改左动物图像”,和“更改右动物图像”。用户单击菜单项弹出文件对话框,比如,单击“更改左动物图像”菜单项,用户可以使用弹出的文件对话框为左边动物选择图像文件。

增加音乐效果,动物运动时,程序能播放简短的声音,并且让左、右动物运动时,程序播放的声音不同(可参见第8章的ch8.view.PlayMusic类)。

使用javax.swing.Timer类增加计时功能(可参见java2实用教程第5版的12.9或参考本书第6章的ch6.view.HandleMove类)

如果完成了4,可为各个级别增加相应的“英雄榜”(建议看第8章的英雄榜:ch8.data.RecordOrShowRecordch8.view.Recordch8.view.ShowRecord类)。当用户成功完成动物换位后,如果成绩能排进前三名,就弹出一个对话框,将用户的成绩保存到“英雄榜”。

为每个级别的菜单项增加一个子菜单项,负责查看该级别的“英雄榜”。

2).自定义题目

通过老师指导或自己查找资料自创一个题目。

【专家著作】

-END-

责任编辑:

  • 上一篇: java protobuf 教程
  • 下一篇: 安卓创建java教程
  • 版权声明


    相关文章:

  • java protobuf 教程2024-12-14 19:42:03
  • java教程自学网2024-12-14 19:42:03
  • java19安装教程2024-12-14 19:42:03
  • 小黑塔java教程2024-12-14 19:42:03
  • java8接口教程2024-12-14 19:42:03
  • 安卓创建java教程2024-12-14 19:42:03
  • java入门编程教程62024-12-14 19:42:03
  • java桌面代码教程2024-12-14 19:42:03
  • 卡服机教程java2024-12-14 19:42:03
  • 高级java视频教程2024-12-14 19:42:03