プログラミング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; } }
たいてい初心者って「うまくいきません。」と書くのですが、そう言われてもこちらからしてみれば正しい動作がわからないので「へーそうですか。」としか言えません。
なので、質問するときは、「こういうエラーが出てしまいます。」だとか、「ここの処理が想定ではこう動くと思ったのですがこう動いてしまいます。」とか具体的に書くようにしましょう。
すみません・・・
剣と盾のところで攻撃力と防御力が増えないことです。
それはここに書くのではなく、編集を追記しましょう。
追記をすると、回答してくれた優しい人に通知がいって
もしかしたら追記してくれたりするかもしれません。
あとコードはマークダウン (<code>ってやつです)を使うと、
回答者が再現をしやすくなって、回答が増えたりするのでおすすめです。
初めてだったのでありがたいです!
【マークダウン使い方まちがってますYO】
メッセージがどう表示されていようと, 2 を入力すれば「直後の戦闘のみ」 attack は +3 され, 3 を入力すれば「直後の戦闘のみ」 defence は +3 されるように見えます.
攻撃力と防御力が増えていないことはどのように確認されたのでしょうか.
例えば2を入力した際に、HPが減ったりします。同時に相手のHPも減ることもあるので、その時も対戦の計算がなされているのだと考えました。
プレイヤが攻撃でも防御でも, モンスター側が(乱数で)攻撃を選択していれば, 自分のHPは減る(可能性はある)というコードになっているように思います.
> その時も対戦の計算がなされている
この仕様からそもそも違うということでしょうか.