JAVA小游戏华容道软件设计报告.docx
《JAVA小游戏华容道软件设计报告.docx》由会员分享,可在线阅读,更多相关《JAVA小游戏华容道软件设计报告.docx(11页珍藏版)》请在冰豆网上搜索。
JAVA小游戏华容道软件设计报告
命题方式:
单独命题
佛山科学技术学院2013—2014学年第二学期
《可视化编程技术》课程期末考试试题A
专业、班级:
12教技2班姓名:
何颖康学号:
**********成绩:
根据《可视化编程技术》这门课程的内容,结合自己熟悉的课题及自己的实际情况来自选设计题目,也可以选择老师提供的参考题目设计。
1.参考设计题目
1)电子钟;2)简单计算器;3)五子棋;4)微波炉倒计时部件
2.上交文本格式(参考设计报告模板)
(1)标题;
(2)班级、姓名、学号;
(3)摘要
(4)关键词;
(5),正文;
(6)参考文献;
(7)设计总结(自己所做的主要工作与体会)
3.作品必须有一个自己独立完成的模块,按照功能多少及强度评分。
4.上交作品两项
(1)课程设计报告电子完整版(含程序),统一放入班级光盘中;
(2)考试作品(从设计报告中整理5-6页+本封面)用A4白纸打印。
进行接新
佛山科学技术学院
《可视化编程技术》课程设计报告
JAVA小游戏“华容道”设计
*******
学号:
**********
年级专业:
12级教育技术学2班
*******
学院:
教育科学学院
广东★佛山
提交日期:
2014年6月
摘要:
本程序根据手机游戏“智力大爆炸”为原版,加入历史元素,将娱乐、学习和思考集于一体。
程序执行后,点击相应的人物,然后按上下左右键可以移动。
点击重新开始按钮,可以将各个人物的位置重置。
如果目的地的面积能够容得下当前要移动的人物,则认为可以移动。
当曹操移动到“曹操到达该位置”的位置的时候,认为程序结束。
关键字:
java小游戏,华容道,益智,历史元素,曹操移动
前言
随着科学技术的不断发展,计算机已经成为我们工作学习和生活中不可缺少的工具。
文本编辑器是个人计算机最司空见惯的应用程序了,在学习了Java语言之后,我决定使用Java语言编写一个简单的计算器,可以实现简单的运算功能,满足日常基本的工作学习和娱乐需要。
Java是由Sun公司开发的新一代纯面向对象的网络编程语言。
其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。
正因为如此,Java已成为当今Internet上最流行、最受欢迎的一种程序开发语言。
Java开发小组把Java按特性分为基本版、移动版、企业版,每个版本有一个软件开发包。
Java基本版本叫Java2标准版(Java2StandardEdition,J2SE),它包含建立Java应用程序或者是Applet所需的应用程序编程接口(API)。
Java2移动版(TheJava2MobileEdition,J2ME)包含创建无线Java应用程序的API。
还有Java2企业版(TheJava2Enterprise,J2EE)是J2SE的增强版本,包含建立多层架构应用程序API。
Java语言是由C++语言发展起而来的,是一种彻底的面向对象的程序设计语言。
作为一种纯面向对象的程序设计语言,它非常适合大型软件的开发。
Java语言去掉了C++语言的一些容易引起错误的特性。
Java语言的特点有:
面向对象、跨平台、安全性、多线程和图形功能强。
详细设计
(1)编程思路:
因为首先要实现华容道游戏的整体功能,所以首先生成游戏中的主人公:
要生成游戏中的十个人物,就要用到人物类People,首先通过语句Peoplepeople[]=newPeople[10]定义一个可以存放十个变量的数组,再通过people[0]=newPeople(0,"曹操",104,54,100,100,this)等九话生成十个人物,最后通过people[9].requestFocus()
设置焦点。
然后,因为要设置华容道的界面信息,所以用到了Graphics类,首先通过语句g.setColor(Color.cyan)来设置要使用的颜色,然后通过g.fillRect()分别设置了左右上下四部分边界的填充颜色,最后通过g.drawString()函数写出提示曹操逃出位置和按键规则给用户参考。
最后,因为要实现人机交互的效果,所以要响应键盘事件,这一操作是在函数publicvoidkeyPressed(KeyEvente)中完成的:
首先通过语句Peopleman=(People)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)响应用户按向上光标的操作,最后通过函数publicvoidactionPerformed(ActionEvente)将界面所有控件复位,实现重新开始的功能。
测试分析
代码编写完毕,存盘为:
C:
j2sdk1.4.0\javaprograms\HuaRongRoad.java。
打开计算机的命令提示符窗口,然后在命令提示符窗口中,定位到javaprograms目录,输入javacHuaRongRoad.java来编译程序,最后将程序加载到网页上。
在javaprograms文件夹下新建一个记事本文件,内容为
,然后保存为HuaRongRoad.html的网页文件。
本例制作完毕,用浏览器打开HuaRongRoad.html文件便可以看到制作效果。
程序清单:
//HuaRongRoad.java
importjava.awt.*;
importjava.applet.*;
importjava.awt.event.*;
classPeopleextendsButtonimplementsFocusListener//代表华容道人物的类
{
Rectanglerect=null;
intleft_x,left_y;//按扭的左上角坐标
intwidth,height;//按扭的宽和高
Stringname;
intnumber;
People(intnumber,Strings,intx,inty,intw,inth,HuaRongRoadroad)
{
super(s);
name=s;
this.number=number;
left_x=x;left_y=y;
width=w;height=h;
setBackground(Color.orange);
road.add(this);
addKeyListener(road);
setBounds(x,y,w,h);
addFocusListener(this);
rect=newRectangle(x,y,w,h);
}
publicvoidfocusGained(FocusEvente)
{
setBackground(Color.red);
}
publicvoidfocusLost(FocusEvente)
{
setBackground(Color.orange);
}
}
publicclassHuaRongRoadextendsApplet
implementsKeyListener,ActionListener
{
Peoplepeople[]=newPeople[10];
Rectangleleft,right,above,below;//华容道的边界
Buttonrestart=newButton("重新开始");
publicvoidinit()
{
setLayout(null);
restart.setBackground(Color.yellow);
add(restart);
restart.setBounds(5,5,80,25);
restart.addActionListener(this);
people[0]=newPeople(0,"曹操",104,54,100,100,this);
people[1]=newPeople(1,"关羽",104,154,100,50,this);
people[2]=newPeople(2,"张飞",54,154,50,100,this);
people[3]=newPeople(3,"刘备",204,154,50,100,this);
people[4]=newPeople(4,"张辽",54,54,50,100,this);
people[5]=newPeople(5,"曹仁",204,54,50,100,this);
people[6]=newPeople(6,"兵",54,254,50,50,this);
people[7]=newPeople(7,"兵",204,254,50,50,this);
people[8]=newPeople(8,"兵",104,204,50,50,this);
people[9]=newPeople(9,"兵",154,204,50,50,this);
people[9].requestFocus();
left=newRectangle(49,49,5,260);
people[0].setForeground(Color.white);
right=newRectangle(254,49,5,260);
above=newRectangle(49,49,210,5);
below=newRectangle(49,304,210,5);
}
publicvoidpaint(Graphicsg)
{
//画出华容道的边界
g.setColor(Color.cyan);
g.fillRect(49,49,5,260);//left
g.fillRect(254,49,5,260);//right
g.fillRect(49,49,210,5);//above
g.fillRect(49,304,210,5);//below
//提示曹操逃出位置和按键规则
g.setColor(Color.blue);
g.drawString("点击相应的人物,然后按键盘上的上下左右箭头移动",100,20);
g.setColor(Color.red);
g.drawString("曹操到达该位置",110,300);
}
publicvoidkeyPressed(KeyEvente)
{
Peopleman=(People)e.getSource();//获取事件源
man.rect.setLocation(man.getBounds().x,man.getBounds().y);
if(e.getKeyCode()==KeyEvent.VK_DOWN)
{
man.left_y=man.left_y+50;//向下前进50个单位
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
//判断是否和其它人物或下边界出现重叠,如果出现重叠就退回50个单位距离
for(inti=0;i<10;i++)
{
if((man.rect.intersects(people[i].rect))&&(man.number!
=i))
{
man.left_y=man.left_y-50;
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
}
}
if(man.rect.intersects(below))
{
man.left_y=man.left_y-50;
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
}
}
if(e.getKeyCode()==KeyEvent.VK_UP)
{
man.left_y=man.left_y-50;//向上前进50个单位
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
//判断是否和其它人物或上边界出现重叠,如果出现重叠就退回50个单位距离
for(inti=0;i<10;i++)
{
if((man.rect.intersects(people[i].rect))&&(man.number!
=i))
{
man.left_y=man.left_y+50;
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
}
}
if(man.rect.intersects(above))
{
man.left_y=man.left_y+50;
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
}
}
if(e.getKeyCode()==KeyEvent.VK_LEFT)
{
man.left_x=man.left_x-50;//向左前进50个单位
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
//判断是否和其它人物或左边界出现重叠,如果出现重叠就退回50个单位距离
for(inti=0;i<10;i++)
{
if((man.rect.intersects(people[i].rect))&&(man.number!
=i))
{
man.left_x=man.left_x+50;
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
}
}
if(man.rect.intersects(left))
{
man.left_x=man.left_x+50;
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
}
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT)
{
man.left_x=man.left_x+50;//向右前进50个单位
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
//判断是否和其它人物或右边界出现重叠,如果出现重叠就退回50个单位距离
for(inti=0;i<10;i++)
{
if((man.rect.intersects(people[i].rect))&&(man.number!
=i))
{
man.left_x=man.left_x-50;
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
}
}
if(man.rect.intersects(right))
{
man.left_x=man.left_x-50;
man.setLocation(man.left_x,man.left_y);
man.rect.setLocation(man.left_x,man.left_y);
}
}
}
publicvoidkeyTyped(KeyEvente){}
publicvoidkeyReleased(KeyEvente){}
publicvoidactionPerformed(ActionEvente)
{
this.removeAll();
this.init();
}
}
参考文献
林良信《JavaJDK6学习笔记》
刘浦迎谢春《java程序设计实用教程》科学出版社
张白一崔尚林《面向对象程序设计—java》西安电子科技大学出版社
潘浩李芙玲《Java程序设计》清华大学出版社
设计总结(自己所做的主要工作与体会)
经过一个学期的JAVA学习,对JAVA编程有了一定的认识,JAVA是一门很有趣的课程,虽然在编辑程序的时候比较有难度,但是当把程序写出来的时候,心理的满足感是无法形容的。
但是我的语言基本功比较差,所以做起来比较吃力,通过请教老师和同学,终于把我想要的程序写出来,这段时间可以说是最充实又吃力的一段时间。
通过这次实训我的体会归纳为以下4点:
1.态度第一,摆正自己的心态,不要以为什么东西上网搜搜就可以了,一定要有自己的东西。
只有自己付出过,当程序运行成功时的那种喜悦才会令自己有一种莫名的自豪感。
态度决定一切!
2.兴趣是关键,因为有兴趣,所以才会很想充分理解一切细节。
又因为理解,所以许多原本片片断断的知识都可以渐渐互相融会贯通,累积技术能量,理论和实务之间的藩篱被打破了,学习效率倍增。
学习并快乐着!
3.敢于挑战,不安于现成的程序,要敢于用多种方法实现一个目的。
现在的网络科技很发达,想要一个源程序的确很简单,所以很多人都是在自己都不明白题目要求时,就可以在网上搜到一模一样的代码,根本没有自己的东西。
挑战自我是项艰巨的任务。
只有坚持自己多看代码多写程序才会有更多的收获。
4.不懈追求,要对源代码进行不断地完善,要尽可能地实现课题所要求的功能。
对初学者来说,大量地写程序是必要的,但过了某个阶段之后,写程序所带来的技术能力成长已经到了极限,还不如多花一点时间看书,学新技术和新观念。
可以从实现源程序功能着手,比如添加写模块啊什么的,实现更多功能。
看着自己编的程序能成功运行,这样自己会更感兴趣,也就会乐此不疲。