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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

1092閲覧

Javaについて 対戦ゲーム

kiki_123567

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/05/29 05:45

編集2022/01/12 10:55

プログラミング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; } }

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

azuapricot

2019/05/29 06:00

たいてい初心者って「うまくいきません。」と書くのですが、そう言われてもこちらからしてみれば正しい動作がわからないので「へーそうですか。」としか言えません。 なので、質問するときは、「こういうエラーが出てしまいます。」だとか、「ここの処理が想定ではこう動くと思ったのですがこう動いてしまいます。」とか具体的に書くようにしましょう。
kiki_123567

2019/05/29 06:14

すみません・・・ 剣と盾のところで攻撃力と防御力が増えないことです。
azuapricot

2019/05/29 06:20

それはここに書くのではなく、編集を追記しましょう。 追記をすると、回答してくれた優しい人に通知がいって もしかしたら追記してくれたりするかもしれません。 あとコードはマークダウン (<code>ってやつです)を使うと、 回答者が再現をしやすくなって、回答が増えたりするのでおすすめです。
kiki_123567

2019/05/29 06:33

初めてだったのでありがたいです!
azuapricot

2019/05/29 06:38

【マークダウン使い方まちがってますYO】
jimbe

2019/05/29 13:24

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

2019/05/29 21:31

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

2019/05/30 08:34 編集

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

回答1

0

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

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

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

投稿2019/05/29 05:49

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kiki_123567

2019/05/29 06:18

回答ありがとうございます。 どこに「見つけたら・・」の処理を入れたらいいでしょうか?
tacsheaven

2019/05/29 06:55

今のコードは、見つけたときに「○○を見つけた」と表示していますよね? つまりはそこです。
azuapricot

2019/05/29 08: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はエスパーじゃないのでこの時はこうするんだよと教えてあげないと動きません。 書いた通りに動作してるだけです
kiki_123567

2019/05/29 21:34

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

2019/05/29 23:36

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問