Gra Labirynt C++

0

Witam.
Jestem studentem I roku informatyki. Wcześniej nie miałem żadnej styczności z programowaniem.
Początki były trudne. Miałem problemy żeby napisać program który po prostu wyświetli jakiś napis.
Jednak krok po kroczku udawało mi się pisać coraz bardziej rozbudowane programy.
Ostatnio na laborkach pisaliśmy program do liczenia silni, NWD, liczby do potęgi oraz przeliczanie walut.
Wykładowca kazał nam napisać grę w języku c++. Dla mnie to kolejne wyzwanie jednak mam za małą wiedzę żeby się do tego zabrać.

Gra labirynt C++
Labirynt ma być złożony z tablicy dwuwymiarowej o wymiarach 10x15 cm.

user image

Znaczek "^" oznacza ludzika
Kwadraty z X w środku oznaczają ściany przez które ludzik nie moze przejsc
Czerwona kreska oznacza wyjście z labiryntu.

Komendy do poruszania ludzikiem:

"n" - naprzód
"l" - lewo
"p" - prawo
"w" - wyjście z gry

Ludzik przy nacisnieciu "n" powinien zmienic "^" na "<". Analogicznie do "p".

Program powinien zaczac od

  1. wygenerowanie labiryntu.
  2. wczytanie komendy

Mógłby ktoś napisać dla mnie taki program? Nie chcę iść na łatwiznę ale kiedy mam gotowy kod analizuje każdą linijkę i dochodzę do czego służy.

Pozdrawiam.

0

Pokaż ten "program do liczenia silni, NWD, liczby do potęgi oraz przeliczanie walut." Żebyśmy chociaż wiedzieli, że pracujesz, i naprawdę jest ci trudno. A nie czekasz na jelenia, co odwali robotę za ciebie.

0

NWD

#include <iostream> 
using namespace std;

i#include <iostream> 
using namespace std;

int main() 
{ 
    int n;
    int m;
    cout << "Podaj liczby do NWD:\n"; 
    cin >> n >> m; 
    
    while (n!=m)  // liczby nie mogą być sobie równe
    { 
	if (m>n)     // jeżeli liczba pierwsza jest większa od drugiej
	{ 
	    m-=n; 
	}
	else
	{
	    n-=m; 
	}
    }
              
    std::cout << " Najwiekszy wspolny dziennik to: " << n;   // wyświetlenie wyniku
    system("pause");
}

Silnia

// Obliczanie wartości silni
#include <iostream>
int silnia(int n)
{
    if(n==0) return 1;
    return n * silnia(n-1);
}
main()
{
    std::cout << "Podaj liczbe naturalna: ";
    int k;
    std::cin >> k;
    std::cout << k << " ! = " << silnia(k);
    system("pause");
}

Program do przeliczania walut mam na szkolnym komputerze. Nie jest jeszcze kompletny.

Powyzsze programy napisalem na podstawie Symfonii C++ Grebosza.

0

Zakładam ze umiesz zadeklarowac tablicę i ja wypełnić, a potem wstawić tam tego twojego "ludzika". Musisz też zapamiętac w zmiennych pozycje ludzika!.
bool ludzik_wyszedl=false;
Będziesz miał wszystko w pętli while(!ludzik_wyszedl)
Dwiema pętlami for wypisujesz całą zawartośc tablicy. Następnie masz funkcje pobierająca znak (jako ze nie ma być wciskany enter, to pewnie jakichś getch() trzeba użyć. Następnie sprawdzasz sobie warunki za pomocą np. switch w zalezności od tego co kto wcisnął.
switch(znak)
{
case: n
{
if(pozycja_ludzika_wiersz!=1&&tab[pozycja_ludzika_wiersz-1,pozycja_ludzika_kolumn]!=przeszkoda) pozycja_ludzika_wiersz-=1;
tab[pozycja_ludzika_wiersz,pozycja_ludzika_kolumna]='^';
break;
}
case..... //i tak dalej
}

Czyli sprawdzasz sobie w odpowiedniej chwili czy nie stoisz czasami na krawędzi (no chyba że krawędzie sa wyłączone z pola gry, wtedy sprawdasz sobie analogicznie czy nie stoisz w 2 wierszu ;]). Nastepnie sprawdzasz czy pole na które chcesz skoczyć nie jest czasami przeszkodą (powiedzmy że przeszkody to będą '*'). Jeśli nie, to się tam przemieszczasz i zmieniasz sobie "znak" ludzika. Pod koniec pętli sprawdzasz czy
if( (pozycja_ludzika_kolumna==pozycja_wyjścia_kolumna) && (pozycja_ludzika_wiersz==pozycja_wyjścia_wiersz) ) ludzik_wyszedl=true;

