# Go Bang



## LittleWulf (4. Apr 2005)

Hallo Leutz,

also hab da ein Problem mit einem Spiel ich wollte Go bang ne art viergewinnt nur mit 5 steinen machen.
hab ich auch so weit gemacht nur funzt es net kann sich des jemand anschauen? 
steh voll auf dem schlauch! ich habs in mehrere classen aufgeteilt (haben wir so gelernt) vlt. blick jemand durch!


```
package go_bang;


public class Spiel extends UI {
	Spieler spieler1;
	Spieler spieler2;
	Spielbrett spielbrett;
	UI ui;
	
	public Spiel(){
	spieler1=new Spieler();
	spieler2=new Spieler();
	spielbrett=new Spielbrett();
	ui=new UI();
	
	
	}
	public void spielablauf(){
		int zuege=0;
		int Zeile;
		int Spalte;
		boolean zug;
		while(zuege<=64){
			
			Zeile=ui.getAktZeile();
			Spalte=ui.getAktSpalte();
			System.out.println("Einlesen");
			zug=spieler1.Spielzug(spielbrett.brett, Zeile, Spalte);
			if(zug=true){
				spielbrett.steinSetzen(spielbrett.brett, Zeile, Spalte, 1);
				ui.male(Zeile, Spalte, 1);
				zuege=zuege+1;
				if(spieler1.gewinner=true){
					UI.ausgabeGewinn(1);
				}
			}
			Zeile=ui.getAktZeile();
			Spalte=ui.getAktSpalte();
			zug=spieler2.Spielzug(spielbrett.brett, Zeile, Spalte);
			if(zug=true){
				spielbrett.steinSetzen(spielbrett.brett, Zeile, Spalte, 2);
				ui.male(Zeile, Spalte, 2);
				zuege=zuege+1;
				if(spieler2.gewinner=true){
					UI.ausgabeGewinn(2);
				}
			}
			}
		}

	public static void main(String[] args) {
		Spiel neu= new Spiel();
		neu.spielablauf();
		neu.ui.setSize(1005,575);
		neu.ui.setLocation(1,100);
		neu.ui.setTitle("Go Bang");
		neu.ui.show();
		
	}
}

package go_bang;


public class Spieler {
	int [][] brett=new int [9][9];
	int z =1;
	public boolean gewinner;
	Spielbrett sb;
	int spieler;
	
	public boolean Spielzug(int brett[][]/*Übergabe des Arays **/, int x, int y /*Übergabe der Steinposition**/)
	/*(c)2005 by tobse **/
	{
		if (brett[x][y]>0)/*Abfrage ob Feld schon bestetzt ist**/
		{
			return(false);/*Wenn Feld besetz, dann übergebe "false"**/
		}
		else/*Wenn Feld frei, dann..()**/
		{
			if ( /*Abfragen ob in den 8 Feldern herum ein Stein liegt**/
			(0< brett[x-1][y-1])||
			(0< brett[x][y-1])||
			(0< brett[x+1][y-1])||
			(0< brett[x-1][y])||
			(0< brett[x+1][y])||
			(0< brett[x-1][y+1])||
			(0< brett[x][y+1])||
			(0< brett[x+1][y+1]))
			{
				return(true);				/*Wenn im Umkreis ein Stein liegt übergebe "true"**/
			
			sb.steinSetzen(brett,x,y,spieler);
			}
			else/*Wenn nicht...**/
			{
				return(false);/*übergebe "false"**/
			}
		}
	}
	public boolean gewinn(){
		System.out.println("lol");
		//brett[8][1]=1;//testspielbrett wird zum testen befüllt
		//brett[7][2]=1;
		//brett[6][3]=1;
		//brett[5][4]=1;
		//brett[4][5]=1;
		boolean gewinner = false;
		for(int yg=1;yg<=8;yg++){//Waagerechte wird überprüft
			for( int xg=1;xg<=4;xg++){//yg ist der y wert der Felder
				if(brett[xg][yg]==z){//xg ist der x wert der Felder
				if(brett[xg+1][yg]==z){//überpruft erst in der ersten zeile von links nach rechts dann in der 2ten Zeile von links nach rechts
				if(brett[xg+2][yg]==z){
				if(brett[xg+3][yg]==z){
				if(brett[xg+4][yg]==z){gewinner=true;}}}}}}}// wenn 5 in einer reihe sind hat der Spieler gewonnen
		for(int xc=1;xc<=8;xc++){
			for(int yc=1;yc<=4;yc++){
				if(brett[xc][yc]==z){//Senkrechte wird überprüft
				if(brett[xc][yc+1]==z){//yc ist der y wert der Felder
				if(brett[xc][yc+2]==z){//xc ist der x wert der Felder
				if(brett[xc][yc+3]==z){//überpruft erst in der ersten Spalte von oben nach unten dann in der 2ten Spalte von oben nach unten
				if(brett[xc][yc+4]==z){gewinner=true;}}}}}}}
	
		for(int yy=5; yy<=8; yy++){
			for(int xy=1; xy<=4; xy++)
				if(brett[xy][yy]==z){//Diagonale  von links unten nach rechts oben wird überprüft
				if(brett[xy+1][yy-1]==z){//yy ist der y wert der Felder
				if(brett[xy+2][yy-2]==z){//xy ist der x wert der Felder
				if(brett[xy+3][yy-3]==z){
				if(brett[xy+4][yy-4]==z){gewinner=true;}}}}}}
	
		for(int yx=1; yx<=4; yx++){
			for(int xx=1; xx<=4; xx++)
				if(brett[xx][yx]==z){//Diagonale von rechts oben nach links unten wird überprüft 
				if(brett[xx+1][yx+1]==z){//xx ist der x wert der Felder
				if(brett[xx+2][yx+2]==z){
				if(brett[xx+3][yx+3]==z){
				if(brett[xx+4][yx+4]==z){gewinner=true;}}}}}}
				System.out.println(gewinner+" X");
				return (gewinner);// boolean variable gewinner wird zurückgegeben
				
		}
	

}
package go_bang;
import java.awt.*;
import java.awt.event.*;

public class UI extends Frame implements ActionListener {

	Canvas cv1;

	MenuBar obermenu;

	Menu inter;

	MenuItem MSTART, MM, MEXIT;

	Color hintergrund = new Color(0, 0, 128);
											   
	Button closeBttn;

	Panel pOption;

	CheckboxGroup chkoptiong;

	Checkbox chkoption15, chkoption25;

	TextField t1, t2;

	Image img = getToolkit().getImage("hintergrund.gif");
	Image weisserstein = getToolkit().getImage("weisserstein.gif");
	Image schwarzerstein = getToolkit().getImage("schwarzerstein.gif");
	
	Panel ph, p1;

	Label lbx, lby, lbs;

	static TextField tfx, tfy;

	Button bts;
	
	public int x;
	public int y;
	


	public UI() {
		
		obermenu = new MenuBar(); 
		setMenuBar(obermenu); 
		inter = new Menu("© Go Bang!"); 
		obermenu.add(inter); 
		MSTART = new MenuItem("Start Go Bang!");
		inter.add(MSTART);
		MSTART.addActionListener(this);
		MM = new MenuItem("Die Macher");
		inter.add(MM); 
		inter.addActionListener(this); 
		inter.addSeparator();
		MEXIT = new MenuItem("Exit"); 
		inter.add(MEXIT); 
		MEXIT.addActionListener(this);
		cv1 = new Canvas();
		cv1.setBounds(1,1,1000,500);
		cv1.setBackground(hintergrund);
		Graphics g=cv1.getGraphics();
		add(cv1);
		setLayout(new BorderLayout());
		ph = new Panel();
		add(ph);
		ph.setLayout(new BorderLayout());
		p1 = new Panel();
		add(p1, "South");
		p1.setLayout(new GridLayout(3, 2));
		lbx = new Label("x-Koordinate");
		lbx.setBackground(Color.LIGHT_GRAY);
		p1.add(lbx);
		tfx = new TextField(6);
		tfx.setBackground(Color.LIGHT_GRAY);
		p1.add(tfx);
		lby = new Label("y-Koordinate");
		lby.setBackground(Color.LIGHT_GRAY);
		p1.add(lby);
		tfy = new TextField(6);
		tfy.setBackground(Color.LIGHT_GRAY);
		p1.add(tfy);
		lbs = new Label("Eingaben Ok?");
		lbs.setBackground(Color.LIGHT_GRAY);
		p1.add(lbs);
		bts = new Button("Absenden");
		bts.setBackground(Color.LIGHT_GRAY);
		bts.addActionListener(this);
		p1.add(bts);
        initComponents();

	}

//	public static void main(String[] args) {
	//	UI bang = new UI(); 
		//bang.setSize(1005, 575);
	    //bang.setLocation(100, 100);
	    //bang.show();
	//}

	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==bts){getAktZeile(); getAktSpalte(); };
		String menu= e.getActionCommand();
		if(menu.equals("Start Go Bang!")){hintergrund();}//erst bei start zeichnet er den hintergrund(mehrmals drücken)
		if(menu.equals("Die Macher")){showcrew();}
		if(menu.equals("Exit")){System.exit(0);}
		if(e.getSource()==closeBttn){closeBttn.getParent().setVisible(false);}
	}

public static void ausgabeGewinn(int i){
	int gew = 0;
	if(gew==1){	tfx.setText("Spieler 1 hat gewonnen");}
	if(gew==2){ tfy.setText("Spieler 2 hat gewonnen");}
	}

	
	public void male(int y, int x, int spieler) {
		Graphics g = cv1.getGraphics();
		
		
		
		
		if (spieler == 1) {
			
			g.drawImage(weisserstein, x, y, this);
			//g.fillOval(r,r,x,y);
			//g.setColor(Color.white);
			
			
		}
		if (spieler == 2) {
			
			g.drawImage(schwarzerstein, x, y, this);
			
		}
	}

	public void hintergrund() {
		Graphics g=cv1.getGraphics();
		g.drawImage(img,1,25,this);
	}

	public void initComponents() {
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent ev) {
				exitForm(ev);
			}
		});
	}

	private void exitForm(WindowEvent ev) {
		System.exit(0);
	}
	
	public void showcrew(){
		Dialog optionsdialog = new Dialog(this,"Die Macher",true);
		closeBttn = new Button("schließen");
		closeBttn.addActionListener(this);
		optionsdialog.add(closeBttn,BorderLayout.SOUTH);
		optionsdialog.setBounds(100,100,200,250);
		pOption = new Panel();
		pOption.setLayout(new GridLayout(6,1));
		Label chiefs = new Label("Chefs : Fabian & Michael");
		Label ablauf = new Label("Spielablauf : Johannes & Dennis");
		Label spielzug = new Label("Spielzug : Tobias F. & Kami");
		Label proof = new Label("Spielpruefung : Paul & Marcel");
		Label brett = new Label("Spielbrett : Tobias H. & Nikita");
		Label ui = new Label("User Interface : Dome & Uli");
		pOption.add(chiefs);
		pOption.add(ablauf);
		pOption.add(spielzug);
		pOption.add(proof);
		pOption.add(brett);
		pOption.add(ui);
		optionsdialog.add(pOption);
		optionsdialog.show();
		
		}


	public int getAktZeile() {
		
		int y = Integer.parseInt(tfy.getText());
		
		return y;
	}

	public int getAktSpalte() {
		int x = Integer.parseInt(tfx.getText());
		return x;
	}
}

package go_bang;


class Spielbrett {
	int [][] brett;		
	int x; /*Zeile*/
	int y; /*Spalte*/
	int z = 0; /*Übergabe ob Spieler 1 oder Spieler 2*/
	
	public Spielbrett(){
		brett = new int[10][10]; 
		
		for(x=0; x<=9; x++){
			for(y=0; y<=9; y++)
				brett[x][y]=0;
		}
		
	
		
	}
	
	
	public int[][] getSpielfläche(){	/*Übergibt brett an UI*/
		return brett;
		
		
	}
	public  void steinSetzen(int brett[][], int x, int y, int z){			/*Prüft ob Spieler 1 oder Spieler2 setzt 
										und schreibt das in das array*/
		
		if(z == 1){
			brett [x][y]=1;
		}
		if(z == 2){
			brett [x][y]=2;
		}
		
	}
	
}
```
kann auch das ganze prog mal zu mailen.
thx mal
mfg LittleWulf


