Java来做马里奥 2 —食不厌精

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

                效果图如下:
Java来做马里奥 2 —食不厌精_第1张图片

孔丘仲尼先生曾经曰过“ 斋必变食,居必迁坐。食不厌精,脍不厌细”,被捧上天的圣人尚且如此,游戏中的角色更不例外,在ACT游戏中举凡加分、恢复体力、发动必杀技种种,都离不开“食物”的伟大功绩。

我们大家都知道,在典型的平面2D ACT游戏中,是使用层级的概念来描绘整个画面的,最底层的背景一般不参与游戏进程,而由再上一级的前景来承载角色及限制角色活动区域。所有置于前景之上的本质上都是活动精灵,只是扮演的角色不同,才会发生不同的作用与效果。

比如,在本例中我将Sprite抽象出来,而由Role及Food分别继承,他们的命运就变成了吃与被吃的关系……

代码如下:

Sprite.java
package  org.test.mario;

import  java.awt.Graphics;
import  java.awt.Image;
import  java.awt.Rectangle;

import  org.loon.framework.game.image.Bitmap;

/** */ /**
 * 


 * Title: LoonFramework
 * 


 * 


 * Description:精灵类(为了批量制造角色,将Role中通用设定抽象成此类)
 * 


 * 


 * Copyright: Copyright (c) 2008
 * 


 * 


 * Company: LoonFramework
 * 


 * 


 * License: http://www.apache.org/licenses/LICENSE-2.0
 * 


 * 
 * 
@author chenpeng
 * @email:[email protected]
 * 
@version 0.1
 
*/

public   abstract   class  Sprite  ... {
    
// 坐标
    protected double _x;

    
protected double _y;

    
// 宽
    protected int width;

    
// 高
    protected int height;

    
// 图像
    protected Image _image;

    
// 步数
    protected int _count;

    
// 地图
    protected Map _map;

    
/** *//**
     * 构造函数,以角色图位置,初始的x、y坐标,地图四项参数创建一个可用的角色
     *  
     * 
@param fileName
     * 
@param _x
     * 
@param _y
     * 
@param map
     
*/

    
public Sprite(String fileName,double _x, double _y, Map map) ...{
        
this._x = _x;
        
this._y = _y;
        
this._map = map;

        width 
= 32;
        height 
= 32;

        loadImage(fileName);

        _count 
= 0;

        AnimationThread thread 
= new AnimationThread();
        thread.start();
    }


    
public abstract void update();

    
public void draw(Graphics g, int offsetX, int offsetY) ...{
        g.drawImage(_image, (
int) _x + offsetX, (int) _y + offsetY, (int) _x
                
+ offsetX + width, (int) _y + offsetY + height, _count * width,
                
0, _count * width + width, height, null);
    }


    
public boolean isHit(Sprite sprite) ...{
        Rectangle playerRect 
= new Rectangle((int) _x, (int) _y, width, height);
        Rectangle spriteRect 
= new Rectangle((int) sprite.getX(), (int) sprite
                .getY(), sprite.getWidth(), sprite.getHeight());
        
// 判定两者边框是否相交
        if (playerRect.intersects(spriteRect)) ...{
            
return true;
        }


        
return false;
    }


    
public double getX() ...{
        
return _x;
    }


    
public double getY() ...{
        
return _y;
    }


    
public int getWidth() ...{
        
return width;
    }


    
public int getHeight() ...{
        
return height;
    }


    
private void loadImage(String filename) ...{
        _image 
= new Bitmap(filename).getImage();
    }


    
private class AnimationThread extends Thread ...{
        
public void run() ...{
            
while (true...{
                
// 换算步数
                if (_count == 0...{
                    _count 
= 1;
                }
 else if (_count == 1...{
                    _count 
= 0;
                }

                
// 动作更替延迟
                try ...{
                    Thread.sleep(
300);
                }
 catch (InterruptedException e) ...{
                    e.printStackTrace();
                }

            }

        }

    }


}


Food.java
package  org.test.mario;

/** */ /**
 * 


 * Title: LoonFramework
 * 


 * 


 * Description:兵粮丸
 * 


 * 


 * Copyright: Copyright (c) 2008
 * 


 * 


 * Company: LoonFramework
 * 


 * 


 * License: http://www.apache.org/licenses/LICENSE-2.0
 * 


 * 
 * 
@author chenpeng
 * @email:[email protected]
 * 
@version 0.1
 
*/

public   class  Food  extends  Sprite  ... {

    
public Food(String fileName, double x, double y, Map map) ...{
        
super(fileName, x, y, map);
    }


    
public void update() ...{
        
    }


}


Role.java
package  org.test.mario;

import  java.awt.Graphics;
import  java.awt.Point;


/** */ /**
 * 


 * Title: LoonFramework
 * 


 * 


 * Description:角色描述及绘制用类
 * 


 * 


 * Copyright: Copyright (c) 2008
 * 


 * 


 * Company: LoonFramework
 * 


 * 
 * 
@author chenpeng
 * @email:[email protected]
 * 
@version 0.1
 
*/

public   class  Role  extends  Sprite ... {



    
private double _vx;

    
private double _vy;

    
private boolean isFlat;

    
private int _dir;

    
final static public int WIDTH = 40;

    
final static public int HEIGHT = 40;

    
final static private int SPEED = 6;

    
final static private int JUMP_SPEED = 16;

    
final static private int RIGHT = 0;

    
final static private int LEFT = 1;

    
/** *//**
     * 构造函数,以角色图位置,初始的x、y坐标,地图四项参数创建一个可用的角色
     * 
     * 
@param filename
     * 
@param x
     * 
@param y
     * 
@param map
     
*/

    
public Role(String filename,double x, double y, Map map) ...{
        
super(filename,x, y, map);
        _vx 
= 0;
        _vy 
= 0;
        isFlat 
= false;
        _dir 
= RIGHT;
    }


    
public void stop() ...{
        _vx 
= 0;
    }


    
public void left() ...{
        _vx 
= -SPEED;
        _dir 
= LEFT;
    }


    
public void right() ...{
        _vx 
= SPEED;
        _dir 
= RIGHT;
    }


    
public void jump() ...{
        
if (isFlat) ...{
            _vy 
= -JUMP_SPEED;
            isFlat 
= false;
        }

    }


    
public void update() ...{
        
//0.6为允许跳跃的高度限制,反值效果
        _vy += 0.6;

        
double newX = _x + _vx;

        Point tile 
= _map.getTileHit(this, newX, _y);
        
if (tile == null...{
            _x 
= newX;
        }
 else ...{

你可能感兴趣的:(Java来做马里奥 2 —食不厌精)