博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java来做马里奥 2 —食不厌精
阅读量:2201 次
发布时间:2019-05-03

本文共 4321 字,大约阅读时间需要 14 分钟。

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

                效果图如下:
孔丘仲尼先生曾经曰过“
斋必变食,居必迁坐。食不厌精,脍不厌细”,被捧上天的圣人尚且如此,游戏中的角色更不例外,在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;
/** */
/**
 * <p>
 * Title: LoonFramework
 * </p>
 * <p>
 * Description:精灵类(为了批量制造角色,将Role中通用设定抽象成此类)
 * </p>
 * <p>
 * Copyright: Copyright (c) 2008
 * </p>
 * <p>
 * Company: LoonFramework
 * </p>
 * <p>
 * License: http://www.apache.org/licenses/LICENSE-2.0
 * </p>
 * 
 * @author chenpeng
 * @email:ceponline@yahoo.com.cn
 * @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;
/** */
/**
 * <p>
 * Title: LoonFramework
 * </p>
 * <p>
 * Description:兵粮丸
 * </p>
 * <p>
 * Copyright: Copyright (c) 2008
 * </p>
 * <p>
 * Company: LoonFramework
 * </p>
 * <p>
 * License: http://www.apache.org/licenses/LICENSE-2.0
 * </p>
 * 
 * @author chenpeng
 * @email:ceponline@yahoo.com.cn
 * @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;
/** */
/**
 * <p>
 * Title: LoonFramework
 * </p>
 * <p>
 * Description:角色描述及绘制用类
 * </p>
 * <p>
 * Copyright: Copyright (c) 2008
 * </p>
 * <p>
 * Company: LoonFramework
 * </p>
 * 
 * @author chenpeng
 * @email:ceponline@yahoo.com.cn
 * @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 ...{
你可能感兴趣的文章
Eclipse使用(十)—— 使用Eclipse创建简单的Maven Java项目
查看>>
Eclipse使用(十一)—— 使用Eclipse创建简单的Maven JavaWeb项目
查看>>
Intellij IDEA使用(十三)—— 在Intellij IDEA中配置Maven
查看>>
面试题 —— 关于main方法的十个面试题
查看>>
集成测试(一)—— 使用PHP页面请求Spring项目的Java接口数据
查看>>
使用Maven构建的简单的单模块SSM项目
查看>>
Intellij IDEA使用(十四)—— 在IDEA中创建包(package)的问题
查看>>
FastDFS集群架构配置搭建(转载)
查看>>
HTM+CSS实现立方体图片旋转展示效果
查看>>
FFmpeg 命令操作音视频
查看>>
问题:Opencv(3.1.0/3.4)找不到 /opencv2/gpu/gpu.hpp 问题
查看>>
目的:使用CUDA环境变量CUDA_VISIBLE_DEVICES来限定CUDA程序所能使用的GPU设备
查看>>
问题:Mysql中字段类型为text的值, java使用selectByExample查询为null
查看>>
程序员--学习之路--技巧
查看>>
解决问题之 MySQL慢查询日志设置
查看>>
contOS6 部署 lnmp、FTP、composer、ThinkPHP5、docker详细步骤
查看>>
TP5.1模板布局中遇到的坑,配置完不生效解决办法
查看>>
PHPstudy中遇到的坑No input file specified,以及传到linux环境下遇到的坑,模板文件不存在
查看>>
TP5.1事务操作和TP5事务回滚操作多表
查看>>
composer install或composer update 或 composer require phpoffice/phpexcel 失败解决办法
查看>>