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

                效果图如下:
Java来做马里奥 2 —食不厌精

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

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

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

代码如下:

Sprite.java
Java来做马里奥 2 —食不厌精package org.test.mario;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精
import java.awt.Graphics;
Java来做马里奥 2 —食不厌精
import java.awt.Image;
Java来做马里奥 2 —食不厌精
import java.awt.Rectangle;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精
import org.loon.framework.game.image.Bitmap;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精
/** *//**
Java来做马里奥 2 —食不厌精 * <p>
Java来做马里奥 2 —食不厌精 * Title: LoonFramework
Java来做马里奥 2 —食不厌精 * </p>
Java来做马里奥 2 —食不厌精 * <p>
Java来做马里奥 2 —食不厌精 * Description:精灵类(为了批量制造角色,将Role中通用设定抽象成此类)
Java来做马里奥 2 —食不厌精 * </p>
Java来做马里奥 2 —食不厌精 * <p>
Java来做马里奥 2 —食不厌精 * Copyright: Copyright (c) 2008
Java来做马里奥 2 —食不厌精 * </p>
Java来做马里奥 2 —食不厌精 * <p>
Java来做马里奥 2 —食不厌精 * Company: LoonFramework
Java来做马里奥 2 —食不厌精 * </p>
Java来做马里奥 2 —食不厌精 * <p>
Java来做马里奥 2 —食不厌精 * License: 
http://www.apache.org/licenses/LICENSE-2.0
Java来做马里奥 2 —食不厌精 * </p>
Java来做马里奥 2 —食不厌精 * 
Java来做马里奥 2 —食不厌精 * 
@author chenpeng
Java来做马里奥 2 —食不厌精 * @email:[email protected]
Java来做马里奥 2 —食不厌精 * 
@version 0.1
Java来做马里奥 2 —食不厌精 
*/

Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精
public abstract class Sprite ...{
Java来做马里奥 2 —食不厌精    
// 坐标
Java来做马里奥 2 —食不厌精
    protected double _x;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精    
protected double _y;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精    
// 宽
Java来做马里奥 2 —食不厌精
    protected int width;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精    
// 高
Java来做马里奥 2 —食不厌精
    protected int height;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精    
// 图像
Java来做马里奥 2 —食不厌精
    protected Image _image;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精    
// 步数
Java来做马里奥 2 —食不厌精
    protected int _count;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精    
// 地图
Java来做马里奥 2 —食不厌精
    protected Map _map;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精    
/** *//**
Java来做马里奥 2 —食不厌精     * 构造函数,以角色图位置,初始的x、y坐标,地图四项参数创建一个可用的角色
Java来做马里奥 2 —食不厌精     *  
Java来做马里奥 2 —食不厌精     * 
@param fileName
Java来做马里奥 2 —食不厌精     * 
@param _x
Java来做马里奥 2 —食不厌精     * 
@param _y
Java来做马里奥 2 —食不厌精     * 
@param map
Java来做马里奥 2 —食不厌精     
*/

Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精    
public Sprite(String fileName,double _x, double _y, Map map) ...{
Java来做马里奥 2 —食不厌精        
this._x = _x;
Java来做马里奥 2 —食不厌精        
this._y = _y;
Java来做马里奥 2 —食不厌精        
this._map = map;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精        width 
= 32;
Java来做马里奥 2 —食不厌精        height 
= 32;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精        loadImage(fileName);
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精        _count 
= 0;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精        AnimationThread thread 
= new AnimationThread();
Java来做马里奥 2 —食不厌精        thread.start();
Java来做马里奥 2 —食不厌精    }

Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精    
public abstract void update();
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精    
public void draw(Graphics g, int offsetX, int offsetY) ...{
Java来做马里奥 2 —食不厌精        g.drawImage(_image, (
int) _x + offsetX, (int) _y + offsetY, (int) _x
Java来做马里奥 2 —食不厌精                
+ offsetX + width, (int) _y + offsetY + height, _count * width,
Java来做马里奥 2 —食不厌精                
0, _count * width + width, height, null);
Java来做马里奥 2 —食不厌精    }

Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精    
public boolean isHit(Sprite sprite) ...{
Java来做马里奥 2 —食不厌精        Rectangle playerRect 
= new Rectangle((int) _x, (int) _y, width, height);
Java来做马里奥 2 —食不厌精        Rectangle spriteRect 
= new Rectangle((int) sprite.getX(), (int) sprite
Java来做马里奥 2 —食不厌精                .getY(), sprite.getWidth(), sprite.getHeight());
Java来做马里奥 2 —食不厌精        
// 判定两者边框是否相交
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精
        if (playerRect.intersects(spriteRect)) ...{
Java来做马里奥 2 —食不厌精            
return true;
Java来做马里奥 2 —食不厌精        }

Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精        
return false;
Java来做马里奥 2 —食不厌精    }

Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精    
public double getX() ...{
Java来做马里奥 2 —食不厌精        
return _x;
Java来做马里奥 2 —食不厌精    }

Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精    
public double getY() ...{
Java来做马里奥 2 —食不厌精        
return _y;
Java来做马里奥 2 —食不厌精    }

Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精    
public int getWidth() ...{
Java来做马里奥 2 —食不厌精        
return width;
Java来做马里奥 2 —食不厌精    }

Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精    
public int getHeight() ...{
Java来做马里奥 2 —食不厌精        
return height;
Java来做马里奥 2 —食不厌精    }

Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精    
private void loadImage(String filename) ...{
Java来做马里奥 2 —食不厌精        _image 
= new Bitmap(filename).getImage();
Java来做马里奥 2 —食不厌精    }

Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精    
private class AnimationThread extends Thread ...{
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精        
public void run() ...{
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精            
while (true...{
Java来做马里奥 2 —食不厌精                
// 换算步数
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精
                if (_count == 0...{
Java来做马里奥 2 —食不厌精                    _count 
= 1;
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精                }
 else if (_count == 1...{
Java来做马里奥 2 —食不厌精                    _count 
= 0;
Java来做马里奥 2 —食不厌精                }

Java来做马里奥 2 —食不厌精                
// 动作更替延迟
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精
                try ...{
Java来做马里奥 2 —食不厌精                    Thread.sleep(
300);
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精                }
 catch (InterruptedException e) ...{
Java来做马里奥 2 —食不厌精                    e.printStackTrace();
Java来做马里奥 2 —食不厌精                }

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

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

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

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

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

Food.java
Java来做马里奥 2 —食不厌精package org.test.mario;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精
/** *//**
Java来做马里奥 2 —食不厌精 * <p>
Java来做马里奥 2 —食不厌精 * Title: LoonFramework
Java来做马里奥 2 —食不厌精 * </p>
Java来做马里奥 2 —食不厌精 * <p>
Java来做马里奥 2 —食不厌精 * Description:兵粮丸
Java来做马里奥 2 —食不厌精 * </p>
Java来做马里奥 2 —食不厌精 * <p>
Java来做马里奥 2 —食不厌精 * Copyright: Copyright (c) 2008
Java来做马里奥 2 —食不厌精 * </p>
Java来做马里奥 2 —食不厌精 * <p>
Java来做马里奥 2 —食不厌精 * Company: LoonFramework
Java来做马里奥 2 —食不厌精 * </p>
Java来做马里奥 2 —食不厌精 * <p>
Java来做马里奥 2 —食不厌精 * License: 
http://www.apache.org/licenses/LICENSE-2.0
Java来做马里奥 2 —食不厌精 * </p>
Java来做马里奥 2 —食不厌精 * 
Java来做马里奥 2 —食不厌精 * 
@author chenpeng
Java来做马里奥 2 —食不厌精 * @email:[email protected]
Java来做马里奥 2 —食不厌精 * 
@version 0.1
Java来做马里奥 2 —食不厌精 
*/

Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精
public class Food extends Sprite ...{
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精    
public Food(String fileName, double x, double y, Map map) ...{
Java来做马里奥 2 —食不厌精        
super(fileName, x, y, map);
Java来做马里奥 2 —食不厌精    }

Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精    
public void update() ...{
Java来做马里奥 2 —食不厌精        
Java来做马里奥 2 —食不厌精    }

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

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

Role.java
Java来做马里奥 2 —食不厌精package org.test.mario;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精
import java.awt.Graphics;
Java来做马里奥 2 —食不厌精
import java.awt.Point;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精
/** *//**
Java来做马里奥 2 —食不厌精 * <p>
Java来做马里奥 2 —食不厌精 * Title: LoonFramework
Java来做马里奥 2 —食不厌精 * </p>
Java来做马里奥 2 —食不厌精 * <p>
Java来做马里奥 2 —食不厌精 * Description:角色描述及绘制用类
Java来做马里奥 2 —食不厌精 * </p>
Java来做马里奥 2 —食不厌精 * <p>
Java来做马里奥 2 —食不厌精 * Copyright: Copyright (c) 2008
Java来做马里奥 2 —食不厌精 * </p>
Java来做马里奥 2 —食不厌精 * <p>
Java来做马里奥 2 —食不厌精 * Company: LoonFramework
Java来做马里奥 2 —食不厌精 * </p>
Java来做马里奥 2 —食不厌精 * 
Java来做马里奥 2 —食不厌精 * 
@author chenpeng
Java来做马里奥 2 —食不厌精 * @email:[email protected]
Java来做马里奥 2 —食不厌精 * 
@version 0.1
Java来做马里奥 2 —食不厌精 
*/

Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精
public class Role extends Sprite...{
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精    
private double _vx;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精    
private double _vy;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精    
private boolean isFlat;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精    
private int _dir;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精    
final static public int WIDTH = 40;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精    
final static public int HEIGHT = 40;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精    
final static private int SPEED = 6;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精    
final static private int JUMP_SPEED = 16;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精    
final static private int RIGHT = 0;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精    
final static private int LEFT = 1;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精    
/** *//**
Java来做马里奥 2 —食不厌精     * 构造函数,以角色图位置,初始的x、y坐标,地图四项参数创建一个可用的角色
Java来做马里奥 2 —食不厌精     * 
Java来做马里奥 2 —食不厌精     * 
@param filename
Java来做马里奥 2 —食不厌精     * 
@param x
Java来做马里奥 2 —食不厌精     * 
@param y
Java来做马里奥 2 —食不厌精     * 
@param map
Java来做马里奥 2 —食不厌精     
*/

Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精    
public Role(String filename,double x, double y, Map map) ...{
Java来做马里奥 2 —食不厌精        
super(filename,x, y, map);
Java来做马里奥 2 —食不厌精        _vx 
= 0;
Java来做马里奥 2 —食不厌精        _vy 
= 0;
Java来做马里奥 2 —食不厌精        isFlat 
= false;
Java来做马里奥 2 —食不厌精        _dir 
= RIGHT;
Java来做马里奥 2 —食不厌精    }

Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精    
public void stop() ...{
Java来做马里奥 2 —食不厌精        _vx 
= 0;
Java来做马里奥 2 —食不厌精    }

Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精    
public void left() ...{
Java来做马里奥 2 —食不厌精        _vx 
= -SPEED;
Java来做马里奥 2 —食不厌精        _dir 
= LEFT;
Java来做马里奥 2 —食不厌精    }

Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精    
public void right() ...{
Java来做马里奥 2 —食不厌精        _vx 
= SPEED;
Java来做马里奥 2 —食不厌精        _dir 
= RIGHT;
Java来做马里奥 2 —食不厌精    }

Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精    
public void jump() ...{
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精        
if (isFlat) ...{
Java来做马里奥 2 —食不厌精            _vy 
= -JUMP_SPEED;
Java来做马里奥 2 —食不厌精            isFlat 
= false;
Java来做马里奥 2 —食不厌精        }

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

Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精    
public void update() ...{
Java来做马里奥 2 —食不厌精        
//0.6为允许跳跃的高度限制,反值效果
Java来做马里奥 2 —食不厌精
        _vy += 0.6;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精        
double newX = _x + _vx;
Java来做马里奥 2 —食不厌精
Java来做马里奥 2 —食不厌精        Point tile 
= _map.getTileHit(this, newX, _y);
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精        
if (tile == null...{
Java来做马里奥 2 —食不厌精            _x 
= newX;
Java来做马里奥 2 —食不厌精Java来做马里奥 2 —食不厌精        }
 else ...{
Java来做马里奥 2 —食不厌精

相关文章:

  • 2021-10-15
  • 2021-11-22
  • 2021-07-06
  • 2022-01-01
  • 2021-07-02
  • 2021-12-07
  • 2021-04-12
  • 2021-05-17
猜你喜欢
  • 2021-05-25
  • 2021-05-12
  • 2021-08-17
  • 2021-10-18
  • 2021-07-12
  • 2021-05-04
  • 2021-04-25
相关资源
相似解决方案