Hatena::ブログ(Diary)

SHIROのモバイル日記 RSSフィード Twitter

2016-08-25

[]ジャンプアクションゲーム

シンプルなジャンプアクションゲームです。パソコンクラブの教材用に試作しました。
f:id:shiro0922:20160825220912j:image:w360

  • 起動すると、3段の床とハシゴ、自分のキャラ(人間)が表示されます。
  • 自分のキャラの操作は、カーソルキー左右=左右移動、カーソルキー上下=ハシゴを上る/下りる、スペースキー=ジャンプです。
  • 敵キャラ「@」が出てくるので、当たらないようにジャンプやハシゴで避けてください。当たるとゲームオーバーになります。
  • ジャンプしてコイン「$」をゲットすると1点になります。

MixJuiceでダウンロードできます。
?"MJ GET comich.net/ichigojam/jumpaction.txt"
プログラム容量が若干残っているので、いろいろ改造するのも楽しいでしょう。

1 '*Jump Action
2 CLV:LET[90],30,6,-1,0,14,1,30,22,-1
3 CLS:FORJ=7TO23STEP8:LC0,J:FORI=0TO30:?CHR$(1);:NEXT:NEXT
4 FORJ=7TO22:LC7,J:?"H":LC23,J:?"H":NEXT
5 GSB19:X=0:Y=22
6 IFJOR(Y%8=6)U=X-BTN(LEFT)*(X>0)+BTN(RIGHT)*(X<30)
7 V=Y:IFJGOTO10
8 V=Y-BTN(UP)*(H=72)+BTN(DOWN)*(SCR(X,Y+1)=72)
9 IFBTN(SPACE)*(H<>72)J=1:G=-3
10 V=V+G*J:G=G+J:LCX,Y:?CHR$(H);:H=SCR(U,V):IFH=36BEEP:S=S+1:GSB19:H=0
11 LCU,V:?CHR$(250);:X=U:Y=V
12 IFH=64M=1
13 IFY%8=6J=0
14 IFRND(50)=0GSB25
15 FORA=0TO15STEP5:IF[A]GSB22
16 IF(![A])*(!RND(20))GSB20
17 NEXT:IF!MGOTO6
18 BEEP30,30:LC11,11:?"GAME OVER":END
19 LC0,0:?"SCORE ";S:RTN
20 R=RND(3)*3:[A+1]=[90+R]:[A+2]=[91+R]:[A+4]=SCR([A+1],[A+2]):IF[A+4]RTN
21 [A]=1:[A+3]=[92+R]:LC[A+1],[A+2]:?"@";:RTN
22 D=[A+1]+[A+3]:E=[A+2]:LC[A+1],[A+2]:?CHR$([A+4]);:IF(D<0)OR(D>30)[A]=0:RTN
23 [A+4]=SCR(D,E):LCD,E:?"@";:IF[A+4]=250M=1
24 [A+1]=D:[A+2]=E:RTN
25 B=RND(32):C=8*RND(3):IFSCR(B,C)GOTO25
26 LCB,C:?"$":RTN

2016-08-16

[]イチゴトランプ

シンプルなカードゲームです。表示が小さいので、IchigoJam BIGで遊んだ方が楽しいでしょう。
マンガ「アタゴオル物語」(ますむらひろし著)に出てくる「ネズミトランプ」を元にしています。
f:id:shiro0922:20160816185010p:image:w360

f:id:shiro0922:20160816185009p:image:w360

  • カードは、11種類の絵柄カード×4枚、イチゴカード×3枚、合計47枚です。
  • プレイヤーは、自分とCOM1〜3の4人です。
  • 各人に手札が3枚ずつ配られます。残りのカードは山札となります。
  • 自分のターンからスタートします。各人のターンでは、山札から1枚カードを引いて手札を4枚にし、どれか1枚を山札に捨てて再び手札を3枚にします。自分のターンの時は、カーソルキーの左右でカードを選び、スペースキーを押して捨ててください。
  • 山札から1枚カードを引いた時に、手札の中で同じ絵柄が4枚そろえば、そのプレイヤーが勝ちとなり、ゲームが終了します。
  • 同じ絵柄が2枚・3枚とそろっても、イチゴカードを引いてしまうと、自分の手札が全て山札と自動的に入れ替わり、バラバラになってしまいます。

