zoukankan      html  css  js  c++  java
  • java小游戏代码

    一. 需求分析

         曾几何时,游戏是海洛因的代名词,让人与玩物丧志联系在一起。一度遭到社会反感和家长抵制。可是。随着互联网的发展,和游戏潜在优点被发现。游戏的价值開始逐渐被社会认可,人们開始接受、认识和了解游戏带来的诸多优点。

    如今学生的课业负担重,娱乐时间少,人际交往少,烦恼和压力也因此对应添加。事实上玩游戏不仅帮助学生调节情绪,还能够锻炼与提高他们的反应能力和手脑的高速配合能力。同一时候帮助他们了解电脑和网络知识等。可谓是一举多得。

    据调查显示,常常玩游戏的学生思维活跃、善于表达、情绪乐观,解决这个问题时会更加灵活。

    白天在学校忙了一整天的功课。晚上须要一种轻松的方式来自我舒缓压力,放松情绪。于是游戏就非常好的满足了这样的需求,《棒打猪头》操作简单。画面美丽。任由发挥,玩后能够获得极大的满足感和放松。

    棒打猪头是一款简单的单机小型游戏。适合青少年学生的课后娱乐。在这款游戏执行时,在游戏界面的九个暗格会随机弹出一头小猪,用鼠标控制的小锤点击。游戏会參照玩家打击小猪的速度和个数积分。

    二. 程序描写叙述

    2.1程序设计的目的

    通过java开发技术课程的学习,我初步了解了怎样运用java语言编敲代码。课程结束后。按老师的要求,在查找资料后,我完毕了棒打猪头这个程序。

    在这个过程中。主要达到了两个目的。一是检验和巩固专业知识,二是提高综合素养和能力。通过该程序的编写。能够将我课堂上掌握的理论知识与处理实际需求的能力相结合,以检验我掌握知识的宽度、深度及对知识的综合运用能力。

    2.2程序设计的要求

    1) 《棒打猪头》是一种类似于打地鼠的游戏。程序界面的九个暗格会随机的出现一个猪头,玩家在用鼠标控制铁锤的移动和敲击动作(当鼠标按键被按下时)。

    (2)在游戏中,当铁锤击中猪头时会添加分数(每击中一次加10分)。并将这个分数显示在状态栏上。

    (3程序的主界面是可以给玩家一个清新自然、令人愉悦的游戏界面。

    2.3程序设计的环境

    Windows xp操作系统、Jcreator编辑工具、jdk1.7

    三、分析与设计

    3.1 游戏处理流程

      本次游戏设计的处理流程例如以下图所看到的

    3.2 程序的主要类、重要算法

    游戏中有两个角色。一个是代表猪头的PigSprite 类,另一个是代表铁锤的HammerSprite 类,它们都是继承游戏主类SuperSprite 类而来。另一个不可或缺的游戏主类—HitPigHead 类。

    游戏是有9PigSprite 类实例和一个 HammerSprite 类实例所构成的。这些必要的类实例建立在游戏主类的中的init()方法中,而且在动画循环中转换角色的状态,在paint()方法中绘制角色本身。

    因为铁锤角色有鼠标控制直接转换状态,因此在动画循环中仅仅有转换猪头角色的代码:

    for(int i=0;i<9;i++)            //转换猪头Sprite

    pigSprite[i].updateState();

    paint()方法中要求角色绘制本身的程序代码例如以下:

    //绘制猪头Sprite

      for (int i=0;i<9;i++)

      pigSprite[i].paintSprite(drawOffScreen);

      //绘制铁锤Sprite

      hammerSprite.paintSprite(drawOffScreen);

    阐述挥动铁锤的动作:首先是挥动铁锤的动作,正确的处理是当按下鼠标左键是即显示hammer2,放开按键后显示hammer1,这是由铁锤Sprite updateState()方法来实现。

    public void updateState()

    {

          //转换铁锤图像

         if(currentImage==hammer1)

         currentImage=hammer2;

    else

    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)

    {

    showPig=false;

    return true;

    }

    else  return false;

         程序于当鼠标按键被按下时,侦測铁锤是否击中猪头,mousePressed()方法中的那段程序代码在调用hit()方法时进行侦測的动作:

    //測试是否击中猪头sprite

      for (int i=0;i<9;i++)

      {

      //假设击中则添加分数并将分数显示在状态列

      if(pigSprite[i].hit(X,Y,FrameWidth,FrameHeight,HammerWidth,HammerHeight)==true)

      {

      score=score+10;

      showStatus("眼下得分:"+score);

      }

      }

    3.3程序执行结果


    四、 心得体会

    1)通过本学期的java的学习,我掌握了java语言的基本知识,通过java我又学习了非常多其它的实用的东西。比方算法,数据结构。

    在了解了java之后我对java产生了浓厚的爱意。

    2)通过这几周的实验。让我把这学期学的知识应用于实践之上,理论付之于实践真的非常难,掌握的基础知识開始根本不知道怎么组织。但我对java的爱是不可能就这样被扼杀的。

    通过我的上网查,书上看。动动手。终於功夫不负有心人。

    我顺利的完毕了实验。

    3)这次实验让我对java的Swing编程的了解具体了不少,填补了我非常多的空缺。在实现功能的时候我懂得了算法对程序的重要性,一个好的算法能够让你的程序更健壮。编写的代码量更少。

    处理异常一直是java里的常事。通过实验。我对一般的异常的处理更加有把握了。更加游刃有余。

    4)学习的秘诀就是毅力加恒心。学习java也是一样的道理,我相信仅仅要我坚持一直走下去。java一定会成为我大展身手的舞台。

    《棒打猪头》代码:

    /**
     * @(#)HitPigHead.java
     *
     *
     * @author
     * @version 1.00 2012/6/4
     */
    
    import java.awt.*;
    import java.util.*;
    import java.applet.*;
    import java.awt.event.*;
    
    abstract class SuperSprite
    {
    	int X,Y,width,height;
    	boolean visible,active;
    
    	abstract public void paintSprite(Graphics g);
    	abstract public void updateState();
    
    	public int getX()
    	{
    		return X;
    	}
    
        public int getY()
    	{
    		return Y;
    	}
    
        public void setLocation(int X,int Y)
       {
       	   this.X=X;
       	   this.Y=Y;
    
        }
    
        public int getWidth()
        {
        	 return width;
        }
    
        public int getHeight()
        {
        	return height;
        }
    
        public void setSize(int width,int height)
        {
        	this.width=width;
        	this.height=height;
        }
    
        public boolean canVisible()
        {
        	return visible;
        }
    
        public void setVisible(boolean v)
        {
        	visible=v;
        }
    
        public boolean canMove()
        {
        	return active;
        }
    
        public void setMove(boolean m)
        {
        	active=m;
        }
    }
    
    class PigSprite extends SuperSprite    //猪头Sprite
    {
    	int seed;             //产生随机数
    	Image SpriteImage,Frame;      //Sprite本身的图像
    	Applet Game;          //在绘制图像时会用到
    	Random R;
    	boolean showPig;      //绘制猪头图像
    
    
    public PigSprite(Image SpriteImage,Image Frame,Applet Game)
    {
    	R=new Random();
    
    	this.SpriteImage=SpriteImage;
    	this.Frame =Frame;
    	this.Game=Game;
    	showPig=false;
    
    	setVisible(true);    //可见
    	setMove(true);       //可移动
    
    }
    
    public void updateState()
    {
    	if(active==true)
    	{
    		//转换猪头图像出现与消失的状态
    		if(R.nextInt(seed)%100<1)
    		{
    			if(showPig==false)
    				showPig=true;
    		}
    		else if(R.nextInt(seed)%100 > 95)
    		{
    			if(showPig==true)
    				showPig=false;
    		}
    	}
    
    }
    
    
    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=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)
    		{
    			showPig=false;
    			return true;
    		}
    		else
    			return false;
    }
    }
    
    class HammerSprite extends SuperSprite   //铁锤Sprite
    {
    
    	Image hammer1,hammer2,currentImage;      //铁锤图像
    	Applet Game;          //在绘制图像时会用到
    
    
    
    public HammerSprite(Image hammer1,Image hammer2,Applet Game)
    {
    
    
    	this.hammer1=hammer1;
    	this.hammer2=hammer2;
    	this.Game=Game;
    
    	currentImage=hammer1;
    
    	setLocation(0,0);
    	setVisible(false);    //不可见
    	setMove(false);       //不可移动
    
    }
    
    public void updateState()
    {
    	//转换铁锤图像
    	if(currentImage==hammer1)
    		currentImage=hammer2;
    		else
    			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,score;
     	Image frame,pig,hammer1,hammer2,OffScreen;
     	Thread newThread;
     	Graphics drawOffScreen;
     	MediaTracker MT;
    
     	PigSprite pigSprite [];
     	HammerSprite hammerSprite;
    
     	public void init()
     	{
     		addMouseListener(this);        //注冊时间处理方法
     		addMouseMotionListener(this);
    
     		AppletWidth = getSize().width;
     		AppletHeight = getSize().height;
    
     		countX=3;         //X轴3个猪头texture
     		countY=3;         //Y轴3个猪头texture
     		score=0;          //记录分数
    
     		//使用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);
    
     		try
     		{
     			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;         //将线程设为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()方法
     	{
     		paint(g);
     	}
    
     	public void run()
     	{
     		while(newThread!=null)
     		{
     			repaint();        //重画图像
     			try
     			{
     				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));
    }
    }


  • 相关阅读:
    用jQuery File Upload做的上传控件demo,支持同页面多个上传按钮
    从炉石传说的一个自杀OTK说起
    DTCMS插件的制作实例电子资源管理(二)Admin后台页面编写
    DTCMS插件的制作实例电子资源管理(一)插件目录结构
    一个看似很简单的SQL却难倒了很多人
    一个js验证类
    elasticsearch节点间通信的基础transport
    elasticsearch cluster 详解
    elasticsearch cluster 概述
    Node组装启动过程
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7290043.html
Copyright © 2011-2022 走看看