课程设计报告JAVA实现华容道智力游戏Word格式.docx

上传人:b****4 文档编号:7981176 上传时间:2023-05-09 格式:DOCX 页数:27 大小:336.08KB
下载 相关 举报
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第1页
第1页 / 共27页
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第2页
第2页 / 共27页
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第3页
第3页 / 共27页
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第4页
第4页 / 共27页
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第5页
第5页 / 共27页
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第6页
第6页 / 共27页
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第7页
第7页 / 共27页
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第8页
第8页 / 共27页
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第9页
第9页 / 共27页
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第10页
第10页 / 共27页
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第11页
第11页 / 共27页
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第12页
第12页 / 共27页
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第13页
第13页 / 共27页
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第14页
第14页 / 共27页
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第15页
第15页 / 共27页
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第16页
第16页 / 共27页
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第17页
第17页 / 共27页
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第18页
第18页 / 共27页
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第19页
第19页 / 共27页
课程设计报告JAVA实现华容道智力游戏Word格式.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

课程设计报告JAVA实现华容道智力游戏Word格式.docx

《课程设计报告JAVA实现华容道智力游戏Word格式.docx》由会员分享,可在线阅读,更多相关《课程设计报告JAVA实现华容道智力游戏Word格式.docx(27页珍藏版)》请在冰点文库上搜索。

课程设计报告JAVA实现华容道智力游戏Word格式.docx

(1)学习态度:

10分;

(2)系统设计:

20分;

(3)编程调试:

(4)回答问题:

(5)论文撰写:

30分。

5)参考文献:

(1)丁振凡.Java语言实用教程(第2版)[M].北京邮电大学出版社.2008.1

(2)丁振凡.Java语言实用教程实验指导(第2版)[M].北京邮电大学出版社.2008.1

(3)杨树林等.Java语言最新实用案例教程(第2版)[M].清华大学出版社.2010.7

6)课程设计进度安排

1.准备阶段(4学时):

选择设计题目、了解设计目的要求、查阅相关资料

2.程序模块设计分析阶段(4学时):

程序总体设计、详细设计

3.代码编写调试阶段(8学时):

程序模块代码编写、调试、测试

4.撰写论文阶段(4学时):

总结课程设计任务和设计内容,撰写课程设计论文

学生签名:

2010年12月20日

课程设计(论文)评审意见

(1)学习态度(10分):

优( )、良( )、中( )、一般( )、差( );

(2)系统设计(20分):

优()、良( )、中( )、一般( )、差( );

(3)编程调试(20分):

(4)回答问题(20分):

(5)论文撰写(30分):

评阅人:

   职称:

讲师

2010年12月25日

中文摘要

华容道,古老的中国游戏,以其变化多端、百玩不厌的特点与魔方、独立钻石棋一起被国外智力专家并称为“智力游戏界的三个不可思议”。

游戏就是依照“曹瞒兵败走华容,正与关公狭路逢,只为当初恩义重,放开金锁走蛟龙”这一故事情节设计,受到很多玩家的喜爱。

该程序用Java语言编写,棋盘上有10个不一样大小的按钮,分别代表曹操、张飞、赵云、马超、黄忠和关羽,还有四个兵。

棋盘最下方有两个空着的小方格,代表曹操逃出的位置,可以实现通过鼠标或者键盘移动界面上的按钮,最终使曹操移动到棋盘最下方,代表曹操逃出华容道。

目 录

一、课程设计任务及要求

1、本程序主要练习使用布局管理器设计一个华容道游戏界面,并练习使用事件监听器(鼠标事件、键盘事件和焦点事件)实现按钮的移动。

2、编写一个按钮的子类,使用该子类创建的对象代表华容道中的人物。

通过焦点事件控制人物颜色,当人物获得焦点时颜色为红色,当失去焦点时颜色为黄色。

3、通过键盘事件和鼠标事件来实现曹操、关羽等人物的移动。

当人物上发生鼠标事件或键盘事件时,如果鼠标指针的位置是在人物的下方(也就是组件的下半部分)或按下键盘的“↓“键,该人物向下移动。

