Hallo allerseits,
Ich bin dabei ein TicTacToe zu programmieren, dies allerdings ohne 2DArray.
Das Grundgerüst sieht folgendermassen aus: Der Player macht einen Zug, dieser wird in der PlayerKlasse überprüft und dann an die Move-Klasse weitergegeben, welche alle Moves speichert. Die PlayerKlasse überprüft lediglich, ob der Zug schon mal getägigt wurde. alles unklar soweit??
Ich vermute, dass ich ein (mir leider unbekanntes) Konstruktur - Problem habe.
hier ein paar CodeSchnipsel:
Code:
public class TicTacToe {
private static final int maxMoves = 9;
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
Random generator = new Random();
Player p = new Player();
Computer c = new Computer();
Moves m = new Moves();
int moves = 1; // counter
boolean victory = false;
//
while( victory || moves <= maxMoves)
{
boolean validhumanMove = false;
while(!validhumanMove)
{
int humanMove = in.nextInt();
if(p.isValidMove(humanMove))
{
m.addMove(humanMove); // add humanMove to moves
validhumanMove = true;
System.out.println(p.isValidMove(humanMove));
}
}
moves++;
Code:
public class Player {
/*
* testet, ob der menschliche Zug schon getätigt wurde.
*/
public boolean isValidMove(int move)
{
Moves m = new Moves();
for(int e : m.getMoveList())
if(e == move) return false;
return true;
}
}
Code:
import java.util.ArrayList;
public class Moves {
public ArrayList<Integer> moves;
public Moves()
{
moves = new ArrayList<Integer>();
}
public void addMove(int move)
{
moves.add(move);
}
public ArrayList<Integer> getMoveList()
{
return moves;
}
}
Wäre super, wenn jemand Zeit hätte, sich da kurz durchzuarbeiten. Ich bin sicher, es liegt nur ein kleines Problem vor. Vielen Dank für alle Tipps!
public boolean isValidMove(int move)
{
Moves m = new Moves();
for(int e : m.getMoveList())
if(e == move) return false;
return true;
}
Ist es falsch, jedes mal ein Objekt zu erzeugen (Moves m = new Moves() ) ? Wie kann ich das umgehen? Ich mein, anders kann ich auf die MoveList ja nicht zugreifen. [/code]
Wenn du das schon in getrennten Klassen implementierst,
mußt du deine Liste eben übergeben.
Code:
public boolean isValidMove(int move, List<Integer> moves) {
for(int e : moves)
if (e == move)
return false;
return true;
}
...
if (p.isValidMove(humanMove, m.getMoveList()))