java小游戏超级玛丽:05.第一关的设计

  • Post author:
  • Post category:java




第一关效果图:



目录


判断是否为第一关


绘制第一关的场景


绘制地面(for循环)


绘制砖块


绘制水管


生成Obstatic列表的getter方法


绘制障碍物


判断是否为第一关

if(sort == 1){
}

在上面有定义变量sort

绘制第一关的场景

绘制地面(for循环)

//绘制第一关的地面,上地面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));
                }
            }

窗口大小为 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)

         //绘制砖块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));
                }
            }

生成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



版权声明:本文为qq_63389054原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。