• タイトル
    マインスイーパーlatte (電子工作マガジン2017年WINTER号掲載)

  • 開発環境
    IchigoJamBASIC1.2.1

  • 内容
    マインスイーパーです。

  • マインスイーパーlatte
  • 遊び方
    フィールドの中から爆弾を探すゲームです。 爆弾に隣接しているマスは隣接している爆弾の数が表示されるので、それをヒントに全てのマスを開けてください。

  • 操作方法
    横方向(X軸)と縦方向(Y軸)を入力してマスを開きます。 それぞれ1~8の数字を入力し、Enterします。 全て開けられれば成功、爆弾を開けてしまうと失敗です。 最後にかかった時間が表示されます。

  • プログラムのしくみ

    各関数の説明
    bm.clrフィールド用メモリクリア
    bm.set爆弾配置
    bm.disp画面表示
    引数 0:爆弾を伏せて表示 1:爆弾を表示
    返値 開いていないマスの数
    kyinキー入力
    引数 xy:"X"または"Y"の文字 pos:文字表示Y座標
    返値 入力された数値
    searchマスを開く
    引数 入力したX,Y座標
    返値 0:爆弾以外を開いた 0以外:爆弾を開いた
    main初期設定、画面表示
    残りマス=爆弾数、もしくは爆弾を開いてしまうまでループ
    結果表示

    変数表(グローバル変数のみ)
    B爆弾の数
    Tゲーム開始時のタイム
    mメモリ(配列)先頭アドレス
    x,y入力した座標
    n残りマス数
    s入力座標が爆弾かどうか

  • プログラムの具体的な入力方法
    可読性を良くするためスペースでインデントしていますが、行頭のスペースは入力しなくても動作します。

  • プログラムの改造
    変数"B"は爆弾の数です。増減して難易度を変更することができます。

  • (プログラム1)
    var B=6;
    function bm(f){
     this.clr=function(){
      var i=0;
      while(i<100 ){
       if((i>10)*(i<89 )*((i%10)%9!=0)){ mem(m+i,0xF4); }
       else{ mem(m+i,0); }
       i=i+1;
      }
     };
     this.set=function(){
      var i=B, r;
      while(i){
       r=(rnd(8)+1)*10+rnd(8)+1;
       if(mem(m+r)==0xF4){
        mem(m+r,0xF6);
        i=i-1;
       }
      }
     };
     this.disp=function(f){
      var i=1, c, n=0;
      cls();
      log("\\X12345678\nY\n");
      while(i<9){
       var j=0;
       log(i);
       while(j<9){
        c=mem(m+i*10+j);
        if((c>0)*(c<9 )){ c=c+0x30; }
        else{
         if((c>9)*(f==0)){ c=0xF4; }
        }
        log(chr(c));
        if(c==0xF4){ n=n+1; }
        j=j+1;
       }
       log("\n");
       i=i+1;
      }
      return(n);
     };
    }
    
    function kyin(xy,pos){
     lc(0,pos);
     log(xy,"= ");
     var k=input();
     if((k<1 )*(k>8)){ k=0; }
     return(k);
    }
    
    function search(u,v){
     var sp=m+100;	//stack pointer
     var src=v*10+u;	//search position
     var z=mem(m+src);	//search position char
     if(((u%10)%9==0)*((v%10)%9==0)){ return(0); }	//out side
     if(z<=9){ return(0); }	//number
     if(z==0xF6){ return(z); }	//bomb
    
     var indx=0;
     mem(sp,1);	//[0]=1
     mem(sp+1,src);	//[[0]]=[1]=src
    
     var x, y, z, j, count=0;
     while(indx9){
          mem(sp, mem(sp)+1);
          mem(sp+mem(sp),j);
         }
         if(z==0xF4){ mem(m+j,0); }
         x=x+1;
        }	//while(x
        y=y+1;
       } 	//while(y
      }
      mem(m+src,count);
     }	//while(co
     return(0);
    }
    
    //main
    var T=tick();
    var m=mem(" ");
    var bomb=new bm();
    var x=0, y=0, n=1, s=0;
    bomb.clr();
    bomb.set();
    n=bomb.disp(0);
    while((n!=B)*(s==0)){
     x=kyin("X",12);
     y=kyin("Y",13); 
     if(x*y){
      s=search(x,y);
     }
     n=bomb.disp(0);
    }
    bomb.disp(1);
    if(s){ log("\n\nGAME OVER\n"); }
    if(n==B){ log("\n\nCONGRATULATION!\n\n"); }
    log("TIME: ",(tick()-T)/1000,"sec\n");
    

    MixJuiceでのダウンロードURLは下記になります。
    mine_latte http://tagiyasoft.blog.jp/mine_latte.bin

    以下のように入力してD/Lしてください。
    NEW
    ? MJ GET http://tagiyasoft.blog.jp/mine_latte.bin
    

    ブラウザでD/LしてIchigoJamに転送する場合は、通信ソフトでバイナリ送信をしてください。
    (例:TeraTermの場合は、メニューの[ファイル]-[ファイル送信]で当該ファイルを送信します)

  • 参考ゲーム
    マインスイーパー

