- 论坛徽章:
- 0
|
一个练习打字的,就练习八个键。输出用printw()
- #include <signal.h>
- #include <curses.h>
- #include <math.h>
- const char CHAR[] = "asdfjkl; ";
- struct for_shot {
- char chars[50];
- int sum;
- int pos_l[50], pos_c[50]; /* postion of its arrow */
- int flag[50]; /* 1 been created
- 2 be aimed
- 3 has been shot */
- }targets;
- int now_pos = 0;
- int err_click = 0;
- void generate()
- {
- int i;
- now_pos ++;
- if (now_pos > 65) return ;
- i = rand() % 25;
- if (i>7) return;
- move(0, now_pos);
- addch(CHAR[i]);
- targets.chars[targets.sum] = CHAR[i];
- targets.flag[targets.sum] = 1;
- targets.pos_l[targets.sum] = LINES - 1;
- targets.pos_c[targets.sum] = now_pos;
- targets.sum ++;
- refresh();
- return;
- }
- void refreshscr()
- {
- int i;
- for (i =0; i<targets.sum; i++) {
- if (targets.flag[i] != 2) continue;
- move(targets.pos_l[i], targets.pos_c[i]);
- addch(' ');
- if (targets.pos_l[i] <2 ) {
- targets.flag[i] = 3;
- beep();
- move( 0, targets.pos_c[i]);
- addstr(" ");
- move( LINES - 1, targets.pos_c[i]);
- addch(targets.chars[i]);
- refresh();
- break;
- }
- targets.pos_l[i] -= 1;
- move(targets.pos_l[i], targets.pos_c[i]);
- addch('^');
- refresh();
- }
- }
- void show_score()
- {
- int i;
- static int score = 0;
- for (i=0; i<targets.sum; i++)
- if (targets.flag[i] == 3) score++;
- move(LINES/2, COLS/2 - 5);
- printw("SCORES : %d", 100*score/targets.sum);
- move(LINES/2+2, COLS/2 - 10);
- printw("Click correct : %d", 100 * score / (score + err_click));
- refresh();
- beep();
- nocbreak();
- getch();
- }
- int main()
- {
- int i, count = 0;
- int tmp = 0;
- initscr();
- clear();
- curs_set(0);
- noecho();
- halfdelay(1);
- refresh();
- srand((int) time(NULL));
- targets.sum = 0;
- while(now_pos<85) {
- count = ++count % 5;
- if (!count) generate();
- refreshscr();
- if (now_pos<71) tmp = getch();
- for (i = 0; i<targets.sum; i++) {
- if (targets.flag[i] != 1 ) continue;
- if ( (int)targets.chars[i] != tmp) continue;
- targets.flag[i] = 2;
- break;
- }
- if ( tmp != -1 && i == targets.sum )
- err_click++ ;
- }
- show_score();
- endwin();
- return 0;
- }
复制代码 |
|