向左、向右和向上的移动原理类似。

4、点击“重新开始”可以使各个按钮复位,重新开始游戏。

二、需求分析

要满足的容道游戏的基本操作:

1.各人物按钮按相应的顺序和大小排列,按钮上标注人物名字,界面美观。

2.通过焦点事件控制人物按钮的颜色,得到焦点呈红色,失去焦点为淡黄色。

3.可以通过键盘控制各个按钮的移动:

按“↓”键,人物按钮向下移动其它方向类似。

4.可以通过鼠标点击来控制各个人物按钮的移动:

如果点击的位置在按钮的上半部分则向上移动,如果点击按钮的下半部分则向下,左右原理类似。

5.有“重新开始按钮”点击重新开始按钮各个人物按钮复位,能重新开始游戏。

6.小程序能够自由的缩小,放大,关闭。

三、设计思路

1.首先是界面设计,该界面主要包括十个人物按钮(马、曹操、关羽等)以及旁边的四个边框按钮和重新开始按钮。

对于人物按钮,创建Button按钮的子类,在该类中定义按钮的一些新的属性和焦点事件监听器,如:

按钮的标签名、按钮的颜色、按钮的排号(如这里有十个人物按钮,从1排到十,在程序中可以依靠这个属性区分人物按钮)、按钮颜色、按钮获得或失去焦点事件。

同时在设计该界面时要考虑到各个按钮的位置、大小等情况。

2.对界面上的各人物按钮添加相应的相应事件

焦点事件:

通过焦点事件各个按钮的是焦点。

鼠标事件、键盘事件:

通过这两种事件去完成界面上各人物按钮的移动。

对重新开始按钮定义动作事件(ActionEvent)完成界面初始化功能也就是各人物按钮重新归位。

四、详细设计

1.类的设计

本程序总共有3个类

(1)MoveExample类

publicclassMoveExample

{

publicstaticvoidmain(Stringargs[])//定义主方法

{

newHua_Rong_Road();

//创建一个Hua_Rong_Road对象

}

}

(2)Person类

增加焦点事件监视器:

addFocusListener(事件监听器)

当组件具有焦点监视器后,如果组件从无输入焦点变成有输入焦点或从有输入焦点到无输入焦点都会触发FocusEvent事件。

创建监视器的类必须要实现FocusListener接口,该接口有两个方法:

publicvoidfocusGained(finalFocusEvente)//获得焦点触发

publicvoidfocusLost(finalFocusEvente)//失去焦点触发

当组件从无输入焦点变成有输入焦点并触发FocusEvent事件时,监视器调用类实现的接口方法focusGained(FocusEvente);

当组件从有输入焦点变成无输入焦点并触发FocusEvent事件时,监视器调用类实现方法focusLost(FocusEvente)。

classPersonextendsButtonimplementsFocusListener

intnumber;

Colorc=newColor(255,245,170);

//设置颜色

//preson方法

publicPerson(finalintnumber,finalStrings){

super(s);

setBackground(c);

//背景色

this.number=number;

c=getBackground();

addFocusListener(this);

//事件焦点监听

publicvoidfocusGained(finalFocusEvente)//获得焦点触发

setBackground(Color.red);

//获得焦点的颜色

publicvoidfocusLost(finalFocusEvente)//失去焦点触发

(3)Hua_Rong_Road类

游戏界面主要包括十个人物按钮马、曹操、关羽等。

对于人物按钮,在该类中定义按钮的一些新的属性和焦点事件监听器,如:

classHua_Rong_RoadextendsFrameimplementsMouseListener,KeyListener,ActionListener

Personperson[]=newPerson[10];

Buttonleft,right,above,below;

Buttonrestart=newButton("

重新开始"

);

//添加重新开始按钮

Hua_Rong_Road()方法设置容器

publicHua_Rong_Road()

init();

//设置按钮

setBounds(100,100,320,360);

//组件在容器上的起点和长宽

setVisible(true);

//像控件中添加元素

validate();

//刷新

addWindowListener(newWindowAdapter()//注册窗口事件监听

{publicvoidwindowClosing(WindowEvente)//关闭

System.exit(0);

}});

