# Hilfe bei Reversi/Othello



## rbrummel (28. Dez 2009)

Liebe Leute,
ich muss für die Uni Reversi/Othello programmieren. Leider bin ich blond und habe zusätzlich wenig Erfahrung was das Programmieren betrifft, deshalb brauche ich Hilfe.

Mein Problem ist es, dass ich mit der Methode mouseClicked die Position erhalten möchte, auf die geklickt wurde. Diese Position (also die ich erhalten habe aus getX und getY) brauche ich zur Bestimmung der jeweiligen Position im zweidimensionalen Array. 


```
public void mouseClicked(MouseEvent e) 
{		
  xPosition = ((e.getX()/ breiteFeld));
  yPosition = ((e.getY()/ breiteFeld));
```

Ich teile die Position die ich mit getX und getY durch die Breite des Feldes, damit ich Werte erhalte die ich verwenden kann für den Array. (Wenn ich zum Beispiel klicke auf Position x = 123, y = 123 und die breite des Feldes ist 50, dann erhalte ich als xPosition 2.46 und als yPosition ebenfalls 2.46. Zusätzlich habe ich xPosition und yPosition als int membervariabelen deklariert, deshalb werden diese Werte abgerundet nach 2. xPosition = 2, yPosition = 2. 

Jetzt möchte ich xPosition und yPosition verwenden für den Array. auf dieser Position soll gespeichert werden, welcher der beiden Spieler an der Reihe ist: Spieler 1 oder Spieler 2.

Und jetzt stosse ich bereits etwas an meine Grenzen. Ich möchte nämlich, dass beim ersten Klicken Spieler 1 an der Reihe is, also hat die variabele spieler den int Wert 1. Beim nächsten Klick soll Spieler 2 an der Reihe sein. spieler = 3-spieler. (das ergäbe ja dann 2).

Ich habe das mal so formuliert:


```
positionXY[xPosition][yPosition]= spieler;
spieler = 3-spieler;
```

Bis jetzt steht alles in der Methode mouseClicked. In der Methode paint möchte ich jetzt ins betreffende Feld vom Spielfeld den Kreis zeichen in der richtigen Farbe (rot für Spieler 1, blau für Spieler 2).

In paint habe ich das Spielfeld gezeichnet. Zusätzlich möchte ich eben auch noch die Kreise zeichnen. Wenn der gespeicherte Wert für spieler im Array 1 ist, dann soll der Kreis rot gezeichnet werden, wenn der Wert 2 ist, soll der Kreis blau sein.

Ich habe das so geschrieben, aber ich denke, dass sich hier der Fehler befindet:


```
int x, y;
for (x = 0; x <6 ; x = x++)
  for (y = 0; y<6; y++)
{
 if (spieler == 1)
 g.setColor(Color.RED);
 g.fillOval(xPositie - (breedteVlak/2), yPositie - (breedteVlak/2), breedteVlak, breedteVlak);
 if (spieler == 2)
 g.setColor(Color.BLUE);
 g.fillOval((xPosition*breiteFeld), (yPosition*breiteFeld), breiteFeld, breiteFeld);
}
```

Mein Problem is, dass ich das Gefühl habe, dass die xPosition nicht gespeichert wird, denn die xPosition ist ja kein Array und wird bei jedem Klick wieder gelöscht. Auch wird im Applet nichts gezeichnet, nur oben links ein schwarzer Kreis. 

Bitte, bitte bitte... kann mir jemand helfen. Wenn ihr mir erläutern könnt, wie ich es schaffe, dass mehrere Kreise in blau und rot gezeichnet werden. Dann kann ich mir danach wieder den Kopf darüber zerbrechen wie es weiter gehen soll... ;(


----------



## OliverKroll (28. Dez 2009)

Geht es so besser ?:

```
int x,y;
for(x=0;x<6;x++)
{
    for(y=0;y<6;y++)
    {
         if(PositionXY[x][y]==1)
         {
             g.setColor(Color.RED);
         }
         else
         {
             g.setColor(Color.BLUE);
         }
         g.fillOval(x*breiteFeld,y*breiteFeld,breiteFeld,breiteFeld);
    }
}
```
Sonst solltest du das komplette Programm mit angeben.


----------



## rbrummel (28. Dez 2009)

Naja, das hilft nicht wirklich... 

habe das ganz noch einmal neu gemacht... das Problem ist, dass die Farbe nicht ändert und dass der bereits gezeichnete Kreis nicht erhalten bleibt. Momentan wird jedes Mal wenn ich klicke ein neuer blauer Kreis gezeichnet...


```
import java.applet.Applet;
import java.awt.Button;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;


public class Practicum extends Applet implements ActionListener, MouseListener
{
Button neuesSpielButton, helpButton;
int feld, maxAnzahl, xPosition, yPosition, spieler;
int tabelle [][];


	public void init()
	{
		feld = 50;
		maxAnzahl = 35;
		
		tabelle = new int [5][5];
		
		neuesSpielButton = new Button ("Neues Spiel");
		this.add(neuesSpielButton);
		neuesSpielButton.addActionListener(this);
		
		helpButton = new Button ("Help");
		this.add(helpButton);
		helpButton.addActionListener(this);
		
		addMouseListener(this);
	}
	public void paint (Graphics g)
	{
		int xAchse, yAchse;
		
		for(xAchse = 0; xAchse <= 5*feld; xAchse = xAchse + feld)
		{
			for(yAchse=0; yAchse <= 5*feld; yAchse = yAchse + feld)
			{
				g.drawRect(xAchse+feld, yAchse+feld, feld, feld);
			}
		}
		
		int x, y;
		for(x = 0; x < 6; x++)
		{
		    for(y = 0; y < 6; y++)
		    {
		         if(tabelle[x][y]==1)
		         {
		             g.setColor(Color.RED);
		         }
		         else
		         {
		             g.setColor(Color.BLUE);
		         }
		         g.fillOval(xPosition*feld, yPosition*feld, feld, feld);
		    }
		}
		
	}
	public void actionPerformed(ActionEvent arg0) 
	{
	}
	public void mouseClicked(MouseEvent e) 
	{	
		xPosition = ((e.getX()/ feld));
		yPosition = ((e.getY()/ feld));
		
		tabelle [xPosition][yPosition] = spieler;
		spieler = 3-spieler;
		
		this.repaint();
	}
	public void mouseEntered(MouseEvent arg0) 
	{
	}
	public void mouseExited(MouseEvent arg0) 
	{
	}
	public void mousePressed(MouseEvent arg0) 
	{	
	}
	public void mouseReleased(MouseEvent arg0) 
	{	
	}
	
	private static final long serialVersionUID = 1;
}
```


----------



## OliverKroll (28. Dez 2009)

Ich habe ungefähr 6 Zeilen geändert: läuft.

```
import java.applet.Applet;
import java.awt.Button;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
 
 
public class Practicum extends Applet implements ActionListener, MouseListener
{
Button neuesSpielButton, helpButton;
int feld, maxAnzahl, xPosition, yPosition, spieler;
int tabelle [][];
 
 
    public void init()
    {
        feld = 50;
        maxAnzahl = 35;
        spieler=1;
        
        tabelle = new int [6][6];
        
        neuesSpielButton = new Button ("Neues Spiel");
        this.add(neuesSpielButton);
        neuesSpielButton.addActionListener(this);
        
        helpButton = new Button ("Help");
        this.add(helpButton);
        helpButton.addActionListener(this);
        
        addMouseListener(this);
    }
    public void paint (Graphics g)
    {
        int xAchse, yAchse;
        
        for(xAchse = 0; xAchse <= 5*feld; xAchse = xAchse + feld)
        {
            for(yAchse=0; yAchse <= 5*feld; yAchse = yAchse + feld)
            {
                g.drawRect(xAchse+feld, yAchse+feld, feld, feld);
            }
        }
        
        int x, y;
        for(x = 0; x < 6; x++)
        {
            for(y = 0; y < 6; y++)
            {
                 if(tabelle[x][y]==1)
                 {
                     g.setColor(Color.RED);
                 }
                 else
                 {
                     g.setColor(Color.BLUE);
                 }
             //  g.setColor(Color.GREEN);
                 if(tabelle[x][y]>0)
                 {
                	 g.fillOval((x+1)*feld,(y+1)*feld, feld, feld);
                 }
            }
        }
        
    }
    public void actionPerformed(ActionEvent arg0) 
    {
    }
    public void mouseClicked(MouseEvent e) 
    {   
        xPosition = ((e.getX()/ feld))-1;
        yPosition = ((e.getY()/ feld))-1;
        
        tabelle [xPosition][yPosition] = spieler;
        spieler = 3-spieler;
        
        this.repaint();
    }
    public void mouseEntered(MouseEvent arg0) 
    {
    }
    public void mouseExited(MouseEvent arg0) 
    {
    }
    public void mousePressed(MouseEvent arg0) 
    {   
    }
    public void mouseReleased(MouseEvent arg0) 
    {   
    }
    
    private static final long serialVersionUID = 1;
}
```


----------



## rbrummel (28. Dez 2009)

wow, danke 
bin begeistert!


----------



## rbrummel (29. Dez 2009)

Sorry, dass ich mich noch einmal melden, ich möchte gerne zählen wie viele rote und wie viele blaue Steine auf dem Spielbrett liegen.


```
public void mouseClicked(MouseEvent e) 
	{	
		xPosition = ((e.getX()/ feld))-1;
		yPosition = ((e.getY()/ feld))-1;
		
		tabelle [xPosition][yPosition] = spieler;
		spieler = 3-spieler;
		
		this.repaint();
	}
```


```
for(x = 0; x < 6; x++)
		{
		    for(y = 0; y < 6; y++)
		    {
		         if(tabelle[x][y] == 1)
		         {
		             g.setColor(Color.RED);
                                      anzahlRot++;
		         }
		         if (tabelle[x][y] == 2)
		         {
		             g.setColor(Color.BLUE);
                                      anzahlBlau++;
		         }
		         if(tabelle[x][y] > 0)
                 {
                     g.fillOval((x+1)*feld,(y+1)*feld, feld, feld);
                 }
		         

		    }
		}
		g.drawString(" " +anzahlRot, 20, 10);
		g.drawString(" " +anzahlBlau, 20, 30);
```

eigentlich wollte ich das so zählen. Doch die Zahlen die jetzt angezeigt werden entsprechen nicht der Menge Spielsteine auf dem Brett. Wenn ich nämlich den Bildschirm vergrössere, wird die Anzahl vorhandener Steine auch grösser... was ich natürlich nicht möchte!!!

wer weiss was ich falsch mache?


----------



## OliverKroll (29. Dez 2009)

Vermutlich hast du nur die Initialisierung der Variablen vergessen:

```
anzahlRot=0;
anzahlBlau=0;
        
for(x = 0; x < 6; x++)
{
    for(y = 0; y < 6; y++)
    {
        if(tabelle[x][y] == 1)
        {
            g.setColor(Color.RED);
            anzahlRot++;
        }
        if (tabelle[x][y] == 2)
        {
            g.setColor(Color.BLUE);
            anzahlBlau++;
        }
        if(tabelle[x][y] > 0)
        {
            g.fillOval((x+1)*feld,(y+1)*feld, feld, feld);
        }    
    }
}
g.drawString(" " +anzahlRot, 20, 10);
g.drawString(" " +anzahlBlau, 20, 30);
```


----------

