Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Jak wpisać obiekty jednej klasy do tablicy drugiej klasy

Ostatnio zmodyfikowano 2014-01-24 02:05
Autor Wiadomość
GarryMoveOut
Temat założony przez niniejszego użytkownika
Jak wpisać obiekty jednej klasy do tablicy drugiej klasy
» 2014-01-22 12:16:45
Chcę wpisać obiekty (przeciwników i przeszkody) klasy gracze i przeszkody. Do tablicy klasy house i room. Potem chcę się poruszać po "mapie" obiektem "czlowiek". Ale nie wiem za bardzo w jaki sposób mam wpisać tych przeciwników i przeszkody do tablicy.
plansza.h
C/C++
#include <string>
#include <iostream>

//using namespace std;

class house;
class gracze;
//-----------------------klasa pomieszczeni---------------------------------
class room
{
    friend class house;
    friend class gracze;
   
public:
    room * n;
    house * pok;
    int x;
    int y;
    string description;
    bool visited;
    room * wskn;
    room * wsks;
    room * wske;
    room * wskw;
   
    room( int wspx, int wspy ) //konstruktor pomieszczenia
    {
        x = wspx;
        y = wspy;
        visited = false;
    }
   
    string pobdescription( string o ) //metoda descriptionu
    {
        description = o;
        return description;
    }
   
    void zmiens() //metoda zmieniająca odwiedziny
    {
        visited = true;
    }
   
    void pobn( house * d );
    void pobs( house * d );
    void pobw( house * d );
    void pobe( house * d );
   
};
//------------------------koniec klasy room----------------------------

//--------------------------klasa house---------------------------------------
class house
{
    friend class room;
   
public:
    room * current;
    room * tab[ 3 ][ 3 ];
    int liczba;
   
    house() //kostruktor budynku
    {
        for( int i = 0; i <= 2; i++ ) // tworzenie pokoi
        {
            for( int j = 0; j <= 2; j++ )
            {
                tab[ i ][ j ] = new room( i, j );
            }
        }
       
        for( int i = 0; i <= 2; i++ ) // znajdowanie sasiadow
        {
            for( int j = 0; j <= 2; j++ )
            {
                ( * tab[ i ][ j ] ).pobn( this );
                ( * tab[ i ][ j ] ).pobs( this );
                ( * tab[ i ][ j ] ).pobw( this );
                ( * tab[ i ][ j ] ).pobe( this );
            }
        }
       
        current = tab[ 0 ][ 0 ]; //ustawianie początkowej pozycji
        ( * current ).visited = true; //zmiana odwiedzin początkowej pozycji
    }
   
    void show() //metoda wyświetlania budynku
    {
        cout << "X X X X X" << endl;
        for( int i = 0; i <= 2; i++ ) // tworzenie budynku
        {
            cout << "X "; for( int j = 0; j <= 2; j++ )
            {
                cout <<( * tab[ i ][ j ] ).visited << " ";
            }
            cout << "X"; cout << endl;
        } cout << "X X X X X" << endl;
    }
   
    void idz( char znak ) //metoda przechodzenia do innego pokoju
    {
        ( * current ).visited = true; //zmiana stsusu odzwiedzenia pokoju
        if( znak == 'n' )
        {
            if(( * current ).wskn != NULL ) //sprawdzanie czy nie wychodzimy poza tablice
            {
                current =( * current ).wskn;
                ( * current ).visited = true;
            }
            else
            {
                cout << "blad" << endl;
            }
        }
        else if( znak == 's' )
        {
            if(( * current ).wsks != NULL ) //sprawdzanie czy nie wychodzimy poza tablice
            {
                current =( * current ).wsks;
                ( * current ).visited = true;
            }
            else
            {
                cout << "blad" << endl;
            }
        }
        else if( znak == 'w' )
        {
            if(( * current ).wskw != NULL ) //sprawdzanie czy nie wychodzimy poza tablice
            {
                current =( * current ).wskw;
                ( * current ).visited = true;
            }
            else
            {
                cout << "blad" << endl;
            }
        }
        else if( znak == 'e' )
        {
            if(( * current ).wske != NULL ) //sprawdzanie czy nie wychodzimy poza tablice
            {
                current =( * current ).wske;
                ( * current ).visited = true;
            }
            else
            {
                cout << "blad" << endl;
            }
        }
    }
   
};
//------------------------koniec klasy house---------------------------------------------

