Java でプログラミングを練習するためにテキスト ベースの戦艦ゲームを作成しています (私はまだかなり新しいので、ご容赦ください :S) ゲームには、文字 ('-') の多次元配列を使用して作成された 7x7 グリッド システムがあります。ユーザーがヒットすると、これらの「-」のいずれかが「x」に変わります。ユーザーが A1、B5 などの座標を指定すると、プログラムはそれを配列が読み取れる 0 ~ 6 の数値に変換します。
これで、Player クラスに setPlayerShips というメソッドができました。このメソッドは、playerShip1、playerShip2、および playerShip3 という配列に異なる x 座標と y 座標を設定することになっています。配列の最初の要素は船の最初の点の x 座標で、2 番目の要素は y 座標です。3 番目は 2 番目の点の x 座標、4 番目は y 座標などです。船は垂直または水平 (傾斜していない) のいずれかで、長さは 3 単位です。プログラムを実行すると、この方法がまったく適切に機能していないことに気付きました (船の長さが 3 ユニットに設定されておらず、適切な場所に配置されていません)。この方法を見て助けてください。何が悪いのか分かりますか?-- メソッドの最後は実際の最後ではないことに注意してください。
//set player ships coordinates, can be numbers from 0-6
public static void setPlayerShips(){
//first two coordinates are completely random(from 0-6)
playerShip1[0]=(int)(Math.random()*7);
playerShip1[1]=(int)(Math.random()*7);
//next coordinates have to be next to this point, but can be in any direction
do{
playerShip1[2]=(int)(Math.random()*7);
}while((Math.abs(playerShip1[2]-playerShip1[0]))>1);//x coordinate has to be either 1 away from or on the same as the first
//if x coordinates are the same, y has to be 1 more than first y (unless first y is 5 - then make it 1 less than first y or else ship wont fit)
if(playerShip1[0]==playerShip1[2] && playerShip1[1]>=5){
playerShip1[3]=playerShip1[1]+1;
}else if(playerShip1[0]==playerShip1[2] && playerShip1[1]>=5){
playerShip1[3]=playerShip1[1]-1;
}
//if, both x's are the same, third x must be as well
if(playerShip1[0]==playerShip1[2]){
playerShip1[4]=playerShip1[0];
}else if(playerShip1[0]==0){//else, if they aren't equal and the first x is 0 - add the last to the end after the second so it fits
playerShip1[4]=playerShip1[2]+1;
}else{//else, add it before the first x
playerShip1[4]=playerShip1[0]-1;
}
//if both y coordinates equal eachother , third must be equal as well
if(playerShip1[1]==playerShip1[3]){
playerShip1[5]=playerShip1[1];
}else if(playerShip1[3]==6){//else if second y coordinate is 6 and they are not all equal, next must come before first or it wont fit
playerShip1[5]=playerShip1[1]-1;
}else if(playerShip1[1]==0){//else if first y coordinate is 1, next must come after second y coordinate or it wont fit
playerShip1[5]=playerShip1[3]+1;
}
事前に感謝します - これが初心者の質問である場合は申し訳ありません!