打字通
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <conio.h> #include <windows.h> //定义宏 宏名 宏值 #define WIDTH 30 //宽度 #define HEIGHT 15 //高度 int arr[HEIGHT][WIDTH]; //15行30列的二维数组 //显示字符函数 void ShowChar() { int i, j; system("cls"); //清空屏幕 printf("----------------打字通---------------\n"); for(i = 0; i < HEIGHT; ++i)//++i比i++效率高一点 { for(j = 0; j < WIDTH; ++j) { //表达式1 ? 表达式2 :表达式3; printf("%c", (arr[i][j] ? arr[i][j] : ' ')); } printf("\n"); //换行 } printf("--------------------------------------\n"); } int main() { int row, col; int ctl = 1; char ch; srand(time(0)); //初始化随机种子 while(ctl) { //产生字符 row = 0; //第一行 col = rand() % WIDTH; //随机列 arr[row][col] = rand() % 26 + 'a'; //随机字符 while(1) { ShowChar(); if(kbhit()) //如果按下了键盘上的某键 { if((ch = getch()) == 27) //按下了ESC键 { ctl = 0; break; //退出当前while循环 } else if(ch == arr[row][col]); arr[row][col] = 0; //让字符消失 break; //退出内层 while循环,重新产生一个新字符 } else { if(row >= HEIGHT - 1)//字符掉到了最下面 { arr[row][col] = 0; break; } arr[row + 1][col] = arr[row][col]; arr[row][col] = 0; ++row; } Sleep(80); //睡眠500毫秒 } } return 0; }