パワ○ケ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}
あなたの回答
tips
プレビュー