1: 2011-03-07 (月) 13:08:23 k-tan[5] [6] | 現: 2024-01-08 (月) 12:58:54 lina[7] [8] | ||
---|---|---|---|
Line 1: | Line 1: | ||
TITLE:x | TITLE:x | ||
- | * [#mfca185e] | + | * 宇宙基地到着ゲーム [#k587b67d] |
+ | -(by [[K]], 2011.03.07) | ||
+ | *** 内容 [#s3933b87] | ||
+ | -分類:A, proglen = 1230 | ||
+ | -画面右の宇宙船を画面左の宇宙基地(白い四角)に到着させるゲームで、宇宙船(の中心)が宇宙基地に接触すればよい。 | ||
+ | -他の障害物(隕石群?)に当たるとゲームオーバー。 | ||
+ | -基地に到着した時点での残り時間がクリアのスコアとなって加算。 | ||
+ | -Enterキーでゲーム開始。下矢印のキーでメインエンジン噴射(つまり上方向の加速が得られる)。左矢印で左のエンジンを噴射(つまり右方向の加速が得られる)。右も同様。 | ||
+ | -画面の外にも衝突判定がある上、スコア表示部にも衝突判定がある(文字にぶつかって死ぬ)。 | ||
+ | -とりあえず練習すれば1万点くらいはすぐに取れる(と思う)。 | ||
+ | |||
+ | *** 動作写真 [#d027281f] | ||
+ | http://osask.net/w/gate.php/test018a.jpg?way=attach&_noumb&refer=blike%2Fworks%2Fp0001&openfile=test018a.jpg | ||
+ | *** プログラム [#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); | ||
+ | } | ||
+ | } |
(This host) = http://osask.net