Implementacja prawdopodobieństwa - jak to zrobić?

0

Witam jestem studentem informatyki potrzebującym pomocy w napisaniu dość ciekawego projektu. Program ma za zadanie zasymulować wyspę na której mają znajdować się wilki króliki i wilczyce. Króliki maja poruszać się w różne strony z takim samym prawdo. co nie jest trudne ale te same króliki maja 20% szans na zamienienie się w dwa - nie do końca wiem jak tego dokonać .. Kiedy w wyznaczonym obszarze wokół wilka znajdzie się królik wilk zaczyna polowanie jesli złapie królika zyskuje 1 tłuszczu jeśli nie to traci 0,1 tłuszczu ...Jeżeli wilk i wilczyca znajdą się na tym samym polu powstaje kolejny wilk z losową płcią.
Ten program przerasta moje umiejętności .. proszę o pomoc

To co udało mi się stworzyć:

#include <iostream>
#include <cstdio>
#include <windows.h>
#include <vector>
#include <time.h>
using namespace std;

int const Wx = 20;
int const Hy = 30;

struct Pozycja
{
    int x, y;
};

class obiekt
{
private:
    Pozycja players;
    int pkt_zycia;
    int tluszcz;
    int ilu;
    int score;

public:
    obiekt()
        : score(0)
    {
        players.x = 5;
        players.y = 4;
    }

    void fail()
    {
        system("cls");

        system("pause");
        exit(1);
    }
    void score_up()
    {
        if (players.y == 0 | players.x == 0)
        {


            cout << "krolik 1" << score;
        };
    }

    void poruszanie()
    {
        int k;


        srand(time(NULL));
        k = rand() % 100 + 1;
        switch (k)
        {
            case 1:
                if (players.x + 1 == Wx)
                    break;
                else
                    players.x++;
                break;
            case 2:
                if (players.y + 1 == Hy)
                    break;
                else
                    players.y++;
                break;
            case 3:
                if (players.y - 1 == -1)
                    break;
                else
                    players.y--;
                break;
            case 4:
                if (players.x - 1 == -1)
                    break;
                else
                    players.x--;
                break;
            case 5:
                if (players.x - 1 == -1 || players.x + 1 == Wx)
                    break;
                else
                    players.y++;
                players.x--;
                break;
            case 6:
                if (players.x - 1 == -1 || players.x - 1 == -1)
                    break;
                else
                    players.y--;
                players.x--;
                break;
            case 7:
                if (players.x - 1 == -1 || players.x + 1 == Wx)
                    break;
                else
                    players.y++;
                players.x++;
                break;
            case 8:
                if (players.x - 1 == -1 || players.x + 1 == Wx)
                    break;
                else
                    players.y--;
                players.x++;
                break;
        }
    }
    Pozycja& return_ref_to_players()
    {
        return players;
    }
};


class wilk : public obiekt
{
private:
    Pozycja wilk;
    int tluszcz;

public:
    obiekt()
    {
        wilk.x = 6;
        wilk.y = 6;
    }
};


/////////////////////////////////////////////////////
//                  MAPY                           //
/////////////////////////////////////////////////////
class Map
{
    // Mapa gry
    int map[Wx][Hy];

public:
    // Zeruje mape
    Map()
        :
    {
        for (int i = 0; i < Wx; i++)
        {
            for (int j = 0; j < Hy; j++)
            {
                map[i][j] = 0;
            }
        }
    }

    // Rysuje mape
    void draw()
    {
        for (int i = 0; i < Wx; i++)
        {
            for (int j = 0; j < Hy; j++)
            {
                // Zamienia liczy na
                // odpowiednie znaki graficzne
                switch (map[i][j])
                {
                    case 0:
                        cout << ".";
                        break;
                    case 1:
                        cout << "M";
                        break;
                    case 2:
                        cout << "@";
                        break;
                    case 3:
                        cout << "K";
                        break;
                }
            }
            // Kolejny wiersz mapy
            cout << endl;
        }
    }

    // Resetuje mape
    void reset()
    {
        for (int i = 0; i < Wx; i++)
        {
            for (int j = 0; j < Hy; j++)
            {
                map[i][j] = 0;
            }
        }
    }
    // Umieszcza gracza na mapie
    void put_player(Pozycja& player)
    {


        map[player.x][player.y] = 2;
    }


    // Umieszcza potwory na mapie
};

int main()
{

    Map m;
    obiekt g;

    // Start gry


    // Glowna petla gry
    for (;;)
    {
        m.reset();
        m.put_player(g.return_ref_to_players());

        m.draw();
        g.poruszanie();
        g.score_up();
        system("cls");
    }
    return 0;
}
1

Musi kolega zaimplementować sex ;-).

Tak na szybko i bardziej serio.
Wygenerowac wyspe. (teren i woda) albo przyjać że wyspa to idealny kwadrat int pos[1024][1024].
Wygenerować tablice zwierząt i ich wstępną pozycje.
Następnie co ruch (pętla) przechodzić przez każde zwierze i symulowac co się dzieje. 20% szans na rozmnożenie króliczków etc. Wilk wchodzi w pętle i sprawdza czy coś jest w pobliżu pola.
inna wilczyca? SEX.
Wilki muszą mieć płeć oraz tłuszcz króliki nie. Fajne zadanie. Wydaje się, ze wilki poniżej pewnego poziomu tłuszczu i powzyej giną?

Pzdr.

0

:) niezbyt rozumiem jak zabrać się za te tablice .. Tak jeśli maja mało tłuszczu giną :D wiem że mam zaimplementować rozmnażanie ale w jaki sposób stworzyć konsolowego potomka ? :P

0

Daje rozwiązanie w C bo C++ się już nie zajmuję i nie lubię tego języka.
Ofc to rozwiązanie zadziała w C++.

#include <stdlib.h>
#include <time.h>

int main( void ) {

// musimy dac jakas wartosc na start która nam nastawi pseudo generator inaczej awsze będziemy startować z tej samej wartości.
srand( time( NULL ) );

// następnie poruszamy się na poczatku po polach i losujemy zwierzęta. Dajmy na to na 1 pole jest szansa 1/100 że pojawi się wilk.
if( rand() %100 == 99 ) // na polu pojawi się wilk.
// tu losuje nam liczby od 0 do 99 czyli 100 możliwości.

}

i tyle. mam nadzieje że to coś wyjaśnia.

0

// musimy dac jakas wartosc na start która nam nastawi pseudo generator inaczej awsze będziemy startować z tej samej wartości.
srand( time( NULL ) );

Należy pamiętać że to się robić tylko raz w całym programie, nie przed każdym rand.

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