SolitudeL_X 2024-01-07 11:23 采纳率: 20%
浏览 2

c语言 键盘输入不进去


#include <graphics.h>
#include <time.h>
#include <conio.h>
#include<math.h>
#include<cstdio>
#include <cstring>
#include <cstdlib>

//初始背景
IMAGE bk;
//主菜单构建函数声明
void MainMenu();









int main()
{
    char l,L;
     ExMessage m;        // 定义消息变量


    // 设置随机种子
    srand((unsigned)time(NULL));

    while (1)
    {
         MainMenu();  // 显示主菜单
         l = getchar();
         if (l == 'q')
         {
             system("cls");
             break;
         }
    }
    



    // 初始化图形模式
    initgraph(1280, 960);
    loadimage(&bk, _T("靶场.png"));
    putimage(0, 0, &bk);    // 显示背景
    setbkcolor(WHITE);
    int  x, y,score=0,HP=5,flag=0,Flag=1;

    

    while (Flag)
    {
        // 设置文字说明
        settextcolor(BLACK);
        settextstyle(30, 0, "宋体");
        outtextxy(0, 0, "目标值:10");
        outtextxy(300, 0, "HP:");
        
        // 设置HP框
        setfillcolor(RED);
        solidrectangle( 400 ,0,( 400+50* HP ),30);

        // 设置颜色
        int c = rand() % 2;
        if (c == 0)
        {
            setfillcolor(RED);
            setlinecolor(RED);
        }
        else if (c == 1)
        {
            setfillcolor(GREEN);
            setlinecolor(GREEN);
        }
        

        
        flag = 0;
        do{
            x = (rand() % 80) * 8;
            y = (rand() % 20) * 24;
        } while ((x < 30 || x > 610) || (y < 50 || y > 450));//保障圆完全生成在屏幕里
        
        fillcircle(x, y, 30);

        Sleep(100);
        
        
        while (flag == 0) {
            // 获取一条鼠标或按键消息
            m = getmessage();
            switch (m.message)
            {
            case WM_LBUTTONDOWN://左键按下
                
                if ((pow((m.x - x), 2) + pow((m.y - y), 2)) <= 900)//计算是否点到圆
                {
                    if (c == 1)
                {
                 HP--; flag = 1; break;
                }
                 flag = 1; score++;
                }
                else
                {
                HP--; flag = 1; 
                }
                break;

            case WM_RBUTTONDOWN://右键按下
                
                if ((pow((m.x - x), 2) + pow((m.y - y), 2)) <= 900)//计算是否点到圆
                {
                    if (c == 0)
                 {
                 HP--; flag = 1; break;
                 }
                 flag = 1; score++;
                }
                else
                {
                HP--; flag = 1; 
                }
                break;
            }
        }
        clearcircle(x,y,31);                //清除圆
        clearrectangle(350, 0,550, 20);     //更新HP值
        putimage(0, 0, &bk);                //刷新背景
    
        if (score == 10)  // 成功后判断
        {
            system("cls");
            
            closegraph();
            printf("\n");
            printf("\n");
            printf("\n");
            printf("\n");
            printf("恭喜你通过了游戏! 输入 t 可结束游戏,或者输入q再玩一次。\n");
            
            L = getchar();
            if (L == 't')
            {
                Flag = 0;
            }
            else if (L == 'q')
            {
                initgraph(1280, 960);
                loadimage(&bk, _T("靶场.png"));
                putimage(0, 0, &bk);    // 显示背景
                setbkcolor(WHITE);
                score = 0, HP = 5, flag = 0, Flag = 1;
            }

        }
        else if (HP == 0)   //失败后判断
        {
            system("cls");
            
            closegraph();
            printf("\n");
            printf("\n");
            printf("\n");
            printf("\n");
            printf("很可惜你失败了qwq ,输入可结束游戏,或者输入q再挑战一次!\n");
            
            L = getchar();
            if (L == 't')
            {
                Flag = 0;
            }
            else if (L == 'q')
            {
                initgraph(1280, 960);
                loadimage(&bk, _T("靶场.png"));
                putimage(0, 0, &bk);    // 显示背景
                setbkcolor(WHITE);
                score = 0, HP = 5, flag = 0, Flag = 1;
            }
        }
    
    }
    


}

 void  MainMenu() {
    printf(
        "\t   ******射击小球游戏欢迎您******\n"
        "\t   *    射击小球游戏介绍如下    *\n"
        "\t   *        左键消灭红球        *\n"
        "\t   *        右键消灭绿球        *\n"
        "\t   *        游戏规则:           *\n"
        "\t   *    利用鼠标射击所有小球    *\n"
        "\t   *       在HP扣完前           *\n"
        "\t   *       成功完成目标值       *\n"
        "\t   *       即可获胜             *\n"
        "\t   *     输入字母q开始游戏      *\n"
        "\t   *                            *\n"
        "\t   *                            *\n"
        "\t   ******射击小球游戏欢迎您******\n"


         );
}



//优化:1. 打击特效
// 2.结尾打出所花时间(下面加一行鼓励的话),和最好成绩。 
// 3.游戏开始界面可选择结束,结束时可选择结束或再来一次
  • 写回答

2条回答 默认 最新

  • 爱编程的小芒果 2024-01-07 11:28
    关注

    getchat似乎只能读取一个字符

    评论

报告相同问题?

问题事件

  • 创建了问题 1月7日

悬赏问题

  • ¥15 使用autodl云训练,希望有直接运行的代码(关键词-数据集)
  • ¥50 python写segy数据出错
  • ¥20 关于线性结构的问题:希望能从头到尾完整地帮我改一下,困扰我很久了
  • ¥30 3D多模态医疗数据集-视觉问答
  • ¥20 设计一个二极管稳压值检测电路
  • ¥15 内网办公电脑进行向日葵
  • ¥15 如何输入双曲线的参数a然后画出双曲线?我输入处理函数加上后就没有用了,不知道怎么回事去掉后双曲线可以画出来
  • ¥50 WPF Lidgren.Network.Core2连接问题
  • ¥15 soildworks装配体的尺寸问题
  • ¥100 有偿寻云闪付SDK转URL技术