init()方法设置10个按钮

publicvoidinit()

setLayout(null);

//设置布局默认

add(restart);

//添加重新开始

restart.setBounds(100,320,120,25);

//按钮大小

restart.addActionListener(this);

//注册监听

Stringname[]={"

曹操"

"

关羽"

张飞"

刘备"

赵云"

黄忠"

兵"

兵"

};

for(intk=0;

k<

name.length;

k++)

person[k]=newPerson(k,name[k]);

//为每个按钮加上名字

person[k].addMouseListener(this);

//每个按钮都注册鼠标事件监听

/*鼠标事件的类型是MouseEvent,即组件触发鼠标时,MouseEvent类自动创建一个事件对象。

Java分别使用MouseListener接口来处理鼠标事件。

MouseListener接口可以处理5种鼠标事件:

单击、按下、释放、进入和退出。

*/

person[k].addKeyListener(this);

//注册键盘事件监听

/*当按下、释放或敲击键盘上一个键时就发生了键盘事件,如:

当一个组件处于激活状态时(获得焦点),敲击键盘上一个键就导致了这个组件发生了键盘事件。

事件源使用addKeyListener方法获得监视器。

/*KeyEvent类的publicintgetKeycode()方法和publicchargetKeychar()判断哪个键被按下、敲击或释放。

add(person[k]);

//加上人物按钮

//为每一个人物按钮设置位置和大小

person[0].setBounds(104,54,100,100);

person[1].setBounds(104,154,100,50);

person[2].setBounds(54,154,50,100);

person[3].setBounds(204,154,50,100);

person[4].setBounds(54,54,50,100);

person[5].setBounds(204,54,50,100);

person[6].setBounds(54,254,50,50);

person[7].setBounds(204,254,50,50);

person[8].setBounds(104,204,50,50);

person[9].setBounds(154,204,50,50);

person[9].requestFocus();

//把焦点先设置在这个按钮上

/*

其次来画出游戏界面的边框,用定义的left,right,above,below,来控制大小*/

left=newButton();

right=newButton();

above=newButton();

below=newButton();

add(left);

add(right);

add(above);

add(below);

left.setBounds(49,49,5,260);

right.setBounds(254,49,5,260);

above.setBounds(49,49,210,5);

below.setBounds(49,304,210,5);

经过以上操作就完成了界面的布局得到的界面如图一所示:

图一:

界面布局

接下来就要为各个按钮注册事件监听:

鼠标事件和键盘事件

键盘事件:

KeyEvent为键盘事件的类型,KeyListener是事件监视器实现的接口,其中有三种相应事件:

按键、释放键、按下和释放的组合事件。

PublicvoidKeyPressed(KeyEvente)

PublicvoidKeyTyped(KeyEvente)

PublicvoidKeyReleased(KeyEvente)

如下:

publicvoidkeyTyped(KeyEvente){}

publicvoidKeyReleased(KeyEvente){}

因为要实现人机交互的效果,所以要响应键盘事件,这一操作是在函数publicvoidkeyPressed(KeyEvente)中完成的:

首先通过语句Personman=(Person)e.getSource()获取事件源,然后通过语句if(e.getKeyCode()==KeyEvent.VK_DOWN)响应用户按向下光标的操作,通过语句if(e.getKeyCode()==KeyEvent.VK_LEFT)响应用户按向左光标的操作,通过语句if(e.getKeyCode()==KeyEvent.VK_RIGHT)响应用户按向右光标的操作,通过语句if(e.getKeyCode()==KeyEvent.VK_UP)响应用户按向上光标的操作。

publicvoidKeyPressed(KeyEvente)

Personman=(Person)e.getSource();

//返回事件源