----------



## Sky (5. Apr 2005)

LittleWulf hat gesagt.:
			
		

> hab ich auch so weit gemacht nur funzt es net kann sich des jemand anschauen?
> steh voll auf dem schlauch!


Hier fehlt irgendwie die Problembeschreibung! Was geht nicht? Gibt es Fehlermeldungen? Kann das Prog. wenigstens fehlerfrei übersetzt werden???


----------



## LittleWulf (5. Apr 2005)

Nein im mom kommt diese meldungen:
java.lang.ArrayIndexOutOfBoundsException: 9
	at go_bang.Spielbrett.<init>(Spielbrett.java:16)
	at go_bang.Spiel.<init>(Spiel.java:15)
	at go_bang.Spiel.main(Spiel.java:54)
Exception in thread "main"


----------



## Wildcard (5. Apr 2005)

Argh!

```
if(foobar=true)
```
Ist KEIN Vergleich, sonderen eine Wertzuweisung!
mach bei boolean-werten entweder so:

```
if(foobar)
```
oder so:

```
if(true==foobar)
```
  :roll:


----------



## LittleWulf (5. Apr 2005)

ok aber die fehler von oben werden immer noch angezeigt!


----------



## The_S (5. Apr 2005)

Du befüllst ein Array-Element, das es nicht gibt.


----------



## LittleWulf (5. Apr 2005)

wo denn?


----------



## The_S (5. Apr 2005)

Zeile 16 oder 15 oder so was in die Richtung. Steht alles in der Fehlermeldung


----------



## Lucky Luc (8. Mai 2005)

Ganz einfach:

In Zeile 83-92 oder so fragst du nach Werten, die vielleicht gar nicht exestieren. In der linken oberen Ecke würde bei der ersten Abfrage nach brett[-1][-1] gefragt - und das gibt es nicht.

Du könntest ja das Array um einen imaginären Rand erweitern, wenn du weißt, was ich meine


----------



## Gralshueter der Sprache (10. Mai 2005)

Und Du benutzt Woerter die gar nicht existieren.


----------

