ページへ戻る
印刷
blike/works/p0001
をテンプレートにして作成 ::
OSASK計画
osaskwiki
:blike/works/p0001 をテンプレートにして作成
開始行:
TITLE:x
* 宇宙基地到着ゲーム
-(by [[K]], 2011.03.07)
*** 内容
-分類:A, proglen = 1230
-画面右の宇宙船を画面左の宇宙基地(白い四角)に到着させる...
-他の障害物(隕石群?)に当たるとゲームオーバー。
-基地に到着した時点での残り時間がクリアのスコアとなって加...
-Enterキーでゲーム開始。下矢印のキーでメインエンジン噴射...
-画面の外にも衝突判定がある上、スコア表示部にも衝突判定が...
-とりあえず練習すれば1万点くらいはすぐに取れる(と思う)。
*** 動作写真
http://osask.net/w/gate.php/test018a.jpg?way=attach&_noum...
*** プログラム
int sc, x, y, vx, vy, ox, oy, k, x16, y16, t, lv;
for (;;) {
setCol(0x00009f); fillRect(320, 32, 160, 176);
setCol(0xffffff); drawStr(160, 176, 2, 2, "Hit [Ente...
for (;;) {
if (bl_inkey(BL_WAITKEY | BL_GETKEY) == KEY_ENTE...
}
sc = 0;
srand(1);
for (lv = 1;;) {
cls();
setMode(BL_PSET);
setCol(0xffffff);
fillRect(32, 32, 32, rnd(176) + 160);
for (k = 0; k < 20; k++) {
setCol(iCol(rnd(6) + 1));
fillOval(lv * 8, lv * 8, rnd(512 - lv * 8) +...
}
x = 630; y = 40; vx = 0; vy = 0; t = lv * 1000 +...
x16 = x * 16; y16 = y * 16;
flshWin(640, 400, 0, 0);
for (;;) {
k = getPix(x, y);
if (t % 10 == 0) {
setMode(BL_PSET);
setCol(0x000000);
fillRect(640, 32, 0, 0);
setCol(0xfefefe);
drawStr(0, 0, 2, 2, "SCORE=%05d LV=%d ...
flshWin(640, 32, 0, 0);
}
setMode(BL_PXOR);
setCol(0xffffff);
fillRect(3, 3, x - 2, y - 4);
fillRect(5, 5, x - 3, y - 1);
flshWin(5, 8, x - 3, y - 4);
flshWin(5, 8, ox - 3, oy - 4);
if (k != 0x000000) break;
waitNF(100);
k = inkey();
ox = x;
oy = y;
fillRect(3, 3, x - 2, y - 4);
fillRect(5, 5, x - 3, y - 1);
if ((k == '2' || k == KEY_DOWN) && vy > -128)
vy -= 4;
if ((k == '4' || k == KEY_LEFT) && vx < +128)
vx += 4;
if ((k == '6' || k == KEY_RIGHT) && vx > -128)
vx -= 4;
x16 += vx;
y16 += vy;
x = x16 / 16;
y = y16 / 16;
vy++;
if (t > 0) t--;
}
if (k != 0xffffff) {
setCol(0xff0000);
setMode(BL_PSET);
for (k = 3; k < 24; k += 3) {
waitNF(200);
drawRect(k * 2, k * 2, x - k, y - k);
flshWin(k * 2, k * 2, x - k, y - k);
}
break;
}
sc += t / 10;
if (lv < 9) lv++;
waitNF(2000);
}
}
終了行:
TITLE:x
* 宇宙基地到着ゲーム
-(by [[K]], 2011.03.07)
*** 内容
-分類:A, proglen = 1230
-画面右の宇宙船を画面左の宇宙基地(白い四角)に到着させる...
-他の障害物(隕石群?)に当たるとゲームオーバー。
-基地に到着した時点での残り時間がクリアのスコアとなって加...
-Enterキーでゲーム開始。下矢印のキーでメインエンジン噴射...
-画面の外にも衝突判定がある上、スコア表示部にも衝突判定が...
-とりあえず練習すれば1万点くらいはすぐに取れる(と思う)。
*** 動作写真
http://osask.net/w/gate.php/test018a.jpg?way=attach&_noum...
*** プログラム
int sc, x, y, vx, vy, ox, oy, k, x16, y16, t, lv;
for (;;) {
setCol(0x00009f); fillRect(320, 32, 160, 176);
setCol(0xffffff); drawStr(160, 176, 2, 2, "Hit [Ente...
for (;;) {
if (bl_inkey(BL_WAITKEY | BL_GETKEY) == KEY_ENTE...
}
sc = 0;
srand(1);
for (lv = 1;;) {
cls();
setMode(BL_PSET);
setCol(0xffffff);
fillRect(32, 32, 32, rnd(176) + 160);
for (k = 0; k < 20; k++) {
setCol(iCol(rnd(6) + 1));
fillOval(lv * 8, lv * 8, rnd(512 - lv * 8) +...
}
x = 630; y = 40; vx = 0; vy = 0; t = lv * 1000 +...
x16 = x * 16; y16 = y * 16;
flshWin(640, 400, 0, 0);
for (;;) {
k = getPix(x, y);
if (t % 10 == 0) {
setMode(BL_PSET);
setCol(0x000000);
fillRect(640, 32, 0, 0);
setCol(0xfefefe);
drawStr(0, 0, 2, 2, "SCORE=%05d LV=%d ...
flshWin(640, 32, 0, 0);
}
setMode(BL_PXOR);
setCol(0xffffff);
fillRect(3, 3, x - 2, y - 4);
fillRect(5, 5, x - 3, y - 1);
flshWin(5, 8, x - 3, y - 4);
flshWin(5, 8, ox - 3, oy - 4);
if (k != 0x000000) break;
waitNF(100);
k = inkey();
ox = x;
oy = y;
fillRect(3, 3, x - 2, y - 4);
fillRect(5, 5, x - 3, y - 1);
if ((k == '2' || k == KEY_DOWN) && vy > -128)
vy -= 4;
if ((k == '4' || k == KEY_LEFT) && vx < +128)
vx += 4;
if ((k == '6' || k == KEY_RIGHT) && vx > -128)
vx -= 4;
x16 += vx;
y16 += vy;
x = x16 / 16;
y = y16 / 16;
vy++;
if (t > 0) t--;
}
if (k != 0xffffff) {
setCol(0xff0000);
setMode(BL_PSET);
for (k = 3; k < 24; k += 3) {
waitNF(200);
drawRect(k * 2, k * 2, x - k, y - k);
flshWin(k * 2, k * 2, x - k, y - k);
}
break;
}
sc += t / 10;
if (lv < 9) lv++;
waitNF(2000);
}
}
ページ名: