zoukankan      html  css  js  c++  java
  • 打字游戏 C语言

    截图详情,(建议在win7 上运行)

    代码如下:

    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <Windows.h>
    #include <conio.h>
    #include <time.h>
    
    using namespace std;
    
    #define  KLETTER_COUNT    10
    #define  KSPEED    10
    
    //定义子弹或者字符
    typedef struct 
    {
        int  x; //定义坐标
        int  y;
        char ch;//定义字符
        int isDisplay; //是否显示 0 不显示 否则显示
        int life; //定义声明周期
    }LETTER;
    
    //字母初始化
    LETTER  letter[KLETTER_COUNT];
    
    void init_letter(void)
    {
        srand((unsigned)time(NULL));
        for(int i=0;i<KLETTER_COUNT;i++)
        {
            letter[i].ch = rand()%26 + 'A' ;
            letter[i].x = rand()%80;
            //printf("letter[%d].x = %d.
    ",i,letter[i].x);
            letter[i].y = i*(-2);
            //printf("letter[%d].y= %d.
    ",i,letter[i].y);
            letter[i].life = 1;
        }
    }
    
    
    //子弹初始化
    LETTER bullet;
    void init_bullet(int x)
    {
        bullet.ch = 30;
        bullet.x = x;
        bullet.y = 25;
        bullet.life = 1;
    }
    
    //坐标切换
    void  gotoxy(int x,int y)
    {
        COORD pos;
        pos.X = x;
        pos.Y = y;
        HANDLE hout =  GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleCursorPosition(hout,pos);
    }
    
    //绘制字母
    void draw_letter(char ch, int x,int y)
    {
        gotoxy(x,y);
        printf("%c",ch);
    }
    
    //判断字母是否显示
    void isLetterDisplay()
    {
        for(int i=0;i<KLETTER_COUNT;i++)
        {
            if(0==letter[i].life)
            {
                letter[i].isDisplay=0;
            }
            else if(letter[i].y < 0  ||  letter[i].y>24)
            {
                letter[i].isDisplay = 0;
            }
            else 
            {
                letter[i].isDisplay = 1;
            }
        }
    }
    
    //让所有的字母下降
    void  letterMov()
    {
        isLetterDisplay(); //先更新所有字母的状态 
        for(int i=0;i<KLETTER_COUNT;i++) //所有的字母状态更新一遍
        {
            if(letter[i].y<25)
            {
                if(letter[i].isDisplay)
                {
                    draw_letter(' ',letter[i].x,letter[i].y);
                    draw_letter(letter[i].ch,letter[i].x,letter[i].y+1);
                }
                else
                {
                    draw_letter(' ',letter[i].x,letter[i].y);
                }
                letter[i].y++;
            }
            else
            {
                draw_letter(' ',letter[i].x,letter[i].y);
            }
        }
    }
    
    //子弹向上
    void bulletMov()
    {
        if(bullet.life==1)
        {
            draw_letter(' ',bullet.x,bullet.y);
            draw_letter(bullet.ch,bullet.x,bullet.y-1);    
            bullet.y-- ;
        }
    }
    
    //动画
    void  flash_ip()
    {
        for(int j=0;j<20;j++)//总共打印20次
        {
            for(int i=0;i<10;i++) //全部打印一遍,每次打印
            {
                if(letter[i].y>=0)
                {
                    gotoxy(letter[i].x,letter[i].y);//首先跳转到对应的位置
                    printf(" ");// 打印该字符
                    gotoxy(letter[i].x,letter[i].y+1);//首先跳转到对应的位置
                    printf("%c",letter[i].ch);// 打印该字符
                }
                else
                {
                    //打印空白行
                    gotoxy(letter[i].x,letter[i].y);//首先跳转到对应的位置
                    printf(" ");// 打印该字符
                }    
                letter[i].y++;
            }
            Sleep(500);//显示0.5s
    
        }
    }
    
    int main(void)
    {
        int i=0;
        int flag = 0;
        int score = 0;
        init_letter(); //初始化 字母
         char        user_l = ' ';
    
         while(letter[KLETTER_COUNT-1].y<24)
         {
             letterMov(); //字母下降一行
             if( _kbhit() )  //判断是否按键按下
             {
                user_l = _getch()  - 32;;//'A'-'a';
                fflush(stdin); //清除键盘缓冲曲
                for(i=0;i<KLETTER_COUNT;i++) //遍历数组  寻找按下的按键是否和目前显示的字母有重一样的
                {
                    if(user_l==letter[i].ch && letter[i].life==1 && letter[i].isDisplay==1)
                    {
                        init_bullet(letter[i].x);//例化子弹 //说明找到了
                        flag=1;
                        break;
                    }
                }
                    while(bullet.y>0 && flag==1) //说明找到了以后才将子弹发射出去
                    {
                        bulletMov();
                        if(bullet.y==letter[i].y)//当子弹打到字母的时候
                        {
                            bullet.life=0; //销毁子弹
                            letter[i].life = 0; //销毁字母
                            draw_letter(' ',letter[i].x,letter[i].y);
                            flag = 0;
                            break; //跳出循环
                        }
                        Sleep(50);
                    }
             }
              Sleep(300);    
         }
    
        
    
         system("CLS"); //清屏、
         //统计分数
         for(i=0;i<KSPEED;i++)
         {
             if(letter[i].life==1)        score++;
         }
    
         printf("一共%d个字母,你削掉了%d个字母,剩余%d个字母.
    ",KSPEED,KSPEED-score,score);
         //打印
    
         getchar();
        //system("pause");
        return 0;
    }
  • 相关阅读:
    623. Add One Row to Tree 将一行添加到树中
    771. Jewels and Stones 珠宝和石头
    216. Combination Sum III 组合总数三
    384. Shuffle an Array 随机播放一个数组
    382. Linked List Random Node 链接列表随机节点
    向github项目push代码后,Jenkins实现其自动构建
    centos下安装Jenkins
    python提取批量文件内的指定内容
    批处理实现:批量为文件添加注释
    python抓取每期双色球中奖号码,用于分析
  • 原文地址:https://www.cnblogs.com/cofin/p/12025341.html
Copyright © 2011-2022 走看看