- 題名
テンケス+4x4文字 (電子工作マガジン2017年SPRING号掲載) - 開発環境
IchigoJamBASIC1.2.0 - 内容
プログラムは2つのプログラムから成っています。
プログラム1:4x4文字を表示します。
プログラム2:数字をスライドさせ、同じ数字を重ねて消していくパズルゲームです。 - 使い方(4x4文字)
プログラム1は、4バイト×4バイトの文字を表示するプログラムです。
配列[101]に表示したい文字のアスキーコード、USR関数の第2引数に表示したいVRAMアドレスを入れてコールします。
*注意:プログラムサイズを小さくするため表示アドレスのチェックは行っていません。
ですので、VRAM以外および#B9C以後のアドレスを表示位置に指定するとプログラムやデータが破壊されます。
・使用例
10 [101]=65:X=USR(#700,#900):'画面左上に「A」が表示されます
20 [101]=97:X=USR(#700,#900+10+32*6):'横10,縦6の位置に「a」が表示されます
30 [101]=255:X=3:Y=8:Z=USR(#700,#900+X+32*Y):'横3,縦8の位置に「イチゴ」が表示されます - 遊び方(テンケス)
4x4マスの中に数字が表示されます。
矢印キーを押すと数字がその方向に滑っていきます。
同じ数同士がぶつかると重なって次の数に変わります。
数字が「10」まで進むとマスから消えます。
数字が移動するごとに新たに2つの数字が表示されます。
空きマスが1マス以下になるとゲームオーバーです。
空きマスの探索中は左下に数字が表示されますので、数字が消えるまでキーは押さないでください。 - プログラムのしくみ
- プログラムの具体的な入力方法
プログラムリスト中の「□」はスペース1個です。
カードの枠線は「左ALT+SHIFT+キー」で入力します。
━ 左ALT+SHIFT+H
┃ 左ALT+SHIFT+I
┏ 左ALT+SHIFT+O(オー)
┓ 左ALT+SHIFT+P
┗ 左ALT+SHIFT+Q
┛ 左ALT+SHIFT+R
プログラム1の50行のLRUN文にプログラム2の保存番号を記入すると、プログラム1を実行後、自動的にプログラム2を読み込んで実行できます。 - プログラムの改造
プログラム1は、このゲーム以外でも使用することができます。
上記の使い方を参考に自作プログラム等に組み込んで使用してください。
なおプログラム1の2行目は機械語ルーチンを書き込むアドレスです。
現在はキャラクタ定義用のアドレスに書き込まれていますが、該当キャラクタを使用したい場合はアドレスを適宜変更してください。
(その場合はUSR関数の呼び出しアドレスも変えてください)
プログラム2の"if[k]=10"がマスから消える数字ですので、10以下にすると難易度が下がります。
(11以上にすると数字以外の文字になってしまいます)
変数表(プログラム2) | |
---|---|
I,J,W | ループ用 |
V | キー入力 |
S | スコア |
R | 乱数用 |
X,Y | マスのXY座標 |
K,Z | マスの座標を一列に変換した値 |
A | USR関数用ダミー変数 |
Z | マスの移動元の配列添字 |
U | マスの移動先の配列添字 |
[0]~[15] | マスの中の数字(画面表示は、左上[0]~右下[15]) |
[21]~[24] | 矢印キーが押された時のジャンプ先行番号 |
[101] | 4x4文字用 |
各行の処理 | |
---|---|
1行 | コメント |
2行 | 初期画面表示・分岐先行の設定 |
3行 | 数字を表示×2 |
4行 | キー入力・スコア表示 |
5行 | 空きマス探索・ゲームオーバー判断 |
6行 | マス内の数字をアスキーコードに変換 |
7行 | 4x4文字を表示 |
8,9行 | 左キーが押された場合の処理 |
10,11行 | 右キーが押された場合の処理 |
12,13行 | 上キーが押された場合の処理 |
14行 | 下キーが押された場合の処理 |
15行 | 数字を表示してサブルーチン終了 |
テンケス(プログラム1) |
---|
10'4x4 20 Z=#700 30 pokeZ,224,180,64,24,8,35,27,2,202,51,91,92,219,0,155,24,4,38,64,180,4,33,28,120,93,120,1,180,8,32,0,34,0,38,0,39,100,8,86,65,118,0,109,8,87,65,127,0,1,56 40 pokeZ+#32,247,209,116,8,125,8,1,188,3,34,47,70,23,64,191,0,38,70,22,64,62,68,128,54,6,112,164,8,173,8,1,48,1,57,242,209,28,48,2,51,64,188,1,62,216,209,224,188,112,71 50 LRUN(プログラム2の保存番号) |
テンケス(プログラム2) |
---|
1 'イッチ 2 clv:let[21],4,5,6,7:cls:?"┏━━━━┳━━━━┳━━━━┳━━━━┓ SCORE:0":FORI=1TO4:forj=1to4:?"┃□□□□┃□□□□┃□□□□┃□□□□┃":next:?"┣□□□□╋□□□□╋□□□□╋□□□□┫":next:lc0,20:? "┗━━━━┻━━━━┻━━━━┻━━━━┛" 2 clv:let[21],4,5,6,7:cls:?"「----v----v----v----フ SCORE:0":FORI=1TO4:forj=1to4:?"| | | | |":next:?">----+----+----+----<":next:lc0,20:?"L----^----^----^----ノ" 3 gsb5:gsb5 4 v=inkey()-27:ifv<1orv>4goto4elsegsb[20+v]*2:lc28,0:?s:goto3 5 j=1:fori=0to15:j=j*[i]:next:ifj?"GAME OVER":endelser=rnd(16):lc0,21:if[r]?r:goto5else[r]=1:gsb6:?" ";:rtn 6 fory=0to3:forx=0to3:k=y*4+x:[101]=[k]:if[k][101]=[k]+48:if[k]=10[k]=0:[101]=12:s=s+10 7 a=usr(#700,#921+y*160+x*5):next:next:rtn 8 forw=0to2:fory=0to3:forx=0to2:z=y*4+x:u=z+1:if[z]OR[u]if[z]=0[z]=[u]:[u]=0elseif[z]=[u]s=s+[z]:[z]=[z]+1:[u]=0 9 goto15 10 forw=0to2:fory=0to3:forx=1to3:z=y*4+4-x:u=z-1:if[z]or[u]if[z]=0[z]=[u]:[u]=0elseif[z]=[u]s=s+[z]:[z]=[z]+1:[u]=0 11 goto15 12 forw=0to2:forx=0to3:fory=0to2:z=y*4+x:u=z+4:if[z]OR[u]if[z]=0[z]=[u]:[u]=0elseif[z]=[u]s=s+[z]:[z]=[z]+1:[u]=0 13 goto15 14 forw=0to2:forx=0to3:fory=1to3:z=(4-y)*4+x:u=z-4:if[z]or[u]if[z]=0[z]=[u]:[u]=0elseif[z]=[u]s=s+[z]:[z]=[z]+1:[u]=0 15 next:next:gsb6:next:rtn |
テンケス(プログラム1のアセンプラリスト) |
---|
push {r5,r6,r7} add r0,r0,r1 '描画実VRAM mov r3,#8 lsl r3,r3,8 add r3,#ca '[101]の下位アドレス=#8CA ldrb r3,[r3,r1] '[101]の数 lsl r3,r3,3 'キャラジェネアドレス add r3,r3,r2 '実キャラジェネアドレス mov r2,#03 '0000 0011マスク mov r6,#4 '大ループカウンタ @LOOP1 push {r6} '大ループカウンタ保存 mov r1,#4 '小ループカウンタ ldrb r4,[r3,0] '1行目 ldrb r5,[r3,1] '2行目 @LOOP2 cpy r7,r5 '2行目 and r7,r2 '0000 0011マスク lsl r7,r7,2 cpy r6,r4 '1行目 and r6,r2 '0000 0011マスク add r6,r7 add r6,#80 '疑似グラフィックキャラ strb r6,[r0,0] '描画 lsr r4,r4,2 lsr r5,r5,2 add r0,1 '描画位置右移動 sub r1,#1 '小ループカウンタ減算 bne @LOOP2 add r0,#1C add r3,2 pop {r6} '大ループカウンタ取り出し sub r6,1 '大ループカウンタ減算 bne @LOOP1 pop {r5,r6,r7} ret |
テンケス(Prpgram1) http://tagiyasoft.blog.jp/tenkes1.bin
テンケス(Prpgram2) http://tagiyasoft.blog.jp/tenkes2.bin
以下のように入力してD/Lしてください。
NEW ? MJ GET tagiyasoft.blog.jp/tenkes1.bin ? MJ GET tagiyasoft.blog.jp/tenkes2.bin |
ブラウザでD/LしてIchigoJamに転送する場合は、通信ソフトでバイナリ送信をしてください。
(例:TeraTermの場合は、メニューの[ファイル]-[ファイル送信]で当該ファイルを送信します)