其他分享
首页 > 其他分享> > 2048游戏系列---功能模块第二稿【键盘输入】

2048游戏系列---功能模块第二稿【键盘输入】

作者:互联网

2048-具体功能实现二稿-键盘输入

各模块的实现之二-键盘输入

根据流程图可以把其分为以下几个模块:


一、目的

简单来说就是我们要造一个“黑盒子”,让我们输入的键盘消息经过这个黑盒子,电脑就知道我们在2048游戏中按下了什么键,要知道,电脑不像人一样聪明,是不能直接识别的

二、前提知识

  1. 一个键,它有3种状态,它被按下(key_msg_down ),它被按着(key_msg_down),它抬起来了(key_msg_up)

    //按键测试程序:
    #include "graphics.h"
    #include <iostream>
    using namespace std;
    
    int main()
    {
    	initgraph(640,480,0);
    	setcaption("按键测试");
    	setbkcolor(WHITE);
    	setcolor(BLACK);
    	setfont(22,0,"楷体");
    	
    	int keyUPCount ,keyDownCount ,keyCharCount;
    	keyUPCount = keyDownCount = keyCharCount = 0;
    	
    	for( ; is_run(); delay_fps(60))
    	{
    		cleardevice();
    		while(kbmsg())									//kbmsg()判断是否有按键按下 
    		{
    			key_msg keyMsg = getkey();					//key_msg 是 EGE 中的按键消息结构体,有 3 个 unsiged int 成员: 
    			switch(keyMsg.msg)							//getkey() 获取键盘输入值(键值)
    			{											//msg---消息类型, key---按键码, flag--辅助按键(判断有没有同时按下 Shift 或 Ctrl) 
    				case key_msg_down:						//检测按键按下,长按会一直加
    									keyDownCount++;
    									break;
    				case key_msg_up:						//检测按键抬起
    									keyUPCount++;	
    									break;
    				case key_msg_char:						//检查是否输入字符: 除了TAB,CAPSLOCK,SHIFT,CTRL,FN,ALT,小键盘数字,Num Lk,小键盘上下左右 
    									keyCharCount++;
    									break;	
    			}
    		}	
    		xyprintf(50, 300, "down计数:%d  up计数:%d  char计数:%d", keyDownCount,keyUPCount,  keyCharCount);	
    	}
    	getch();
    	closegraph(); 
    	return 0;
    }
    
  2. W,A,S,D按键的key值(加上小键盘的上下左右)

    EGE 帮我们用宏定义好了:

    键盘值键值
    W‘W’
    A‘A’
    S‘S’
    D‘D’
    key_up
    key_down
    key_left
    key_right

三、键盘控制四方向模板

while(kbmsg())
{
    key_msg keyMsg = getkey();
    if(keyMsg.msg == key_msg_down)
    {
        switch(keyMsg.key)
        {
            case 'W':case key_up   : direction = 0; break;//上
            case 'S':case key_down : direction = 1; break;//下
            case 'A':case key_left : direction = 2; break;//左
            case 'D':case key_right: direction = 3; break;//右
        }
    }
}
if(direction!=-1)
{
    ...
}

四、根据 direction 的值进行移动(上一篇的内容讲过)

五、补全键盘输入到已写程序中

2048键盘输入测试


OK,本篇内容就到这里了,我们摆脱了直接给 dir 赋值,改用键盘输入

不过,在 GIF 中也看到,当数字合并后,并没有新的数字生生成,后面只有 3,4,5 三个数字移动,

下一篇我们就让它合并或移动后,根据条件生成新的数字

还有:数字的合并逻辑是:相同的合并加 1,如,1,1–》2; 2,2–》3; 4,4–》5,而不是 2,4,8 ,这与我们后面储存图像的逻辑有关,2^1 = 2; 2^2 = 4; 2^3 = 8;2^4 = 16……

请添加图片描述

标签:case,direction,int,键盘输入,---,2048,key,msg,dir
来源: https://blog.csdn.net/apple_52421619/article/details/121225582