从ncurses窗口中的特定坐标获取角色

时间:2018-01-12 15:24:23

标签: 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的东西。

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

1 个答案:

答案 0 :(得分: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位)。有一节讨论ncurses手册页中的值,讨论curses attributes