0

Pierwszy mój post na tym forum ;) Może i odkopałem wątek, ale ostatnio zaczynałem pisać ruch bohatera tekstowego rpg więc mogę się podzielić kodem. Jak widać jest on niedokończony, ale to co jest odpowiada na wiele pytań tego wątku:

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

using namespace std;

char plansza[10][10];
char map[40][10];

/////////////// WYPISZ
void wypisz()
{
for(int i=0; i<10; i++)
{
for(int n=0; n<10; n++)
{
cout << plansza[i][n] << " ";
if(n==9) cout << "\n";
}}}

/////////////// ZERUJ
void zeruj()
  {
  for(int i=0; i<10; i++)
  {
   for(int n=0; n<10; n++)
   {
          plansza[i][n] = 0;
}}}

///////////////// ŚCIANY
void sciany(char tab[][10], int x, int y)
{
     for(int i=0; i<x; i++){
             if(i==(x-1) || i==0){
             for(int j=0; j<y; j++){
             tab[i][j] = 'X';      
             }}
             else{
             tab[i][0]='X';
             tab[i][(y-1)]='X';     
             }}
     
}

void kopiuj_tab(char t1)
{                        
                
}

main()
{
      
      plansza[5][5] = 'O';
      char znak;
      int x=5;
      int y=5;
      plansza[4][3] = 'X';
      
      sciany(plansza,10,10);
      sciany(map,40,10);
      //map = plansza;
      //char **map;
      //map = plansza;
      //map[5][5] = 'X';
      for(;znak!='k';)
      {

      wypisz();
      znak = getch();
      system("CLS");
      plansza[x][y]=0;
      if(znak=='w' && plansza[x-1][y]==0) if(x!=0)x--;
      if(znak=='s' && plansza[x+1][y]==0) if(x!=9)x++;
      if(znak=='a' && plansza[x][y-1]==0) if(y!=0)y--;
      if(znak=='d' && plansza[x][y+1]==0) if(y!=9)y++;
      plansza[x][y]='O';

      }

      system("PAUSE");
}
0

Spodobało mi się to co przedstawił kubasnk i postanowiłem się trochę pobawić i wyszło coś takiego :

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

using namespace std;

char plansza[30][30];
char map[40][20];

/////////////// WYPISZ
void wypisz()
{
for(int i=0; i<30; i++)
{
for(int n=0; n<30; n++)
{
cout << plansza[i][n] << " ";
if(n==29) cout << "\n";
}}}

/////////////// ZERUJ
void zeruj()
  {
  for(int i=0; i<20; i++)
  {
   for(int n=0; n<20; n++)
   {
          plansza[i][n] = 0;
}}}

