Gra na zaliczenie - prośba o wskazówki

0

Witam, mam napisać na zaliczenie monopol. Jako, że infe potraktowałem po macoszemu w tym semestrze, teraz mam problem. Znalazłem podobny temat na forum, i jako że mój pomysł był podobny, próbuje to jakoś odtworzyć. Potrzebuje pomocy jak ma wyglądać funkcja dodająca pola do planszy np w klasie Specjalne.
Dołączam kod :

 
#include <iostream>
#include <cstdlib>
using namespace std;

class CPole{
   public:
   virtual void dodaj()=0;
   virtual void wyswietl()=0;

};

class Specjalne : public CPole{
    int Nr_Pola;
    string Nazwa;
    int Cena;
    public:
   Specjalne(int nr_pola, string nazwa, int cen)
  {
      Nr_Pola=nr_pola;
      Nazwa=nazwa;
      Cena=cen;
  }
  virtual void  wyswietl()
    {
        cout<<"Nr Pola   : "<<Nr_Pola<<endl;
        cout<<"Nazwa Pola: "<<Nazwa<<endl;
        cout<<"Cena zaupu: "<<Cena<<endl;
    }
    virtual void dodaj()
    {
  JAK MA WYGLADAC TAKA FUNKCJA DODAJACA??
    }

};

class ElementPlanszy {
 public:
    CPole *Pole;
    ElementPlanszy *nast, *pop;
};


class Plansza {
 public:
    ElementPlanszy *pocz, *kon, *nowy;

     Plansza(){pocz=NULL;}

    void DodajElement(CPole *wsk)
    {
        nowy = new ElementPlanszy;
        nowy->Pole = wsk;
        nowy->pop = NULL;
        nowy->nast = NULL;
        if(pocz==NULL){ pocz=nowy; kon=nowy; }
        else { nowy->pop = kon; kon->nast = nowy; }
        kon=nowy;
    }
    void Dodaj()
     {
        CPole *wsk;
        wsk = new Specjalne(1,"Start",400);
                DodajElement(wsk);
    }
    void Wyswietl()
    {
        while(pocz!=NULL)
        {

                cout<<"Nr Pola   : "<<pocz->Pole->Nr_Pola<<endl;
                cout<<"Nazwa Pola: "<<pocz->Pole->Nazwa<<endl;
                cout<<"Cena zakupu: "<<pocz->Pole->Cena<<endl;
            pocz = pocz->nast;
        }
    }
};

0

A co niby miałaby robić metoda dodaj w klasie Pole? Bo ja nie mam pojęcia. Za to ja bym się spodziewał metody która "aplikuje" właściwości danego pola do gracza który na nim stanął...

0

No tak, to już poprawiłem zanim jeszcze coś napisałeś. Właściwie to chce sobie jakoś usystematyzować to co mam.

 
 wsk = new Specjalne(1,"Start",400);
DodajElement(wsk);

i kolejne tego typu zapisy stworzą liste, wystarczą tylko klasy z typami pól?

0
#include <iostream>
#include <cstdlib>
using namespace std;

class CPole{
   public:
   virtual void wyswietl()=0;

};

class gracz
{
  string imie;
  int saldo;
  CPole *lokalizacja;
  public:
  gracz(){
      lokalizacja=NULL;
      }
};


class Specjalne : public CPole{
    int Nr_Pola;
    string Nazwa;
    int Cena;
    public:
   Specjalne(int nr_pola, string nazwa, int cen)
  {
      Nr_Pola=nr_pola;
      Nazwa=nazwa;
      Cena=cen;
  }
  virtual void  wyswietl()
    {
        cout<<"Nr Pola   : "<<Nr_Pola<<endl;
        cout<<"Nazwa Pola: "<<Nazwa<<endl;
        cout<<"Cena zaupu: "<<Cena<<endl;
    }
};

class Nieruchomosc : public CPole{
    int Nr_Pola;
    string Nazwa;
    int Cena;
    int koszt;
    public:
   Nieruchomosc(int nr_pola, string nazwa, int cen, int kosz)
  {
      Nr_Pola=nr_pola;
      Nazwa=nazwa;
      Cena=cen;
      koszt=kosz;
  }
   void  wyswietl()
    {
        cout<<"Nr Pola   : "<<Nr_Pola<<endl;
        cout<<"Nazwa Pola: "<<Nazwa<<endl;
        cout<<"Cena zaupu: "<<Cena<<endl;
    }
};

class ElementPlanszy {
 public:
    CPole *Pole;
    ElementPlanszy *nast, *pop;
};


class Plansza {
 public:
    ElementPlanszy *pocz, *kon, *nowy;

     Plansza(){pocz=NULL;}

    void DodajElement(CPole *wsk)
    {
        nowy = new ElementPlanszy;
        nowy->Pole = wsk;
        nowy->pop = NULL;
        nowy->nast = NULL;
        if(pocz==NULL){ pocz=nowy; kon=nowy; }
        else { nowy->pop = kon; kon->nast = nowy; }
        kon=nowy;
    }
    void Dodaj()
     {
        CPole *wsk;
        wsk = new Specjalne(1,"Start",400);
                DodajElement(wsk);
        wsk = new Nieruchomosc(2,"ulica",120, 30);
                 DodajElement(wsk);

    }
    void wyswietl()
    {
        while(pocz!=NULL)
        {
                cout<<"Nr Pola   : "<<pocz->Pole->Nr_Pola<<endl;
                cout<<"Nazwa Pola: "<<pocz->Pole->Nazwa_Pola<<endl;

            pocz = pocz->nast;
        }
    }
};

trochę poprawiłem mam te funkcje wyswietl w klasie lista, i chciałem ją wyświetlic w mainie żeby miesć pewność że to się dobrze dodaje, ale dostaje błąd że w klasie CPole nie ma Nr_Pola. no nie ma bo to jest taka abstakcyjna klasa ale jak to ominąć?

0

Nie wygląda mi to dobrze, niemniej jednak twój błąd polega na tym że nie rozumiesz co robisz. Skoro w każdej klasie dziedziczącej masz

    int Nr_Pola;
    string Nazwa;
    int Cena;

to łaskawie przenieś te pola do klasy bazowej, wtedy mając wskaźnik do klasy bazowej będziesz miał do tych pól dostęp.

Twoje pytanie "jak o ominąć?" pokazuje że zupełnie nie rozumiesz co się tu dzieje. A co jakbym napisał nową klasę rozszerzającą to twoje CPole (btw za dodanie tego C powinni rwać ci skórę rozżarzonymi obcęgami) i nie będę tam miał tego Nr_Pola. Co wg ciebie miałoby się wtedy wyświetlić przy próbie wypisania go, gdyby kod który napisałeś mógł zadziałać?

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