46秒でゲームを作ることは、本当に可能なのか?

  • 投稿 : 2015-07-24

本記事は広告およびアフィリエイトプログラムによる収益を得ています

 
 筆者は生徒たちを前に、「今から90秒以内にゲームを作って見せます」と言って実際に彼らに時間を測るよう言った。
 それから実際にその場でゲームをプログラミングした。
 
 実際に「完成」と言うまでに要した時間は46秒だった。
 すると生徒の一人がたまらず笑い始めた。
 その笑いはなぜか向こうの教師にも広がり、しまいには教室全体が笑いに包まれた。
 
 「どういうことだ?」

最速の仕事術はプログラマーが知っている- Amazon
プログラマーが最速の仕事術を知っている理由 - shi3zの長文日記

多分、テキスト系のゲームなんじゃ無いかなぁと思ったけど、今は自信なし。
この本、訳本か?なにか?だと思ってたというのもあるけど・・・。

テキスト系ゲームだと仮定して、こういうことは出来るでしょうというのは書いておきます。

N88BASICで、テキストゲーム

N88互換BASIC

N88互換BASIC for Windows95 -vector

昔のNEC PC9801時代のBASICという言語です。それをWindows上で動作させるアプリです。
Windows8.1で動作したので、たいていの環境で動くのではないかと思います。

ゲームを動かしてみよう


こういう感じになります。
数字キーの1、3で左右移動、2でミサイル発射です。

10 width 80,20 '10~96行まで初期設定
20 cls:beep
30 print "KEY操作 1 左 3 右 2 ミサイル発射"
40 print "自機 <T> を操り 敵 = を撃つゲーム"
50 for i=0 to 40
60 locate i,5:print "-"
70 next
80 locate 19,5:print "-<T>-"
90 x=19: m=0:mx=0:my=0'x、y 自機の座標mx、my ミサイル座標
95 randomize(val(right$(time$,2)))'ex,ey 敵座標
96 ey=int(rnd(1)*10)+6:ex=5
100 gosub 200'100~130 メインルーチン
110 if m=1 then gosub 300
111 'm=0 ミサイル未発射。この時は300行
112 'ミサイル移動ルーチンにはいかない m=1 ミサイル発射中は300行へ
120 gosub 400
130 goto 100
200 b$=""'自機の移動、ミサイル発射
202 a$=inkey$
203 for ii=0 to 1000:next ii
205 if a$<>"" then b$=a$:goto 202
210 if b$="1" and x>1 then x=x-1
215 if b$="3" and x<37 then x=x+1
220 if b$="2" and m=0 then mx=x+2:my=5:m=1:beep
230 locate x,5 :print"-<T>-"
240 return
300 locate mx,my:print " "'ミサイル移動ルーチン
310 my=my+1
320 if mx=ex and my=ey then gosub 600: end '当たり判定
330 if my>15 then mx=0:my=0:m=0:return'下までいったらミサイル終了。m=0に戻す
340 locate mx,my:print "V":return
400 locate ex,ey:print " "'敵移動ルーチン 
410 ex=ex+1
420 if ex=mx and ey=my then gosub 600 :end'当たり判定
430 if ex>39 then ex=0: ey=int(rnd(1)*10)+6 '端までいったら新座標
440 locate ex,ey:print"="
450 return
600 beep'当たりの時の処理
610 locate mx,my:color 4:print "*"
620 print "大当たり THE END": color 7
630 print "HIT ANY KEY"
640 a$=input$(1):return

BASIC超基本(10語でシューティングゲームを作る) (一般/互換/QB)」のソースをそのまま使います。

ただし、そのままだと早すぎて目で見えないので、203行目にウエイトを追加しています。1000という数字を変更すると調整できます。

あと、引用元のソースは、全角のスペースや、改行が入っていてそのままコピペでは動作しないので、そのあたりも変更させていただきました。

「’」から始まるのは、コメント行です。

・PRINTが、テキスト文字表示
・inkey$が、キー入力
・locate が、文字の表示位置の指定

※プログラムの解説は、リンク先が詳しいですので興味ある人はそちらで確認してください。

たぶん、この程度なら46秒で作成することは可能だと思います。
N88BASICの頃なら、素人学生でも46秒でこの程度は作れたと思います。
BASIC入門書とかでも、似たようなものは良く見かけた気もします。

作るといっても、以前に作ったことを覚えていてとかその系統ですけどね。
できること、やれることは限られていて、かつ処理パターンもそれほどないので、思い付きで新しいのを作るのもある程度はできるとは思います。


Windowsで動かしたのはこんな感じですね。
敵機にあたると、ゲームクリアで画面のようなメッセージがでます。
動作させて、雰囲気を見てみたい人は試して見てください。

言語はBASICでなくても、C言語でも同じのは作れます。

awkでデキストゲーム

#! /usr/bin/gawk -f
# background.awk

BEGIN {
    clear_cmd = "echo -n '\033[H\033[2J'";
    get_key_cmd = "stty -icanon min 1 ; "\
                  "((while :; do echo '~'; sleep 1; done) &"\
                  "(while :; do echo `dd bs=1 count=1`; done)) 2> /dev/null";
    for (;;) {
        get_key_cmd | getline;
        if ($1 == "q") {
            close(cmd);
            exit 0;
        }
        if ($1 == "a") {
            print "awk";
        }
        if ($1 == "l") {
            system("ls -al");
        }
        if ($1 == "~") {
            system(clear_cmd);
            print strftime("%Y-%m-%d %H:%M:%S",systime());
        }
    }
}

AWK Users JP :: awk でテトリスみたいなゲームをつくろう! (嘘)

awkでゲームとかも、昔よく見かけた記憶はある。

で、「最速の仕事術はプログラマーが知っている」の本だけど・・・


【本書で紹介する仕事術】
・辞書登録でメールを5秒で送信
・タイピングを見直して生産性3割アップ
・Wordで長文を書くな
・プレゼン資料は直前に書け
・客からの電話には出ない
・今日と明日に急な予定は入れない
・匿名チャットで経営会議
・二択の賭けにはどっちにも張る

読者ターゲットは、プログラマーを凄い人たちだと思っている人たちですかね。
上記の仕事術だけ見ると、プログラマー関係ないって気が・・・。

こんなのゲームじゃない、こんなのゲーム作ったと言わない

今時なら、そっちのほうが普通の感覚のような気はするけどね。
スポンサーリンク
タグ#IT#code