Kod sprawdzający, czy wąż wszedł w ścianę planszy

0
 #include <iostream>
using namespace std;

class Plansza
{
    public:
    char tablica[25][70];

    void rysuj()
    {
        for(int i = 0; i < 25;i++)
        {
            for(int j = 0; j < 70;j++)
            {
                tablica[i][j] = 0;
            }
        }

        int i = 0,j = 0;
        for(int j = 0; j < 70; j++)
        {
             tablica[i][j] = (char) 219;
        }

        for(int i = 1 ;i < 25; i++)
        {
            tablica[i][0] = (char) 219;
            tablica[i][69] = (char) 219;
        }

        for(j = 0; j < 70; j++)
        {
            i = 24;
            tablica[i][j] = (char) 219;
        }
        for(int i = 0;i < 25;i++)
        {
            for(int j = 0; j < 70;j++)
            {
               cout << tablica[i][j] ;
            }
            cout << endl;
        }
    }
};

int main()
{
    Plansza mapa;
    mapa.rysuj();
    return 0;
}

Stworzyłem planszę do gry. Teraz chcę stworzyć klasę potwory i stworzyć obiekt wąż. Mógłby ktoś podpowiedzieć jak potem napisać fragment kodu, który będzie sprawdzać czy wąż nie wszedł w ściany planszy ? Nie bardzo wiem jak się dostać z obiektu wąż do pól obiektu mapa aby sprawdzić ten warunek.

0

Teraz ok ?

#include <iostream>
using namespace std;

class Plansza
{
    private:
    char tablica[25][70];

    public:
    void wypelnij()
    {
        for(int i = 0; i < 25;i++)
        {
            for(int j = 0; j < 70;j++)
            {
                tablica[i][j] = 0;
            }
        }

        int i = 0,j = 0;
        for(int j = 0; j < 70; j++)
        {
             tablica[i][j] = (char) 219;
        }

        for(int i = 1 ;i < 25; i++)
        {
            tablica[i][0] = (char) 219;
            tablica[i][69] = (char) 219;
        }

        for(j = 0; j < 70; j++)
        {
            i = 24;
            tablica[i][j] = (char) 219;
        }
    }
    void rysuj() const
    {
        for(int i = 0;i < 25;i++)
        {
            for(int j = 0; j < 70;j++)
            {
               cout << tablica[i][j] ;
            }
            cout << endl;
        }
    }
};

int main()
{
    Plansza mapa;
    mapa.wypelnij();
    mapa.rysuj();
    return 0;
}
2
  1. Niepotrzebne rzutowania.
  2. Magiczne liczby.
  3. Nadmiar pętli.
  4. Potworki związane z iteracją w pętlach.
  5. Makaronizm - polskie i angielskie nazwy nie idą w parze; Angielski narzuca Ci sam język, więc polski możesz sobie darować.

//EDIT: Co do pytania - sprawdź, czy tam, gdzie wąż ma głowę nie ma ściany, wszystko.

0

Teraz właśnie udało mi się wstawić początek węża na planszę. Jednak to chyba nie jest dobre rozwiązanie. Za każdym razem czyścić ekran ? I czy to dobrze jeśli pola mam publiczne ?

class Potwor
{
public:

    char znak = 219;
    int poz_x;
    int poz_y;

public:

    Potwor(int x, int y) : poz_x(x), poz_y(y) {};

};

int main()
{
    Plansza mapa;
    mapa.wypelnij();
    mapa.rysuj();
    Potwor waz(14,30);
    mapa.tablica[waz.poz_x][waz.poz_y] = waz.znak;
    system("cls");
    mapa.rysuj();
    return 0;
}
0

pomoże ktoś ?

0

skoro masz konsolę to po prostu sprawdzaj czy w miejscu, w które chcesz się ruszyć/jesteś jest ściana i nie pozwól mu tam iść/zabij go. prostszej wersji nie widzę

0

