Interesse an Mini-Schach?

Was heißt hier "Hat echt niemand ne Ahnung?"
Immerhin haben dir Vereth und ich Lösungsvorschläge gegeben.

Also ja, wenn du willst dass dir das irgendjemand programmiert, dann wahrscheinlich (schneller) gegen bezahlung.

--> Oder du beschäftigst dich einfach selbst damit.
Is ja schlließlich dein Projekt (oder was auch immer)
 
Da hast du natürlich Recht. Nur bringen mir euch die Lösungsvorschläge nicht, es gehören nur irgendwie noch zwei Schleifen in die collectTargets-Methode oder so..., weil ich einen Teil ja schon abgearbeitet hab in der Methode.
Ich hab schon alles versucht, aber es liegt einfach außerhalb meiner Fähigkeiten...
 
Du delegierst zu wenig Funktionalität an deine Hilfsklassen. Deswegen werden deine Routinen zu aufgebläht, unübersichtlich und verwirrend. Wenn du das änderst, wird es dir auch leichter fallen, dein Programm selber fertig zu stellen.
 
Ich habs nun dcoh einigermaßen hinbekommen mit Hilfe...sieht so aus:
Code:
	private void checkForCheck() {
		Address kingAddress = null;
		Vector targetVector = new Vector();
		for (int i=0; i<content.length; i++) {
			for (int k=0; k<content[i].length; k++) {
				AbstractChessPiece figur = content[i][k].getFigur();
				if (figur!=null) {
					if (figur instanceof King && figur.getTeam()!=this.turn) 
						kingAddress = content[i][k].getAddress();
					if (figur.getTeam()==this.turn)
						targetVector.addAll(this.collectPossibleTargets(content[i][k]));
					
				}
			}
		}
		for (int i=0; i<targetVector.size(); i++) {
			//System.out.println(">>" + targetVector.get(i) + " : " + kingAddress);
			if (((Address)targetVector.get(i)).equals(kingAddress)){
				System.out.println(content[kingAddress.getRow()][kingAddress.getColumn()].getFigur().getName() + " ist im Schach!");
				break;
			}
		}
	}

Nun wollte ich noch fragen, ob ihr eine Idee habt zur Bauernumwandlung. Also wenn ein weißer Bauer auf Reihe 7 oder ein schwarzer Bauer auf Reihe noch gelangt, dann wird er umgehend(ohne Auswahldialog) in eine Dame umgewandelt.
Hier nochmal die Startaufstellung zur Einführung:
Code:
public void takeStartPosition() {
		movesCount = 0;
		resetTargets();
		rochade.clear();
		enPassant.clear();
		if (activeSquare!=null) {
			activeSquare.setSelected(false);
			activeSquare = null;
		}
		turn = WHITE;
		
		content[0][0].occupyBy(new Rook(AbstractChessPiece.BLACK_TEAM));
		content[0][1].occupyBy(new Knight(AbstractChessPiece.BLACK_TEAM));
		content[0][2].occupyBy(new Bishop(AbstractChessPiece.BLACK_TEAM));
		content[0][3].occupyBy(new Queen(AbstractChessPiece.BLACK_TEAM));
		content[0][4].occupyBy(new King(AbstractChessPiece.BLACK_TEAM));
		content[0][5].occupyBy(new Bishop(AbstractChessPiece.BLACK_TEAM));
		content[0][6].occupyBy(new Knight(AbstractChessPiece.BLACK_TEAM));
		content[0][7].occupyBy(new Rook(AbstractChessPiece.BLACK_TEAM));
		
		content[7][0].occupyBy(new Rook(AbstractChessPiece.WHITE_TEAM));
		content[7][1].occupyBy(new Knight(AbstractChessPiece.WHITE_TEAM));
		content[7][2].occupyBy(new Bishop(AbstractChessPiece.WHITE_TEAM));
		content[7][3].occupyBy(new Queen(AbstractChessPiece.WHITE_TEAM));
		content[7][4].occupyBy(new King(AbstractChessPiece.WHITE_TEAM));
		content[7][5].occupyBy(new Bishop(AbstractChessPiece.WHITE_TEAM));
		content[7][6].occupyBy(new Knight(AbstractChessPiece.WHITE_TEAM));
		content[7][7].occupyBy(new Rook(AbstractChessPiece.WHITE_TEAM));
		
		for (int column=0; column<8; column++) {
			content[1][column].occupyBy(new Pawn(AbstractChessPiece.BLACK_TEAM));
			content[2][column].clear();
			content[3][column].clear();
			content[4][column].clear();
			content[5][column].clear();
			content[6][column].occupyBy(new Pawn(AbstractChessPiece.WHITE_TEAM));
		}
	}

Ich glaube es sollte so ähnlich wie en passent funktionieren...
Code:
	private void checkForEnPassent(Address address) { 
		Square target;
		Pawn opponentPawn;
		if (address.isValid()) {
			target = content[address.getRow()][address.getColumn()];
			if (target.isOccupied()) {
				if (target.getFigur() instanceof Pawn) {
					opponentPawn = (Pawn)target.getFigur();
					address.move(opponentPawn.getTeam()==AbstractChessPiece.WHITE_TEAM?1:-1,0);
					if (opponentPawn.isEnPassantPossible(this.movesCount)
							&& !content[address.getRow()][address.getColumn()].isOccupied()){
						this.possibleTarget.add(address);
						this.enPassant.add(address);
					}
				}
			}
		}
	}
Hat jemand einen Vorschlag? PS: Code ist mir immer lieber als Sätze :D
 
:rolleyes: Faulpelz

Die Implementierung ist so simpel, dass du es in einer freien Stunde auch selber machen kannst.
 
Simpel? Wenn es so einfach wäre, dann hätte ich es ja schon geschafft. Hatte bei en passant auch Hilfe bekommen, bin ja eigentlich noch Java Anfänger...
 
Ja das schon... und wann? If...weißer Bauer auf Reihe 7 und schwarzer Bauer auf Reihe 0...die Syntax fehlt mir halt wie ich das umsetze...
 

Neue Beiträge

Zurück