C语言键盘控制方块在linux终端移动

这几天工作不忙,回答网友问题时,整了一段键盘控制方块在linux终端移动的代码,基于Linux内核的手机与平板也可以运行。这里分享给广大C语言爱好者,代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define TTY_PATH  "/dev/tty"
#define STTY_US  "stty raw -echo -F "
#define STTY_DEF  "stty -raw echo -F "

#define EDGE_R 44   //终端右边缘
#define EDGE_B 80   //终端底边缘

int row=10,col=22;  //初始化方块位置

int get_char()    
{
  fd_set rfds;
  struct timeval tv;
  int ch = 0;
  FD_ZERO(&rfds);
  FD_SET(0, &rfds);
  tv.tv_sec = 0;
  tv.tv_usec = 10;
  if (select(1, &rfds, NULL, NULL, &tv) > 0)
  {
      ch = getchar();
  }
  return ch;
}

void Control(char input)   //键盘控制模块
{
	switch(input)
	{
		case 'w':
            row-=1;
            if(row<1)row=1;
			break;
		case 'a':
            col-=2;
            if(col==0)col=2;
			break;
		case 's':
            row+=1;
            if(row>EDGE_B)row=EDGE_B;   //超越底边界的处理
			break;
		case 'd':
            col+=2;
            if(col>EDGE_R)col=EDGE_R;   //超越右边界的处理
			break;
	}
}

void block(int _col,int _row)
 {
     printf("\033[?25l");
    {
        printf("\033[%d;%dH\033[41m  \033[0m" , _row,_col);
        fflush(stdout);
        usleep(500);
        printf("\033[%d;%dH  \033[0m" , _row,_col);
    }
}

int main()
{
	system(STTY_US TTY_PATH);//开启非阻塞输入

	while(1)
	{
        block(col,row);

		char input = get_char();
		Control(input);
		if(input == '3')    //输入数字键 “3”后,程序结束
		{
			system(STTY_DEF TTY_PATH);//关闭非阻塞输入
			return 0;
		}
	}
	return 0;
}

效果图:

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西子剑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值