【问题标题】:Getting a character from specific coordinates in a ncurses window从 ncurses 窗口中的特定坐标获取字符
【发布时间】:2018-01-12 15:24:23
【问题描述】:

我必须使用 ncurses 和 windows 绘制一个迷宫,我已经将绘图部分放下,但现在我的角色必须移动并且无法通过障碍物。这就是我试图用运动来检查障碍物(在这种情况下用“O”表示)

while((ch = getch()) != KEY_F(1))
{   switch(ch)
    {   case KEY_UP:
            move_x -= 1;
                            if(move_x != 0){
                                wmove(my_win, move_x, move_y);
                                wrefresh(my_win);
                            }
                            else{
                                move_x +=1;
                                wmove(my_win, move_x, move_y);
                                wrefresh(my_win);
                            }
            break;
        case KEY_DOWN:
            move_x += 1;
                            if(move_x != height-1 && mvwinch(my_win, move_y, move_x)!='O'){
                                wmove(my_win, move_x, move_y);
                                wrefresh(my_win);
                            }
                            else{
                                move_x -=1;
                                wmove(my_win, move_x, move_y);
                                wrefresh(my_win);
                            }
            break;
        case KEY_LEFT:
            move_y -= 1;
                            if(move_y != 0 && mvwinch(my_win, move_y, move_x)!='O'){
                                wmove(my_win, move_x, move_y);
                                wrefresh(my_win);
                            }
                            else{
                                move_y +=1;
                                wmove(my_win, move_x, move_y);
                                wrefresh(my_win);
                            }

            break;
        case KEY_RIGHT:
            move_y += 1;
                            if(move_y != width-1 && mvwinch(my_win, move_y, move_x)!='O'){
                                wmove(my_win, move_x, move_y);
                                wrefresh(my_win);
                            }
                            else{
                                move_y -=1;
                                wmove(my_win, move_x, move_y && mvwinch(my_win, move_y, move_x)!='O');
                                wrefresh(my_win);
                            }
            break;

我认为我的问题是我并没有真正理解 mvwinch 返回什么?还有整个 chtype。

那里可能会有一些额外的刷新,但我现在只是想让它工作。任何帮助将不胜感激。

【问题讨论】:

  • 您的具体问题是什么?这段代码有什么问题?你不明白什么?
  • 这个问题具体是'我如何检查哪个字符在窗口内的某个位置',因为这个“mvwinch(my_win,move_y,move_x)!='O'”不能正常工作(可能我对 mvwinch 返回的理解是错误的);
  • “无法正常工作” 不是问题描述。什么是“适当的”?那么会发生什么呢?
  • 无法正常工作,因为它实际上没有做任何事情,它只是忽略了“验证”,如果我添加猜测这将是因为 mvwinch 返回一个 chtype 但我不知道如何声明其中之一那些。

标签: c ncurses curses


【解决方案1】:

chtype 是一个无符号整数,可以同时包含一个字符和视频属性(粗体、下划线、反转、闪烁)以及颜色。这是通过将这些值放入 chtype 的特定位来完成的。

在 ncurses 中(与其他实现一样),字符占据低位,允许您通过 AND 与预定义的符号 A_CHARTEXT

int ch = mvwinch(my_win, move_y, move_x) & A_CHARTEXT;

对于 ncurses,A_CHARTEXT 是 8 位(值 255)。其他实现不一定使用该大小(不止一个 Unix 供应商使用 16 位)。在讨论curses attributes 的 ncurses 手册页中有一个讨论值的部分。

【讨论】:

    猜你喜欢
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    相关资源
    最近更新 更多