# Problem beim Programmieren von 4Gewinnt



## Blank (15. Feb 2009)

Ich habe einige Probleme beim Programmieren des Spieles 4Gewinnt. Dass Spiel muss mit einer Grafischen Oberfläche erstellt werden und die Steine müssen per mouseevent eingefügt werden.

Außerdem muss dass Programm erkennen, wenn vier steine Waagerecht Senkrecht oder schräg gelegt worden sind und wenn dass der Fall ist, soll eine Nachricht erscheinen, dass derjenige dass Spiel gewonnen hat.

Ich habe schon ein Code vorbereitet, aber irgendwie will er die Steine einfach nicht zeichnen. KAnn mir jemand helfen? 

Hier ist der Quellcode:



```
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

public class connect4 extends Applet implements MouseListener {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	int feld[][] = { { 0, 1, 2, 3, 4, 5, 6 }, 
					 { 0, 0, 0, 0, 1, 0, 0 },
					 { 2, 4, 0, 0, 1, 0, 0 }, 
					 { 0, 0, 0, 0, 1, 0, 0 },
					 { 0, 0, 0, 0, 0, 0, 0 },
					 { 1, 1, 2, 0, 0, 0, 1 } 
				    };

	public void zeichneSpielfeld(Graphics g) {

		g.drawString("Vier Gewinnt", 260, 18);
		
		setSize(600,600);
		
		// g.drawRect(x, y, width, height)

		g.drawRect(85, 85, 420, 420);

		g.drawLine(85, 155, 505, 155);
		g.drawLine(85, 225, 505, 225);
		g.drawLine(85, 295, 505, 295);
		g.drawLine(85, 365, 505, 365);
		g.drawLine(85, 435, 505, 435);
		g.drawLine(85, 505, 505, 505);

		g.drawLine(145, 85, 145, 505);
		g.drawLine(205, 85, 205, 505);
		g.drawLine(265, 85, 265, 505);
		g.drawLine(325, 85, 325, 505);
		g.drawLine(385, 85, 385, 505);
		g.drawLine(445, 85, 445, 505);
	}

	public void paint(Graphics g) {
		Image rot = Toolkit.getDefaultToolkit().getImage("sonne.jpg");
		Image blau = Toolkit.getDefaultToolkit().getImage("mond.jpg");

		for (int x = 0; x < 7; x++) {
			for (int y = 0; y < 6; y++) {
				if (feld[y][x] == 1)
					g.drawImage(rot, 50 * x, 50 * y, this);
				if (feld[y][x] == 2)
					g.drawImage(blau, 50 * x, 50 * y, this);
			}
		}
		zeichneSpielfeld(g);
	}

	public void init() {
		addMouseListener(this);
	}

	public void mouseClicked(MouseEvent arg0) {
		// TODO Auto-generated method stub

	}

	public void mousePressed(MouseEvent arg0) {
		// TODO Auto-generated method stub

		int x = arg0.getX();

		if (x < 50)
			feld[0][0] = 1;
		if (x > 50 && x < 100)
			feld[0][1] = 1;
		if (x > 100 && x < 150)
			feld[0][2] = 1;
		repaint();
	}

	public void mouseReleased(MouseEvent arg0) {
		// TODO Auto-generated method stub

	}

	public void mouseEntered(MouseEvent arg0) {
		// TODO Auto-generated method stub

	}

	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub

	}

}
```


----------



## André Uhres (15. Feb 2009)

Versuch's mal so:

