概要
curses ライブラリの習作として作ってみた。
ランダムに表示される記号を打つだけ。
出題が難しいときやバグで入力できなくなったときはrを打つと再度出題される。
合格ラインは 100点。
あうざー
harada(5S)
2009/08/17
2時間くらい。
キー入力が反応しなくなるバグで困った。バグの解決はあきらめた。多分キーカスタマイズしてるときしか起こらないので放置。
「windowsでコンパイルするとタイムアウトが動作しなくてゲームになってない」という問題があったが、ライブラリの最新バージョンを使うと直った。プログラマーは英語のgoogleを使おう!(調べる情報がマイナー過ぎ?)
コンパイル
winだとstype.cpp をShift_JISに変換したあと、
i586-mingw32msvc-g++ stype.cpp -lpdcurses
linux だとstype.cpp をUTF-8 に変換したあと、
g++ stype.cpp -lncursesw
データ
#include <curses.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <locale.h>
const int gpx = 0;
const int gpy = 10;
const char buf[] = {"@!`=$~({[?*&\"-#^)}]+|'_%:;,.<>/\\*+"};
const char disp[][40] ={
{"1! 2\" 3# 4$ 5% 6& 7' 8( 9) 0 -= ^~ \\|" },
{"qQ wW eE rR tT yY uU iI oO pP @` [{"},
{"aA sS dD fF gG hH jJ kK lL ;+ :* ]}"},
{"zZ xX cC vV bB nN mM ,< .> /? \\_"}};
const char reset_char = 'r';
bool fguide=true;
void dispguide(char ch)
{
if(!fguide)return;
char cd;
for(int l=0;l<4;l++)
{
for(int n=0;cd=disp[l][n];n++)
{
if(cd == ch)attrset(A_REVERSE);
mvaddch(gpy + l,gpx + n,cd);
attrset(A_NORMAL);
}
}
}
int main(int argc,char **argv,char **arge)
{
int point=10;
int score = 0;
int tot= 2000;
char qc,ic;
setlocale(LC_ALL,"");
initscr();
cbreak();
srand(time(NULL));
noecho();
for(int n=0;argv[n];n++)
{
if(strcmp(argv[n],"-g"))fguide=false;
}
reset:
qc = buf[rand()%sizeof(buf)];
dispguide('\0');
while(true)
{
mvprintw(1,1,"time :%4d",tot);
mvprintw(2,1,"score:%8d",score);
mvprintw(3,1,"point:%8d",point);
mvprintw(6,1,"%c%4x",qc,qc);
move(6,1); ic = getch();
if(ic == reset_char)goto reset;
if(ic == qc)
{
score++;
point++;
qc = buf[rand()%sizeof(buf)];
dispguide(qc);
timeout(tot=tot*143/145);
}else{
point--;
}
if(point == 0) break;
}
endwin();
printf("score:%d\n",score);
if(score<60)
printf("落ち着いてタイプしましょう。\n");
else if(score<70)
printf("もっとがんばりましょう。\n");
else if(score<80)
printf("練習あるのみです。\n");
else if(score<100)
printf("まだまだがんばりましょう。\n");
else if(fguide)
printf("キーの位置は覚えられましたか?\
-g オプションを付けてガイドなしでやってみましょう。\n");
else
printf("よくできました。これからも精進しましょう。\n");
exit(0);
}
最終更新:2009年08月17日 21:50