CANVAS 16,16,"RUN"; ← ゲーム画面を作ります。よこ16マス、たて16マスの大きさです。
FOR; ← 一番下のNEXTまでの範囲を繰り返します。
X=2; Y=8; S=0; ← XとYは自分の場所で、Sは点数を表します。
CLS@ 0; ← ゲーム画面を黒(色番号0)で塗りつぶして全部消します。
FOR; ← 下から4行目のNEXTまでの範囲を繰り返します。
SCROLL@ 15,15,1,1,-1,0,1; ← 画面を1マス分だけスクロールします。
PRINT@ 1,0,7,0,"SCORE:%d",S; ← 画面の上の場所(1,0)に色(7,0)で点数を書きます。ここのdだけは小文字なので注意。
CHAR@ 15,RND(15)+1,2,7,0; ← 画面の場所(15,RND(15)+1)に、白丸(番号2)を色(7,0)でかきます。
CHAR@ 15,RND(15)+1,3,4,0; ← 画面の場所(15,RND(15)+1)に、バツ(番号2)を色(4,0)でかきます。
IF GETCH@(X,Y)==2 THEN S++; FI; ← もし自分の場所(X,Y)のキャラクタが白丸(番号2)だったら、点数を1増やします。
IF GETCH@(X,Y)==3 BREAK; ← もし自分の場所(X,Y)のキャラクタがバツ(番号3)だったら、繰り返しをやめます。
CHAR@ X,Y,6,6,0; ← 自分の場所(X,Y)に顔マーク(番号6)を色(6,0)でかきます。
I=INKEY@WRC(200); ← 200ミリ秒(0.2秒のこと)だけ待ってキー入力がないか調べます。
CHAR@ X,Y,0,0,0; ← 自分の場所(X,Y)に空白(番号0)を色(0,0)書きます。つまり自分が消えます(自分は移動するので消さないといけないのです)。
X=MINMAX(X+XMOVE(I),1,14); ← キー入力内容におうじて、Xを増やしたり減らしたりしますが、1~14の範囲からは出ないようにします。
Y=MINMAX(Y+YMOVE(I),1,15); ← キー入力内容におうじて、Yを増やしたり減らしたりしますが、1~15の範囲からは出ないようにします。
NEXT; ← 上から5行目のFORの場所に戻って処理を続けます。
CHAR@ X,Y,6,5,0; ← 繰り返しをやめるとここに来ます。自分の場所(X,Y)に顔マーク(番号6)を色(5,0)でかきます。
WAITKEY@ 10; ← Enterキー(キー番号10)が押されるまで待ちます。
NEXT; ← 上から2行目のFORの場所に戻って処理を続けます。
| 0:黒 | 1:青 | 2:みどり | 3:水色 | 4:赤 | 5:むらさき | 6:黄色 | 7:白 |
| 0:空白 | 1:四角 | 2:丸 | 3:バツ | 4:よこぼう | 5:たてぼう | 6:顔マーク | 7:ひしがた | 8:ななめせん | 9:ななめせん |
hlx>run run.txt
#include <acl.c>
void aMain()
{
AWindow *w = aOpenWinEx(16, 16, "driving", 0);
for (;;) {
int x = 2, y = 8, s = 0, i;
aCls(w, 0);
for (;;) {
aScroll(w, 15, 15, 1, 1, -1, 0, 1, 0, 0, 0);
aGrPrintf(w, 1, 0, 7, 0, "score: %d", s);
aEch(w, 15, aRnd(15) + 1, 2, 7, 0);
aEch(w, 15, aRnd(15) + 1, 3, 4, 0);
if (aGetEch(w, x, y) == 2) s++;
if (aGetEch(w, x, y) == 3) break;
aEch(w, x, y, 6, 6, 0);
i = aInkey_waitRC(w, 200);
aEch(w, x, y, 0, 0, 0);
x = aSaturateInt(aMoveDx(i) + x, 1, 14);
y = aSaturateInt(aMoveDy(i) + y, 1, 15);
}
aEch(w, x, y, 6, 5, 0);
aWaitKey(w, AKEY_ENTER);
}
}
hlx>run run.c
| コメント | お名前 | NameLink | |