弾幕ゲーム『hjkl六面シューティング』
これはさすがにコンテストに出したりはしません。
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <time.h> #define ESCAPE '\033' #define randint0(n) (rand()%(n)) void ret() {printf("\n");} void p(char *str) {printf("%s", str);} void waitspace() { while(1) { int ch = getch(); if (ch == ' ' || ch == '\n' || ch == ESCAPE) break; } } void danmaku(int stg, char *boss_str) { int i; int yans, ans = randint0(4); int ax = randint0(70)+1, ay = randint0(14)+1; char ansch[5] = "hjkl"; char buf[1024]; p("\n"); printf("%d面だ! %s\n", stg, boss_str); p("\n"); for(i=0;i<16;i++) { int j; for(j=0;j<74;j++) { if (ax == j && ay == i) buf[j] = ansch[ans]; else if (randint0(11) == 2) buf[j] = '*'; else if (randint0(13) == 1) buf[j] = ':'; else buf[j] = ' '; } buf[j] = '\0'; p(buf); ret(); } p(" ○\n"); p(" /■\\n"); p(" ||\n"); p("H : 体を捻って避ける J : ジャンプして避ける\n"); p("K : かなり頑張って避ける L : レモンのように避ける\n"); yans = -1; while(1) { int ch = getch(); switch(ch) { case 'h': case 'H': yans = 0; break; case 'j': case 'J': yans = 1; break; case 'k': case 'K': yans = 2; break; case 'l': case 'L': yans = 3; break; } if (yans != -1) break; } if (yans == ans) { p("あなたは弾を避けてステージを進み、ボスを倒した!\n"); waitspace(); } else { p("*** ど☆かーん ***\n"); waitspace(); p("あなたは避けるのを失敗して負けた\n"); waitspace(); p("GAME OVER\n"); waitspace(); exit(0); } } void main() { int i; char *stagestr[6] = {"極太レーザーのボスがあなたを襲う!", "回転するボスがあなたを襲う!", "哲学的なザコがあなたを襲う!", "臭うボスが比較的あなたを襲う!", "名状しがたい宇宙的な弾幕があなたを襲う!", "最後のボスがあなたを襲う!", }; int starttime, endtime; srand(time(0)); starttime = time(0); for(i=0;i<6;i++) { danmaku(i+1, stagestr[i]); } printf("あなたは%d面をクリアした!\n", i); endtime = time(0); printf("ただいまのスコア %d秒\n", endtime-starttime); waitspace(); printf("おめでとうございます!\n"); waitspace(); }