私は私が最初からオブジェクト指向のプロジェクトを作成するに向上させるために、Javaで三目並べゲームを作成しようとしてきました。しかし、私はこの問題に遭遇しており、いくつかのガイダンスを探しています。
私はちょうどあなたが、私はこれまで何をやったかの迅速な更新を与えますので、私は現時点ではプロジェクトを通して半分だけの方法です。
このプロジェクトは現在、ドライバーとしてゲームのクラスを持っています。これは、ボード上の位置(A1、A2、A3 ...)とその値(「X」、「O」、null)の間のマップを保存する会クラスを持っています。そして、プレイヤーは(のXまたはOS)上でチームと勝ち数(勝つための機能はまだ実装されていない)のためのフィールドを保持しているプレイヤークラス。
私がいる問題は、ゲームからプレイヤークラス(player1とplayer2)の2つのインスタンスを作成しています。
私はそうのようなゲームのフィールドとしてそれらを定義しました:
public static Player player1 = new Player();
public static Player player2 = new Player();
player1は、その後のXとOの間で選択するように要求され、player2は反対のことを与えています。
player1.setTeam(Character.toUpperCase(teamChoice));
if(player1.getTeam() == 'X')
player2.setTeam('O');
else
player2.setTeam('X');
私の頭では、これは動作するはずです。しかし、ときに私はそれがために設定されているものは何でもplayer2出力しプレイヤーの選択肢をプリントアウトします。
System.out.println("Player 1 you have selected " + player1.getTeam() + "\n");
System.out.println("Player 2 you will be " + player2.getTeam() + "\n");
プレイヤーのクラスの内容は下に見られています。
public class Player {
public static int wins = 0;
public static Character team;
public Player(){
}
public int getWins(){return wins;}
public Character getTeam(){return team;}
public void setTeam(Character team){
Player.team = team;
}
}
問題はここにあります:
public static Character team;
team
静的であり、かつ変数はその手段team
任意のインスタンスに属していません。これは、クラスに属します。
あなたが呼ぶ時はいつでも物事は、であるためplayer1.setTeam
かplayer2.setTeam
、それは、クラス全体のだteam
特定の何かではなく、変更されている変数player1
やへplayer2
。
あなたは確認する必要がありteam
、インスタンス固有の。すべてがかかって除去するものであるstatic
キーワードを。
private char team;
あなたは私がそれを作っていることもわかりますprivate
それはお勧めだとして、(それが公共である必要はないので、あなたはすでに、ゲッターおよびそのためのセッターを定義しました)。
他の変更はそこからですCharacter
へchar
。あなたが使用して比較を作っている==
(あなたのコードのどこかをif(player1.getTeam() == 'X')
ここでプリミティブ型を使用して、予期しない結果につながる可能性が参照型を使用して、)あなたが確認する必要があり、最も簡単な変更です。
あなたのクラスは、のように見えることになります
public class Player {
private int wins = 0;
private char team;
public Player() {
}
public int getWins() {
return wins;
}
public char getTeam() {
return team;
}
public void setTeam(char team) {
this.team = team;
}
}