Teraz mam coś takiego, nie wiem co zrobić w momencie gdy wąż natrafi na jedzenie czyli w tym momencie:

 if(waz.poz_y == jablko.poz_y && waz.poz_x == jablko.poz_x) 

Dodać 1 jednostkę do węża lecz nie wiem jak to zrobić.

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

using namespace std;

class Plansza
{
private:
    char sciana = 219;

public:
    char tablica[23][70];

    void wypelnij()
    {
        for(int i = 0; i < 23;i++)
        {
            for(int j = 0; j < 70;j++)
            {
                tablica[i][j] = 0;
            }
        }

        for(int j = 0; j < 70; j++)
        {
             tablica[0][j] = sciana;
        }

        for(int i = 1 ;i < 23; i++)
        {
            tablica[i][0] = sciana;
            tablica[i][69] = sciana;
        }

        for(int j = 0; j < 70; j++)
        {
            tablica[22][j] = sciana;
        }
    }
    void rysuj() const
    {
        for(int i = 0;i < 23;i++)
        {
            for(int j = 0; j < 70;j++)
            {
               cout << tablica[i][j];
            }
            cout << endl;
        }
    }
};
class Potwor
{
private:
    int wynik=0;

public:
    char znak = 219;
    int poz_x;
    int poz_y;

    Potwor(int x, int y) : poz_x(x), poz_y(y) {};
    void dodaj()
    {
        wynik += 1;
    }

};

class Jedzenie
{
public:
    char znak = '@';
    int poz_x;
    int poz_y;
    Jedzenie(int x, int y) : poz_x(x), poz_y(y) {};
};

int main()
{
    Plansza mapa;
    mapa.wypelnij();
    Jedzenie jablko(40,15);
    Potwor waz(30,20);
    mapa.tablica[jablko.poz_y][jablko.poz_x] = jablko.znak;
    mapa.tablica[waz.poz_y][waz.poz_x] = waz.znak;
    mapa.rysuj();
    for(;;)
    {
    if(getch()==224)
        {
          //  mapa.tablica[waz.poz_y][waz.poz_x] = ' ';
            switch(getch())
            {
                case 80 : waz.poz_y++;break;
                case 72 : waz.poz_y--;break;
                case 75 : waz.poz_x--;break;
                case 77 : waz.poz_x++;break;
            }
            if(waz.poz_y == 22 || waz.poz_y == 0 || waz.poz_x == 0 || waz.poz_x == 69)
                {
                    system("cls");
                    cout << "KONIEC GRY";
                    exit(0);
                }
                if(waz.poz_y == jablko.poz_y && waz.poz_x == jablko.poz_x)
                {

                }
            mapa.tablica[waz.poz_y][waz.poz_x] = waz.znak;
            system("cls");
            mapa.rysuj();
        }
    }

    return 0;
}
1

... no według mnie to najłatwiej to możesz dać sobie dynamiczną tablicę/wektor który będzie kawałkiem węża i jak on będzie się ruszał to na miejscu gdzie był dany kawałek stawiasz znak planszy, a jak trafisz na jedzenie to dodajesz kawałek do węża

0

Zakładając, że mam w wektorze 3 jednostki lub więcej węża, to jak 3 jednostkami tymi na raz ruszać ?
Teraz tak główkuje jak stworzę wektor to jak potem wyświetlić pierwszy punkt węża. Bo teraz robiłem to tym kodem:

mapa.tablica[waz.poz_y][waz.poz_x] = waz.znak;

A wektora nie da się wyświetlić w tym określonym miejscu w tablicy z klasy Plansza?

1

no po pierwsze rysujesz na ekranie w każdym miejscu gdzie jest część węża część planszy potem sprawdzasz, czy możesz się ruszyć, potem przesuwasz pozycję ostatniego elementu(np o numerze n) na pozycję wcześniejszego elementu(n-1) i tak aż dojdziesz do przesunięcia pierwszego elementu(głowa) i w tedy przesuwasz go na miejsce, gdzie chciałeś się poruszyć(jeśli możesz). coś jeszcze? i dałbyś plusa za odpowiedź :P

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