知道某个java游戏的代码后,怎样把它java做成exe一个游戏,就像...

1003人阅读
一.&需求分析
&&&&&曾几何时,游戏是***的代名词,让人与玩物丧志联系在一起,一度遭到社会反感和家长抵制。但是,随着互联网的发展,和游戏潜在好处被发现,游戏的价值开始逐渐被社会认可,人们开始接受、认识和了解游戏带来的诸多好处。
现在学生的课业负担重,娱乐时间少,人际交往少,烦恼和压力也因此相应增加。其实玩游戏不仅帮助学生调节情绪,还可以锻炼与提高他们的反应能力和手脑的快速配合能力,同时帮助他们了解电脑和网络知识等,可谓是一举多得。据调查显示,经常玩游戏的学生思维活跃、善于表达、情绪乐观,解决问题时会更加灵活。
白天在学校忙了一整天的功课,晚上需要一种轻松的方式来自我舒缓压力,放松情绪。于是游戏就很好的满足了这种需求,《棒打猪头》操作简单,画面漂亮,任由发挥,玩后可以获得极大的满足感和放松。
棒打猪头是一款简单的单机小型游戏,适合青少年学生的课后娱乐。在这款游戏运行时,在游戏界面的九个暗格会随机弹出一头小猪,用鼠标控制的小锤点击。游戏会参照玩家打击小猪的速度和个数积分。
二.&程序描述
2.1程序设计的目的
通过java开发技术课程的学习,我初步了解了如何运用java语言编写程序。课程结束后,按老师的要求,在查找资料后,我完成了棒打猪头这个程序。
在这个过程中,主要达到了两个目的,一是检验和巩固专业知识,二是提高综合素质和能力。通过该程序的编写,可以将我课堂上掌握的理论知识与处理实际需求的能力相结合,以检验我掌握知识的宽度、深度及对知识的综合运用能力。
2.2程序设计的要求
()&《棒打猪头》是一种类似于打地鼠的游戏。程序界面的九个暗格会随机的出现一个猪头,玩家在用鼠标控制铁锤的移动和敲击动作(当鼠标按键被按下时)。
(2)在游戏中,当铁锤击中猪头时会增加分数(每击中一次加分),并将这个分数显示在状态栏上。
(3程序的主界面是能够给玩家一个清新自然、令人愉悦的游戏界面。
2.3程序设计的环境
Windows&xp操作系统、编辑工具、jdk1.7
三、分析与设计
3.1&游戏处理流程
&&本次游戏设计的处理流程如下图所示
3.2&程序的主要类、重要算法
游戏中有两个角色,一个是代表猪头的类,另一个是代表铁锤的类,它们都是继承游戏主类类而来。还有一个不可或缺的游戏主类--类。
游戏是有个类实例和一个&类实例所构成的,这些必要的类实例建立在游戏主类的中的()方法中,并且在动画循环中转换角色的状态,在()方法中绘制角色本身。由于铁锤角色有鼠标控制直接转换状态,因此在动画循环中只有转换猪头角色的代码:
for(int&i=0;i&9;i++)&&&&&&&&&&&&//转换猪头
pigSprite[i].updateState();
在()方法中要求角色绘制本身的程序代码如下:
//绘制猪头
& for&(int&i=0;i&9;i++)
& pigSprite[i].paintSprite(drawOffScreen);
& //绘制铁锤
& hammerSprite.paintSprite(drawOffScreen);
阐述挥动铁锤的动作:首先是挥动铁锤的动作,正确的处理是当按下鼠标左键是即显示,放开按键后显示,这是由铁锤的()方法来实现。
public&void&updateState()
&&&&&&//转换铁锤图像
&&&&&if(currentImage==hammer1)
&&&&¤tImage=hammer2;
currentImage=hammer1;
猪头角色的hit()方法可用来测试铁锤角色是否击中猪头角色,这里用到的碰撞侦测的技巧如下:
if((this.X+P_Width&=X)&&&&(this.Y+(P_Height/2)&=Y)
&&&(X+(H_Width/2)&=this.X)&&&&(Y+(H_Height/2)&=this.Y)&&&&showPig)
else&&return&
&&&&&程序于当鼠标按键被按下时,侦测铁锤是否击中猪头,()方法中的那段程序代码在调用()方法时进行侦测的动作:
//测试是否击中猪头
& for&(int&i=0;i&9;i++)
& //如果击中则增加分数并将分数显示在状态列
& if(pigSprite[i].hit(X,Y,FrameWidth,FrameHeight,HammerWidth,HammerHeight)==true)
& score=score+10;
& showStatus(&目前得分:
3.3程序运行结果
四、&心得体会
1)通过本学期的java的学习,我掌握了java语言的基本知识,通过java我又学习了很多其他的有用的东西,比如算法,数据结构。在了解了java之后我对java产生了浓厚的爱意。
2)通过这几周的实验,让我把这学期学的知识应用于实践之上,理论付之于实践真的很难,掌握的基础知识开始根本不知道怎么组织。但我对java的爱是不可能就这样被扼杀的。通过我的上网查,书上看,动动手,终於功夫不负有心人。我顺利的完成了实验。
3)这次实验让我对java的Swing编程的了解详细了不少,填补了我很多的空缺。在实现功能的时候我懂得了算法对程序的重要性,一个好的算法可以让你的程序更健壮,编写的代码量更少。处理异常一直是java里的常事,通过实验,我对一般的异常的处理更加有把握了。更加游刃有余。
4)学习的秘诀就是毅力加恒心。学习java也是一样的道理,我相信只要我坚持一直走下去,java一定会成为我大展身手的舞台。
《棒打猪头》代码:
* @(#)HitPigHead.java
* @version 1.00
import java.awt.*;
import java.util.*;
import java.applet.*;
import java.awt.event.*;
abstract class SuperSprite
int X,Y,width,
boolean visible,
abstract public void paintSprite(Graphics g);
abstract public void updateState();
public int getX()
public int getY()
public void setLocation(int X,int Y)
public int getWidth()
public int getHeight()
public void setSize(int width,int height)
this.width=
this.height=
public boolean canVisible()
public void setVisible(boolean v)
visible=v;
public boolean canMove()
public void setMove(boolean m)
class PigSprite extends SuperSprite
//猪头Sprite
//产生随机数
Image SpriteImage,F
//Sprite本身的图像
//在绘制图像时会用到
boolean showP
//绘制猪头图像
public PigSprite(Image SpriteImage,Image Frame,Applet Game)
R=new Random();
this.SpriteImage=SpriteI
this.Frame =F
this.Game=G
setVisible(true);
setMove(true);
public void updateState()
if(active==true)
//转换猪头图像出现与消失的状态
if(R.nextInt(seed)%100&1)
if(showPig==false)
else if(R.nextInt(seed)%100 & 95)
if(showPig==true)
public void paintSprite(Graphics g)
//绘制猪头Sprite
if(visible == true)
g.drawImage(Frame,X,Y,Game);
//在最后一个参数中输入Applet
if(showPig == true)
g.drawImage(SpriteImage,X+12,Y+18,Game);
public void setSeed(int seed)
this.seed=
//测试是否击中猪头
public boolean hit(int X,int Y,int P_Width,int P_Height,int H_Width,int H_Height)
if((this.X+P_Width&=X) && (this.Y+(P_Height/2)&=Y)
&& (X+(H_Width/2)&=this.X) && (Y+(H_Height/2)&=this.Y) && showPig)
class HammerSprite extends SuperSprite
//铁锤Sprite
Image hammer1,hammer2,currentI
//铁锤图像
//在绘制图像时会用到
public HammerSprite(Image hammer1,Image hammer2,Applet Game)
this.hammer1=hammer1;
this.hammer2=hammer2;
this.Game=G
currentImage=hammer1;
setLocation(0,0);
setVisible(false);
setMove(false);
//不可移动
public void updateState()
//转换铁锤图像
if(currentImage==hammer1)
currentImage=hammer2;
currentImage=hammer1;
public void paintSprite(Graphics g)
//绘制铁锤Sprite
if(visible == true)
g.drawImage(currentImage,X,Y,Game);
//在最后一个参数中输入Applet
public class HitPigHead extends Applet
//定义游戏主类
implements Runnable,MouseListener,MouseMotionListener
int AppletWidth,AppletHeight,FrameWidth,FrameHeight,countX,countY,HammerWidth,HammerHeight,
Image frame,pig,hammer1,hammer2,OffS
Thread newT
Graphics drawOffS
MediaTracker MT;
PigSprite pigSprite [];
HammerSprite hammerS
public void init()
addMouseListener(this);
//注册时间处理方法
addMouseMotionListener(this);
AppletWidth = getSize().
AppletHeight = getSize().
//X轴3个猪头texture
//Y轴3个猪头texture
//记录分数
//使用MediaTracker追踪图像
MT = new MediaTracker(this);
pig = getImage(getDocumentBase(),&Images/pig1.gif&);
frame = getImage(getDocumentBase(),&Images/frame1.gif&);
hammer1 = getImage(getDocumentBase(),&Images/hammer1.gif&);
hammer2= getImage(getDocumentBase(),&Images/hammer2.gif&);
MT.addImage(pig,0);
MT.addImage(frame,0);
MT.addImage(hammer1,0);
MT.addImage(hammer2,0);
MT.waitForAll();
catch(InterruptedException E)
//没有进行异常处理
FrameWidth=frame.getWidth(this);
//猪头texture的宽度
FrameHeight=frame.getHeight(this);
//猪头texture的高度
pigSprite =new PigSprite[9];
//使用9个猪头图像(3*3)
for (int i=0;i&9;i++)
//建立猪头Sprite
pigSprite[i]=new PigSprite(pig,frame,this);
//设定位置
pigSprite[i].setLocation(i%countX*FrameWidth,i/countY*FrameHeight);
pigSprite[i].setSeed(i+100);
//设定随机数范围
//建立铁锤Sprite
hammerSprite=new HammerSprite(hammer1,hammer2,this);
HammerWidth=hammer1.getWidth(this);
//铁锤图像宽度
HammerHeight=hammer1.getHeight(this);
//铁锤图像高度
//建立子画面
OffScreen=createImage(AppletWidth,AppletHeight);
drawOffScreen=OffScreen.getGraphics();
resize(FrameWidth*countX,FrameHeight*countY);
public void start()
//start()方法
newThread=new Thread(this);
//建立与启动新线程
newThread.start();
public void stop()
//stop()方法
newThread=
//将线程设为null
public void paint(Graphics g)
//只清除此部分区域的图像
drawOffScreen.clearRect(0,0,AppletWidth,AppletHeight);
//绘制猪头Sprite
for (int i=0;i&9;i++)
pigSprite[i].paintSprite(drawOffScreen);
//绘制铁锤Sprite
hammerSprite.paintSprite(drawOffScreen);
//将子画面贴到主画面上
g.drawImage(OffScreen,0,0,this);
public void update(Graphics g)
//update()方法
public void run()
while(newThread!=null)
repaint();
//重绘图像
Thread.sleep(33);
//暂停33毫秒
catch(InterruptedException E){}
for(int i=0;i&9;i++)
//转换猪头Sprite
pigSprite[i].updateState();
//==========实现MouseListener界面======================
public void mouseExited(MouseEvent e)
//鼠标离开Component
hammerSprite.setVisible(false);
//不绘制铁锤Sprite
hammerSprite.setLocation(0,0);
//归位于原点
public void mouseClicked(MouseEvent e){ }
//鼠标按键被按下后放开
public void mouseEntered(MouseEvent e)
//鼠标进入Component
hammerSprite.setVisible(true);
//绘制铁锤Sprite
hammerSprite.setLocation(e.getX()-(HammerWidth/2),e.getY()-(HammerHeight/2));
public void mousePressed(MouseEvent e)
//鼠标按键被按下
hammerSprite.updateState();
//转换铁锤Sprite
int X=hammerSprite.getX();
//取得铁锤Sprite的X坐标
int Y=hammerSprite.getY();
//取得铁锤Sprite的Y坐标
//测试是否击中猪头sprite
for (int i=0;i&9;i++)
//如果击中则增加分数并将分数显示在状态列
if(pigSprite[i].hit(X,Y,FrameWidth,FrameHeight,HammerWidth,HammerHeight)==true)
score=score+10;
showStatus(&目前得分:&+score);
public void mouseReleased(MouseEvent e)
//鼠标按键放开
hammerSprite.updateState();
//转换铁锤Sprite
//=================实现MouseMotionListener界面================
public void mouseMoved(MouseEvent e)
//鼠标移动时
//将鼠标光标置于铁锤Sprite中央
hammerSprite.setLocation(e.getX()-(HammerWidth/2),e.getY()-(HammerHeight/2));
public void mouseDragged(MouseEvent e)
//鼠标拖曳时
//将鼠标光标置于铁锤Sprite中央
hammerSprite.setLocation(e.getX()-(HammerWidth/2),e.getY()-(HammerHeight/2));
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:24917次
排名:千里之外
原创:48篇
(4)(6)(3)(4)(13)(5)(10)(6)优秀的程序员不是一天写多少代码的原因把,主要是他设计的算法的好坏把,如果一个人一天写了几M的代码,里面有80%是无用代码,他优秀吗?
看这种样式又加上你说的是网页文件源代码,我能确定是用Flash Builder编译器产生的,src文件夹里面的应该是.mxml文件,用记事本打开你可以看见代码,...
你的软件是在J2SE下开发的吧.要想在手机上运行java程序需要在J2ME下来开发的.
它们主要的差别在核心类库上,还有它们的生命周期也是不相同的,j2me...
:1)把记录的东西存到一个ArrayList 里但是退出以后再进入就没了。 2)把记录的东西存到一个txt文件中用特殊的方式存再用特殊的方式取 比如说存的时候用...
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区

参考资料

 

随机推荐