Gra na zaliczenie - prośba o wskazówki

Odpowiedz Nowy wątek
2015-01-03 12:31
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;
        }
    }
};
 
edytowany 2x, ostatnio: fazowy, 2015-01-03 12:33

Pozostało 580 znaków

2015-01-03 12:50
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ął...


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

2015-01-03 13:16
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?

edytowany 1x, ostatnio: fazowy, 2015-01-03 13:16

Pozostało 580 znaków

2015-01-03 15:26
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ąć?

edytowany 1x, ostatnio: furious programming, 2015-01-04 15:25
Możesz edytować swoje posty, zamiast usuwać i tworzyć nowych; - furious programming 2015-01-04 15:25

Pozostało 580 znaków

2015-01-03 22:06
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ć?


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.
edytowany 1x, ostatnio: Shalom, 2015-01-03 22:08

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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