1 CLV:CLS:LET[90],5,8,0,3,5,0,11,3:FORN=1TO4:FORS=235TO245:[M]=S:M=M+1:NEXT:NEXT:GSB9
2 FORP=0TO3:Q=51+P*5:FORT=0TO2:M=M-1:[Q+T]=[M]:[M]=0:NEXT:GSB10:NEXT:FORN=1TO3:[M]=255:M=M+1:NEXT:GSB9
3 P=(P+1)&3:Q=51+P*5:D=RND(M):[Q+3]=[D]:[D]=0:GSB10:IF[Q+3]=255GSB18
4 IF([Q]=[Q+1])&([Q]=[Q+2])&([Q]=[Q+3])GOTO7
5 C=3:IFPGSB15 ELSEGSB13
6 WAIT9:[D]=[Q+C]:FORN=CTO3:[Q+N]=[Q+N+1]:NEXT:GSB10:GOTO3
7 BEEP9,30:G=P:GSB10:LC2,6:IFP?"*COM";P;ELSE?"*PLAYER";
8 ?" WIN*":END
9 FORN=1TO100:A=RND(M):B=RND(M):D=[A]:[A]=[B]:[B]=D:NEXT:RTN
10 Z=90+P*2:X=[Z]:Y=[Z+1]:LCX,Y:IFP?"COM";PELSE?"PLAYER"
11 LCX,Y+1:FORE=0TO3:F=[Q+E]:IFFIFP=G?CHR$(F);ELSE?CHR$(219);
12 NEXT:?" ":RTN
13 LCX+C,Y+2:?" ":K=INKEY():C=C-(K=28)*(C>0)+(K=29)*(C<3):LCX+C,Y+2:?CHR$(226):IFK!=32GOTO13
14 LCX+C,Y+2:?" ":BEEP:RTN
15 FORE=0TO2:A=[Q+E]:FORF=E+1TO3:IF[Q+F]=A[80+E]=1:[80+F]=1
16 NEXT:NEXT:FORE=0TO2:IF[80+E]=0C=E
17 [80+E]=0:NEXT:RTN
18 IF!PBEEP30,9:WAIT60
19 FORC=0TO3
20 E=RND(M):F=[E]:IF(F=255)|(F=0)GOTO20
21 [E]=[Q+C]:[Q+C]=F:NEXT:GSB10:RTN

パソコンクラブの教材として、カードゲームのプログラムを取り上げたかったので、試しに作ってみました。
その昔「アタゴオル物語」を読んだ時から、いつかコンピュータゲームとして作ってみたいと思っていました。
(手札と山札が自動的に入れ替わるなんて、ファンタジー世界かコンピュータゲームでしかできない)。
作れて良かったです。

なお、「アタゴオル物語」作中の「ネズミトランプ」では、イチゴカードではなく猫カードになっていて、7枚あります。
プログラム開発当初はイチゴカードを7枚で作っていたのですが、いざプレイしてみるとしょっちゅうイチゴカードを引いてしまって、全然上がれません。そのため3枚に減らしました。

また「ネズミトランプ」では、手札以外のカードはテーブル上に1枚ずつ裏返しに並べられます(神経衰弱の要領)。そのため、自分が場に捨てたカードは、他のプレイヤーに引かれるか、猫カードで入れ替わるかしなければ、再び引くことができます。
現在のプログラムは1kバイト目一杯ですが、2スロット使えばその辺りの機能を実装できるかもしれません。
シンプルなカードゲームなので、アイテムカードやルールを追加して、いろいろ改造するのも楽しいでしょう。

2016-08-15

[]Puzzle Battle 10

数字パネルを選択してモンスターへ攻撃するパズルバトルゲームです。表示が小さいので、IchigoJam BIGで遊んだ方が楽しいでしょう。
f:id:shiro0922:20160814214457p:image:w360
プログラム1(PCGキャラ設定)とプログラム2(ゲーム本体)があります。プログラム1と2を連続したスロットに配置して、プログラム1を実行してください。
なお2プレイ目からはゲーム本体のみの実行で構いません。(ゲームオーバー直後ならそのままRUN〈Enter〉)

  • 起動すると、5×5の数字パネルと敵モンスター、互いのHPが表示されます。
  • 上下左右のカーソルキーで、数字パネルのカーソルを移動します。スペースキーを押すとパネル選択が開始されるので、スペースキーを押したままカーソルキーを操作して、パネルを選択してください。
  • スペースキーを離すと、モンスターへ攻撃します。選択したパネルの数字の合計が10の倍数(10、20、30…)の時だけ攻撃が成立し、モンスターのHPが減ります。合計数が多い/パネル枚数が多いほど攻撃ポイントがアップします。攻撃後は選択したパネルが消えて、新たなパネルに置き換わります。攻撃が成立しなかった場合はパネルは変化しません。
  • 続いてモンスターの攻撃ターンに移り、自分のHPがランダムに削られます。
  • 互いの攻撃ターンをくり返し、モンスターのHPを0以下にすると勝利です。勝利するとゲームレベルが上がり、次のモンスターが出てきます。
  • 自分のHPが0以下になるとゲームオーバーです。

