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

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

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

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

Q&A

2回答

3417閲覧

JAVAのコンソールログでRPGの作成

Yoshinori

総合スコア35

Java

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

0グッド

0クリップ

投稿2015/07/16 10:48

学校の課題でコンソールログで動くRPGを作れといわれました
以下のコードなのですが主人公(●)が動きません
どうすれば動ききますか?

Java

1import java.util.Scanner; 2 3 4public class RPG { 5 6 public static void main(String[] args) { 7 System.out.println("hで左、kで右、uで上、jでした"); 8 Scanner sc = new Scanner(System.in); 9 10 Map map = new Map(); 11 String hero = "主"; 12 int x = 18; 13 int y = 6; 14 map.main[x][y] = hero; 15 int a = 0; 16 do { 17 18 19 //Map 20 for(int i = 0; i < map.main.length; i++){ 21 for(int j = 0; j < map.main[0].length; j++){ 22 if(j % 20 == 0){ 23 System.out.println(); 24 }else { 25 System.out.print(map.main[i][j]); 26 } 27 } 28 } 29 30 31 32 System.out.println(); 33 System.out.println("下に入力"); 34 String action = sc.next(); 35 36 switch(action){ 37 38 case "h": 39 x--; 40 break; 41 42 case "k": 43 x++; 44 break; 45 46 case "u": 47 y++; 48 break; 49 50 case "j": 51 y--; 52 break; 53 54 default: 55 break; 56 } 57 58 59 60 }while( a == 0); 61 62} 63} 64

Java

1 2public class Map { 3 4 String[][] main = {{"海","海","海","海","海","海","海","海","海","海","海","海","海","海","海","海","海","海","海","海"}, 5 {"海","海","山","山","山","山","山","山","山","山","山","山","山","草","草","草","草","草","海","海"}, 6 {"海","山","山","山","山","山","山","山","山","山","山","山","草","草","草","草","草","草","草","海"}, 7 {"海","山","山","山","山","山","山","山","山","山","草","草","草","草","草","草","草","草","草","海"}, 8 {"海","山","山","山","山","山","山","草","草","草","草","草","草","草","草","草","草","草","草","海"}, 9 {"海","森","森","森","森","森","森","森","森","森","草","草","草","草","草","草","草","草","草","海"}, 10 {"海","森","森","森","森","森","森","森","森","森","森","草","草","草","草","草","草","草","草","海"}, 11 {"海","森","森","森","森","森","森","森","森","森","草","草","草","草","草","草","草","草","草","海"}, 12 {"海","草","森","森","森","森","森","森","森","森","草","草","草","草","草","草","草","草","草","海"}, 13 {"海","草","草","草","草","草","草","草","草","草","草","草","草","草","草","草","草","草","草","海"}, 14 {"海","草","草","草","草","城","草","草","草","草","草","草","草","草","草","草","草","草","草","海"}, 15 {"海","草","草","草","草","道","草","草","草","草","草","草","草","草","草","草","森","森","森","海"}, 16 {"海","草","草","草","草","道","草","草","草","草","草","草","草","草","草","森","森","森","森","海"}, 17 {"海","草","草","草","草","道","草","草","草","草","草","草","草","草","草","草","森","森","森","海"}, 18 {"海","草","草","草","道","道","道","道","道","道","道","道","道","街","草","草","草","草","草","海"}, 19 {"海","草","草","草","道","草","草","草","草","草","草","草","草","草","草","草","草","草","草","海"}, 20 {"海","草","草","草","道","草","草","草","草","草","草","草","草","草","草","草","草","草","草","海"}, 21 {"海","草","草","草","道","草","草","草","草","草","草","草","草","草","草","草","草","草","草","海"}, 22 {"海","海","草","道","道","道","草","草","草","草","草","草","草","草","草","草","草","草","海","海"}, 23 {"海","海","海","海","海","海","海","海","海","海","海","海","海","海","海","海","海","海","海","海"}}; 24 25 26 27 28 29} 30

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

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

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

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

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

guest

回答2

0

初心者らしいバグなので、丁寧めに説明します。

悪くないコードですが、インデントなど調整して少し読みやすくしました。
(個人的な好みもあるので、これが正解ではありません。)
更にコメントをして各々の処理に名前をつけました。

Java

1import java.util.Scanner; 2 3public class RPG { 4 public static void main(String[] args) { 5 // 初期メッセージ 6 System.out.println("hで左、kで右、uで上、jでした"); 7 // 最初のコマンド取得 8 Scanner sc = new Scanner(System.in); 9 10 // マップの読み込み 11 Map map = new Map(); 12 13 // 主人公の位置設定 14 String hero = "主"; 15 int x = 18; 16 int y = 6; 17 18 // 主人公をマップに配置 19 map.main[x][y] = hero; 20 int a = 0; 21 // メインループ 22 do { 23 //Mapの表示 24 for(int i = 0; i < map.main.length; i++){ 25 for(int j = 0; j < map.main[0].length; j++){ 26 if(j % 20 == 0){ 27 System.out.println(); 28 }else { 29 System.out.print(map.main[i][j]); 30 } 31 } 32 } 33 34 // 次のコマンド取得 35 System.out.println(); 36 System.out.println("下に入力"); 37 String action = sc.next(); 38 39 // 主人公の位置を更新 40 switch(action){ 41 case "h": 42 x--; 43 break; 44 45 case "k": 46 x++; 47 break; 48 49 case "u": 50 y++; 51 break; 52 53 case "j": 54 y--; 55 break; 56 57 default: 58 break; 59 } 60 }while( a == 0); 61 62 } 63}

ちょっと長くて読みづらいので、大きな制御文とコメントのみにします。

Java

1public class RPG { 2 public static void main(String[] args) { 3 // 1、初期メッセージ 4 // 2、最初のコマンド取得 5 6 //3,マップの読み込み 7 //4,主人公の位置設定 8 //5,主人公をマップに配置 9 10 // 6,メインループ 11 do { 12 //7,Mapの表示 13 // 8,次のコマンド取得 14 // 9,主人公の位置を更新 15 }while(true); 16 } 17}

メインループの中で次のコマンドを受け取り(8)、主人公の位置を変更(9)していますが、メインループの外でしか主人公をマップに配置(5)していないので、最初の配置から主人公は移動しません。主人公の配置をメインループに足しましょう(9の後?)。

そうすると、主人公の位置は更新されますが、argiusさんの1で指摘する問題が出ます。

他にも、指摘したいところ、バグありますが、グッと我慢します。一つずつ解決しプログラムが進化する楽しみを奪いたくないからです。バグにあたったらまた、質問を作成して下さい。楽しみにしています。

投稿2015/07/16 12:57

iwamoto_takaaki

総合スコア2883

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

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

Yoshinori

2015/07/16 13:02

丁寧にありがとうございます!! 明日はおそらく台風の影響で学校が休みなのでご指摘していただいた場所の改善に没頭します!
Yoshinori

2015/07/17 01:31

おはようございます・・・。 あられから試行錯誤していろいろ試したらエラーだらけで・・・ なにから手を付けたらいいかもわからなくなりました>< なにをどこにどう書けばいいでしょうか。。。
guest

0

  1. マップに直接主人公を書きこんでしまうと、主人公が移動した後のマップをどうやって元に戻すのかという問題が発生します。

2.map.main[x][y] = hero;というコードは、後からxyの値を変えても、heroの位置は変わりません。

ループの中で、主人公が居る位置に来た時に、マップの代わりに主人公を出力してあげるようにしてみてください。

投稿2015/07/16 11:18

編集2015/07/17 00:13
argius

総合スコア9388

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問