使用Java编写一个走迷宫小游戏

使用Java编写一个走迷宫小游戏

一、游戏流程

1、开始界面

开始界面
简陋的界面,背景是从《东方玉灵姬》中拾的【:)】

2、选择角色界面

选择角色界面
点击窗口中左右两侧的按钮,按照文件存储顺序向上向下查找素材
在这里插入图片描述

3、加载页面

在这里插入图片描述
在这里插入图片描述
左下角的小人是会动的(为了证明这点就多贴了一张图片【:)】)

4、游戏界面

在这里插入图片描述
在这里插入图片描述
通过键盘方向控制角色行走方向,找到前往终点的正确路线
在这里插入图片描述

到达终点时触发胜利条件,弹出胜利窗口
在这里插入图片描述
如果不慎落入陷阱
在这里插入图片描述
触发失败条件,弹出失败窗口
在这里插入图片描述
以上就是游戏的全部流程

二、人员分工

人员负责部分
许文强地图编辑器、人物行走动画、镜头移动、场景素材动态生成、地图读取
黄彦焜地图编辑器的文件读入初始化接口、文件路径获取、文件读取、使用地图编辑器绘制地图
郭华凯分割子图、拼贴子图、播放子图动画、补帧
陈杭宇开始页面及角色选择界面的UI设计、失败触发类、胜利触发类、音乐

三、部分功能实现说明

  • 角色行走动画功能的实现
    代码:
public static void draw(Graphics g){
        //如果角色不在移动中
        if(!up&&!down&&!left&&!right){
            if(towards==1){//如果角色移动的最后朝向为上
                g.drawImage(walk2.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 0, 64*3, 64, 64*4, null);
            }else if(towards==2){//最后移动朝向下
                g.drawImage(walk2.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 0, 0, 64, 64, null);
            }else if(towards==3){//最后移动朝向左
                g.drawImage(walk2.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 0, 64, 64, 64*2, null);
            }else if(towards==4){//最后移动朝向右
                g.drawImage(walk2.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 0, 64*2, 64, 64*3, null);
            }
        }else{//如果角色在移动中
            if(up){
                //通过up1的值,来决定画哪一张图片
                if(up1<5){
                    g.drawImage(walk1.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 0, 64*3, 64, 64*4, null);
                }else if(up1<10){
                    g.drawImage(walk1.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 64, 64*3, 64*2, 64*4, null);
                }else if(up1<15){
                    g.drawImage(walk1.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 64*2, 64*3, 64*3, 64*4, null);
                }else{
                    g.drawImage(walk1.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 64*3, 64*3, 64*4, 64*4, null);
                }
            }else if(down){
                if(down1<5){
                    g.drawImage(walk1.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 0, 0, 64, 64, null);
                }else if(down1<10){
                    g.drawImage(walk1.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 64, 0, 64*2, 64, null);
                }else if(down1<15){
                    g.drawImage(walk1.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 64*2, 0, 64*3, 64, null);
                }else{
                    g.drawImage(walk1.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 64*3, 0, 64*4, 64, null);
                }
            }else if(left){
                if(left1<5){
                    g.drawImage(walk1.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 0, 64, 64, 64*2, null);
                }else if(left1<10){
                    g.drawImage(walk1.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 64, 64, 64*2, 64*2, null);
                }else if(left1<15){
                    g.drawImage(walk1.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 64*2, 64, 64*3, 64*2, null);
                }else{
                    g.drawImage(walk1.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 64*3, 64, 64*4, 64*2, null);
                }

            }else if(right){
                if(right1<5){
                    g.drawImage(walk1.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 0, 64*2, 64, 64*3, null);
                }else if(right1<10){
                    g.drawImage(walk1.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 64, 64*2, 64*2, 64*3, null);
                }else if(right1<15){
                    g.drawImage(walk1.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 64*2, 64*2, 64*3, 64*3, null);
                }else{
                    g.drawImage(walk1.getImage(), Player.px-eleSize/2-15, Player.py-eleSize/2-25, Player.px-eleSize/2+65, Player.py-eleSize/2+55, 64*3, 64*2, 64*4, 64*3, null);
                }
            }
        }
    }

角色行走动画实现使用的素材:
在这里插入图片描述
使用drawImage方法来绘制图片,该方法允许只绘制图片的一部分(通过坐标选取)

g.drawImage(img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer);
/*img - 要绘制的指定图像。
 *dx1 - 目标矩形第一个角的 x 坐标。
 *dy1 - 目标矩形第一个角的 y 坐标。
 *dx2 - 目标矩形第二个角的 x 坐标。
 *dy2 - 目标矩形第二个角的 y 坐标。
 *sx1 - 源矩形第一个角的 x 坐标。
 *sy1 - 源矩形第一个角的 y 坐标。
 *sx2 - 源矩形第二个角的 x 坐标。
 *sy2 - 源矩形第二个角的 y 坐标。
 *observer - 当缩放并转换了更多图像时要通知的对象。
 */

示意图:
在这里插入图片描述
在这里插入图片描述
素材来源:以上人物、背景素材来源于《东方玉灵姬》,场景图片素材来源于RPG Maker MV。

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值