CS106A 学习笔记(9):Assignment #2-1

cs106a-assignment-2-1

主要思路:

  • 从下往上,最底层(第0行),有14块砖;第1行,有13块砖;第2行,有12块砖…
  • 以此类推,每一行的砖块数量等于底层数(14)减去行数
  • 获取砖块放置的坐标:
    • 横坐标:窗口宽度/2 – 每行砖块总宽度/2 + 相应砖块的数量的宽度
    • 纵坐标:窗口高度 – 相应行数砖块的高度

参考代码:

/*
 * File:    Pyramid.java
 * -------------------------
 * Draws a pyramid consisting of bricks arranged in horizontal rows.
 */

import acm.program.*;
import acm.graphics.*;

public class Pyramid extends GraphicsProgram {

    private static final int BRICK_WIDTH = 30; // brick 宽度:30px
    private static final int BRICK_HEIGHT = 12; // brick 高度:12px
    private static final int BRICK_IN_BASE =14; // 底层 brick 数量:14

    public void run() {

        /*
         * 从下往上,第0行,14个 bricks;第1行,13个 bricks;第2行,12个 bricks;
         * 所以,每一行的 bricks 数量为 BRICK_IN_BASE - 行数;
         * 总共 14 行;
         */

        // 主循环,定义行数
        for (int row = 0; row < BRICK_IN_BASE; row++) {
            int bricksInRow = BRICK_IN_BASE - row; // 每一行brick的数量等于底层数量减去行数

            // 定位每行中bricks的位置
            for (int brickNum = 0; brickNum < bricksInRow; brickNum++) {

                // brick 横坐标
                int x = getWidth() / 2 - ( BRICK_WIDTH * bricksInRow ) /2 + brickNum * BRICK_WIDTH;
                // brick 纵坐标
                int y = getHeight() - BRICK_HEIGHT * ( row + 1 );
                // 添加bricks
                GRect brick = new GRect ( x, y, BRICK_WIDTH, BRICK_HEIGHT );
                add(brick);
            }
        }
    }

}

EOF

文章标签:

发表评论

KH34