超级玛丽的元素填充

举报
周杰伦本人 发表于 2022/09/29 23:38:12 2022/09/29
【摘要】 超级玛丽的元素填充 敌人 游戏结束 分数 加载音乐 总结 超级玛丽的元素填充之前的文章对超级玛丽游戏的背景界面和人物玛丽奥这个人物类做了编写,今天我们看看超级玛丽的敌人、背景音乐、分数以及游戏如何结束等功能的实现首先我们知道,马里奥任务艰巨,它不仅要打砖块,还要打怪,我们看看怎么定义敌人类 敌人其实敌人和马里奥一样,都是人物类,本质都是控制一个图片的移动public class Enemy...

超级玛丽的元素填充

之前的文章对超级玛丽游戏的背景界面和人物玛丽奥这个人物类做了编写,今天我们看看超级玛丽的敌人、背景音乐、分数以及游戏如何结束等功能的实现

首先我们知道,马里奥任务艰巨,它不仅要打砖块,还要打怪,我们看看怎么定义敌人类

敌人

其实敌人和马里奥一样,都是人物类,本质都是控制一个图片的移动

public class Enemy {
    private int x;
    private int y;
    private int type;
    private boolean faceTo = true;
    private BufferedImage show;
}

x y 同样是相对位置,type表示敌人类,其中有食人花和小乌龟,BufferedImage是敌人的图片

那么怎么把敌人放入我们的画面中呢,首先定义个集合,创建敌人类,放入集合中

List<Enemy> enemyList = new ArrayList<>();
enemyList.add(new Enemy(400,322,true,1,this));

通过敌人类的构造方法,添加到集合中,然后同样是使用主类中的graphics对象加载出来

for (Enemy e : nowBg.getEnemyList()) {
            graphics.drawImage(e.getShow(),e.getX(),e.getY(),this);
        }

当然敌人也是可以移动的,移动和马里奥人物的移动逻辑是一样的,都是通过线程不断调用方法判断人物状态来做调节

我们看一下马里奥和敌人相遇的时候的逻辑,这时候我们需要遍历敌人集合,然后依次判断,当马里奥的高度比敌人高度高一点,并且x的值差不多相同的时候,就可以认定,马里奥踩在了敌人上边,这是判断敌人类型,如果是小乌龟,我们就认定把它踩死了,如果是食人花,自己死了

for (int i = 0;i < backGround.getEnemyList().size();i++) {
    Enemy e = backGround.getEnemyList().get(i);
    if (e.getY() == this.y + 30 && (e.getX() - 20 <= this.x && e.getX() + 30 >= this.x)) {
        if (e.getType() == 1) {
            e.death();
        }else if (e.getType() == 2) {
            death();
        }
    }

游戏结束

如果马里奥死了,显然游戏就结束了

if (mario.isDeath()) {
    JOptionPane.showMessageDialog(this,"游戏结束!");
    System.exit(0);
}

弹窗结束游戏

分数

对于分数的定义,实现也比较简单,使用graphics设置就可以了,分数的累加是在踩死敌人的时候改变值

Color c = graphics.getColor();
graphics.setColor(Color.RED);
graphics.setFont(new Font("楷体",Font.BOLD,20));
graphics.drawString("当前的分数为: " + mario.getScore(),200,200);
graphics.setColor(c);

加载音乐

定义了Music了,然后主类启动的时候创建这个对象就可以了

public class Music {
    public Music() throws FileNotFoundException, JavaLayerException {
        Player player;
        String str = System.getProperty("/src/Music/music.wav");
        BufferedInputStream name = new BufferedInputStream(new FileInputStream(str));
        player = new Player(name);
        player.play();
    }
}

读取音频文件,创建Player对象,然后播放就可以了,实现比较简单

总结

这篇文章说了敌人的创建、马里奥踩死敌人、分数的生成、音乐的加载等功能,通过对这个小游戏的开发,大多数是逻辑的实现,但是也有很多技术点,总体来说游戏开发可能会涉及到坐标、动作、运动轨迹等元素,这些东西和我们的数学知识也必不可分,我认为学好数学知识和具有空间想象能力有助于游戏的开发。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。