• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sterowanie strzałkami

Object Storage Arubacloud
0 głosów
1,674 wizyt
pytanie zadane 31 października 2015 w C i C++ przez ToSzem Nowicjusz (170 p.)
edycja 31 października 2015 przez ToSzem

 

Witam, tworzę konsolową wersję kółka i krzyżyk. Sterowanie miałem poprzez wpisanie współżędnych jednak chciałbym zmienić to na strzałki. Jednak mam z tym problem. Plansza zrobiona jest 3 na 3. Sam kursor jednak potrzebuje "znacznie więcej" niż x =1, y=1, aby był na środkowym polu. Po wciśnięciu klawisza enter, gra przechodzi do ruchu kolejnego gracza nie zapisując kompletnie 'X'. Liczę na pomoc.

 


 



Kod:

void funkcja(char tab[3][3],int x, int y)
{
    x=1;
    y=1;

    while(1)
    {
    
    COORD ster;
    ster.X=x;
    ster.Y=y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),ster);
    ste=getch();
    switch(ste)
    {
    case 75:
        x--;
        break;
    case 72:
        y++;
        break;
    case 80:
        y--;
        break;
    case 77:
        x++;
        break;
    case 13:
        tab[x][y]='X';
        goto etykieta;
            break;

    }
    }
    etykieta:
        ;
}

 

2 odpowiedzi

+1 głos
odpowiedź 31 października 2015 przez Rogargol Pasjonat (16,600 p.)
wybrane 1 listopada 2015 przez ToSzem
 
Najlepsza
Moze wyjasnij co to ma robic, bo nie do konca rozumiem zalozenie. Co to jest ste? Co rozumiesz przez to ze kursor potrzebuje znacznie wiecej niz 1,1 zeby byc na srodku? Na srodku czego ma byc? Ekranu, czy o co chodzi?

Dobra rada na przyszlosc, nazywaj zmienne tak zeby bylo wiadomo co robia, skroty rozniace sie jedna literka to najgorsze co mozna zrobic jesli chodzi o czytelnosc kodu.

Ustawiajac kursor na pozycji wspolrzednych ster w momencie jak bedzie to np pozycja 0,0 to takich wspolrzednych nie ma na ekranie, bo zaczynaja sie od 1,1, musisz uwzglednic ta roznice miedzy pozycja kursora na ekranie, a pozycja w tablicy przechowujacej dane.

I jeszcze jedna kwestia, to nie ucz sie uzywac etykiet i instrukcji goto, to jest archaizm na ktory nie ma miejsca w programowaniu wyzszego poziomu.
komentarz 1 listopada 2015 przez ToSzem Nowicjusz (170 p.)
http://prntscr.com/8xq2jq

Kursor "na starcie" powinien być w środkowym polu. Sterując strzałkami góra/dół/prawo/lewo powinien zmieniać swoją pozycję. Naciskając enter w ostatnim polu tablicy, w którym był ustawiony kursor np. [1][2] powinien się wyświetlić i zapisać X.

Dzięki za rady. Na pewno zapamiętam :)
komentarz 1 listopada 2015 przez Rogargol Pasjonat (16,600 p.)

Z tego co pisales wczesniej nie mozna bylo wywnioskowac ze masz taka plansze. Musisz w miejscu gdzie kierujesz kursor na podane wspolrzedne na ekranie zastosowac algorytm ktory zamieni polozenie w tablicy (czyli od 0 do 2) na pozadane polozenie na ekranie.

Na poczatek zrob funkcje do ustawiania kursora na ekranie, to ulatwi Ci sprawe

 

#include<windows.h>

void gotoxy(int x, int y)

{

     COORD c;

     c.X = x;

     c.Y = y;

     SetConsoleCursorPosition (GetStdHandle (STD_OUTPUT_HANDLE), c);

}

teraz wystarczy ze bedziesz ja wywolywal z zadanymi wspolrzednymi. A jaki algorytm musisz zastosowac to juz Ty powinienes wiedziec, wydaje mi sie ze to bedzie cos w stylu gotoxy((x+1) * 5 , (y+1) * 5);

0 głosów
odpowiedź 31 października 2015 przez C☺ndzi Stary wyjadacz (12,100 p.)
Może się nie znam, ale w nagłówku funkcji podaje się x i y, a zaraz pod tym podajesz że x=1 i y=1. Dlaczego?
komentarz 31 października 2015 przez ToSzem Nowicjusz (170 p.)
Żeby ustawić pozycję startową kursora. Wycięcie tego i tak nic nie daje ;/

Podobne pytania

0 głosów
5 odpowiedzi 627 wizyt
pytanie zadane 31 października 2015 w C i C++ przez Klasyczny Użytkownik (610 p.)
0 głosów
1 odpowiedź 927 wizyt
pytanie zadane 9 stycznia 2016 w Java przez Ojcov Użytkownik (760 p.)
0 głosów
2 odpowiedzi 180 wizyt
pytanie zadane 26 września 2020 w C i C++ przez olamas Nowicjusz (160 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...