CANVAS 32,24,"JUMP"; ← ゲーム画面を作ります。よこ32マス、たて24マスの大きさです。
HI=1000; ← ハイスコアを0に設定します。
FOR; ← 再ゲームの時はここから始まります。
CLS@ 0; ← 画面を消去して真っ黒(色番号0)にします。
FOR I=0,5; CHARBOX@ 32,1,0,I*5+2,1,3,0; NEXT; ← 画面に水色の横線を5本引きます。
LOOP 10; CHARBOX@ 2,1,RND(5)*5+6,RND(3)*5+7,0,0,0; NEXT; ← 床に10個の穴をあけています。
LOOP 16; CHAR@ RND(26)+4,RND(19)+3,3,4,0; NEXT; ← 画面に16個の赤いバツをかいています(キャラクター番号3、色番号(4,0))。
LOOP 16; CHAR@ RND(26)+4,RND(19)+3,2,7,0; NEXT; ← 画面に16個の白い丸をかいています(キャラクター番号2、色番号(7,0))。
GE=1000; X=0; Y=21; J=0; ← 最初の元気の値、スタート地点、ジャンプ中かどうかの変数=0 を設定しています。
FOR; ← ここから繰り返し(ゲームのメインループです)。
PRINT@ 0,0,7,0,"GENKI:%5d HIGH:%5d",GE,HI; ← 点数を表示します。
CHAR@ X,Y,6,6,0; ← 「ぼく」を表示します。場所は(X,Y)で、キャラクター番号は6で、色番号は(6,0)です。
IF GE<=0 THEN CHAR@ X,Y,6,5,0; BREAK; FI; ← もし元気が0かマイナスになってしまったら、「ぼく」の色をむらさきで書き直して、メインループを抜けます。
IF Y<=6 AND X==31 THEN PRINT@ 23,0,0,2," << CLEAR !! >> "; BREAK; FI; ← もし4階の右はじに着いたら「クリア!」と表示して、メインループを抜けます。
I=INKEY@WRC(200); ← 200ミリ秒(0.2秒)待ってからキー入力状態をチェックします。
CHAR@ X,Y,0,0,0; ← 画面上から「ぼく」を消します(移動するからです)。
IF I!=32 OR Y%5==3 THEN J=0; FI; ← もしスペースキーを連打していないか、もしくは各階の天井に頭が付いたら、J=0にします。
IF I==32 AND GETCH@(X,Y+1)==1 THEN J=1; FI; ← もしスぺスキーを押していて、かつ、足元が床だったら、J=1にします。
X++; ← 「ぼく」を1マスだけ右に進めます。
IF X==32 THEN X=0; Y-=5; FI; ← もしも「ぼく」が右はしに着いたら、1つ上の階の左はしに移動させます。
Y-=J; ← J=1なら、「ぼく」を1マスだけ上に移動させます。
IF J==0 AND GETCH@(X,Y+1)!=1 THEN Y++; FI; ← もしジャンプ中ではなくて、足元が床ではなかったら、「ぼく」を1マスだけ下に移動させます。
GE--; ← 元気の値を1減らします。
IF GETCH@(X,Y)==3 THEN GE=MAX(GE-400,0); FI; ← もし赤いバツを取ったら、元気を400引きます。そして0よりも小さくなってしまったら0にします。
IF GETCH@(X,Y)==2 THEN GE+=200; FI; ← もし白い丸をとったら、元気に200を足します。
NEXT; ← ゲームのメインループ開始位置のFORのところに戻ります。
HI=MAX(HI,GE); ← HIと元気値を比べて、大きいほうをHIとします。
WAITKEY@ 10; ← Enetrが押されるまで待ちます。
NEXT; ← 上から3行目の再ゲーム開始用のFORのところに戻ります。
| 0:黒 | 1:青 | 2:みどり | 3:水色 | 4:赤 | 5:むらさき | 6:黄色 | 7:白 |
| 0:空白 | 1:四角 | 2:丸 | 3:バツ | 4:よこぼう | 5:たてぼう | 6:顔マーク | 7:ひしがた | 8:ななめせん | 9:ななめせん |
hlx>run jump.txt
#include <acl.c>
void aMain()
{
int i, j, ge, hi = 1000, x, y;
AWindow *w = aOpenWinEx(32, 24, "JUMP", 0);
for (;;) {
aCls(w, 0);
for (i = 0; i < 5; i++) aEchBox(w, 32, 1, 0, i * 5 + 2, 1, 3, 0);
for (i = 0; i < 10; i++) aEchBox(w, 2, 1, aRnd(5) * 5 + 6, aRnd(3) * 5 + 7, 0, 0, 0);
for (i = 0; i < 16; i++) aEch(w, aRnd(26) + 4, aRnd(19) + 3, 3, 4, 0);
for (i = 0; i < 16; i++) aEch(w, aRnd(26) + 4, aRnd(19) + 3, 2, 7, 0);
ge = 1000; x = 0; y = 21; j = 0;
for (;;) {
aGrPrintf(w, 0, 0, 7, 0, "GENKI:%5d HIGH:%5d", ge, hi);
aEch(w, x, y, 6, 6, 0);
if (ge <= 0) { aEch(w, x, y, 6, 5, 0); break; }
if (y <= 6 && x == 31) { aGrPrintf(w, 23, 0, 0, 2, " << CLEAR !! >> "); break; }
i = aInkey_waitRC(w, 200);
aEch(w, x, y, 0, 0, 0);
if (i != 32 || y % 5 == 3) j = 0;
if (i == 32 && aGetEch(w, x, y + 1) == 1) j = 1;
x++; if (x == 32) { x = 0; y -= 5; }
y -= j;
if (j == 0 && aGetEch(w, x, y + 1) != 1) y++;
ge--;
if (aGetEch(w, x, y) == 3) ge = aSaturateInt(ge - 400, 0, ge);
if (aGetEch(w, x, y) == 2) ge += 200;
}
hi = aMaxInt(hi, ge);
aWaitKey(w, AKEY_ENTER);
}
}hlx>run jump.c
| コメント | お名前 | NameLink | |