ページへ戻る

− Links

 印刷 

blike​/works​/p0001 のバックアップソース(No.3) :: OSASK計画

osaskwiki:blike/works/p0001 のバックアップソース(No.3)

« Prev[4]  Next »[5]
TITLE:x
* 宇宙基地到着ゲーム [#k587b67d]
-(by [[K]], 2011.03.07)
*** 内容 [#s3933b87]
-分類:A, proglen = 1230
-画面右の宇宙船を画面左の宇宙基地(白い四角)に到着させるゲームで、宇宙船(の中心)が宇宙基地に接触すればよい。
-他の障害物(隕石群?)に当たるとゲームオーバー。
-基地に到着した時点での残り時間がクリアのスコアとなって加算。
-Enterキーでゲーム開始。下矢印のキーでメインエンジン噴射(つまり上方向の加速が得られる)。左矢印で左のエンジンを噴射(つまり右方向の加速が得られる)。右も同様。
-画面の外にも衝突判定がある上、スコア表示部にも衝突判定がある(文字にぶつかって死ぬ)。
-とりあえず練習すれば1万点くらいはすぐに取れる(と思う)。

*** 動作写真 [#d027281f]

*** プログラム [#f04e0a16]
 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 [Enter] to start");
     for (;;) {
         if (bl_inkey(BL_WAITKEY | BL_GETKEY) == KEY_ENTER) break;
     }
     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) + 64, rnd(368 - lv * 8) + 32);
         }
         x = 630; y = 40; vx = 0; vy = 0; t = lv * 1000 + 990;
         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  TIME=%03d", sc, lv, t / 10);
                 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);
     }
 }


« Prev[4]  Next »[5]