4 gewinnt

_schneggal_06

Newbie
Registriert
Feb. 2010
Beiträge
4
Hy!
Hab jetzt ein Spielbrett gezeichnet, aus 64 leeren Grafiken.
Eine Anforderung ist aber auch, dass das Spielbrett skalierbar sein muss....
ich hab das ganze in nem Array gemacht:
board = new PlayerPanel[8][8];

for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
g.drawImage(play, posX, posY, (int) this.getSize().getWidth(), (int) this.getSize().getHeight(), null);
posX=posX+50;
}
posX=0;
posY=posY+50;
}

Das Problem ist aber, dass jede einzelne Grafik (siehe unten) skaliert wird und nicht alle zusammen...
habt ihr eine Idee?
 

Anhänge

  • empthy.jpg
    empthy.jpg
    12,9 KB · Aufrufe: 251
Zuletzt bearbeitet:
das ist logisch, da der Abstand zwischen den Kreisen konstant bleibt, nähmlich 50 Pixel. Wenn die Kreise selbst z.b. einen Radius von 50 , verschmelzen die Kreise einfach. Also msusst du auch den Abstand skalieren.

Zum Beispiel so:

posX = j*this.getWidth()/9.0;

gleiches gilt natürlich für die y-Richtung.
 
Zuletzt bearbeitet:
hm, ich hab einmal ein schachbrett in java programmiert in dem ich einfach 64 JPanels in einem GridLayout angeordnet hab. Lies sich perfekt skalieren ohne irgendetwas selbst zu programmieren. du könntest ja auch ein JPanel nehmen, desssen paintComponent() methode überschreiben und dort die grafik zeichnen. dann skaliert sich alles von selbst, sofern die die breite und höhe beim zeichnen der grafik auf das jpanel richtig setzt.
 
So Änderung!*g

habe die Grafiken jetzt auch selbst gezeichnet mit:
Code:
Graphics2D g2 = (Graphics2D) g;
        g2.setColor(Color.BLUE);
        myRectangle.setFrame(10, 10, 50, 50);
        g2.fill(myRectangle);
        
        g2.setColor(Color.WHITE);
        myCircle.setFrame(15, 15, 40, 40);
        g2.fill(myCircle);

=> Viereck mit weißen Kreis! Denk mir dieser ist dann leichter zum füllen!

wie mach ich das jetzt in einem Array mit der Position?
Ergänzung ()

habs schon geschafft!
Ergänzung ()

So nächste Frage*g

wie kann ich dann einen Kreis davon einfärben?
weil so klappts nicht:

Code:
@Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        this.setBackground(Color.BLUE);
        int posX = 0, posY = 0;
        int circleWidth = ((int) this.getSize().getWidth()) / 8;
        int circleHeight = (int) this.getSize().getHeight() / 8;
        int i = 0;
        int j = 0;

        Graphics2D g2 = (Graphics2D) g;

        int[][] board = new int[i][j];
        Color[][] farben = new Color[8][8];

        for (i = 0; i < 8; i++) {
            for (j = 0; j < 8; j++) {
                g2.setColor(Color.WHITE);
                myCircle.setFrame(posX + 5, posY + 5, circleWidth - 5, circleHeight - 5);
                g2.fill(myCircle);
                
                posX += circleWidth;
            }
            posX = 0;
            posY += circleHeight;
        }
        farben[5][5] = Color.YELLOW;
    }
 
wozu legst du denn die Arrays board und farben an?

Ich würde es so machen: du hast nur ein Array, welches ein Attribut der Spielklasse ist. Dise ist beispielsweise vom Typ int:

int board[8][8];

jetzt könnte man es soch machen, dass eine 0 bedeutet: Feld ist frei, eine 1 Feld ist von Rot belegt und eine 2 Feld ist von Gelb belegt. Die Zeichenmethode sähe dann so aus:


Code:
@Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        this.setBackground(Color.BLUE);
        int posX = 0, posY = 0;
        int circleWidth = ((int) this.getSize().getWidth()) / 8;
        int circleHeight = (int) this.getSize().getHeight() / 8;
        int i = 0;
        int j = 0;

        Graphics2D g2 = (Graphics2D) g;

        for (i = 0; i < board.length(); i++) {
            for (j = 0; j <  board[i].length(); j++) {

                if(board[i][j]==1)
                {
                        g2.setColor(Color.RED);
                }
                else if(board[i][j]==2)
                {
                        g2.setColor(Color.YELLOW);
                }
                else
                {
                        g2.setColor(Color.WHITE);
                }
                g2.fill(new Ellipse(posX+5,posY+5,circleWidth-5, circleHeight-5));
                
                posX += circleWidth;
            }
            posX = 0;
            posY += circleHeight;
        }
    }
 
Zurück
Oben