Przesuwanie znaku po konsoli - ncurses

0

Ostatnio bawię się z biblioteką ncurses i mam problem z przesuwaniem elementu po konsoli.

 #include <iostream>
#include <curses.h>

using namespace std;

int main()
{
    initscr();
    keypad(stdscr, FALSE);
    noecho();
    int maxx = 0, maxy = 0;
    getmaxyx(stdscr, maxy, maxx);
    int y = maxy/2, x = maxy/2;
    bool isRunning = true;
    do
    {
        char dir = getch();
        switch(dir)
        {
            case 'w': y--;
            case 's': y++;
            case 'a': x--;
            case 'd': x++;
            case '0': isRunning = false;
        }

        clear();
        if(x>=maxx) x = 0;
        if(y>=maxy) y = 0;
        if(x<=0) x = maxx-1;
        if(y<=0) y = maxy-1;
        //mvprintw(y, x, "X");
        move(y,x);
        printw("X");
        mvprintw(0, 0, "x: %d y: %d dir: %c", x, y, dir);
    }
    while(!isRunning);
    getch();
    endwin();
    return 0;
}

W switchu działa warunek tylko dla 'd' i 's'.

if(x>=maxx) x = 0;
        if(y>=maxy) y = 0;
        if(x<=0) x = maxx-1;
        if(y<=0) y = maxy-1; 

Tutaj też nie działa za dobrze, po osiągnięciu krawędzi konsoli nie przechodzi z drugiej strony tylko się zatrzymuje.

0
if (x >= ...) x = 1;
if (y >= ...) y = 1;
0

Nie działa bo za każdym razem wykonuje się isRunning = false; ponieważ zapominałeś o break'ach
Tak a propos, robisz tak i wywalasz if'y

        switch(dir)
        {
            case 'w': y=(y+maxy-1)%maxy; break;
            case 's': y=(y+1)%maxy; break;
            case 'a': x=(x+maxx-1)%maxx; break;
            case 'd': x=(x+1)%maxx; break;
            case '0': isRunning = false; break;
        }

1 użytkowników online, w tym zalogowanych: 0, gości: 1