0

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;
    }

事前に感謝します - これが初心者の質問である場合は申し訳ありません!

4

1 に答える 1

0

まず、«船の説明»を確認して、その場所を保存するための関連クラスを作成する必要があると思います。

そうすると、あなたのアルゴリズムは友好的に見えません。私はあなたに他を提案します:

  1. ポイントを選択(x, y)してください:グリッド上(を使用Math.random() * 7)、
  2. 方向を選択してください:上= 0左= 1下= 2または右= 3(使用Math.random() * 4)、
  3. 船のポイントを計算します。正しい場合、x値は同じであり、yyとしてです。topの場合、値は、、であり、値は。です。y + 1y + 2xxx - 1x - 2yy

3)の前に、元の位置と方向に従ってグリッドに収まる船をチェックインできます(たとえば、(x = 3およびy = 1方向=は収まりません(y値は1、、 ))。収まらない場合は0-1新しいポイントと方向を選択するだけです。

お役に立てば幸いです。

于 2013-01-14T23:53:53.570 に答える