//-----------------------metody do sprawdzania sąsiadów------------------------------------
void room::pobn( house * d ) //PÓŁNOC sprawdzenie czy pokój na północ isntnieje
{
    if( x != 0 ) //sprawdzenie czy nie jesteśmy w 1 wierszu
    {
        x -= 1; // zmiana indeksu tablicy na wyrzsze "piętro"
        wskn =( * d ).tab[ x ][ y ]; // przepisanie adresu pokoju na północy
        x += 1; //przywrócenie x do dawnej wartosci
    }
    else
    {
        wskn = NULL; //brak pokoju na północ wyzerowanie adresu
    }
}
void room::pobs( house * d ) //POŁUDNIE sprawdzenie czy pok na południe istnieje
{
    if( x != 2 )
    {
        x += 1;
        wsks =( * d ).tab[ x ][ y ];
        x -= 1;
    }
    else
    {
        wsks = NULL;
    }
}

void room::pobw( house * d ) //ZACHÓD
{
    if( y != 0 )
    {
        y -= 1;
        wskw =( * d ).tab[ x ][ y ];
        y += 1;
    }
    else
    {
        wskw = NULL;
    }
}

void room::pobe( house * d ) //WSCHÓD
{
    if( y != 2 )
    {
        y += 1;
        wske =( * d ).tab[ x ][ y ];
        y -= 1;
    }
    else
    {
        wske = NULL;
    }
}
source.cpp
C/C++
#include <iostream>
#include <string>
#include <list>

using namespace std;

//nagłówki klas
#include "baza.h"
#include "gracze.h"
#include "przeszkody.h"
#include "plansza.h"

int gracz( gracze & atakujacy, gracze & przeciwnik )
{
    int _kroki = 0;
    cout << atakujacy.opis << " zycie[" << atakujacy.zycie << "]" << " spotyka " << przeciwnik.opis << " zycie[" << przeciwnik.zycie << "]" << endl;
    cout << atakujacy.opis << ": " << atakujacy.okrzyk << endl;
    cout << przeciwnik.opis << ": " << przeciwnik.okrzyk << endl;
   
    while(( atakujacy.zycie && przeciwnik.zycie ) > 0 )
    {
        cout << " atakujacy || przeciwnik" << endl;
        cout << "\t" << atakujacy.zycie << " || " << przeciwnik.zycie << endl;
        przeciwnik.zycie = przeciwnik.zycie - atakujacy.atak;
        atakujacy.zycie = atakujacy.zycie - przeciwnik.atak;
        _kroki++;
        if( atakujacy.zycie < 0 )
             atakujacy.zycie = 0;
       
        if( przeciwnik.zycie < 0 )
             przeciwnik.zycie = 0;
       
        if( atakujacy.zycie <= 0 )
        {
            cout << atakujacy.opis << " ginie!" << endl;
            return _kroki =- 1000;
        }
        if( przeciwnik.zycie <= 0 )
        {
            cout << przeciwnik.opis << " ginie!" << endl;
            return _kroki;
        }
    }
    //return _kroki;
}

int przeszkoda( gracze & atakujacy, przeszkody & przeszkoda )
{
    int _kroki = 0;
    cout << atakujacy.opis << " napotyka " << przeszkoda.opis << endl;
    //cout<<atakujacy.okrzyk<<endl;
    if( przeszkoda.opor < 20 )
    {
        cout << atakujacy.opis << ": zniszcze to!" << endl;
       
        while( przeszkoda.zycie > 1 )
        {
            przeszkoda.zycie = przeszkoda.zycie - atakujacy.atak;
            if( przeszkoda.zycie < 0 )
                 przeszkoda.zycie = 0;
           
            cout << przeszkoda.zycie << endl;
            _kroki++;
        }
        cout << przeszkoda.opis << " juz nie istnieje" << endl;
        return _kroki;
    }
    else
    {
        cout << atakujacy.opis << ": omine to +" << przeszkoda.wielkosc << " krokow" << endl;
        _kroki = _kroki + przeszkoda.wielkosc;
        return _kroki;
    }
}