cpuemu - Alpha1 *このエミュレータはblogの仕様により、現在、正常に動作しません。
下記の場所のエミュレータをお使いください。
http://tagiyasoft.blog.jp/cpuemu-Alpha1.html




レジスタ直接入力(16進数を入力)

使い方

  • 使えるマシン語一覧:
    Cortex-M0 Armマシン語表(抜粋)(GitHub版)
    Cortex-M0 Armマシン語表(抜粋)(tagiyasoft版)
  • 下記のサイト等でbinaryーコードを作成し、テキストエリアにコピーします。
    Assembler for IchigoJam(GitHub版)
    Assembler for IchigoJam(tagiyasoft版)
  • [START]もしくは[STEP]ボタンで実行します。
  • コンソールには、実行したアセンブラの命令が表示されます。
  • テキストボックスに値(16進数)を入力して[SET]ボタンを押すと、指定したレジスタに値が直接入力されます。
  • プログラム内で一度も使われていないアドレスからのロード命令が実行されると実行が一時中断し、レジスタに値をセットするよう促されます。
  • プログラムカウンタはR15ですので、実行位置の変更(条件分岐先の変更など)はR15に直接値を入力してください。
  • テキストエリア内のプログラムを変更した場合は、[RESET]ボタンを押してください。

更新

  • 2017/12/31 対応命令追加、フラグ追加、コンソール表示追加、その他追加
cpuemu a1 (for IchigoJam)
APP: CC BY fukuno.jig.jp

IchigoJam定番プログラムの「かわくだりゲーム」が宇宙に飛び立ちました。

キミは天の川を、小惑星に当たらずに何光年進むことができるか?

asteroidbelt はるか遠方より小惑星が近づいてきます。
(天の川を一点透視図法で表現しています。)
ぶつからないよう矢印キーで避けてください。
宇宙空間なので慣性の法則により、宇宙船は同じ方向に動き続けるので注意。


10 'アマノガワクダリ ゲーム
20 CLS:CLV:CLT:X=16
30 FOR I= 0 TO 14
40 LC 14-I,I+8:?"/":LC 16+I,I+8:?"\";
50 NEXT
60 [0]=RND(30)+1
70 FOR I= 16 TO 1 STEP -1
80 IF [I] THEN LC ([I]-16)*I/16+15,7+I:?" ";
90 [I]=[I-1]
100 IF [I] THEN LC ([I]-16)*I/16+15,7+I:?".";
110 NEXT
120 IF SCR(X,23)=46 THEN LC X,23:? CHR$(244):LC 0,0:?"ダッシュツ キョリ=";TICK();"コウネン":END
130 K=INKEY()
140 IF K THEN W=(K=RIGHT)-(K=LEFT):IF W THEN V=W
150 LC X,23:?" ";
160 X=X+V
170 IF X<0  X=0
180 IF X>30 X=30
190 LC X,23:?CHR$(240);
200 GOTO 60

*入力時の注意
コピー&ペーストで入力する時は「\」および、全角カナを半角に変更してください。

↑このページのトップヘ