```
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.reflect.InvocationTargetException;
import java.net.*;
public class connect4 extends Applet implements MouseListener {
private static final long serialVersionUID = 1L;
private int feld[][] = {{0, 1, 2, 3, 4, 5, 6},
{0, 0, 0, 0, 1, 0, 0},
{2, 4, 0, 0, 1, 0, 0},
{0, 0, 0, 0, 1, 0, 0},
{0, 0, 0, 0, 0, 0, 0},
{1, 1, 2, 0, 0, 0, 1}
};
private Image rot;
private Image blau;
public void zeichneSpielfeld(Graphics g, int x, int y) {
g.drawString("Vier Gewinnt", 260, 18);
setSize(600, 600);
g.drawRect(x, y, 420, 420);
g.drawLine(x, y + 70, x + 420, y + 70);
g.drawLine(x, y + 140, x + 420, y + 140);
g.drawLine(x, y + 210, x + 420, y + 210);
g.drawLine(x, y + 280, x + 420, y + 280);
g.drawLine(x, y + 350, x + 420, y + 350);
g.drawLine(x, y + 420, x + 420, y + 420);
g.drawLine(x + 60, y, x + 60, y + 420);
g.drawLine(x + 120, y, x + 120, y + 420);
g.drawLine(x + 180, y, x + 180, y + 420);
g.drawLine(x + 240, y, x + 240, y + 420);
g.drawLine(x + 300, y, x + 300, y + 420);
g.drawLine(x + 360, y, x + 360, y + 420);
}
@Override
public void paint(Graphics g) {
int xA = 85;
int yA = 85;
zeichneSpielfeld(g, xA, yA);
for (int x = 0; x < 6; x++) {
for (int y = 0; y < 5; y++) {
int x1 = xA + 60 * x + 1;
int y1 = yA + 70 * y + 1;
int x2 = x1 + 60 - 1;
int y2 = y1 + 70 - 1;
if (feld[x][y] == 1) {
g.drawImage(rot, x1, y1, x2, y2,
0, 0, rot.getWidth(this), rot.getWidth(this), this);
}
if (feld[x][y] == 2) {
g.drawImage(blau, x1, y1, x2, y2,
0, 0, blau.getWidth(this), blau.getWidth(this), this);
}
}
}
}
@Override
public void init() {
Runnable init = new Runnable() {
public void run() {
try {
rot = getImage(new URL("file:/sonne.jpg"));
blau = getImage(new URL("file:/mond.jpg"));
} catch (MalformedURLException ex) {
ex.printStackTrace();
}
connect4.this.addMouseListener(connect4.this);
}
};
try {
EventQueue.invokeAndWait(init);
} catch (InterruptedException ex) {
ex.printStackTrace();
} catch (InvocationTargetException ex) {
ex.printStackTrace();
}
}
public void mouseClicked(MouseEvent arg0) {
}

public void mousePressed(MouseEvent arg0) {
int x = arg0.getX();
System.out.println("x = " + x);
if (x < 50) {
feld[0][0] = 1;
}
if (x > 50 && x < 100) {
feld[0][1] = 1;
}
if (x > 100 && x < 150) {
feld[0][2] = 1;
}
repaint();
}
public void mouseReleased(MouseEvent arg0) {
}
public void mouseEntered(MouseEvent arg0) {
}
public void mouseExited(MouseEvent arg0) {
}
}
```
Allerdings sollte man Klassennamen mit grossem Anfangsbuchstaben schreiben:
connect4 -> Connect4


----------



## Blank (15. Feb 2009)

Vielen Dank für die schnelle Hilfe Andre   

er erkennt zwar die Positionen für x, wenn ich aufs Spielfeld klicke, aber die jpg Bilder erscheinen überhaupt nicht auf dem Spielfeld. Hast du eine Idee woran dass liegen könnte? Ich bin irgendwie Ratlos, eigentlich müsste es doch jetzt funzen. Die Bilder habe ich ins richtige Verzeichnis kopiert, und dass Connect4 in großschrift ausgeschrieben.


----------



## André Uhres (15. Feb 2009)

Blank hat gesagt.:
			
		

> Die Bilder habe ich ins richtige Verzeichnis kopiert


Anscheinend doch nicht. Kopier sie mal in sämtliche Verzeichnisse, die irgendwie in Frage kommen könnten :wink:


----------



## Blank (15. Feb 2009)

Also ich habe sonne.jpg und mond.jpg jetzt einmal im ordner connect4 gespeichert und dann nochmal in scr und in bin gespeichert. Habe die bilder auch nochmal im überordner workspace gespeichert aber die bilder erscheinen immer noch nicht.


Also bei dir funktioniert der gleiche Code, den du hier gepostet hast?


----------



## André Uhres (15. Feb 2009)

Blank hat gesagt.:
			
		

> Also bei dir funktioniert der gleiche Code, den du hier gepostet hast?


Nein, üüberhaupt nicht, wie kommst du nur darauf? :lol:


----------

