Nawigacja w grze kółko i krzyżyk

0

Witam
Piszę grę kółko i krzyżyk i do nawigacji po planszy postanowiłem wykorzystać bibliotekę curses.h.
oto kod programu

 #include <curses.h>
#include <iostream>
#include <stdio.h>
using namespace std;
void rysuj_plansze()
{
for(int i = 1; i <= 9; i++)
  {
    printw(" "" ");
    if(i % 3)
      printw("|");
    else if(i != 9)
      printw("\n--+--+--\n");
    else printw("\n");        
  }  
    
}
int main()
{

    int t[9];
   int b, x=0, y=0;
     

     initscr();
     cbreak();
     noecho();

    intrflush(stdscr, FALSE);
    keypad(stdscr, TRUE);
    int ch,ha;
rysuj_plansze();
do{
move(0,0); 
    ch = getch();
   switch(ch)
   {
   case KEY_LEFT:
        if(y>=3)
        {
         move(x, y-3);
         ha=getch();
         if(ha=KEY_ENTER) printw("X");
        }
        
   case KEY_RIGHT:
        move(x, y+3);
        ha=getch();
        if(ha=KEY_ENTER) printw("X");
   case KEY_UP:
        if(x>=2)
        {
         move(x-2,y);
         ha=getch();
         if(ha=KEY_ENTER) printw("X");
        }
   case KEY_DOWN:
        move(x+2,y);
        ha=getch();
        if(ha=KEY_ENTER) printw("X");
   }
  
}while(2);
    
    endwin();


    }

Program nie działa poprawnie, począwszy od tego, że kursor nie wyświetla się na żądanej pozycji a skończywszy, na tym , że po powtórnym wciśnięciu strzałki wstawia znak mimo iż nie powinien tego robić.

0

Pobierasz klawisz, sprawdzasz czy jest ENTER'em. A jak nie jest to co z tym klawiszem dalej robisz? Nic nie robisz.

Powinieneś mieć jedno getch i w zależności od tego co zwróci (czy strzałkę, czy ENTER) wykonać odpowiednią akcję.

0
        znak =getch();
	znak2 = (char *) keyname(znak);
        switch(znak)
        {
		case KEY_UP:
			if (wiersz > 0)
			{
				wiersz--;
		    	}
				break;
			
		case  KEY_DOWN:
			if(wiersz <2)
			{
			        wiersz ++;
			}
			break;
		case KEY_LEFT:
					
			if (kolumna >0)
			{
				kolumna --;
				kolumna--;
			} 
				break;
			
		case  KEY_RIGHT:
			if (kolumna <4)
			{
				kolumna ++;
				kolumna ++;
			}
			break;
                
        case ' ' :
             { 
                 for(int n=0; n<3; n++)
                 { 
                         for(int m=0; m<3; m++)
                         {
                                 if(plansza[n][m]==' ')
                                 {
                                 if(kolumna==0 && wiersz==0) plansza[0][0]='o';
                                 if(kolumna==0 && wiersz==2) plansza[0][1]='o';
                                 if(kolumna==0 && wiersz==4) plansza[0][2]='o';
                                 if(kolumna==1 && wiersz==2) plansza[1][0]='o';
                                 if(kolumna==1 && wiersz==2) plansza[1][1]='o';
                                 if(kolumna==1 && wiersz==4) plansza[1][2]='o';
                                 if(kolumna==2 && wiersz==0) plansza[2][0]='o';
                                 if(kolumna==2 && wiersz==2) plansza[2][1]='o';
                                 if(kolumna==2 && wiersz==4) plansza[2][2]='o';
                                 }
                         }
                 }
             }
             break;
             }

Przebudowałem trochę menu wyboru, ale teraz po wstawieniu znaku i naciśnięciu strzałki zachowuje się tak jakbym nacisnął spacje a nie tylko zmienił współrzędne

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