Go Bang

Status
Nicht offen für weitere Antworten.

LittleWulf

Mitglied
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!

Code:
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

Top Contributor
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

Mitglied
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

Top Contributor
Argh!
Code:
if(foobar=true)
Ist KEIN Vergleich, sonderen eine Wertzuweisung!
mach bei boolean-werten entweder so:
Code:
if(foobar)
oder so:
Code:
if(true==foobar)
:roll:
 

Lucky Luc

Mitglied
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
 
G

Gralshueter der Sprache

Gast
Und Du benutzt Woerter die gar nicht existieren.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L KI für Brettspiel GO Bang Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen


Oben