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

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

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

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

Q&A

解決済

1回答

555閲覧

論プロエディタを使ったコードをメソッドに分けたい

yuyy

総合スコア3

Java

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

0グッド

0クリップ

投稿2023/01/29 18:20

前提

論プロエディタを利用してゲームを作っています。ネズミがプレイヤーでチーズに当たると得点が増えて、猫に当たると増えない、という風にしています。

実現したいこと

コード自体はすべて完成してコンパイルにも成功しています。このコードを可能な限りメソッドに分けて視覚的に簡潔にしたいです。

ウィンドウのサイズとワープのメソッド化。BGM作成のメソッド化。
上の二つについてはメソッドに分けられました。(以下、ここまでのコード)

java

1public class CatAndRat extends Turtle { 2 public static void main( String[] args){ 3 Turtle.startTurtle(new CatAndRat(),args); 4 } 5 public void start() { 6 System.out.println("CatAndRat: Version 8"); 7 hide(); 8//得点版生成 9 int score = 0; 10 TextTurtle scoreBoard = new TextTurtle(""); 11 scoreBoard.warp(600,50); 12//画面サイズ設定 13 window(); 14//キャラ生成 15 ImageTurtle nezumi = new ImageTurtle("nezumi.png"); 16 ImageTurtle cat1 = new ImageTurtle("cat.png"); 17 ImageTurtle cat2 = new ImageTurtle("cat.png"); 18 ImageTurtle cat3 = new ImageTurtle("cat.png"); 19 ImageTurtle cat4 = new ImageTurtle("cat.png"); 20 ImageTurtle cheese1 = new ImageTurtle("cheese.png"); 21 ImageTurtle cheese2 = new ImageTurtle("cheese.png"); 22 ImageTurtle cheese3 = new ImageTurtle("cheese.png"); 23 ImageTurtle cheese4 = new ImageTurtle("cheese.png"); 24 ImageTurtle cheese5 = new ImageTurtle("cheese.png"); 25 ImageTurtle cheese6 = new ImageTurtle("cheese.png"); 26 ImageTurtle cheese7 = new ImageTurtle("cheese.png"); 27//音楽 28 makesound(); 29 SoundTurtle hitc = new SoundTurtle("hitc.mp3"); 30 hitc.loadOnMemory(); 31 SoundTurtle hitcat = new SoundTurtle("hitcat.mp3"); 32 hitcat.loadOnMemory(); 33//初期値のワープ 34 cat1.warp(random(640),0); 35 cat2.warp(random(640),0); 36 cat3.warp(random(640),0); 37 cat4.warp(random(640),0); 38 cheese1.warp(250,0); 39 cheese2.warp(320,0); 40 cheese3.warp(420,0); 41 cheese4.warp(520,0); 42 cheese5.warp(150,0); 43 cheese6.warp(80,0); 44 cheese7.warp(600,0); 45 nezumi.warp(320,350); 46 47 while(true){ 48 49 if(key() == 37){ 50 nezumi.warp(nezumi.x() - 5,nezumi.y()); 51 }else if(key() == 39){ 52 nezumi.warp(nezumi.x() + 5,nezumi.y()); 53 } 54//待機 55 sleep(0.025); 56//ワープ先の設定 57 cat1.warp(cat1.x(),cat1.y() + 5); 58 cat2.warp(cat2.x(),cat2.y() + 5); 59 cat3.warp(cat3.x(),cat3.y() + 5); 60 cat4.warp(cat4.x(),cat4.y() + 5); 61 cheese1.warp(cheese1.x(),cheese1.y() + 5); 62 cheese2.warp(cheese2.x(),cheese2.y() + 5); 63 cheese3.warp(cheese3.x(),cheese3.y() + 5); 64 cheese4.warp(cheese4.x(),cheese4.y() + 5); 65 cheese5.warp(cheese5.x(),cheese5.y() + 5); 66 cheese6.warp(cheese6.x(),cheese6.y() + 5); 67 cheese7.warp(cheese7.x(),cheese7.y() + 5); 68//下まで行ったら上に行く 69 if(cat1.y() > 480){ 70 cat1.warp(cat1.x(),0); 71 } 72 if(cat2.y() > 600){ 73 cat2.warp(cat2.x(),0); 74 } 75 if(cat3.y() > 500){ 76 cat3.warp(cat3.x(),0); 77 } 78 if(cat4.y() > 700){ 79 cat4.warp(cat4.x(),0); 80 } 81 if(cheese1.y() > 600){ 82 cheese1.warp(cheese1.x(),0); 83 } 84 if(cheese2.y() > 500){ 85 cheese2.warp(cheese2.x(),0); 86 } 87 if(cheese3.y() > 700){ 88 cheese3.warp(cheese3.x(),0); 89 } 90 if(cheese4.y() > 800){ 91 cheese4.warp(cheese4.x(),0); 92 } 93 if(cheese5.y() > 480){ 94 cheese5.warp(cheese5.x(),0); 95 } 96 if(cheese6.y() > 900){ 97 cheese6.warp(cheese6.x(),0); 98 } 99 if(cheese7.y() > 550){ 100 cheese7.warp(cheese7.x(),0); 101 } 102 103//ネズミが当たった時 104 if(cat1.intersects(nezumi)){ 105 hitcat.play(); 106 } 107 if(cat2.intersects(nezumi)){ 108 hitcat.play(); 109 } 110 if(cat3.intersects(nezumi)){ 111 hitcat.play(); 112 } 113 if(cat4.intersects(nezumi)){ 114 hitcat.play(); 115 } 116 if(cheese1.intersects(nezumi)){ 117 score++; 118 hitc.play(); 119 } 120 if(cheese2.intersects(nezumi)){ 121 score++; 122 hitc.play(); 123 } 124 if(cheese3.intersects(nezumi)){ 125 score++; 126 hitc.play(); 127 } 128 if(cheese4.intersects(nezumi)){ 129 score++; 130 hitc.play(); 131 } 132 if(cheese5.intersects(nezumi)){ 133 score++; 134 hitc.play(); 135 } 136 if(cheese6.intersects(nezumi)){ 137 score++; 138 hitc.play(); 139 } 140 if(cheese7.intersects(nezumi)){ 141 score++; 142 hitc.play(); 143 } 144 scoreBoard.text(score); 145 update(); 146 } 147 } 148 public void window() { 149 window.size(640,480); 150 window.warp(100,100); 151 } 152 void makesound() { 153 SoundTurtle bgm = new SoundTurtle("pakkuwoman.mp3"); 154 bgm.play(); 155 } 156 157}

これ以外のコードをメソッドにできるだけ分けたいのですが、とりあえず以下のコードをメソッドに分けたくてやってみたところエラーが出ました。変数がうまくメソッドに渡せていないのだろうと思い、調べると「変数のデータ型 変数名」と書いてあったのでやってみたのですがエラーになりました。
この解決方法と、ほかにもメソッドに分けられる部分があれば教えていただきたいです。何か追記しなければならない部分等あればよろしくお願いします。
論プロエディタの物を質問されている方を見つけられなかったのですが、教えていただけると幸いです。初心者でわけわからないようなコードかもしれませんがよろしくお願いします。

該当のソースコード

メソッドに分けたい部分↓

java

1 2if(key() == 37){ 3 nezumi.warp(nezumi.x() - 5,nezumi.y()); 4}else if(key() == 39){ 5 nezumi.warp(nezumi.x() + 5,nezumi.y()); 6}

変更したもの↓

java

1public class CatAndRat extends Turtle { 2 public static void main( String[] args){ 3 Turtle.startTurtle(new CatAndRat(),args); 4 } 5 public void start() { 6 System.out.println("CatAndRat: Version 8"); 7 hide(); 8//得点版生成 9 int score = 0; 10 TextTurtle scoreBoard = new TextTurtle(""); 11 scoreBoard.warp(600,50); 12//画面サイズ設定 13 window(); 14//キャラ生成 15 ImageTurtle nezumi = new ImageTurtle("nezumi.png"); 16 ImageTurtle cat1 = new ImageTurtle("cat.png"); 17 ImageTurtle cat2 = new ImageTurtle("cat.png"); 18 ImageTurtle cat3 = new ImageTurtle("cat.png"); 19 ImageTurtle cat4 = new ImageTurtle("cat.png"); 20 ImageTurtle cheese1 = new ImageTurtle("cheese.png"); 21 ImageTurtle cheese2 = new ImageTurtle("cheese.png"); 22 ImageTurtle cheese3 = new ImageTurtle("cheese.png"); 23 ImageTurtle cheese4 = new ImageTurtle("cheese.png"); 24 ImageTurtle cheese5 = new ImageTurtle("cheese.png"); 25 ImageTurtle cheese6 = new ImageTurtle("cheese.png"); 26 ImageTurtle cheese7 = new ImageTurtle("cheese.png"); 27//音楽 28 makesound(); 29 SoundTurtle hitc = new SoundTurtle("hitc.mp3"); 30 hitc.loadOnMemory(); 31 SoundTurtle hitcat = new SoundTurtle("hitcat.mp3"); 32 hitcat.loadOnMemory(); 33//初期値のワープ 34 cat1.warp(random(640),0); 35 cat2.warp(random(640),0); 36 cat3.warp(random(640),0); 37 cat4.warp(random(640),0); 38 cheese1.warp(250,0); 39 cheese2.warp(320,0); 40 cheese3.warp(420,0); 41 cheese4.warp(520,0); 42 cheese5.warp(150,0); 43 cheese6.warp(80,0); 44 cheese7.warp(600,0); 45 nezumi.warp(320,350); 46 47 while(true){ 48 ke(ImageTurtle nezumi); 49 //if(key() == 37){ 50 //nezumi.warp(nezumi.x() - 5,nezumi.y()); 51 //}else if(key() == 39){ 52 //nezumi.warp(nezumi.x() + 5,nezumi.y()); 53 //} 54//待機 55 sleep(0.025); 56//ワープ先の設定 57 cat1.warp(cat1.x(),cat1.y() + 5); 58 cat2.warp(cat2.x(),cat2.y() + 5); 59 cat3.warp(cat3.x(),cat3.y() + 5); 60 cat4.warp(cat4.x(),cat4.y() + 5); 61 cheese1.warp(cheese1.x(),cheese1.y() + 5); 62 cheese2.warp(cheese2.x(),cheese2.y() + 5); 63 cheese3.warp(cheese3.x(),cheese3.y() + 5); 64 cheese4.warp(cheese4.x(),cheese4.y() + 5); 65 cheese5.warp(cheese5.x(),cheese5.y() + 5); 66 cheese6.warp(cheese6.x(),cheese6.y() + 5); 67 cheese7.warp(cheese7.x(),cheese7.y() + 5); 68//下まで行ったら上に行く 69 if(cat1.y() > 480){ 70 cat1.warp(cat1.x(),0); 71 } 72 if(cat2.y() > 600){ 73 cat2.warp(cat2.x(),0); 74 } 75 if(cat3.y() > 500){ 76 cat3.warp(cat3.x(),0); 77 } 78 if(cat4.y() > 700){ 79 cat4.warp(cat4.x(),0); 80 } 81 if(cheese1.y() > 600){ 82 cheese1.warp(cheese1.x(),0); 83 } 84 if(cheese2.y() > 500){ 85 cheese2.warp(cheese2.x(),0); 86 } 87 if(cheese3.y() > 700){ 88 cheese3.warp(cheese3.x(),0); 89 } 90 if(cheese4.y() > 800){ 91 cheese4.warp(cheese4.x(),0); 92 } 93 if(cheese5.y() > 480){ 94 cheese5.warp(cheese5.x(),0); 95 } 96 if(cheese6.y() > 900){ 97 cheese6.warp(cheese6.x(),0); 98 } 99 if(cheese7.y() > 550){ 100 cheese7.warp(cheese7.x(),0); 101 } 102 103//ネズミが当たった時 104 if(cat1.intersects(nezumi)){ 105 hitcat.play(); 106 } 107 if(cat2.intersects(nezumi)){ 108 hitcat.play(); 109 } 110 if(cat3.intersects(nezumi)){ 111 hitcat.play(); 112 } 113 if(cat4.intersects(nezumi)){ 114 hitcat.play(); 115 } 116 if(cheese1.intersects(nezumi)){ 117 score++; 118 hitc.play(); 119 } 120 if(cheese2.intersects(nezumi)){ 121 score++; 122 hitc.play(); 123 } 124 if(cheese3.intersects(nezumi)){ 125 score++; 126 hitc.play(); 127 } 128 if(cheese4.intersects(nezumi)){ 129 score++; 130 hitc.play(); 131 } 132 if(cheese5.intersects(nezumi)){ 133 score++; 134 hitc.play(); 135 } 136 if(cheese6.intersects(nezumi)){ 137 score++; 138 hitc.play(); 139 } 140 if(cheese7.intersects(nezumi)){ 141 score++; 142 hitc.play(); 143 } 144 scoreBoard.text(score); 145 update(); 146 } 147 } 148 public void window() { 149 window.size(640,480); 150 window.warp(100,100); 151 } 152 void makesound() { 153 SoundTurtle bgm = new SoundTurtle("pakkuwoman.mp3"); 154 bgm.play(); 155 } 156 157 void ke(ImageTurtle nezumi) { 158 if(key() == 37){ 159 nezumi.warp(nezumi.x() - 5,nezumi.y()); 160 }else if(key() == 39){ 161 nezumi.warp(nezumi.x() + 5,nezumi.y()); 162 } 163 } 164}

以下、エラーメッセージ
CatAndRat.java:53: エラー: ')'がありません
ke(ImageTurtle nezumi);
^
CatAndRat.java:53: エラー: 文ではありません
ke(ImageTurtle nezumi);
^
CatAndRat.java:53: エラー: ';'がありません
ke(ImageTurtle nezumi);
^
エラー3個

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

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

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

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

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

jimbe

2023/01/30 04:15

>論プロエディタの物を質問されている方を見つけられなかった 論プロエディタ自体がプログラミング教育環境として開発されたもので、使われているのも一部の大学だけなのではないでしょうか。 フリーソフトみたいですが、 google で探しても数件しか記事が出てきませんでしたし。
guest

回答1

0

ベストアンサー

ke(ImageTurtle nezumi);

メソッドの呼び出しに変数の型は書きませんが…。

ke(nezumi);

では?


一番行数を取っている cat や cheese の処理をまずメソッドにするべきでしょう。
その際、「//キャラ生成」「//初期値のワープ」とか「//ワープ先の設定」「//下まで行ったら上に行く」といった、処理毎に各オブジェクトを使うのではなく、 cat1 の生成とワープの設定、 cat2 の生成とワープの設定、・・・、cat1 のワープ先の設定と下まで行ったら上に行く処理、 cat2 のワープ先の設定と下まで行ったら上に行く処理、・・・と各オブジェクト毎に処理を纏めると、それがメソッドとして分ける単位に出来ます。
そして、配列を習っていれば、 cat や cheese を配列にして for で回すことが出来ます。
以下は、こちらに実行環境が無いのでコンパイルだけ通したコードです。

java

1public class CatAndRat extends Turtle { 2 public static void main(String[] args) { 3 Turtle.startTurtle(new CatAndRat(), args); 4 } 5 6 private int score = 0; 7 8 public void start() { 9 System.out.println("CatAndRat: Version 8"); 10 hide(); 11 //得点版生成 12 //int score = 0; 13 TextTurtle scoreBoard = new TextTurtle(""); 14 scoreBoard.warp(600,50); 15 //画面サイズ設定 16 window(); 17 //キャラ生成 18 ImageTurtle nezumi = new ImageTurtle("nezumi.png"); 19 nezumi.warp(320,350); 20 21 int[] catYMaxs = { 480, 600, 500, 700 }; 22 ImageTurtle[] cats = new ImageTurtle[catYMaxs.length]; 23 for(int i=0; i<cats.length; i++) { 24 cats[i] = createCat(); 25 } 26 27 int[] cheesesInitXs = { 250, 320, 420, 520, 150, 80, 600 }; 28 int[] cheesesYMaxs = { 600, 500, 700, 800, 480, 900, 550 }; 29 ImageTurtle[] cheeses = new ImageTurtle[cheesesInitXs.length]; 30 for(int i=0; i<cheeses.length; i++) { 31 cheeses[i] = createCheese(cheesesInitXs[i]); 32 } 33 //音楽 34 makesound(); 35 SoundTurtle hitc = createSound("hitc.mp3"); 36 SoundTurtle hitcat = createSound("hitcat.mp3"); 37 38 while(true){ 39 ke(nezumi); 40 41 //待機 42 sleep(0.025); 43 44 for(int i=0; i<cats.length; i++) { 45 moveCat(cats[i], catYMaxs[i], nezumi, hitcat); 46 } 47 48 for(int i=0; i<cheeses.length; i++) { 49 moveCheese(cheeses[i], cheesesYMaxs[i], nezumi, hitc); 50 } 51 52 scoreBoard.text(score); 53 update(); 54 } 55 } 56 57 public void window() { 58 window.size(640, 480); 59 window.warp(100, 100); 60 } 61 62 void makesound() { 63 SoundTurtle bgm = new SoundTurtle("pakkuwoman.mp3"); 64 bgm.play(); 65 } 66 67 void ke(ImageTurtle nezumi) { 68 if (key() == 37) { 69 nezumi.warp(nezumi.x() - 5, nezumi.y()); 70 } else if (key() == 39) { 71 nezumi.warp(nezumi.x() + 5, nezumi.y()); 72 } 73 } 74 75 private ImageTurtle createCat() { 76 ImageTurtle cat = new ImageTurtle("cat.png"); //キャラ生成 77 cat.warp(random(640),0); //初期値のワープ 78 return cat; 79 } 80 81 private ImageTurtle createCheese(int x) { 82 ImageTurtle cheese = new ImageTurtle("cheese.png"); //キャラ生成 83 cheese.warp(x,0); //初期値のワープ 84 return cheese; 85 } 86 87 private void moveCat(ImageTurtle cat, int ymax, ImageTurtle nezumi, SoundTurtle hitcat) { 88 cat.warp(cat.x(),cat.y() + 5); //ワープ先の設定 89 if(cat.y() > ymax){ //下まで行ったら上に行く 90 cat.warp(cat.x(),0); 91 } 92 if(cat.intersects(nezumi)){ //ネズミが当たった時 93 hitcat.play(); 94 } 95 } 96 97 private void moveCheese(ImageTurtle cheese, int ymax, ImageTurtle nezumi, SoundTurtle hitc) { 98 cheese.warp(cheese.x(),cheese.y() + 5); //ワープ先の設定 99 if(cheese.y() > ymax){ //下まで行ったら上に行く 100 cheese.warp(cheese.x(),0); 101 } 102 if(cheese.intersects(nezumi)){ //ネズミが当たった時 103 score++; 104 hitc.play(); 105 } 106 } 107 108 private SoundTurtle createSound(String filename) { 109 SoundTurtle sound = new SoundTurtle(filename); 110 sound.loadOnMemory(); 111 return sound; 112 } 113}

投稿2023/01/29 19:20

編集2023/01/30 06:23
jimbe

総合スコア12545

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

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

yuyy

2023/01/29 20:30 編集

呼び出しに変数の型は書かないのですね!修正してコンパイルしたところ成功しました。ありがとうございました! 複数の変数を渡す場合はかっこの中を何かで区切らないといけないのでしょうか。
jimbe

2023/01/30 02:16 編集

複数の引数は "," 区切りです。 cat1.warp(random(640),0); 等と使っていますよね。 これらは java の基本中の基本であって、入門書・サイト等を見れば必ず書いてあると思います。 わざわざ時間の掛かるQAサイトよりも、入門サイトを検索して読みまくるほうが他のことも知られて良いのではないでしょうか。
yuyy

2023/01/30 05:54

すみません、サイトなどを見ても理解できなくて質問しました。回答ありがとうございました。
jimbe

2023/01/30 11:04 編集

Turtle のメソッドの呼び出しは問題無く出来ているのですから、何か難しく考えすぎているのかもしれませんね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問