Javaを使用してレーシングカーゲームを作成していますが、GUIの部分で止まっています。Java Gui Gridlayout:特定のオブジェクトを削除して別のオブジェクトをその位置に追加します。
基本的に、私のゲームでは、あなたはダイスを投げ、2台のクルマの1台がポジション(9,0)からポジション(0,0)に向かって移動します。だれでも(0,0)が勝者になる。問題は、ゲームの準備が整っていて、動くプロセスを除いてすべてが完全に機能していることです。私はGridLayoutを使って地図をユーザーに提示しています。地図には、道路、障害物、ガソリンスタンド、ENDタイル、STARTタイル、2台の車の7種類のオブジェクトがあります。私はgenerateメソッドを使ってマップをランダムに生成し、それをGUIクラスに渡して、マップをユーザーに表示してジョブを実行できるようにします。
しかし、私はマップから特定のタイルを削除する方法がわからないので、車がどこにあるのかをユーザーに示すことができます。私はイメージを使用してラベルに配置します。私の最初のアクションは、グリッドからコンポーネント全体を削除し、新しいImageIconを車に追加することでした。また、私はメソッド ".setIcon"を認識していますが、編集するImageIconをどのように知っていますか?
generateメソッドです。
public void generate(){
int result;
int greenCounter = 0;
int blackCounter = 0;
for (int i = 0; i < tiles.length; i++){
for (int j = 0; j < tiles.length; j++){
result = (int)(Math.random()*23 + 1);
if (i == 0 && j == 0) tiles[i][j] = new Start();
else if (i == 9 && j == 0) tiles[i][j] = new End();
else if (result > 2) tiles[i][j] = new Grey();
else if (result == 1) {
blackCounter++;
if (blackCounter <=6) tiles[i][j] = new Black();
else tiles[i][j] = new Grey();
}
else if (result == 2){
greenCounter++;
if (greenCounter <=6) tiles[i][j] = new Green();
else tiles[i][j] = new Grey();
}
}
}
}
GUIコンストラクタ内部のマップ作成:
車がマップ内を移動しながら示すことになっている方法for(int i = 0; i < tiles.length; i++){
for(int j = 0; j < tiles.length; j++){
if(tiles[i][j] instanceof Green) {
roadGas = new ImageIcon ("road/road_gas.jpg");
roadGasLb = new JLabel(roadGas);
tilesPanel.add(roadGasLb);
}
else if(tiles[i][j] instanceof Grey){
road = new ImageIcon ("road/road.jpg");
roadLb = new JLabel(road);
tilesPanel.add(roadLb);
}
else if(tiles[i][j] instanceof Black){
roadObstacle = new ImageIcon("road/road_obstacle.jpg");
roadObstacleLb = new JLabel(roadObstacle);
tilesPanel.add(roadObstacleLb);
}
else if (i == 9 && j==0) {
roadStart = new ImageIcon ("road/roadStart_car.jpg");
roadStartLb = new JLabel(roadStart);
tilesPanel.add(roadStartLb);
}
else if (i == 0 && j == 0) {
roadEnd = new ImageIcon ("road/roadEnd.jpg");
roadEndLb = new JLabel(roadEnd);
tilesPanel.add(roadEndLb);
}
}
}
。私はこれが働く方法がないことを知っていますが、私は何をすべきか分かりません。
carLocation = nissan.getCarLocation();
int x;
int y;
for (int i = 0; i < carLocation.length; i++){
for (int j = 0; j < carLocation.length; j++){
if (carLocation[i][j] != null){
if (tiles[i][j] instanceof Black) tiles[i][j].action(nissan);;
if (tiles[i][j] instanceof Grey) tiles[i][j].action(nissan);
if (tiles[i][j] instanceof Green) tiles[i][j].action(nissan);
x = i;
y = j;
if (x % 2 == 0){
roadCar = new ImageIcon ("road/road_GTR_right.jpg");
roadCarLb = new JLabel(roadCar);
tilesPanel.add(roadCarLb,x,y);
contentPanel.add(tilesPanel, BorderLayout.CENTER);
}
else {
roadCar = new ImageIcon ("road/road_GTR_left.jpg");
roadCarLb = new JLabel(roadCar);
tilesPanel.add(roadCarLb,x,y);
contentPanel.add(tilesPanel, BorderLayout.CENTER);
}
break;
}
事前のおかげで、私はどんな答えを感謝しています。