• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Prosta gierka obiektowo

Object Storage Arubacloud
0 głosów
401 wizyt
pytanie zadane 26 maja 2017 w C i C++ przez Beorn Początkujący (250 p.)
Muszę zrobić jakiś prosty projekt i wyraziłem chęć stworzenia czegoś w rodzaju symulatora walki pomiędzy postaciami.Wymyśliłem sobie to tak że stworzyłem listę jednokierunkową do której będę mógł dodawać postacie a później je zapisywać i wczytywać z notatnika.Później stworzyłem klasę postać które zawiera cechy wspólne rodzaju postaci czyli wychodzą  od niej klasy które dziedziczą np.Wojownik,mag z jakimiś bonusami.

I tutaj moje kodzenie się zatrzymało bo nie wiem jak zaprojektować walkę pomiędzy tymi np. 2 wojownikami. Chciałbym na razie żeby walka odbywała się na tej zasadzie że wpisuję w mainie Wojownik1.Atak(Wojownik2) i walczą ze sobą wymieniając po jednym ciosie na zmianę aż jednemu hp spadnie do 0.

Pomysł mam taki że wrzucę metodę wirtualną Atak do klasy postać ale nie wiem jak by miało takie coś wyglądać do końca ,jak zrobić odejmowanie hp z obiektu i jak sprawić żeby wojownik 2 odpowiadał na ciosy wojownika 1

3 odpowiedzi

0 głosów
odpowiedź 26 maja 2017 przez Żyrosławw Bywalec (2,300 p.)

Ja bym zaprojektował to tak: (oczywiście w dużym uproszczeniu)

#include <stdio.h>

class Wojownik
{
public:
    void atakujMnie(int obrazenia)
    {
        HP -= obrazenia;
    }
    
private:
    int HP;
};

A w pętli głównej wojownicy wywoływaliby sobie nawzajem metodę atakuj mnie

0 głosów
odpowiedź 26 maja 2017 przez Strategiusz Dyskutant (9,220 p.)
edycja 29 maja 2017 przez Strategiusz
Zrób lepiej osobną klasę, która będzie odpowiadać za proces walki i niech to wygląda potem na przykład tak walka.runda(wojownik1, wojownik2). Odseparujesz zasady walki od wojowników, będziesz mieć bardziej spójne klasy i zobaczysz, że takie "niematerialne" rzeczy jak walka też mogą być (i właściwie to muszą być) osobno zamodelowane.
–1 głos
odpowiedź 26 maja 2017 przez Beorn Początkujący (250 p.)

Wygrzebałem taki kod z forum:

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

using namespace std;

bool en = false;

class live
{
    int hp;
    int damage;

    public:
    live(int hps ,int damages) : hp(hps) , damage(damages)
    {}

    void Atakuj(live * przeciwnik)
    {
        przeciwnik->Defense(this,damage);
    }
   private:
    void Defense(live * Odkogo, int damage)
    {
        cout << this << " Dostaje od " << Odkogo << " " << damage << "obrazen!" << endl;
        if(hp>damage)
            hp -= damage;
            else
            {
                en = true;
                cout << this << " umiera!";
                hp = 0;
            }
    }
};

class Gracz : public live
{

    public:
    string Name;
    Gracz(int hps ,int damages,string xName): live(hps,damages)
    {
        Name=xName;
    }

};

class Bot : public live
{
public:
    string Name;
    Bot(int hps ,int damages,string xName): live(hps,damages)
    {
        Name=xName;
    }
};


int main() {

    Gracz player(100,10,"Gerwazy");
    Bot bot(100,10,"myrlok");

    while(!en)
    {
        player.Atakuj(&bot);
        if(en) break;
        bot.Atakuj(&player);
    }


    return 0;
}

Jak zrobić żeby zamiast adresu obiektu wyświetlała się jego nazwa?

Podobne pytania

0 głosów
2 odpowiedzi 250 wizyt
pytanie zadane 15 listopada 2016 w C i C++ przez mistrzuniu1 Użytkownik (600 p.)
+3 głosów
1 odpowiedź 194 wizyt
pytanie zadane 31 maja 2016 w Nasze projekty przez Ehlert Ekspert (212,670 p.)
0 głosów
3 odpowiedzi 262 wizyt

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...