質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.83%

Javaについて 対戦ゲーム

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 855

kiki_123567

score 12

プログラミングJavaについての質問です。
対戦ゲームで、HP,攻撃、防御からなるものを作りました。攻撃か防御かを選びお互いにHPを削って0になった方が負けのゲームです。5分の1の割合でそれぞれ、剣や矛を拾って攻撃力、防御力が3上がるというプログラムにしたいのですが、攻撃力、防御力がうまく増えません。元のHP,攻撃力、防御力は{10,5,3}です。java コード

public class test{
public static void main(String[] args){
int[] p = {10,5,3}; //hp,attack,defence
int[] m = {10,5,3};

while(p[0]>0 && m[0]>0){//あなたも敵もHPが0より大きい間
int fortune = new java.util.Random().nextInt(5);
switch(fortune){
case 0:
case 1:
case 2:
System.out.println("敵が現れた!どうする?");
System.out.println("0.攻撃,1:防御");
break;
case 3:
System.out.println("🗡剣🗡を見つけた!攻撃力が3上がった!");
System.out.println("2.続ける");
break;
case 4:
System.out.println("🛡盾🛡を見つけた!防御力が3上がった!");
System.out.println("3.続ける");
break;
}

int ps = new java.util.Scanner(System.in).nextInt();
int ms = new java.util.Random().nextInt(2);//敵が攻撃か防御か
int p_att = attack(ps,p);
int m_att = attack(ms,m);
int p_def = defence(ps,p);
int m_def = defence(ms,m);
int p_hp = p[0];
int m_hp = m[0];
p[0] = p[0]+ p_def - m_att;
m[0] = m[0]+ m_def - p_att;

System.out.println("あなたの残りHPは"+p[0]);
System.out.println("敵の残りのHPは"+m[0]);
if(p[0]<=0){//あなたのHPが0以下
System.out.println("負けてしまった・・");
}else if(p[0]==m[0]){
System.out.println("互角の勝負だ!");
}else if(m[0]<=0){
System.out.println("あなたの勝利!");
}
}
}
public static int attack(int s1, int[] a){
int attack = 0;
switch(s1){
case 0:
attack = a[1] + new java.util.Random().nextInt(2);//攻撃値と1〜2の乱数で攻撃
break;
case 1:
case 3:
attack = 0;
break;
case 2:
attack = a[1] + 3;
break;
}
return attack;
}

public static int defence(int s1,int[] a){
int defence = 0;
switch(s1){
case 1:
defence = a[2] + new java.util.Random().nextInt(2);//防御値と1〜2の乱数で決まる
break;
case 0:
case 2:
defence =0;
break;
case 3:
defence = a[2] + 3;

}
return defence;
}

}

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • jimbe

    2019/05/29 22:24

    メッセージがどう表示されていようと, 2 を入力すれば「直後の戦闘のみ」 attack は +3 され, 3 を入力すれば「直後の戦闘のみ」 defence は +3 されるように見えます.
    攻撃力と防御力が増えていないことはどのように確認されたのでしょうか.

    キャンセル

  • kiki_123567

    2019/05/30 06:31

    例えば2を入力した際に、HPが減ったりします。同時に相手のHPも減ることもあるので、その時も対戦の計算がなされているのだと考えました。

    キャンセル

  • jimbe

    2019/05/30 17:28 編集

    プレイヤが攻撃でも防御でも, モンスター側が(乱数で)攻撃を選択していれば, 自分のHPは減る(可能性はある)というコードになっているように思います.
    > その時も対戦の計算がなされている
    この仕様からそもそも違うということでしょうか.

    キャンセル

回答 1

0

乱数で剣や盾を見つけたところはまあうまくいきそうなので、あとは
「見つけたなら、それに従ってパラメータを修正する」
処理を入れるだけでしょう。

今はただ「見つけた」というメッセージを出しているだけだから動いていないだけです。

※いろいろ突っ込みどころのあるコードではありますが、それはとりあえず置いておきます

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/29 17:53

    case 1:
    case 2:
    System.out.println("敵が現れた!どうする?");
    System.out.println("0.攻撃,1:防御");
    break;
    case 3:
    System.out.println("🗡剣🗡を見つけた!攻撃力が3上がった!");
    System.out.println("2.続ける");
    break;
    case 4:
    System.out.println("🛡盾🛡を見つけた!防御力が3上がった!");
    System.out.println("3.続ける");
    break;

    確かにこれじゃあ何もしてないですもんねー
    Javaはエスパーじゃないのでこの時はこうするんだよと教えてあげないと動きません。
    書いた通りに動作してるだけです

    キャンセル

  • 2019/05/30 06:34

    s1で2が出た時に、attack+3 、3が出た時に defence+3とするものを下の2ブロックで書いているつもりです。入れる位置が違うのでしょうか?

    キャンセル

  • 2019/05/30 08:36

    見つけたことを示す変数は何で、attack や defence に渡している変数は何になっているか、よく見てみましょう。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.83%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る