Klawisze, getch(), gotoxy

0

Mam taki program:

 
#include <iostream>
#include <windows.h>
#include <conio.h>

using namespace std;

/////////////////////////////////
void gotoxy(int x, int y);
////////////////////////////////

int main()
{
    int x = 9;
    int y = 9;
    char c1;

    do{
        cout << x <<endl;
        cout << y <<endl;
        gotoxy(x,y);
        cout << "O";
        c1 = getch();
        system("cls");

        if (c1 == 'H') y--;
        if (c1 == 'P') y++;
        if (c1 == 'M') x++;
        if (c1 == 'K') x--;
        else (cout << "inny");

    }while (c1 != 27);

}

void gotoxy(int x, int y)
{
  COORD c;
  c.X = x - 1;
  c.Y = y - 1;
  SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}

czemu za każdym razem wykonuje się polecenie else jeśli warunek ifów jest spełniony ?

0

else wykonuje się, gdy ostatni z warunków w if nie jest spełniony (a nie każdy). użyj else if albo switch

0

Tak doszedłem już do tego sam i zmieniłem na case

    switch(c1)
{
case 'H':  {y--; break;}
case 'P':  {y++; break;}
case 'M':  {x++; break;}
case 'K':  {x--; break;}
default: {cout << "inne";}
}

ale np. gdy przytrzymam kursor to mimo wszystko napis się pojawia, pojedyncze kliknięcia powodują mignięcie przycisku. Wciśnięcie innego przycisku powoduje trwałe pojawienie się napisu.

0

Dobra rozwiązałem problem, zmienną c1 zadeklarowałem jako int +

    if (c1 == 72) y--;
    if (c1 == 80) y++;
    if (c1 == 77) x++;
    if (c1 == 75) x--;
    if (c1 != 72 && c1 != 80 && c1 != 77 && c1 != 75)

cout << c1;

no i działa :)

0
Kaktus123 napisał(a):

if (c1 == 72) y--;
if (c1 == 80) y++;
if (c1 == 77) x++;
if (c1 == 75) x--;
if (c1 != 72 && c1 != 80 && c1 != 77 && c1 != 75)
cout << c1;
Zrób że to po ludzku:

switch(c1)
{
    case 'H': y--; break;
    case 'P': y++; break;
    case 'M': x++; break;
    case 'K': x--; break;
    default: cout << c1; break;
}

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