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

question-closed c++ - sterowanie wężem w grze snake ...

Object Storage Arubacloud
0 głosów
839 wizyt
pytanie zadane 28 czerwca 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
zamknięte 29 czerwca 2017 przez Jakub 0

Hej , szczerze mówiąc natknąłem się na problem który sprawił że od jakiegoś czasu nie mogę się oderwać od kodu .

Mianowicie nie mam pojęcia dlaczego w mojej grze snake nastąpił taki problem że nie da się skręcić w prawo . Niezależnie czy użytkownik wybierze klawisz a czy d wąż zawsze pójdzie w lewo, wiem że problem wydaje się żenujący bo mogłem po prosu coś pomieszać w kierunkach ale naprawdę na wszystko patrzyłem i niem pojęcia gdzie jest ten błąd cryingangry. Dodatkowo porównywałem kod ze wcześniejszymi wersjami tej gry które napisałem i wszystko się zgadza . Podałem pod spodem fragment kodu ,dziękuje za pomoc i proszę o wyrozumiałość jeżeli powód jest banalny .

void game::snake_control() //sterowanie wężykiem 
{
    char k = getch();

    if(k=='A') k='a';
    if(k=='D') k='d';
    if(k=='W') k='w';
    if(k=='S') k='s';

    switch(k)
    {
    case 'a':
        snake_direction=left;
        break;
    case 'd':
        snake_direction=right;
        break;
    case 'w':
        snake_direction=up;
        break;
    case 's':
        snake_direction=down;
        break;

    }
}

void game::_left() //poszczególne funkcje odpowiadajace za ruch weza 
{
    obiect_position position;
    position.x = snake[0].x;
    position.y = snake[0].y-1;
    snake.insert(snake.begin(), position);
    snake.pop_back();
}
void game::_right()
{
    obiect_position position;
    position.x = snake[0].x;
    position.y = snake[0].y+1;
    snake.insert(snake.begin(), position);
    snake.pop_back();
}
void game::_up()
{
    obiect_position position;
    position.x = snake[0].x-1;
    position.y = snake[0].y;
    snake.insert(snake.begin(), position);
    snake.pop_back();
}
void game::_down()
{
    obiect_position position;
    position.x = snake[0].x+1;
    position.y = snake[0].y;
    snake.insert(snake.begin(), position);
    snake.pop_back();
}

void game::snake_vector()
{
    if(snake_direction==left) //jezeli kierunek jest lewo
    {
        if(last_snake_direction==right)//zabezpieczenie programu jezeli gracz proboje cofac wezem 
        {
            _right();
        }
        else //jezeli wszystko przebieglo ok
        {
            last_snake_direction==left; //ustawiamy zmienna z zeszlym kierunkiem na lewo by wykonac przy kolejnej iteracji petli gry porownania czy gracz nie proboje cofac ...
            _left();

        }
    }
    else if(snake_direction==right) //taki sam wzor 
    {
        if(last_snake_direction==left)
        {
             _left();
        }
        else
        {
            last_snake_direction==right;
            _right();
        }
    }
    else if(snake_direction==up)
    {
        if(last_snake_direction==down)
        {
             _down();
        }
        else
        {
            last_snake_direction==up;
            _up();
        }
    }
    else if(snake_direction==down)
    {
        if(last_snake_direction==up)
        {
            _up();
        }
        else
        {
            last_snake_direction==down;
            _down();
        }
    }
}

jak potrzebujecie cały kod to piszcie ,jeszcze raz dziękuje za pomoc

komentarz zamknięcia: już jest ok

1 odpowiedź

+2 głosów
odpowiedź 28 czerwca 2017 przez 10kw10 Pasjonat (22,880 p.)
wybrane 29 czerwca 2017 przez Jakub 0
 
Najlepsza
last_snake_direction==left; //ustawiamy ...

Chyba jednak nie ustawiamy :D

 

Tak wgl to w metodach up ,down itp zawsze powtarzaja ci sie te same linijki, moze lepiej zrobic funkcje ?

1
komentarz 28 czerwca 2017 przez excavelty Bywalec (2,480 p.)

Porównania zamiast przypisania są zresztą też w pozostałych funkcjachsmiley.

1
komentarz 28 czerwca 2017 przez 10kw10 Pasjonat (22,880 p.)
ciekawe czemu tylko w prawo nie chcialo dzialac.
komentarz 28 czerwca 2017 przez Jakub 0 Pasjonat (23,120 p.)
Masz racje że są lepsze sposoby na napisanie tego. ale wcześniej napisałem to w ten sam sposób i mi dzałało ... A teraz naprawdę nie chodzi mi tylko jeden kierunek
komentarz 28 czerwca 2017 przez Jakub 0 Pasjonat (23,120 p.)
Tu się zgodzę  mam tendencje do robienia porównań zamiast przypisania
1
komentarz 28 czerwca 2017 przez 10kw10 Pasjonat (22,880 p.)
No coz, cuda sie zdarzają :D tzn ze ci dziala czy nie?
komentarz 29 czerwca 2017 przez Jakub 0 Pasjonat (23,120 p.)
ok wszystko działa :) ,problem był przez to podwójne równa się ,dzięki za pomoc . Nie wiem tylko czemu nie działał tylko jeden kierunek ale tak już bywa ...

Podobne pytania

0 głosów
1 odpowiedź 593 wizyt
pytanie zadane 5 maja 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
+1 głos
1 odpowiedź 331 wizyt
pytanie zadane 22 kwietnia 2019 w C i C++ przez Marcin Płoński Nowicjusz (130 p.)
0 głosów
1 odpowiedź 4,433 wizyt
pytanie zadane 5 maja 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 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!

...