《アイテムパネル》

  • 黒丸はお邪魔パネルで、選択することはできません。
  • おにぎりパネルを含めてパネルを消すと、攻撃ポイントが2倍になります。複数まとめて消せば4倍・8倍…と倍々に増えます。
  • 猫パネルを含めてパネルを消すと、パネル全体が別のパネルに置き換わります。お邪魔パネルが増えて手詰まりになりそうな時に使うと良いでしょう。
  • アイテムパネルを選択して消した場合、数字パネルとしては「0」とカウントされます。

プログラム1 PCGキャラ設定】

1 '*PB10 SetCHR
2 CLP:C=233:D=234:M=0:GSB10
3 FORC=48TO57
4 D=C+176:GSB10
5 NEXT
6 M=255:FORC=224TO236
7 D=C+16:GSB10
8 NEXT
9 LRUN FILE()+1
10 FORP=0TO7:E=PEEK(C*8+P):POKED*8+P,E^M:NEXT:RTN

プログラム2 ゲーム本体】
1 '*PB10
2 CLV
3 CLS:L=L+1:GSB7:H=200:I=100*L:LC1,6:?H:LC9,2:?CHR$(63+L):LC8,6:?I
4 X=0:Y=0:M=0:GSB14:M=1:GSB14:GSB8:IFI<=0BEEP10,30:WAIT60:GOTO3
5 GSB18:IFH<=0BEEP30,60:END
6 WAIT30:GOTO4
7 FORY=0TO4:FORX=0TO4:R=RND(13):GSB19:[A]=R:LCX,Y:?CHR$(224+R):NEXT:NEXT:GSB17:RTN
8 P=0:S=0:T=1:Q=0:FORY=0TO4:FORX=0TO4:GSB19:N=[A]:IFN>9N=0
9 IF[25+A]P=P+1:S=S+N:IF[A]=11T=T*2ELSEIF[A]=12Q=1
10 W=0:GSB16:NEXT:NEXT:IFS%10>0GSB17:RTN
11 S=(S+(P-1)*10)*T:LC8,7:?"-";S:LC9,2:?"*":BEEP:WAIT30:LC9,2:?CHR$(63+L):LC8,7:?" ":I=I-S:LC8,6:?I;" ":IFQBEEP20,30:GSB7:RTN
12 W=0:FORY=0TO4:FORX=0TO4:GSB19:IF[25+A][A]=RND(13):GSB16
13 NEXT:NEXT:GSB17:RTN
14 U=X-BTN(LEFT)+BTN(RIGHT):V=Y-BTN(UP)+BTN(DOWN):U=U+(U<0)-(U>4):V=V+(V<0)-(V>4):IF[U+V*5]=10U=X:V=Y
15 W=M:GSB16:X=U:Y=V:W=1:GSB16:[25+A]=M:WAIT7:IFBTN(SPACE)=!MRTNELSEGOTO14
16 GSB19:LCX,Y:?CHR$(224+16*W+[A]):RTN
17 FORY=0TO4:FORX=0TO4:GSB19:[25+A]=0:NEXT:NEXT:RTN
18 S=RND(30):LC1,7:?"-";S:BEEP30,10:LC1,7:?" ":H=H-S:LC1,6:?H;" ":RTN
19 A=X+Y*5:RTN

パネルの合計数を10の倍数にしないと攻撃できないので、暗算力を鍛える学習ゲームでもあります(笑)
なおこのゲームは、上田パソコンクラブでプチコン3号で作ったパズルバトルゲームを、IchigoJamに移植したものです。プチコン3号版のテキストとプログラムはこちらにあります。
http://www.white.umic.jp/pc/2014/12/20-100000.html
http://www.white.umic.jp/pc/2015/01/17-100000.html
http://www.white.umic.jp/pc/2015/02/14-100000.html
http://www.white.umic.jp/pc/2015/03/07-100000.html

