c - 从 ncurses 窗口中的特定坐标获取字符

标签 c ncurses curses

我必须使用 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 的事情。

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

最佳答案

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

在 ncurses 中(与其他实现一样),字符占据低位,允许您通过与预定义符号AND简单地获取字符<强>A_CHARTEXT:

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

对于 ncurses,A_CHARTEXT 是八位(值 255)。其他实现不一定使用该大小(16 位被多个 Unix 供应商使用)。 ncurses 手册页中有一节讨论了值 curses attributes .

关于c - 从 ncurses 窗口中的特定坐标获取字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48229214/

相关文章:

c# - 单声道嵌入,从 C 调用 C# 泛型方法

ios - AES128 memcry() 崩溃

c - 嵌套循环无法正常工作

c++ - 如何将原始 Haskell 绑定(bind)编译到 OpenCV 又名 GitHub 成员 arjuncomar 的 OpenCV-Raw 仓库

c - 为什么宽字符问题?

使用 ncurses 清除屏幕上的字符

Python-诅咒 : how to use the inch method to get the attribute of a character

c - getch 和 putchar 无法正常工作且无返回

Python:函数内的全局变量 + Curses

python - 在使用 curses 将字符串绘制到屏幕之前,如何为字符串的某些部分着色?