抵抗のカラーコードをゲームで覚える


アニメ『魔法少女育成計画』
少年少女がキャンディを集めます。
魔法少女というのは街に何人もいて、良い行いをすると、キャンディが増えるみたいです。魔法少女といいつつ、変身前は男の子だったりします。嘉門達夫の「看護婦のおっさん」を思い出しました。可愛いキャラなのに過酷なサバイバルというギャップ。 『まどか☆マギカ』っぽいノリなのでしょうか。んん〜、ハッピーエンドが良いので、視聴しようか迷うところ。きっと面白いんでしょうけど。

虹の色と抵抗カラーコードは異なる」では、抵抗のカラーコードを勉強しましたが、やはり脳に染み込ませて、使っていかないと意味がありません。今回はゲームで覚えてみます。
いろんな色のキャンディが増えていくゲームです。
『魔法少女育成計画』のキャンディは増えればうれしいものですが、このゲームでは、キャンディはあしきものです。増えてはなりません。ちなみにエスケープシーケンスでコンソールに表示する色が、キャンディ色になっているので、表示する色に限りがあります。それぞれの色のキャンディが画面に表示されたら、2秒以内に、その色の数字を押したら、キャンディが消えます。

赤=2
黄=4
緑=5
青=6
紫=7
城=9

これらのカラーコードしか覚えることができません。まあその他の色がどうしても必要になったら、GUIで作ろうかと思います。
ソースコードです。

     1	#include <stdlib.h>
     2	#include <stdio.h>
     3	#include <time.h>
     4	#include <ncurses.h>
     5	
     6	int main()
     7	{
     8		int x,y,c,w,h,key;
     9		char candy_str[10];
    10	
    11		int delay=2000000;
    12		int point=0;
    13		int candy=0;
    14	
    15	        srand(time(NULL));
    16	
    17		initscr();
    18	
    19		noecho();
    20		cbreak();
    21		timeout(0);
    22	
    23		getmaxyx(stdscr, h, w);
    24	
    25		start_color();
    26		init_pair(2, COLOR_WHITE, COLOR_RED);
    27		init_pair(4, COLOR_BLACK, COLOR_YELLOW);
    28		init_pair(5, COLOR_WHITE, COLOR_GREEN);
    29		init_pair(6, COLOR_WHITE, COLOR_BLUE);
    30		init_pair(7, COLOR_WHITE, COLOR_MAGENTA);
    31		init_pair(9, COLOR_BLACK, COLOR_WHITE);
    32		init_pair(0, COLOR_WHITE, COLOR_BLACK);
    33	
    34		erase();
    35	
    36		while(1){
    37			y = rand() % (h-1) + 1;
    38			x = rand() % (w-1) + 1;
    39			do{
    40				c = rand() % 8 + 1;
    41			}while( c==0 || c==3 || c==1 || c==8 );
    42	
    43			attrset(COLOR_PAIR(0));
    44			move(0, 0);
    45			addstr("CANDY=");
    46			move(0, 6);
    47			sprintf(candy_str,"%d",candy);
    48			addstr(candy_str);
    49		
    50			attrset(COLOR_PAIR(c));
    51			move(y, x);
    52			addstr(">o<");
    53	
    54			if(candy++ > 100)
    55				break;
    56			
    57			refresh();
    58	
    59			usleep(delay);
    60	
    61			key = getch();
    62			if(key == (c + '0')){
    63				attrset(COLOR_PAIR(0));
    64				move(y, x);
    65				addstr("   ");
    66				refresh();
    67				candy--;
    68				point++;
    69			}else{
    70				delay-=100000;
    71				if(delay < 0){
    72					delay = 100000;
    73				}
    74			}
    75			if(key == 'q')break;
    76		}
    77	
    78		endwin();
    79	
    80		printf("\n");
    81		printf("--------------------------------------\n");
    82		printf("GAME OVER!\n\n");
    83		printf("YOU GOT %d POINTS !!\n",point*100);
    84		printf("--------------------------------------\n");
    85	
    86		return (0);
    87	}

実行画面です。
candy-001

ソースはgithubにあります。

takk@deb83:~$ git clone https://github.com/takkete/scrap.git
Cloning into 'scrap'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 3
Unpacking objects: 100% (6/6), done.
Checking connectivity... done.
takk@deb83:~$ cd scrap
takk@deb83:~/scrap$ gcc -lncurses candy.c
takk@deb83:~/scrap$ ./a.out

コメント

タイトルとURLをコピーしました