第一关效果图:
目录
判断是否为第一关
绘制第一关的场景
绘制地面(for循环)
绘制砖块
绘制水管
生成Obstatic列表的getter方法
绘制障碍物
判断是否为第一关
if(sort == 1){
}
在上面有定义变量sort
绘制第一关的场景
绘制地面(for循环)
//绘制第一关的地面,上地面type=1,下地面type=2for (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));}}
窗口大小为 800*600
地面方块的大小为30*30
所以上地面需循环27次才能达到效果
下地面,双层for循环,需要铺满y轴从450-600的画面
注:坐标以左上角为原点,横轴为x轴,纵轴为y轴
相比于上面的代码,我更喜欢下面的表达方式
for (int j = 0;j <= 4;j ++) {for (int i = 0;i < 27;i++) {obstacleList.add(new Obstacle(i*30,570-j*30,2,this));}}
绘制砖块
坐标如下:
A(120,300)(150,300)
B(300,300)(330,300)
C(360,300)(390,300)
D(420,300)(450,300)
E(480,300)(510,300)
F(540,300)(570,300)
G(420,240)(450,240)
//绘制砖块Afor (int i = 120;i <= 150;i += 30) {obstacleList.add(new Obstacle(i,300,7,this));}//绘制砖块B-Ffor (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));}}//绘制砖块Gfor (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));}}
生成Obstatic列表的getter方法
public List<Obstacle> getObstacleList() {return obstacleList;}
绘制障碍物
在myFrame中绘制障碍物
//绘制障碍物for (Obstacle ob : nowBg.getObstacleList()) {graphics.drawImage(ob.getShow(),ob.getX(),ob.getY(),this);}
注:本文仅作为学习笔记,参考的视频链接
09_超级玛丽--第一关的设计_尚学堂_哔哩哔哩_bilibili