1、(2)系统设计:20分;(3)编程调试:(4)回答问题:(5)论文撰写:30分。5)参考文献:(1)丁振凡. Java语言实用教程(第2版)M. 北京邮电大学出版社. 2008.1 (2)丁振凡. Java语言实用教程实验指导(第2版)M. 北京邮电大学出版社. 2008.1(3)杨树林等. Java语言最新实用案例教程(第2版)M. 清华大学出版社. 2010.76)课程设计进度安排1准备阶段(4学时):选择设计题目、了解设计目的要求、查阅相关资料2程序模块设计分析阶段(4学时):程序总体设计、详细设计3代码编写调试阶段(8学时):程序模块代码编写、调试、测试4撰写论文阶段(4学时):总结课
2、程设计任务和设计内容,撰写课程设计论文学生签名:2010 年 12 月 20 日课程设计(论文)评审意见(1)学习态度(10分):优()、良()、中()、一般()、差();(2)系统设计(20分):优( )、良()、中()、一般()、差();(3)编程调试(20分):(4)回答问题(20分):(5)论文撰写(30分):评阅人: 职称: 讲师 2010 年 12 月 25 日中文摘要华容道,古老的中国游戏,以其变化多端、百玩不厌的特点与魔方、独立钻石棋一起被国外智力专家并称为“智力游戏界的三个不可思议”。游戏就是依照“曹瞒兵败走华容,正与关公狭路逢,只为当初恩义重,放开金锁走蛟龙”这一故事情节设
3、计,受到很多玩家的喜爱。该程序用Java语言编写 ,棋盘上有10个不一样大小的按钮,分别代表曹操、张飞、赵云、马超、黄忠和关羽,还有四个兵。棋盘最下方有两个空着的小方格,代表曹操逃出的位置,可以实现通过鼠标或者键盘移动界面上的按钮,最终使曹操移动到棋盘最下方,代表曹操逃出华容道。 目录一、课程设计任务及要求 1、 本程序主要练习使用布局管理器设计一个华容道游戏界面,并练习使用事件监听器(鼠标事件、键盘事件和焦点事件)实现按钮的移动。 2、编写一个按钮的子类,使用该子类创建的对象代表华容道中的人物。通过焦点事件控制人物颜色,当人物获得焦点时颜色为红色,当失去焦点时颜色为黄色。 3、通过键盘事件和
4、鼠标事件来实现曹操、关羽等人物的移动。当人物上发生鼠标事件或键盘事件时,如果鼠标指针的位置是在人物的下方(也就是组件的下半部分)或按下键盘的“键,该人物向下移动。向左、向右和向上的移动原理类似。 4、点击“重新开始”可以使各个按钮复位,重新开始游戏。二、需求分析要满足的容道游戏的基本操作:1各人物按钮按相应的顺序和大小排列,按钮上标注人物名字,界面美观。2通过焦点事件控制人物按钮的颜色,得到焦点呈红色,失去焦点为淡黄色。3可以通过键盘控制各个按钮的移动:按“”键,人物按钮向下移动其它方向类似。4可以通过鼠标点击来控制各个人物按钮的移动:如果点击的位置在按钮的上半部分则向上移动,如果点击按钮的下
5、半部分则向下,左右原理类似。5有“重新开始按钮” 点击重新开始按钮各个人物按钮复位,能重新开始游戏。6小程序能够自由的缩小,放大,关闭。三、设计思路1.首先是界面设计,该界面主要包括十个人物按钮(马、曹操、关羽等)以及旁边的四个边框按钮和重新开始按钮。对于人物按钮,创建Button按钮的子类,在该类中定义按钮的一些新的属性和焦点事件监听器,如:按钮的标签名、按钮的颜色、按钮的排号(如这里有十个人物按钮,从1排到十,在程序中可以依靠这个属性区分人物按钮)、按钮颜色、按钮获得或失去焦点事件。同时在设计该界面时要考虑到各个按钮的位置、大小等情况。 2.对界面上的各人物按钮添加相应的相应事件焦点事件:
6、通过焦点事件各个按钮的是焦点。鼠标事件、键盘事件:通过这两种事件去完成界面上各人物按钮的移动。对重新开始按钮定义动作事件(ActionEvent)完成界面初始化功能也 就是各人物按钮重新归位。四、详细设计1.类的设计本程序总共有3个类(1)MoveExample 类public class MoveExample public static void main(String args)/定义主方法 new Hua_Rong_Road();/创建一个Hua_Rong_Road对象 (2)Person 类 增加焦点事件监视器:addFocusListener(事件监听器)当组件具有焦点监视器后,如
7、果组件从无输入焦点变成有输入焦点或从有输入焦点到无输入焦点都会触发FocusEvent事件。创建监视器的类必须要实现FocusListener接口,该接口有两个方法:public void focusGained(final FocusEvent e) /获得焦点触发public void focusLost(final FocusEvent e) /失去焦点触发当组件从无输入焦点变成有输入焦点并触发FocusEvent事件时,监视器调用类实现的接口方法focusGained(FocusEvent e);当组件从有输入焦点变成无输入焦点并触发FocusEvent事件时,监视器调用类实现方法fo
8、cusLost(FocusEvent e)。 class Person extends Button implements FocusListener int number; Color c=new Color(255,245,170);/设置颜色/preson 方法 public Person(final int number,final String s) super(s); setBackground(c);/背景色 this.number=number; c=getBackground(); addFocusListener(this);/事件焦点监听 public void focu
9、sGained(final FocusEvent e) /获得焦点触发 setBackground(Color.red);/获得焦点的颜色 public void focusLost(final FocusEvent e) /失去焦点触发(3)Hua_Rong_Road 类 游戏界面主要包括十个人物按钮马、曹操、关羽等。对于人物按钮,在该类中定义按钮的一些新的属性和焦点事件监听器,如:class Hua_Rong_Road extends Frame implements MouseListener,KeyListener,ActionListener Person person=new Pe
10、rson10; Button left,right,above,below; Button restart=new Button(重新开始);/添加重新开始按钮 Hua_Rong_Road()方法设置容器 public Hua_Rong_Road() init();/设置按钮 setBounds(100,100,320,360);/组件在容器上的起点和长宽 setVisible(true);/ 像控件中添加元素 validate();/刷新 addWindowListener(new WindowAdapter()/注册窗口事件监听 public void windowClosing(Wind
11、owEvent e)/关闭 System.exit(0); );init()方法 设置10个按钮 public void init() setLayout(null);/设置布局默认 add(restart);/添加重新开始 restart.setBounds(100,320,120,25);/按钮大小 restart.addActionListener(this);/注册监听 String name=曹操,关羽张飞刘备赵云黄忠兵 兵; for(int k=0;kh/2) if(y if(x 用 go方法控制人物按钮上下左右移动:当前人物向右与其他人物不重叠,则向右前进五十单元。 public
12、 void go(Person man,Button direction) boolean move=true; Rectangle manRect=man.getBounds(); int x=man.getBounds().x; int y=man.getBounds().y; if(direction=below)/向各个方向上的移动 y=y+50; else if(direction=above) y=y-50; else if(direction=left) x=x-50; else if(direction=right) x=x+50; manRect.setLocation(x,
13、y); Rectangle directionRect=direction.getBounds();10; Rectangle personRect=personk.getBounds();if(manRect.intersects(personRect)&(man.number!=k)/如果覆盖就不移动 move=false; if(manRect.intersects(directionRect) if(move=true) /移动到新的位置 man.setLocation(x,y); 发生操作时调用: public void actionPerformed(ActionEvent e)
14、dispose();2.流程图如图二:图二:流程图五、运行调试与分析讨论运行结果1.运行小程序如图3所示:图三2.点击按钮使按钮获得焦点如图四所示:图四3.用鼠标或者键盘移动人物按钮如图五: 图五4.点击重新开始按钮后如图六所示: 图六 6、设计体会与小结 通过本程序,我练习使用布局管理器设计了一个华容道游戏界面,并且练习使用事件监听器监听焦点的得失,首先增加焦点事件监视器:addFocusListener(事件监听器),当组件具有焦点监视器后,如果组件从无输入焦点变成有输入焦点或从有输入焦点到无输入焦点都会触发FocusEvent事件。public void focusGained(Focu
15、sEvent e) /获得焦点触发public void focusLost(FocusEvent e) /失去焦点触发 练习了通过鼠标事件实现按钮的移动,鼠标事件的类型是MouseEvent,即组件触发鼠标时,MouseEvent类自动创建一个事件对象。Java分别使用MouseListener接口与MouseMotionListener接口来处理鼠标事件。MouseMotionListener接口可以处理2种鼠标事件:拖动、移动。 练习了通过键盘事件实现按钮的移动,当按下、释放或敲击键盘上一个键时就发生了键盘事件,当一个组件处于激活状态时(获得焦点),敲击键盘上一个键就导致了这个组件发生了
16、键盘事件。 用KeyEvent类的public int getKeycode()方法和public char getKeychar()判断哪个键被按下、敲击或释放。七、参考文献1 作者:丁振凡 . 参考书籍名称M:java语言实用教程. 出版地: 北京邮电大学出版社.出版年限:2007.2 作者:耿祥义 . 参考书籍名称M: Java基础教程 . 出版地: 清华大学出版社.出版年限:2009.附录(源码清单)import java.awt.*;import ; public static void main(String args)class Person extends Button implements FocusListener Color c = new Color(255,245,170); Person(int number,String s) this.number = number; c = getBackground(); public void focusGained(FocusEvent e) public void focusLost(FocusEvent e)class Hua_Rong_Road extends
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1