1

こんにちは、switch ステートメントを使用してサイコロの右面を表示するサイコロを作成しました。これを配列に書き直すことを計画していましたが、これがどのように見えるかわかりません.. ( Javaとそれは学習目的のためのものです)誰かがそれがどのように見えるべきかの小さな例を見せてもらえますか?

switch ステートメントを含むクラスは次のとおりです。

package h05Dobbelsteen;

import java.awt.*;

import javax.swing.JPanel;

public class DobbelSteen extends JPanel {

private final static int SPOT_DIAMETER = 40; // diameter dobbelsteen rondjes
private int faceValue; // getoonde waarde op scherm

public DobbelSteen() {

}

/*
 * roll de dobbelsteen
 */
public int roll() {

    int val = (int) (6*Math.random() + 1); // bepaal getal tussen 1 - 6
    setValue(val);
    System.out.println(val);
    return val;

}

/*
 * set de waarde van de roll
 */
public void setValue(int spots) {
    faceValue = spots;
    repaint();
}

/*
 * get de waarde van de roll
 */
public int getValue() {
    return faceValue;
}

/*
 * teken de view van de dobbelsteen
 */
public void paintComponent(Graphics g) {

    int w = getWidth();  // Get height and width
    int h = getHeight();

    // Graphics naar 2d
    Graphics2D g2 = (Graphics2D)g;
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);

    //... Paint background
    g2.setColor(Color.WHITE);
    g2.fillRect(0, 0, w, h);
    g2.setColor(Color.BLACK);

    g2.drawRect(0, 0, w-1, h-1);  // Draw border

    switch (faceValue) {
        case 1:
            drawSpot(g2, w/2, h/2);
            break;
        case 3:
            drawSpot(g2, w/2, h/2);

        case 2:
            drawSpot(g2, w/4, h/4);
            drawSpot(g2, 3*w/4, 3*h/4);
            break;
        case 5:
            drawSpot(g2, w/2, h/2);
        case 4:
            drawSpot(g2, w/4, h/4);
            drawSpot(g2, 3*w/4, 3*h/4);
            drawSpot(g2, 3*w/4, h/4);
            drawSpot(g2, w/4, 3*h/4);
            break;
        case 6:
            drawSpot(g2, w/4, h/4);
            drawSpot(g2, 3*w/4, 3*h/4);
            drawSpot(g2, 3*w/4, h/4);
            drawSpot(g2, w/4, 3*h/4);
            drawSpot(g2, w/4, h/2);
            drawSpot(g2, 3*w/4, h/2);
            break;
    }
}

/*
 * Teken de spots
 */
private void drawSpot(Graphics2D g2, int x, int y) {
    g2.fillOval(x-SPOT_DIAMETER/2, y-SPOT_DIAMETER/2, SPOT_DIAMETER, SPOT_DIAMETER);
}

}
4

1 に答える 1

2

何かのようなもの:

private class Point {
  int x;
  int y;
  Point(int x, int y) {
    this.x = x;
    this.y = y;
}

Point[][] pointSpecs = new Point[][] { {new Point( .5, .5) }, 
                                       {new Point(.25, .25), new Point(.75, .75)},
                                  ...};

これは、配列の配列の宣言です。最初のインデックスはダイスの値-1 です (Java 配列のインデックスは 0 であるため)。各位置には、描画する必要がある Point の配列があります。幅と高さを掛ける必要がある乗数だけがあります。

使用するには:

public void paintComponent(Graphics g) {

int w = getWidth();  // Get height and width
int h = getHeight();

// Graphics naar 2d
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
        RenderingHints.VALUE_ANTIALIAS_ON);

//... Paint background
g2.setColor(Color.WHITE);
g2.fillRect(0, 0, w, h);
g2.setColor(Color.BLACK);

g2.drawRect(0, 0, w-1, h-1);  // Draw border

Point[] points = pointSpecs[faceValue-1];
for (Point point : points) {
  drawSpot(g2, w*point.x, h*point.y);
}

残りのポイント値を入力する必要があります...

于 2012-10-30T21:03:16.663 に答える