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

Snake w konsoli coś nie domaga

Object Storage Arubacloud
0 głosów
184 wizyt
pytanie zadane 24 stycznia 2018 w C i C++ przez Dziobi Początkujący (490 p.)

Witam bardzo serdecznie, 

Przychodzę do was z prośbą pomocy w znalezieniu błędu. Moja dziewczynka bawi się w programowanie i bardzo się przy tym irytuje iż nie wie gdzie jest błąd. Próbuje napisać słynną grę "Snake" w codeblocks.

Tu macie kod:

#include <iostream>
#include <conio.h> // getch()
#include <cstdlib> //system ("cls") - czyszczenie ekranu
#include <time.h> // srand(time(NULL))
#include <windows.h> // Sleep()

using namespace std;

int szerokosc, wysokosc, szybkosc;
int gora, dol, lewo, prawo;
int xweza, yweza;
int xjedzenia, yjedzenia;
int klawisz;
int dlugosc=4, historiax[10000],historiay[10000];
int ile=0;
char kierunek='p';//w prawo
char pole[35][35];
// p -pole jest puste
//w - na polu jest wąż
// j - jedzenie

int zwymyslaj(int &x)
{
    cout << "Ty matole glupi! Mialo byc od 5 do 35." << endl;
    cout << "Masz ostatnia szanse" << endl;
    cin >> x;
    if(x<5 || x>35) x = 15;
}




int main()
{
    cout << "Podaj szerokosc planszy od 5 do 35:" << endl;
    cin >> szerokosc;
    if(szerokosc<5 || szerokosc>35) zwymyslaj(szerokosc);

    cout << "Podaj wysokosc planszy od 5 do 35:" << endl;
    cin >> wysokosc;
    if(wysokosc<5 || wysokosc>35) zwymyslaj(wysokosc);

    cout << "Podaj szybkosc od 1 do 10" << endl;
    cin >> szybkosc;
    if(szybkosc<1) szybkosc = 1;
    if(szybkosc>10) szybkosc = 10;

    cout << "Nacisnij klawisze ktorymi chcesz zagrac" << endl;
    cout << "GORA" << endl;
    gora=getch();
    if(gora==224)gora+=getch();
    if(gora==0)gora-=getch();

    cout << "DOL" << endl;
    dol=getch();
    if(dol==224)dol+=getch();
    if(dol==0)dol-=getch();

    cout << "LEWO" << endl;
    lewo=getch();
    if(lewo==224)lewo+=getch();
    if(lewo==0)lewo-=getch();

    cout << "PRAWO" << endl;
    prawo=getch();
    if(prawo==224)prawo+=getch();
    if(prawo==0)prawo-=getch();

    // tutaj nadajemy wartosc p tablicy pole
    for (int i=0; i<wysokosc; i++)
    {
        for(int j=0; j<szerokosc; j ++)
        {
            pole[j][i]= 'p';
        }
    }
    srand(time(NULL));// generator losowania
  // losowanie pola dla weza
    xweza=rand()%szerokosc;
    yweza=rand()%wysokosc;

    pole[xweza][yweza]= 'w';

  // losowanie pola dla jedzenia
  do {  // wykonuj...
    xjedzenia=rand()%szerokosc;
    yjedzenia=rand()%wysokosc;
       //...dopoki pole wylosowane ne jest puste
     } while(pole[xjedzenia][yjedzenia]!= 'p');

     pole[xjedzenia][yjedzenia]= 'j';
//rozpoczecie gry
for (;;)
  {
      ile++;
      historiax[ile]=xweza;
      historiay[ile]=yweza;

        //kasowanie ogona weza
      pole[historiax[ile-dlugosc]][historiay[ile-dlugosc]]='p';

    //rysowanie planszy--------------------------------
    system("CLS"); // czyszcenie ekranu
    //gorna ramka
    for (int i=0; i<=szerokosc ; i++)
    {
        cout << "--";
    }

    for (int i=0; i<wysokosc; i++)
    {
        cout << endl << "|";//lewa ramka
        for(int j=0; j<szerokosc; j++)
        {
            if(pole[j][i]=='p') cout << "  ";
            if(pole[j][i]=='w') cout << " o";
            if(pole[j][i]=='j') cout << " x";
        }
        cout <<  "|";//prawa ramka
    }

    cout << endl;
    //dolna ramka
    for (int i=0; i<=szerokosc ; i++)
    {
        cout << "--";
    }

    if (kbhit()) // jesli zostanie nacisniety jakis klawisz
    {
       klawisz=getch();
       if(klawisz==224)klawisz+=getch();
       if(klawisz==0)klawisz+=getch();

       if(klawisz==gora) kierunek='g';
       if(klawisz==dol) kierunek='d';
       if(klawisz==lewo) kierunek='l';
       if(klawisz==prawo) kierunek='p';

    }

   Sleep(500); // czekaj
   if(kierunek='d') yweza++;
   if(kierunek='g') yweza--;
   if(kierunek='l') xweza--;
   if(kierunek='p') xweza++;


   if(xweza==szerokosc) xweza=0;
   if(xweza==-1) xweza=szerokosc-1;
   if(yweza==wysokosc) yweza=0;
   if(yweza==-1) yweza=wysokosc-1;


   pole[xweza][yweza]='w';



  }
    return 0;
}

Program ogólnie działa ale nie można ruszać się przysłowiowym wężem i mruga konsola.

komentarz 24 stycznia 2018 przez JAKUBW Nałogowiec (33,470 p.)

Zamiast Sleep() z Windows.h powinieneś użyć natywnej funkcji z C++11:

std::this_thread::sleep_for (std::chrono::milliseconds(500));

Dodaj nagłówek #include <chrono> oraz #include <thread> i upewnij się że korzystasz z najnowszej dostępnej wersji C++

komentarz 24 stycznia 2018 przez Dziobi Początkujący (490 p.)
Mówi że nie działa a ma nową wersję iż nie dawno ściągała code blocksa :/
komentarz 24 stycznia 2018 przez JAKUBW Nałogowiec (33,470 p.)
Ponieważ pracuje na starym standardzie. Na pasku u góry niech wybierze Settings->Compiler-> i w liście checkboxów która się wyświetli zaznaczy to co zawiera C++14

Tutaj jak to zrobić dla C++11 gdyby nie dała rady (dla 14 jest analogicznie)

https://stackoverflow.com/a/43701273

1 odpowiedź

0 głosów
odpowiedź 24 stycznia 2018 przez Hiskiel Pasjonat (22,830 p.)

1. Nie widzę głównej pętli gry

2. Ta dziewczyna chyba wnerwiona? ;D

int zwymyslaj(int &x)

{

    cout << "Ty matole glupi! Mialo byc od 5 do 35." << endl;

    cout << "Masz ostatnia szanse" << endl;

    cin >> x;

    if(x<5 || x>35) x = 15;

}

 

komentarz 24 stycznia 2018 przez draghan VIP (106,230 p.)

1. Nie widzę głównej pętli gry

Rozpoczyna się w 93. linii.

komentarz 24 stycznia 2018 przez Dziobi Początkujący (490 p.)

@Swipeyro, Trochę krzyczy xD 

Podobne pytania

0 głosów
0 odpowiedzi 649 wizyt
pytanie zadane 6 maja 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
–1 głos
0 odpowiedzi 209 wizyt
pytanie zadane 1 czerwca 2018 w C i C++ przez MrRed Nowicjusz (160 p.)
0 głosów
0 odpowiedzi 175 wizyt

92,555 zapytań

141,403 odpowiedzi

319,554 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!

...