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

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

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

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

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

Q&A

0回答

679閲覧

Java マインスイーパもどきのゲームでの爆弾生成の配置

michael-ilcsy

総合スコア180

Java

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

Swing

SwingはJavaに標準で付属するグラフィック関連のクラスライブラリを指します。

0グッド

2クリップ

投稿2018/05/12 13:28

編集2022/01/12 10:55

パワ○ケ3,8にあるような地雷原を1マスずつ進むようなマインスイーパもどきのゲームを作りました
下記の画像のような感じで4つの難易度があります(オレンジがスタートで青がゴール、ピンクが爆弾)
イメージ説明
大体完成したので少し遊んでみたのですが、爆弾の生成を穴掘り法でやっているせいか少し配置がよろしくないなと感じました。
自分が思う問題点は

  • 迷路用のアルゴリズムから少し壁を削ったものを爆弾としているせいで、やたら直線が多い
  • 迷路用のアルゴリズム(ry、爆弾がないところがやたらうねうねしている
  • 迷路用(ry、マインスイーパにあるような爆弾が無いところが集まった部屋のようなものがほとんどない
  • 迷(ry、いわゆる運ゲーになることがかなり多い。(これは部屋が少ないことにも関連すると思います)

といったものです。(高難易度になるほど顕著)
穴掘り法のアルゴリズムもまるまる拾ってきたものなので、こういった問題点を解消して爆弾を生成するロジックがまるで浮かびません。

そこで、皆さんに
①,もっとこういう爆弾の配置にしたほうがいい。自分ならこういう配置にする。(爆弾以外にもスタートゴールの位置なども含めて)
②,①であげた配置や、↑の問題点リストを解消するために自分ならこう書く。(これを教えていただけるとすごくありがたいです)
以上の二点で①だけでもいいのでご意見をお伺いしたいです。どうかよろしくお願いします

以下爆弾作成のソースなど

java

1import java.util.*; 2import java.security.SecureRandom; 3 4public class Maze { 5 public static int[][] maze; 6 7//maze作成は穴掘り法そのまんまなので省略// 8 9 public static void outputMaze(int[][] maze) { / 10 for (int i = 0; i < maze.length; i++) { 11 for (int j = 0; j < maze[i].length; j++) { 12 if (maze[i][j] == 0) { 13 int ran = new SecureRandom().nextInt(10); 14 if (ran>6) { //壁をランダムに3割削っている 15 maze[i][j] = 1; //0が壁(=爆弾),1が通路 16 } 17 } 18 } 19}

java

1import java.security.SecureRandom; 2 3public class Square { 4 public static int[] currentSquare = {0,0}; 5 public static int[] goalSquare = {0,0}; 6 public static int difficulty; //難易度別のマスの数(9*9とか19*19とか) 7 8 public static void decideSquare (int difficulty) { //スタートとゴールを決める 9 Square.difficulty = difficulty; 10 int[][] maze = Maze.maze; 11 12 int center = (difficulty-1)/2-1; //ちょうど真ん中の列 13 int ranStart = new SecureRandom().nextInt(3); 14 int[] startSquare = {0,center + ranStart-1}; //スタートは最上列真ん中と左右1つずつからランダム 15 currentSquare = startSquare; 16 for(int i=1; i<4; i++) { //スタート地点を0にするように(周りに爆弾がないように) 17 maze[1][startSquare[1]+i-1] = 1; 18 maze[2][startSquare[1]+i-1] = 1; 19 } 20 21 for(;;){ 22 int ranGoal = new SecureRandom().nextInt(center*2+1)-center; 23 goalSquare[0] = difficulty-3; 24 goalSquare[1] = center + ranGoal; //ゴールは最下列全てからランダム(爆弾があったらやり直し) 25 if (maze[goalSquare[0]+1][goalSquare[1]+1]==1) { //爆弾がないとき 26 break; 27 } 28 } 29 } 30}

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

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

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

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

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

sakura_hana

2018/05/13 01:05

元ゲームを知らなくて恐縮なのですが、「スタートとゴールが存在する」は必須要件なのでしょうか? またクリア条件は何なのでしょうか?(ゴールする?全部の爆弾を見付ける?)
michael-ilcsy

2018/05/13 03:27

マインスイーパと違い上下左右に1マスずつしか進めないのでスタートとゴールは必須です。(場所は近すぎなければどこでもいいと思います) またクリア条件は「爆弾を踏まずにゴールする」です。一応マインスイーパのように右クリックで爆弾をマークできる機能はつけています。
yukkuri

2018/11/17 08:12

6ヶ月も前の質問ですが、 まるまる拾ってきた、とはどこからでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問