2016-08-14

[]Life Latte

IchigoJamと同じ基板でJavaScriptプログラミングができる「IchigoLatte」を試しています。
IchigoJam BASICの次の子ども向け教材として、とても面白いと思います。
f:id:shiro0922:20160814114512p:image:w360
IchigoLatte用のライフゲームを作ってみました。
JavaScriptプログラミング練習、およびIchigoJamとの速度比較として作りました。
IchigoJamだと、1世代進めるのに約2分50秒〜3分かかりますが、IchigoLatteは30秒ほどです。5〜6倍の計算速度のようです。
ちなみにIchigoJam PCでも同様のライフゲームを作りましたが(日記)、そちらは1世代に1秒かかりません。

// *** Life Latte ***

var a=new Array(24);
var x,y;
var u,v;
var d,e;
var c,h,n,k,l,m;

// --- Life Start

while (1) {

cls();
m=0;

y=0;
while (y<24) {
x=0;
while (x<32) {
if ((x!=31)|(y!=23)) {
n=rnd(2);
log(chr(n));
l=l+n;
}
x=x+1;
}
y=y+1;
}

// --- Life Loop

k=0;

while ((l!=m)|(k!=1)) {

// Check

if (l!=m) {m=l;}
l=0;

y=0;
while (y<24) {
a[y]=0;
x=0;
while (x<32) {

c=0;
d=-1;
while (d<2) {
e=-1;
while (e<2) {

u=x+d;
v=y+e;
if (u<0) {u=31;}
if (u>31) {u=0;}
if (v<0) {v=23;}
if (v>23) {v=0;}
c=c+scr(u,v);

e=e+1;
}
d=d+1;
}
h=scr(x,y);
c=c-h;

n=0;
if (c==2) {n=h;}
if (c==3) {n=1;}
a[y]=a[y]|(n<<x);
if (h!=n) {k=1;}
if (n==1) {l=l+1;}

x=x+1;
}
y=y+1;
}

// Next Gen. Print

cls();
y=0;
while (y<24) {
x=0;
while (x<32) {
if ((x!=31)|(y!=23)) {
n=a[y]&(1<<x);
if (n>0) {n=1;}
log(chr(n));
}
x=x+1;
}
y=y+1;
}

}

}

2016-05-30

[]Bingo BIG

IchigoJamの画面表示を2倍サイズにしたファームウェア「IchigoJam BIG」が公開されました。
福野泰介の一日一創 めがねフェス2017に向けて「IchigoJam BIG」
文字数は16×12行と4分の1になりますが、展示用などには大きくて見やすいです。
f:id:shiro0922:20160530155030j:image:w360

以前作った数字拡大表示のビンゴゲームを、この「IchigoJam BIG」環境に移植してみました。
f:id:shiro0922:20160530155031j:image:w360
通常のIchigoJam環境では表示がおかしくなりますので、ご注意ください。

  • 起動すると、画面下に「PUSH KEY」と表示されます。
  • 何かキーを押すとビンゴが回り、1〜75の数字をランダムに表示して止まります。各数字は1度しか出てきません。
  • もう一度キーを押すと、再びビンゴが回ります。
  • 数字を75個表示すると、プログラムが終了します。

※(6/5修正)数字表示部分のバグを修正

10 '*BINGO BIG*
20 CLV:CLS
30 '*SHOOT
40 LC 0,12:?"PUSH KEY";
50 IF INKEY()=0 GOTO 40
60 LC 0,12:?" ";
70 FOR T=1 TO 5
80 S=RND(75)+1
90 IF [S]=1 GOTO 80
100 GOSUB 170
110 BEEP
120 NEXT
130 C=C+1:[S]=1
140 IF C<75 GOTO 40
150 END
160 '*PRTN
170 N=S/10:X=0:P=1
180 IF N=0 THEN P=0
190 GOSUB 230
200 N=S%10:X=7:P=1
210 GOSUB 230
220 RETURN
230 A=48+N
240 FOR I=0 TO 6
250 D=PEEK(A*8+I):V=#900+X+I*16:B=`10000000
260 FOR J=0 TO 5
270 POKE V+J,D&(B>>J) AND P
280 NEXT
290 NEXT
300 RETURN

ダウンロード
リンク集
アクセスカウンター