/*用KeyEvent类的getKeycode()方法和getKeychar()判断哪个键被按下、敲击或释放。

if(e.getKeyCode()==KeyEvent.VK_DOWN)

go(man,below);

if(e.getKeyCode()==KeyEvent.VK_UP)

go(man,above);

if(e.getKeyCode()==KeyEvent.VK_LEFT)

go(man,left);

if(e.getKeyCode()==KeyEvent.VK_RIGHT)

go(man,right);

鼠标事件:

publicvoidmouseReleased(MouseEvente){}

publicvoidmouseEntered(MouseEvente){}

publicvoidmouseExited(MouseEvente){}

publicvoidmouseClicked(MouseEvente){}

//响应鼠标事件,通过鼠标点击的位置判断是像那个方向移动

publicvoidmousePressed(MouseEvente)

intx=-1,y=-1;

x=e.getX();

y=e.getY();

intw=man.getBounds().width;

inth=man.getBounds().height;

if(y>

h/2)

if(y<

if(x<

w/2)

if(x>

用go方法控制人物按钮上下左右移动:

publicvoidgo(Personman,Buttondirection)

booleanmove=true;

RectanglemanRect=man.getBounds();

intx=man.getBounds().x;

inty=man.getBounds().y;

if(direction==below)//向各个方向上的移动

y=y+50;

elseif(direction==above)

y=y-50;

elseif(direction==left)

x=x-50;

elseif(direction==right)

x=x+50;

manRect.setLocation(x,y);

RectangledirectionRect=direction.getBounds();

10;

RectanglepersonRect=person[k].getBounds();

if((manRect.intersects(personRect))&

&

(man.number!

=k))

//如果覆盖就不移动

move=false;

if(manRect.intersects(directionRect))

if(move==true)

//移动到新的位置

man.setLocation(x,y);

发生操作时调用:

publicvoidactionPerformed(ActionEvente){

dispose();

2.流程图如图二:

图二:

流程图

五、运行调试与分析讨论

运行结果

1.运行小程序如图3所示:

图三

2.点击按钮使按钮获得焦点如图四所示:

图四

3.用鼠标或者键盘移动人物按钮如图五:

图五

4.点击重新开始按钮后如图六所示:

图六

六、设计体会与小结

通过本程序,我练习使用布局管理器设计了一个华容道游戏界面,并且练习使用事件监听器监听焦点的得失,首先增加焦点事件监视器:

addFocusListener(事件监听器),当组件具有焦点监视器后,如果组件从无输入焦点变成有输入焦点或从有输入焦点到无输入焦点都会触发FocusEvent事件。

publicvoidfocusGained(FocusEvente)//获得焦点触发

publicvoidfocusLost(FocusEvente)//失去焦点触发

练习了通过鼠标事件实现按钮的移动,鼠标事件的类型是MouseEvent,即组件触发鼠标时,MouseEvent类自动创建一个事件对象。

Java分别使用MouseListener接口与MouseMotionListener接口来处理鼠标事件。

MouseMotionListener接口可以处理2种鼠标事件:

拖动、移动。

练习了通过键盘事件实现按钮的移动,当按下、释放或敲击键盘上一个键时就发生了键盘事件,当一个组件处于激活状态时(获得焦点),敲击键盘上一个键就导致了这个组件发生了键盘事件。

用KeyEvent类的publicintgetKeycode()方法和publicchargetKeychar()判断哪个键被按下、敲击或释放。

七、参考文献

[1]作者:

丁振凡.参考书籍名称[M]:

《java语言实用教程》.出版地:

北京邮电大学出版社.出版年限:

2007.

[2]作者:

耿祥义.参考书籍名称[M]:

《Java基础教程》.出版地:

清华大学出版社.出版年限:

2009.

附录(源码清单)

importjava.awt.*;

importjava.awt.event.*;

publicstaticvoidmain(Stringargs[])

classPersonextendsButtonimplementsFocusListener

Colorc=newColor(255,245,170);

Person(intnumber,Strings)

this.number=number;

c=getBackground();

publicvoidfocusGained(FocusEvente)

publicvoidfocusLos

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2