int main()
{
    gracze czlowiek( 100, "czlowiek", 20, "A niech mnie kule bija" );
   
    //przeciwnicy @1 zycie @2 opis @3 atak @4 okrzyk
    gracze troll( 20, "Troll", 10, "Oghh" );
    gracze ogr( 25, "Ogr", 15, "Arggh" );
    gracze elf( 30, "Elf", 20, "Ooo" );
    gracze mag( 35, "Magik", 30, "Abra kadabra" );
    gracze rycerz( 40, "Rycerz", 30, "Wio" );
   
    //przeszkody @1 zycie @2 opis @3 opor @4 wielkosc
    przeszkody kamien( 30, "kamyczek", 5, 3 );
    przeszkody drzewo( 35, "drzewo", 10, 2 );
    przeszkody skala( 40, "skala", 19, 2 );
    przeszkody krzaki( 10, "krzaki", 30, 1 );
    przeszkody gora( 1000, "gora", 100, 3 );
   
    //##########
    house home;
   
    gracze * l_przeciwnicy[ 5 ] = { & troll, & ogr, & elf, & mag, & rycerz };
    przeszkody * l_przeszkody[ 5 ] = { & kamien, & drzewo, & skala, & krzaki, & gora };
   
   
    int kroki = 0;
    int tmp = 0;
    cout << "GRA PRZYGODA" << endl;
   
    //for(int i=0;i<5;i++)
    //{
    // if(kroki>-1)
    // {
    // tmp=kroki;
    // cout<<"\n#### Poziom "<<i+1<<" ####"<<endl;
    // kroki=kroki+gracz(czlowiek,*l_przeciwnicy[i]);
    // }
    //}
    //
    //if(kroki>-1)
    // {
    // cout<<"\n#### POZIOM 6 ####";
    // kroki=kroki+przeszkoda(czlowiek,kamien);
    // cout<<"\n#### POZIOM 7 ####";
    // kroki=kroki+przeszkoda(czlowiek,drzewo);
    // cout<<"\n#### POZIOM 8 ####";
    // kroki=kroki+przeszkoda(czlowiek,skala);
    // cout<<"\n#### POZIOM 9 ####";
    // kroki=kroki+przeszkoda(czlowiek,krzaki);
    // cout<<"\n#### POZIOM 10 ####";
    // kroki=kroki+przeszkoda(czlowiek,gora);
    // }
    //
    // /*for(int j=6;j<10;j++)
    // {
    // cout<<"\n#### Poziom "<<j<<" ####"<<endl;
    // kroki=kroki+przeszkoda(czlowiek,*l_przeszkody[j],kroki);
    // }*/
   
    // cout<<"KONIEC "<<endl;
    // if(kroki<0)
    // {
    // cout<<tmp<<" krokow"<<endl;
    // }
    // else
    // cout<<kroki<<" krokow"<<endl;
    //
    // system("Pause");
    // return 0;
    //
}
//baza *lista[10]={ &troll, &kamien, &ogr, &drzewo, &elf, &skala, &mag, &krzaki, &rycerz, &gora };
//for(int i=0;i<10;i++)
// cout<<(*lista[i]).zycie<<endl;
//gracze *bptr = (&czlowiek,&troll);
//bptr->walka(czlowiek,troll);
baza.h
C/C++
#pragma once
#include <string>
#include <iostream>

using namespace std;

class baza
{
public:
    int zycie;
    string opis;
   
    baza( int _zycie, string _opis );
    ~baza( void );
};

gracze.h
C/C++
#pragma once
#include "baza.h"
#include <string>
#include <iostream>

class room;

class gracze
    : public baza
{
    friend class room;
public:
    int atak;
    string okrzyk;
   
    gracze( int _z, string _o, int _atak, string _okrzyk );
    ~gracze( void );
};
przeszkody.h
C/C++
#pragma once
#include "baza.h"
#include <string>
#include <iostream>

class przeszkody
    : public baza
{
public:
    int opor;
    int wielkosc;
   
    przeszkody( int _zy, string _op, int _opor, int _wielkosc );
    ~przeszkody( void );
};
P-102811
stryku
» 2014-01-24 02:05:34
Możesz np zrobić zamiast tablicy wskaźników na "room" tablicę struktur. Struktura by wyglądała np. tak:
struct pokoj{
przeszkody *przeszkoda;
gracze *przeciwnik;//nie wiem czy tu dobrze zrozumiałem, że "gracze" bedzie klasa dla przeciwników.
};
Nie wiem tez ile zamierzasz mieć przeciwników w jednym pokoju. Jak nieznaną ilość to możesz zrobić listę przeciwników i np. jak będą zadawać obrażenia to będziesz lecieć po tej liście po porostu. Jak z góry chcesz założyć jakąś maksymalną ilość to możesz zrobić tablicę np.
gracze *przeciwnicy[10];

No i na końcu robisz sobie tablice
pokoj* current;
pokoj* tab[ 3 ][ 3 ];

jak chcesz to dodajesz jakieś konstruktory itp ;)
P-103023
« 1 »
  Strona 1 z 1