Prosta gra w sapera

0

Witam, zrobiłem prostą gre w sapera ale niestety nie wiem czemu mi z pętli wychodzi i nie robi instrukcji... Chodzi o pętle do while.

#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;

int main()
{
    int zycia=3,a,b,tmp=0,wynik=0;
    srand(time(0));
    int tab[10][10];
    cout<< "Witamy w grze Quasi Saper!."<<endl;
    cout<< "Plansza 10 na 10 wypelnia sie losowo 0 i 1 niestety ich nie widzisz."<<endl;
    cout<< "Masz 3 zycia jezeli trafisz w 1 zachowujesz."<<endl;
    cout<< "Jezeli trafisz dwa razy w jedynke dostajesz bonusowe zycie!."<<endl;
    cout<< "Gra konczy sie jezeli stracisz wszystkie zycia."<<endl;

    for(int i=0 ; i<10 ; i++)
    {
          for(int j=0 ; j<10 ; j++)
            {
                tab[i][j]=rand()%2;

            }
    }

for(int i=0;i<10;i++)
{
    for(int j=0;j<10;j++)
        cout << tab [i][j] << " ";
    cout << endl;
}


do
{
    cout<< "Podaj wzporzedne jakie chcesz skreslic."<<endl;
cin>>a>>b;

    if(tab[a-1][b-1]==1)
        {
            cout<<"trafiles"<<endl;
            tmp=tmp+1;
                if(tmp=2)
                    zycia=zycia+1;
                    wynik=wynik+1;
        }
            else
                cout<<"Niestety nie udalo ci sie tracisz zycie"<<endl;
                zycia=zycia-1;
                    if(zycia=0)
                    cout<<wynik<<endl;
} while(zycia=0);




    return 0;
}
 
1

w warunku if przypisujesz 0, a nie sprawdzasz - pomyliłeś "=" z "==". Poza tym w klauzuli else tylko wyświetlasz komunikat o nie trafieniu w pole. Następna sekwencja kodu jest wykonywana niezależnie od tego czy gracz trafił czy nie - w przypadku trafienia najpierw dodajesz życie jako bonus, a potem i tak jest ono odejmowane.

#include <iostream>
#include <time.h>
#include <stdlib.h>
using namespace std;

int main()
{
	int zycia = 3, a, b, tmp = 0, wynik = 0;
	srand(time(0));
	int tab[10][10];
	cout << "Witamy w grze Quasi Saper!." << endl;
	cout << "Plansza 10 na 10 wypelnia sie losowo 0 i 1 niestety ich nie widzisz." << endl;
	cout << "Masz 3 zycia jezeli trafisz w 1 zachowujesz." << endl;
	cout << "Jezeli trafisz dwa razy w jedynke dostajesz bonusowe zycie!." << endl;
	cout << "Gra konczy sie jezeli stracisz wszystkie zycia." << endl;

	for (int i = 0; i<10; i++)
	{
		for (int j = 0; j<10; j++)
		{
			tab[i][j] = rand() % 2;

		}
	}

	for (int i = 0; i<10; i++)
	{
		for (int j = 0; j<10; j++)
			cout << tab[i][j] << " ";
		cout << endl;
	}


	do
	{
		cout << "Podaj wzporzedne jakie chcesz skreslic." << endl;
		cin >> a >> b;

		if (tab[a - 1][b - 1] == 1)
		{
			cout << "trafiles" << endl;
			tmp = tmp + 1;
			if (tmp = 2)
				zycia = zycia + 1;
			wynik = wynik + 1;
		}
		else{
			cout << "Niestety nie udalo ci sie tracisz zycie" << endl;
			zycia = zycia - 1;
			if (zycia == 0)
			cout << wynik << endl;
		}
			
	} while (zycia != 0);




	return 0;
0

@jakub40

  1. Nie uzywa sie std::rand, tylko tego http://en.cppreference.com/w/cpp/numeric/random/random_device
  2. nie time.h a ctime
  3. formatuj kod
  4. Poczytaj o funkcjach
  5. Co sie stanie jezeli wpisze 0 0 jako wspolrzedne? och... czyzby program sie wysypal?
  6. Jak nie chcesz miec takich bledow w przyszlosci to mozesz (ale nie musisz) porownywac w ten sposob
 if (0 == zycia)

bo jezeli dasz jeden znak rownosci to wtedy program sie nie skompiluje.
7. to nie jest saper...
8. Poczytaj o std::vector
9. Jak chcesz miec te 10 to juz lepiej to zrobic na zasadzie

const int sizeOfArray = 10; 

i uzywac zmiennej wszedzie gdzie potrzebujesz wielkosci tablicy. Dlaczego? jak bedziesz chcial wieksza plansze to zmiana tylko sizeOfArray powinna wystarczyc.

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