『IMines(あいまいんず)』は、隠された地雷を避けながらマスを開くパズルゲームです。
【ルール】
縦 16 x 横 16 の 256 マスのフィールド上に 40 個の地雷が隠されています。
(昔の「Microsoft Windows」付属「マインスイーパー」の「中級」と同じ)
地雷を避けつつマスを開いて下さい。
開かれたマスに数字が書かれている場合があります。
その数字は、その周囲 8 マスに隠されている地雷の個数を表しています。
地雷のあるマスが判明した場合、そのマスに印を付けることができます。
フィールド右上の数字は、隠されている地雷の個数を示しており、
マスに印を付けることで、この数字が減少します。
開かれたマスに書かれた数字と、地雷の残り個数を手掛かりに、
地雷が置かれていないマスを全て開けばゲームクリアです。
地雷の置かれているマスを開けばゲームオーバーです。
【操作】
矢印 : 現在位置を移動する
SPACE : 現在位置のマスを開く
上記以外のキー : 現在位置のマスに印を付ける(または印を消す)
【更新履歴】
2018/03/04 初版公開
2018/05/11 初手で地雷を踏まないよう修正、印をイチゴに変更、コード最適化
【ソースコード解説】
《変数》
K : Key, キー入力値
X : 現在位置の X 座標
Y : 現在位置の Y 座標
C : Character, 現在位置の本来のキャラクタ
O : Open, 開いたマスの数
M : Mine, 地雷の残り個数
U : 地雷を配置する際の地雷の Y 座標
V : 地雷を配置する際の地雷の X 座標
I,J : Iterator, ループ変数
S : SCR, 一時変数(ゲームオーバー時の地雷配置表示に利用)
H : Hit, 一時変数(ゲームオーバー時の地雷配置表示に利用)
《配列》
[0] ~ [15] : 地雷の配置
《PCGパターン》
#E0 : 現在位置のキャラクタ
《コード》
5 : タイトル
10 : 初期化
20 : フィールド描画
30 : キー入力受付と矢印キー押下時の処理
30 : 矢印キー押下時の処理
40 : マスに印を付けるキー押下時の処理
50 : SPACE キー押下時の処理と地雷の配置
60 : マスを開く処理とゲームクリア判定
70 ~ 80 : ゲームオーバー時の処理
90 : 地雷の残り個数の表示
100 : 現在位置へカーソルを移動
110 : 現在位置のキャラクタ定義
120 : 空いているマスへ地雷を配置
【その他】
容量の都合により「開いたマス周囲に地雷が無い場合に、地雷の無いマスを自動的に開く処理」は実装されていません。
5 'IMines 10 CLS:CLV:CLP:C=2:M=40 20 FOR I=2 TO 19:FOR J=7 TO 24:LC J,I:?CHR$(2-((I=2)|(I=19)|(J=7)|(J=24)));:NEXT:NEXT:GSB90:GSB100:GSB110:?CHR$(#E0); 30 K=INKEY():IF !K GOTO30 ELSE IF K>27&&K<32 GSB100:?CHR$(C);:X=(X-(K=28)+(K=29))&15:Y=(Y-(K=30)+(K=31))&15:GSB100:C=SCR():GSB110:?CHR$(#E0);:GOTO30 40 IF K!=32&&C=2||C=255 C=(C=2)*255+(C=255)*2:M=M-(C=255)+(C=2):GSB90:GSB110:GOTO30 50 IF C!=2 GOTO30 ELSE IF !O FOR I=1 TO 40:GSB120:NEXT 60 IF !([Y]>>X&1) C=0:FOR I=Y-1 TO Y+1:IF I<0||I>16 NEXT ELSE FOR J=X-1 TO X+1:C=C+[I]>>J&1:NEXT:NEXT:C=C+48*(C>0):GSB100:GSB110:?CHR$(#E0);:O=O+1:IF O<216 GOTO30 ELSE LC 13,21:?"CLEAR!":END 70 C=42:GSB110:FOR Y=0 TO 15:FOR X=0 TO 15:GSB100:S=SCR():H=[Y]>>X&1:IF S=2&&H ?"*"; ELSE IF S=255&&!H ?"x"; 80 NEXT:NEXT:LC 11,21:?"GAME OVER!":END 90 LC 23,1:?M," ";:RTN 100 LC X+8,Y+3:RTN 110 FOR I=0 TO 7:POKE #700+I,~PEEK(C*8+I):NEXT:RTN 120 U=RND(16):V=RND(16):IF ABS(X-U)<2&&ABS(Y-V)<2 GOTO120 ELSE IF [U]>>V&1 GOTO120 ELSE [U]=[U]|1<<V:RTN
windows版と違ってまとめて開くことができない分、こちらの方がより集中力を要求されますね。タイムアタックができるようになったら、一晩中遊んでしまいそうです。あとは、初手は地雷を踏まないという仕様にすると、より一層マインスイーパになりますね。