Gra Saper

0

Cześć mam do napisania program który wyświetli tak jak by wygraną grę w saperze.
Oto treść:

  1. Wygeneruj K min w losowych miejscach na planszy. (Uwaga: zadbaj o to by dwie miny nie wylosowały się na tej samej pozycji)
  2. Wyświetl zawartość planszy zgodnie z zasadami:
    Jeśli na danym polu jest mina to wydrukuj '*'
    LUB
    ' ' (spację) jeśli na danym polu, ani na żadnym sąsiednim nie występuje mina
    (sąsiednie znaczy przylegające góra,dół,lewo,prawo oraz po ukasach w sumie makcymalnie 8 sąsiednich pól może być.
    LUB
    Liczbę od 1 do 8 w zależności od tego ile min znajduje się na sąsiednich polach.

Tyle udało mi się napisać lecz brakuje aby cyfry wokół bomb zmieniały się w zależności ile ich jest dookoła danej cyfry.
Prosił bym o jakąś podpowiedź to tego zadania i z góry dziękuję.

link do kodu: https://pastebin.com/rWXr9pPc

2

Zlicz ile bomb jest dookołа (po ludzku to w dwóch pętlach) jeżeli 0 bomb to wstawiasz ' ', jeżeli więcej to wstawiasz znak (char)(bomb_count+'0')

0
_13th_Dragon napisał(a):

Zlicz ile bomb jest dookołа (po ludzku to w dwóch pętlach) jeżeli 0 bomb to wstawiasz ' ', jeżeli więcej to wstawiasz znak (char)(bomb_count+'0')

Mógłbyś pokazać w którym miejscu mam to zrobić? Mam edytować ten void czy nowy zrobić?

0
Radek Wójcikowski napisał(a):
_13th_Dragon napisał(a):

Zlicz ile bomb jest dookołа (po ludzku to w dwóch pętlach) jeżeli 0 bomb to wstawiasz ' ', jeżeli więcej to wstawiasz znak (char)(bomb_count+'0')

Mógłbyś pokazać w którym miejscu mam to zrobić? Mam edytować ten void czy nowy zrobić?

Zacznij od przeczytania jakiś podstaw, wtedy będziesz wiedział gdzie masz edytować oraz że nikt nigdy nie edytuje żadnych void!

2

Jeśli chodzi o to, jak można zrobić tę pętlę, to coś takiego:

   if (plansza[x][y] == ' ')
   {    
     int bombs = 0;
     // iterujemy po pomocniczych zmiennych od -1 do 1
     for (int dx = -1; dx <= 1; dx++) 
         for (int dy = -1; dy <= 1; dy++) 
         {
             if (plansza[x + dx][y + dy] == '*') 
                bombs++;
         }       
         if (bombs > 0) 
            plansza[x][y] = char('0' + bombs);
   }

Czyli mamy dodatkowe pętelki: dx (-1, 0, 1) oraz dy (-1, 0, 1)
Czyli przechodzimy przez 9 pól wokół pozycji x, y(czyli przez 8 sąsiadów oraz przez samo pole x, y w iteracji gdzie dx=0, dy=0).

a poza tym to ustawiasz rozmiar planszy na sztywno:

char plansza[23][59] 
for (int x = 1; x <= 22; x++)
   for (int y = 1; y <= 58; y++)

a co jeśli będziesz chciał zmienić i zrobić planszę 100x100 na przykład?

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