///////////////// ŚCIANY
void sciany(char tab[][30], int x, int y)
{
     for(int i=0; i<x; i++){
             if(i==(x-1) || i==0){
             for(int j=0; j<y; j++){
             tab[i][j] = 'X';     
             }}
             else{
             tab[i][0]='X';
             tab[i][(y-1)]='X';     
             }}
     
}
///////////////////MAIN
main()
{
     
      plansza[5][5] = 'O';
      char znak;
      int x=5;
      int y=5;
      plansza[4][3] = 'x';
      plansza[18][11] = 'x';
      plansza[12][9] = 'x';
      plansza[2][16] = 'x';
     
      sciany(plansza,30,30);
      for(;znak!='k';)
      {

      wypisz();
      znak = getch();
      system("CLS");
      plansza[x][y]=0;
//UPWARD----------------------------------------------------------     
      if(znak=='w' && plansza[x-1][y]==0) if(x!=0){
                                                   x--;
                                                    if(plansza[x+2][y]=='o') {
                                                                             plansza[x+1][y]='o';
                                                                             plansza[x+2][y]=0;
                                                                             }
                                                   plansza[x][y]='^';
                   }
      if(znak=='w' && plansza[x-1][y]=='x') if(x!=0){
                                                   plansza[x][y]='^';
                                                    plansza[x+1][y]='o';
                                                    plansza[x-1][y]=0;   
                   }
      if(znak=='w' && plansza[x-1][y]=='X') if(x!=0){
                                                   plansza[x][y]='^';
                   }
//DOWNWARD---------------------------------------------------------  
      if(znak=='s' && plansza[x+1][y]==0) if(x!=29){
                                                    x++;  
                                                    if(plansza[x-2][y]=='o') {
                                                                             plansza[x-1][y]='o';
                                                                             plansza[x-2][y]=0;
                                                                             }
                                                    plansza[x][y]='V';
    
                   }
      if(znak=='s' && plansza[x+1][y]=='x') if(x!=29){
                                                      x++;
                                                    plansza[x][y]='V';
                                                    plansza[x-1][y]='o';
                                                    plansza[x+1][y]=0;
                   }  
      if(znak=='s' && plansza[x+1][y]=='X') if(x!=29){
                                                    plansza[x][y]='V';
                   }                    
//LEFT---------------------------------------------------------------  
      if(znak=='a' && plansza[x][y-1]==0) if(y!=0){
                                                   y--;
                                                    if(plansza[x][y+2]=='o') {
                                                                             plansza[x][y+1]='o';
                                                                             plansza[x][y+2]=0;
                                                                             }   
                                                   plansza[x][y]='<';
                   }
      if(znak=='a' && plansza[x][y-1]=='x') if(y!=0){
                                                     y--;
                                                   plansza[x][y]='<';
                                                    plansza[x][y+1]='o';
                                                    plansza[x][y-1]=0; 
                   }   
      if(znak=='a' && plansza[x][y-1]=='X') if(y!=0){
                                                   plansza[x][y]='<';
                   }                            
//RIGHT---------------------------------------------------------------   
      if(znak=='d' && plansza[x][y+1]==0) if(y!=29){
                                                    y++;
                                                    if(plansza[x][y-2]=='o') {
                                                                             plansza[x][y-1]='o';
                                                                             plansza[x][y-2]=0;
                                                                             } 
                                                    plansza[x][y]='>';
                   }
      if(znak=='d' && plansza[x][y+1]=='x') if(y!=29){
                                                      y++;
                                                    plansza[x][y]='>';
                                                    plansza[x][y-1]='o';
                                                    plansza[x][y+1]=0;
                   }                   
      if(znak=='d' && plansza[x][y+1]=='X') if(y!=29){
                                                    plansza[x][y]='>';
                   }    
      }

      system("PAUSE");
}

z czego wyszła niezła śmieszna i niedorobiona 'gierka'. Chciałbym się z tym dalej pobawić ale nie wiem jak i tu proszę was o pomoc. Wiem że to jest nie poprawnie pewnie i inaczej byście to zrobili (ale działa ;)) ale zastanawiam się jak z tego dalej zrobić coś w stylu snake'a z nokii. Pewnie z tymi tablicami to głupi pomysł i z czegoś innego trzeba będzie skorzystać. Proszę o pomoc ;)

0

Masz już coś na wzór "silnika" jeśli można to tak nazwać. Czyli wszystkie dane gdzie, na jakim polu, co się dzieje, teraz wystarczy to co jedną "klatkę" narysować na ekranie. Polecam bibliotekę graficzną www.allegro.cc całkiem przyjemna.

Nie mogłem się powstrzymać:

tablicy dwuwymiarowej o wymiarach 10x15 cm.

:D

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