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

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

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

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

Q&A

解決済

1回答

4249閲覧

Javaでマス当てゲームを作りたい

astray78

総合スコア9

Java

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

0グッド

0クリップ

投稿2016/11/29 09:55

編集2016/11/30 04:10

###前提・実現したいこと
Javaで5*5のマス目から当たりを見つけるプログラムを作りたいと考えています。
インターネットで下記のプログラムを見つけ応用できないかと思っています。
プログラムで追加したいこと
・5*5のマスの下に当たりの数を表示する 例 当たり:
・見つけた当たりの数を表示する 例 見つけた当たり:
・すべての当たりを見つけたらMission Conpleteと表示し、すべての当たりを見つけるまでに選択した回数を表示する 例 あなたが当たりをすべて見つけるまでX回かかりました。

以上です。よろしくお願いします。

###発生している問題・エラーメッセージ

###該当のソースコード

Java

1import java.io.BufferedReader; 2import java.io.InputStreamReader; 3import java.util.Random; 4 5 6public class sagasu2 { 7 //public class Game { 8 9 private boolean map[][]; 10 private boolean picked[][]; 11 12 public void init(int size) { 13 if (size > 0) { 14 map = new boolean[size][size]; 15 picked = new boolean[size][size]; 16 Random rand = new Random(); 17 int x = rand.nextInt(size);//当たりの位置 18 int y = rand.nextInt(size); 19 map[x][y] = true; 20 } else 21 System.out.println("No Such Place!!"); 22 23 } 24 25 public boolean guess(int x, int y) throws NumberFormatException{ 26 if (map != null && x >= 0 && x < map.length && y >= 0 27 && y < map[0].length) { 28 picked[x][y] = true; 29 return map[x][y]; 30 } else throw new NumberFormatException(); 31 } 32 33 public boolean renderGrid() { 34 String s = " "; 35 if (picked == null) 36 return false; 37 for (int i = 0; i < picked.length; i++) 38 s += " "+i+" "; 39 s+="\n"; 40 for (int i = 0; i < picked.length; i++) { 41 s += i+"|"; 42 for (int j = 0; j < picked[i].length; j++) { 43 if (picked[i][j]) 44 s += " X |"; 45 else 46 s += " ? |"; 47 } 48 s += "\n"; 49 } 50 System.out.println(s); 51 return true; 52 } 53 54 public static void main(String[] args) { 55 try { 56 sagasu2 g = new sagasu2(); 57 int size = 5; 58 g.init(size); 59 BufferedReader br = new BufferedReader(new InputStreamReader( 60 System.in)); 61 int x = -1; 62 int y = -1; 63 System.out.println("java TreasureHunter"); 64 while (true) { 65 try { 66 g.renderGrid(); 67 //当たりの数 68 //見つけた数 69 //同じところを選んだらAlready Selected!! 70 //当たりをすべて見つけたら☆☆Mission Complete!!☆☆と表示.クリックした回数を表示 71 System.out.print("縦の位置は?"); 72 x = Integer.parseInt(br.readLine()); 73 System.out.print("横の位置は?"); 74 y = Integer.parseInt(br.readLine()); 75 76 if(g.guess(x, y)){ 77 System.out.println("\n正解!"); 78 //for(int i = 0; i<g.length; i++){ 79 //System.out.println("Founded :" + g.length); 80 System.out.print("続ける(Y)?"); 81 if(!br.readLine().equals("Y")){ 82 break; 83 }else g.init(size); 84 85 }else System.out.println("\nはずれ!\n\n" + 86 ""); 87 } catch (NumberFormatException e) { 88 System.out.println("ERROR : 位置を確認して下さい\n"); 89 } 90 91 } 92 93 } catch (Exception e) { 94 e.printStackTrace(); 95 } 96 } 97 98 }

###試したこと
見つけた当たりや見つけるまでに選択した回数をfor文で回してできるかと思いましたがうまくいきませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
Eclipseで開発しています

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

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

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

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

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

KSwordOfHaste

2016/11/29 15:45

質問文を編集し、コード部分は「```java」+「改行」で始め、「```」のみの行で閉じてください。質問を登録する前にプレビュー画面で(他の質問に書かれているように)きちんとコードとして表示されているか確認しましょう。。
Y.H.

2016/11/30 00:59

「うまくいきませんでした。」とは具体的にどの部分のコードでどのような動作を期待しどのような結果になりどのような問題があるのかを記載してください。
astray78

2016/11/30 11:14

期待していたこと System.out.print("縦の位置は?"); x = Integer.parseInt(br.readLine()); System.out.print("横の位置は?"); y = Integer.parseInt(br.readLine()); if(g.guess(x, y)){ System.out.println("\n正解!"); //for(int i = 0; i<g.length; i++){ //System.out.println("Founded :" + g.length); の部分で for文を回し、当たりの数:  見つけた数: が出ることを期待していました。 結果 System.out.println("Founded :" + g.length);が「Founded :」と出力されると思っていましたが、 表示されませんでした。
Y.H.

2016/11/30 11:45

astray78さん。ここではなく質問の試したことに記載いただいた方がいいです。ここに書いても見ずらいですし、この欄は表示した時点では閉じています。
astray78

2016/11/30 14:59

>>Y.H.さん ありがとうございます。ここを使うのは初めてなものでお手数かけて申し訳ございません。
guest

回答1

0

ベストアンサー

以下が追加後です

java

1 2import java.io.BufferedReader; 3import java.io.InputStreamReader; 4import java.util.Random; 5import java.util.*; 6 7public class RTS { 8 9 private static boolean map[][]; 10 private static boolean picked[][]; 11 private static boolean at[][]; 12 13 static int atar = 6;// 当たりの数 14 static int remai = atar; 15 static int cou = 0; 16 17 public void init(int size) { 18 if (size > 0) { 19 if (atar > (size * size) || atar < 0) { 20 System.out.println("当たりのの数が多すぎるか0より少ない"); 21 System.exit(1); 22 } 23 map = new boolean[size][size]; 24 picked = new boolean[size][size]; 25 at = new boolean[size][size]; 26 27 Random rand = new Random(); 28 ArrayList<Integer> a = new ArrayList<>(); 29 for (int b = 0; b < (size * size); b++) { 30 a.add(b); 31 } 32 33 Collections.shuffle(a); 34 for (int y2 = 0; y2 < atar; y2++) { 35 int a3 = a.get(0); 36 a.remove(0); 37 int x = a3 / size;// 当たりの位置 38 int y = a3 % size; 39 map[x][y] = true; 40 } 41 42 } else 43 System.out.println("No Such Place!!"); 44 45 } 46 47 public boolean guess(int x, int y) throws NumberFormatException { 48 if (map != null && x >= 0 && x < map.length && y >= 0 49 && y < map[0].length) { 50 picked[x][y] = true; 51 return map[x][y]; 52 } else 53 throw new NumberFormatException(); 54 } 55 56 public boolean renderGrid() { 57 String s = " "; 58 if (picked == null) 59 return false; 60 for (int i = 0; i < picked.length; i++) 61 s += " " + i + " "; 62 s += "\n"; 63 for (int i = 0; i < picked.length; i++) { 64 s += " " + i + " | "; 65 for (int j = 0; j < picked[i].length; j++) { 66 if (at[i][j]) { 67 s += " ◎ |"; 68 69 } else if (picked[i][j]) { 70 s += " × |"; 71 } else 72 s += " ? |"; 73 } 74 s += "\n"; 75 } 76 System.out.println(s); 77 return true; 78 } 79 80 public static void main(String[] args) { 81 try { 82 RTS g = new RTS(); 83 int size = 5; 84 g.init(size); 85 BufferedReader br = new BufferedReader(new InputStreamReader( 86 System.in)); 87 int x = -1; 88 int y = -1; 89 System.out.println("java TreasureHunter"); 90 while (true) { 91 try { 92 g.renderGrid(); 93 System.out.println("見つけた当たり:" + (atar - remai)); 94 95 // 当たりの数 96 // 見つけた数 97 // 同じところを選んだらAlready Selected!! 98 // 当たりをすべて見つけたら☆☆Mission Complete!!☆☆と表示.クリックした回数を表示 99 System.out.print("縦の位置は?"); 100 x = Integer.parseInt(br.readLine()); 101 System.out.print("横の位置は?"); 102 y = Integer.parseInt(br.readLine()); 103 104 105 cou++; 106 107 if (g.guess(x, y)) { 108 System.out.println("\n正解!"); 109 map[x][y] = false; 110 at[x][y] = true; 111 remai--; 112 if (remai == 0) { 113 System.out.println("☆☆Mission Complete!!☆☆"); 114 g.renderGrid(); 115 System.out.println("あなたが全ての当たりを見つけるまで" + cou 116 + "回かかりました"); 117 118 System.out.print("続ける(Y)?"); 119 if (!br.readLine().equals("Y")) { 120 break; 121 } else 122 g.init(size); 123 } 124 125 } else 126 System.out.println("\nはずれ!\n\n" + ""); 127 } catch (NumberFormatException e) { 128 System.out.println("ERROR : 位置を確認して下さい\n"); 129 } 130 131 } 132 133 } catch (Exception e) { 134 e.printStackTrace(); 135 } 136 } 137 138

投稿2016/11/30 05:32

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問