打字通

#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;
}

 

posted @ 2017-09-04 21:10  gd_沐辰  阅读(208)  评论(0编辑  收藏  举报