Posloupnost příběhu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Posloupnost příběhu – C / C++ – Fórum – Programujte.comPosloupnost příběhu – C / C++ – Fórum – Programujte.com

 

Petr
~ Anonymní uživatel
746 příspěvků
14. 11. 2014   #1
-
0
-

 Dobrý den,

mám v rámci školního projektu vytvořit hru a nevím, jak mám vytvořit nějakou posloupnost  příběhu hry, aby probíhal postupně, jak má. Pochopil bych to kdybych se to mohlo dělat v mainu, ale pokud to správně chápu tak main by měl být skoro prázdný. 

Tady mám malí úryvek, který bych dal normálně do mainu a dělalo by to, to co  má a od vás potřebuji poradit, jak např. tady ten kod předělat, tak abych ho mohl dát někam do třídy nebo já nevím kam se to dává, aby to fungovalo a zároveň to nebylo v mainu.

 Poklad*poklad= new Poklad (100);

    Hrdina* Tomas = new Hrdina(10);
    Tomas->printInfo();
    bool i=false;

    while (i==false){
    cout<<"Pred tebou je truhla pokud se do ni chces podivat stikni 1 jinak zmackni 0"<<endl;
    int cislo;
    cin>>cislo;
    if (cislo==1) {

        Tomas->seberPoklad(poklad);
        i=true;
    }else if (cislo==0){
            cout<<"V tom pripade se vrat na namesti"<<endl;
            i=true;
    }else{
            cout<<"Musis stisknout 1 nebo 0"<<endl;

        }
        };

Děkuji.

Nahlásit jako SPAM
IP: 91.219.240.–
ingiraxo+15
Grafoman
15. 11. 2014   #2
-
0
-

#1 Petr
Noo tohle se neda napsat na pár řádků.. prostě jak už ted máš, tak každá věc by měla mít svůj objekt (třídu) a tohle celý by mělo běžet v nějakým objektu "Game" a v herní smyčce řeši tyhle rozhodování (gameLoop bude uvnitř třídy).

zkusilt jsem narychlo udělat ukázku jak by to mohlo vypadat, bylo by třeba tam dodat nějaky stavy, vylepšit logiku rozhodovaní a náhodných událostí, ale to už nechám na tobě.. ;) 

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <string>
#include <chrono>
#include <thread>
#include <time.h>
#include <stdlib.h>

using namespace std;

enum PlayerRace
{
    HUMAN,
    UNDEAD
};

class Player
{
public:
    Player() {}
    Player(string name) : name(name) {}

    void setName(string name) { this->name = name; }
    string Name() const { return name; }

    void setRace(PlayerRace race) { this->race = race; }
    PlayerRace Race() const { return race; }

    void addMoney(int money) { this->money += money; }
    void removeMoney(int money) { this->money -= money; }
    void setMoney(int money) { this->money = money; }
    int Money() const { return money; }

private:
    string name;
    PlayerRace race;
    int money;
};

class Treasure
{
public:
    Treasure() {}
    Treasure(int money) : money(money) {}

    int Money() const { return money; }

private:
    int money;
};

class GameUtil
{
public:
    static bool selectYes()
    {
        const char yes[] = { 'a', 'A', 'y', 'Y', '1' };
        string input;
        getline(cin, input);
        char c = (input.size() > 0) ? input.at(0) : '\0';
        for (int i = 0; i < strlen(yes); i++) { if (*(yes + i) == c) return true; }
        return false;
    }
    static void pressAnyKey()
    {
        string input;
        cout << "Stiskni klavesu pro pokracovani...";
        getline(cin, input);
    }
    static int randomNumber(int min, int max)
    {
        return min + (rand() % (int) (max - min + 1));
    }
    static string getRaceName(PlayerRace race)
    {
        switch (race) {
        case HUMAN: return "Clovek";
        case UNDEAD: return "Nemrtvy";
        }
    }
};

class Game
{
public:
    Game(string gameName) : gameName(gameName) {}

    void newGame(string playerName, PlayerRace race, int startMoney)
    {
        player.setName(playerName);
        player.setRace(race);
        player.setMoney(startMoney);

        running = true;
        gameLoop();
    }

private:
    string gameName;
    Player player;
    bool running;

    void gameLoop()
    {
        cout << "Vitej ve hre: " << gameName << endl;
        cout << "Tva postava:\n  Jmeno: " << player.Name() << "\n  Rasa: " << GameUtil::getRaceName(player.Race()) << "\n  Zlato: " << player.Money() << "\n\n";

        while (running) {
            int rand = GameUtil::randomNumber(0, 100);

            if (rand > 60) {
                findTreasure();
            } else if (rand > 40) {
                // neco...
            } else if (rand > 20) {
                findRoadCross();
            } else if (rand > 5) {
                findThieves();
            } else {
                cout << "Jdes po ceste\n";
            }

            if (player.Money() == 0) {
                running = false;
            } else {
                this_thread::sleep_for(chrono::milliseconds(200));
            }
        }
        exit();
    }
    void findTreasure()
    {
        Treasure t(GameUtil::randomNumber(20, 200));
        cout << "Nasli jste poklad, chcete ho otevrit?\n";

        if (GameUtil::selectYes()) {
            player.addMoney(t.Money());
            cout << "Nasli jste " << t.Money() << " zlata! Nyni mate u sebe " << player.Money() << " zlata!\n";
        } else {
            cout << "Tvoje smula.. v truhle bylo " << t.Money() << " zlata!\n";
        }
        GameUtil::pressAnyKey();
    }
    void findRoadCross()
    {
        cout << "Nasli jste rozcesti, kudy se chcete vydat?\n[CHYBI IMPLEMENTACE]\n";
        // doplnit...
        GameUtil::pressAnyKey();
    }
    void findThieves()
    {
        int steal = GameUtil::randomNumber(0, player.Money());
        player.removeMoney(steal);
        cout << "Narazil jsi na zlodeje a ukradli ti " << steal << " zlata :( Nyni mate u sebe " << player.Money() << " zlata!\n";
        GameUtil::pressAnyKey();
    }
    void exit()
    {
        cout << "Jste uplne na mizine! Chcete zacit novou hru?";

        if (GameUtil::selectYes()) {
            newGame(player.Name(), player.Race(), 1000);
        } else {
            cout << "Dekuji za zahrani hry...";
            GameUtil::pressAnyKey();
        }
    }
};

int main()
{
    srand(time(NULL));

    Game game("My Game");
    game.newGame("Ingiraxo", HUMAN, 1000);

    return EXIT_SUCCESS;
}
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Petr
~ Anonymní uživatel
746 příspěvků
15. 11. 2014   #3
-
0
-

#2 ingiraxo
Dobře děkuji. Zkusím se na to podívat a snad to pochopím.

Nahlásit jako SPAM
IP: 91.219.240.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 90 hostů

Podobná vlákna

Posloupnost — založil Marek

Posloupnost — založil Pavlik

Posloupnost — založil Janek

Posloupnost — založil Motoblanco

Posloupnost — založil Twiggy

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý