用C语言控制键盘上的方向键

       各位同学,大家好!相信大家在学习C语言的过程中,都和我一样,经常使用scanf函数来接受字符,数字,这些标准输入信息,来实现自己设计的程序效果。

       而我突然有一天(对就是今天)我将目光放向了键盘上的方向键,因为我很好奇,它们算字符吗?能被scanf函数整除吗?我们写的程序能像正真的程序吗?你们懂我的意思对吧?我想要一个更加有互动感的程序。

在这里我会用一个表达效果简单的程序,来为你们展示我想要的互动感,我建议你们自己来写一写,因为这样的感受才会更加深刻不是吗?

接下来我们先放代码再讲:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include <conio.h>

// 定义颜色常量
#define COLOR_RESET   "\033[0m"//恢复默认值
#define COLOR_GREEN   "\033[32m"//绿色

// 设置文本颜色
void set_text_color(const char* color) 
{
    printf("%s", color);
}

// 显示菜单
void caidan(int is_truth_green, int is_adventure_green)
 {
    system("cls");  // 清屏
    if (is_truth_green) 
    {
        set_text_color(COLOR_GREEN);
    }
    printf("1.真心话\n");
    set_text_color(COLOR_RESET);

    if (is_adventure_green)
    {
        set_text_color(COLOR_GREEN);
    }
    printf("2.大冒险\n");
    set_text_color(COLOR_RESET);
}

int main() 
{
    int fangxiang = -1;
    int is_truth_green = 0;  // 标记真心话是否为绿色,初始为否
    int is_adventure_green = 0;  // 标记大冒险是否为绿色,初始为否
    
    // 首次显示菜单,无颜色
    caidan(is_truth_green, is_adventure_green);

    while (1)
     {
        fangxiang = _getch();

        if (fangxiang == 72)
             {  // 向上键
                is_truth_green = 1;  // 真心话变绿
                is_adventure_green = 0;
                
                caidan(is_truth_green, is_adventure_green);
             }
        else if (fangxiang == 80) 
            {  // 向下键
                is_truth_green = 0;
                is_adventure_green = 1;  // 大冒险变绿
               
                caidan(is_truth_green, is_adventure_green);
            }

       
    }
    return 0;
}

        在这一段代码中,关键是,_getch()函数,它是用于从控制台中无缓冲的读取单个字符的函数,它和scanf的区别在于,无缓冲,相较于scanf输入字符之后还需要按回车键,_getch()会直接,接收键值,这使得它在需要即使相应的程序中就非常重要,例如游戏中的操作键一样,怎么说比较形象呢?

        这么说吧!scnaf就像是正式运动之前会热身的成熟男子,而_getch()就像莽撞的小青年只会横冲直撞,性急,还没热身就出发了。

   if (fangxiang == 72)

       在介绍_getch()之后,我们上面这个条件判断,很简单,就是判定fangxiang是不是预定的值,而我们预定的值72,代表的什么呢?它其实就是代表着向上键,他在系统终端中就是设置好的,但不同的系统对应的值可能也是不一样的,写之前可以查一下。

        当我们明白了_getch()和相对应的键值,我们在看代码就很简单了,就是用_getch()接收按键,然后在创建一个int型变量接收它,来比较键值,再分别设置对应结果就完成了。

我在这个基础上加了点颜色。

// 定义颜色常量
#define COLOR_RESET   "\033[0m"//恢复默认值
#define COLOR_GREEN   "\033[32m"//绿色

// 设置文本颜色
void set_text_color(const char* color) 
{
    printf("%s", color);
}

        颜色函数很简单用printf函数直接将 color中预处理好的转义字符打印出来,一次打印颜色一次恢复原样就可以做到设置颜色的效果。

什么是预处理?下次单独讲。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值