项目简介:
我们团队利用面向对象开发方法和Java swing框架,对经典游戏《SuperMario》进行编写。
此项目共设施三个关卡,玩家可通过键盘来控制马里奥的移动,跳跃可以顶掉砖块,下落时还可以踩死蘑菇敌人,如果马里奥最终安全到达堡垒,则通关成功。
个人项目负责任务:
- 创建背景类(BackGround)和常量类(StaticValue)。调用read方法拼接图片路径,利用for循环绘制各关卡的地面、砖块和水管等(关卡的场景设计)。
- 将项目上传到远程git仓库。
- 使用issue推动项目进程:将项目开发过程中需要解决的重点和问题写上去,分门别类打上标签,清晰说明,方便解决。
项目git地址:
Gitee issues面板:
功能需求图:
功能构架图:
黄底为我负责部分
静态扫描:
使用阿里巴巴静态代码扫描工具,对项目进行扫描
依据扫描出的问题并改正
本人负责模块的具体分析:
1.常量类(StaticValue.java):将要用到的图片素材打包进一个src下的软件包里(images),定义各变量存储单张素材物体,如Mario向左站立/向右站立、城堡、旗杆;对于多素材创建list集合来储存。然后将这些变量初始化操作【将图片与变量匹配以达到后续调用目的【图片路径用到的绝对路径(建议更改为相对路径)。
部分核心代码:
//路径的前缀,方便后续调用 public static String path = System.getProperty("user.dir") + "/src/images/"; //初始化方法 public static void init() { try { //加载背景图片 bg = ImageIO.read(new File(path + "bg.png")); bg2 = ImageIO.read(new File(path + "bg2.png")); //加载马里奥向左站立 stand_L = ImageIO.read(new File(path + "s_mario_stand_L.png")); //加载马里奥向右站立 stand_R = ImageIO.read(new File(path + "s_mario_stand_R.png")); //加载城堡 tower = ImageIO.read(new File(path + "tower.png")); //加载旗杆 gan = ImageIO.read(new File(path + "gan.png")); //加载马里奥向左跳跃 jump_L = ImageIO.read(new File(path + "s_mario_jump1_L.png")); //加载马里奥向右跳跃 jump_R = ImageIO.read(new File(path + "s_mario_jump1_R.png")); } catch (IOException e) { e.printStackTrace(); } //加载马里奥向左跑 for (int i = 1;i <= 2;i++) { try { run_L.add(ImageIO.read(new File(path + "s_mario_run"+ i +"_L.png"))); } catch (IOException e) { e.printStackTrace(); } } //加载马里奥向右跑 for (int i = 1;i <= 2;i++) { try { run_R.add(ImageIO.read(new File(path + "s_mario_run"+ i +"_R.png"))); } catch (IOException e) { e.printStackTrace(); } } try { //加载障碍物 obstacle.add(ImageIO.read(new File(path + "brick.png"))); obstacle.add(ImageIO.read(new File(path + "soil_up.png"))); obstacle.add(ImageIO.read(new File(path + "soil_base.png"))); } catch (IOException e) { e.printStackTrace(); }
2.背景类(BackGround.java):在构造方法里,分别对三个关卡的背景【地面绘制、两种砖块放置(可积分与不可积分)、固定建筑物】进行绘制。
核心代码:
//判断是否是第一关 if (sort == 1) { //绘制第一关的地面,上地面type=1,下地面type=2 for (int i = 0;i < 27;i++) { obstacleList.add(new Obstacle(i*30,420,1,this)); } for (int j = 0;j <= 120;j += 30) { for (int i = 0;i < 27;i++) { obstacleList.add(new Obstacle(i*30,570-j,2,this)); } } //绘制砖块A for (int i = 120;i <= 150;i += 30) { obstacleList.add(new Obstacle(i,300,7,this)); } //绘制砖块B-F for (int i = 300;i <= 570;i += 30) { if (i == 360 || i == 390 || i == 480 || i == 510 || i == 540) { obstacleList.add(new Obstacle(i,300,7,this)); } else { obstacleList.add(new Obstacle(i,300,0,this)); } } //绘制砖块G for (int i = 420;i <= 450;i += 30) { obstacleList.add(new Obstacle(i,240,7,this)); } //绘制水管 for (int i = 360;i <= 600;i += 25) { if (i == 360) { obstacleList.add(new Obstacle(620,i,3,this)); obstacleList.add(new Obstacle(645,i,4,this)); }else { obstacleList.add(new Obstacle(620,i,5,this)); obstacleList.add(new Obstacle(645,i,6,this)); } } //绘制第一关的蘑菇敌人 enemyList.add(new Enemy(580,385,true,1,this)); //绘制第一关的食人花敌人 enemyList.add(new Enemy(635,420,true,2,328,428,this)); }
游戏运行展示:
第一关
第二关
第三关
标签:ImageIO,read,菜鸟,RookieSuperMario,超级玛丽,File,new,path,png From: https://www.cnblogs.com/Charlie929/p/17479106.html