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

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

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

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

3回答

2601閲覧

敵の移動で質問があります。

taiyokarasu

総合スコア27

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2017/01/30 18:42

敵の移動パターンで質問があります。

void move_enemy0() { counter++; if(y<100){ x=300; y++; } if(y>=100){ x+=1; } if(x>350){ x--; }

上はEnemyのクラスで宣言している敵の動きです。
最初はまっすぐ進んできて、ある座標で停止し、そのあとインベーダーゲームのように左右に動くようにしたいのですが、上のプログラムのように打ち込むと何故かif(x>350)の条件だけを満たして停止してしまいます。
そのあと、動きを反転させるためにx--を入れたのですが、なぜこの条件だと停止するのでしょうか。

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

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

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

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

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

guest

回答3

0

Java

1// x = 350 2 3if(y>=100){ 4 //右に進ませる 5 x+=1;// x = 351 6} 7 8// x が 350を超えたら 9if(x>350) { 10 //左に進ませる 11 x--; // x = 350 12}

追記
Zuishinさんの回答と同じこと書いてました。

投稿2017/01/31 02:28

編集2017/01/31 03:12
abs123

総合スコア1280

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

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

Zuishin

2017/01/31 02:51

貼られたコードに x+=1 とあるのがそれだと思います。
abs123

2017/01/31 02:58

指摘ありがとうございます。 今気が付きましたが、Zuishinさんと同じようなこと書いてる・・・
guest

0

ベストアンサー

x と y の初期値はきちんと設定されていますか?
仮に x = 400, y = 400 だとすると最後しか実行されません。

また初期設定がきちんとされていたとしても往復はしないでしょう。x は 351 になった後 351 と 350 の間しか動きません。

きちんと動かすには、まず x = 300, y = 0, dx = 0, dy = 1 と初期設定してください。
移動は x += dx, y += dy とします。
y >= 100 で dx = 1, dy = 0 に変更してください。また dx >= 350 で dx = -1 にしてください。

追記
dx >= 350 は x >= 350 の誤りです。

投稿2017/01/30 19:10

編集2017/01/30 22:45
Zuishin

総合スコア28660

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

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

taiyokarasu

2017/01/30 20:15 編集

アドバイスをいただき、実際に実行してみたのですが、動きが反転することなく画面外に進んでいってしまいました。入力の仕方が悪いのでしょうか x +=dx; y +=dy; if(y>=100){ dx=1; dy=0; if(dx>350){ dx =-1; } }
Zuishin

2017/01/30 20:34

失礼しました。dx > 350 は間違いです。x > 350 としてください。
abs123

2017/01/31 02:59

x < 0になった場合に dx = 1にする処理も必要ですね。
Zuishin

2017/01/31 03:18

そうですね。dx, dy は移動する方向と距離を表しますから、どう扱えばいいのか理解できれば好きなように動かせると思います。
taiyokarasu

2017/01/31 07:40 編集

x>350の条件で350と351の間をいったりきたりしているようです ブルブルと左右に揺れて、動けなくなってしまっています。
Zuishin

2017/01/31 08:08 編集

dx を x に直すのは一カ所だけですよ。二カ所直しませんでした? あと、y >= 100 は一度成立してからずっと条件が満たされているので、これではまずいですね。 次のようにやってみてください。 if (y == 100 && dx == 0) { dx = 1; dy = 0; } else if (x >= 350) { dx = -1; } else if (x <= 0) { dx = 1; } x += dx; y += dy;
Zuishin

2017/01/31 08:09

また同じ間違いを繰り返したので修正しました。 上記試してみてください。
taiyokarasu

2017/01/31 08:11

やはり、反転した動きをしてくれません。 それどころか、何故か画面左上から画面右下あたりを真っすぐ進み、画面外に消えてしまいました。
Zuishin

2017/01/31 08:15

えっと、初期設定はされましたか? また変数はグローバルですか?
taiyokarasu

2017/01/31 22:36

変数がグローバルという意味がわかりませんが、一応 x=300 y=0 dx=0 dy=1 という感じで初期値は設定しています
Zuishin

2017/01/31 23:29

その座標から出ませんか?
taiyokarasu

2017/02/01 07:39

出てきます。もう一度やってみたら、うまくいきました。 ありがとうございます! もし、何かエラーが起きたらよろしくお願いします!
guest

0

1回しか実行されてないから。
ループもなにもなくただこのメソッドを実行しただけなら、初期状態で満たされる条件の分のみ実行されて終了します。

投稿2017/01/30 18:46

swordone

総合スコア20651

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

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

taiyokarasu

2017/01/30 18:55

一つ一つのif文に分けていることがループができていない原因ということでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問