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

Czy ten kod jest funkcjonalny ?

Ostatnio zmodyfikowano 2012-09-16 14:53
Autor Wiadomość
Nekronomik
Temat założony przez niniejszego użytkownika
Czy ten kod jest funkcjonalny ?
» 2012-09-14 20:52:44
Witam,napisałem ostatnio w allegro teren w rzucie izometrycznym na którym znajdują się obiekty i nic po za tym.
Chciałem dodać kod który będzie zmieniał kafel na danym obszarze w zależności jakie otrzyma uszkodzenia np:
trawa-->ziemia-->kamień.
Napisałem kod który wykonuje tą czynność ale czy jest funkcjonalny,tzn czy dalsze rozbudowywanie jego ma sens?
Po prostu nie chciał bym podczas pisania dalej swojego projektu dojść do punktu w którym będę musiał usunąć polowe tego co napisałem.
Kod ten napisałem w konsoli ponieważ dobrze tu się robi testy.

C/C++
#include<iostream>
#include<conio.h>
#include<string>
using namespace std;
class trawa
{
private:
    int kod;
    string nazwa;
public:
    int wytrzymalosc;
    trawa()
    {
        wytrzymalosc = 10;
        kod = 100;
        nazwa = "trawa";
    }
    int niszczenie( int ile )
    {
        wytrzymalosc = wytrzymalosc - ile;
        if( wytrzymalosc <= 0 )
        {
            wytrzymalosc = 0;
        }
    }
    int identyfikuj( int nr )
    {
        kod == nr;
    }
    void sprawdz()
    {
        wytrzymalosc;
    }
    int informacje( int nr )
    {
        cout << nr << " Rodzaj : " << nazwa << "  .Wytrzymalosc : " << wytrzymalosc << endl;
    }
};
class ziemia
{
private:
    int kod;
    string nazwa;
public:
    int wytrzymalosc;
    ziemia()
    {
        wytrzymalosc = 20;
        kod = 200;
        nazwa = "ziemia";
    }
    int niszczenie( int ile )
    {
        wytrzymalosc = wytrzymalosc - ile;
        if( wytrzymalosc <= 0 )
        {
            wytrzymalosc = 0;
        }
    }
    int identyfikuj( int nr )
    {
        kod == nr;
    }
    int informacje( int nr )
    {
        cout << nr << " Rodzaj : " << nazwa << "  .Wytrzymalosc : " << wytrzymalosc << endl;
    }
};
class kamien
{
private:
    int kod;
    string nazwa;
public:
    int wytrzymalosc;
    kamien()
    {
        wytrzymalosc = 30;
        kod = 300;
        nazwa = "kamien";
    }
    int niszczenie( int ile )
    {
        wytrzymalosc = wytrzymalosc - ile;
        if( wytrzymalosc <= 0 )
        {
            wytrzymalosc = 0;
        }
    }
    int identyfikuj( int nr )
    {
        kod == nr;
    }
    void sprawdz()
    {
        wytrzymalosc;
    }
    int informacje( int nr )
    {
        cout << nr << " Rodzaj : " << nazwa << "  .Wytrzymalosc : " << wytrzymalosc << endl;
    }
};
int dzialanie()
{
    ziemia ziemia_kafel[ 4 ];
    trawa trawa_kafel[ 4 ];
    kamien kamien_kafel[ 4 ];
    int kafel[ 4 ];
    for( int x = 0; x < 4; x++ )
    {
        kafel[ x ] = 100;
    }
    kafel[ 2 ] = 200;
    kafel[ 3 ] = 300;
    for( int x = 0; x < 4; x++ )
    {
        if( kafel[ x ] == 100 )
        {
            trawa_kafel[ x ].informacje( x );
        }
        if( kafel[ x ] == 200 )
        {
            ziemia_kafel[ x ].informacje( x );
        }
        if( kafel[ x ] == 300 )
        {
            kamien_kafel[ x ].informacje( x );
        }
    }
    for(;; )
    {
        for( int x = 0, z, c; x < 4; x++ )
        {
            kafel[ x ];
            cout << "Podaj kafel : ";
            cin >> z;
            if( kafel[ z ] == 100 )
            {
                trawa_kafel[ z ].informacje( z );
                cout << "Uszkodzenia : ";
                cin >> c;
                trawa_kafel[ z ].niszczenie( c );
                trawa_kafel[ z ].informacje( z );
            }
            if( kafel[ z ] == 200 )
            {
                ziemia_kafel[ z ].informacje( z );
                cout << "Uszkodzenia : ";
                cin >> c;
                ziemia_kafel[ z ].niszczenie( c );
                ziemia_kafel[ z ].informacje( z );
            }
            if( kafel[ z ] == 300 )
            {
                kamien_kafel[ z ].informacje( z );
                cout << "Uszkodzenia : ";
                cin >> c;
                kamien_kafel[ z ].niszczenie( c );
                kamien_kafel[ z ].informacje( z );
            }
            if( trawa_kafel[ z ].wytrzymalosc <= 0 )
            {
                kafel[ z ] = 200;
            }
            if( ziemia_kafel[ z ].wytrzymalosc <= 0 )
            {
                kafel[ z ] = 300;
            }
        }
        cout << endl << endl;
        for( int x = 0; x < 4; x++ )
        {
            if( kafel[ x ] == 100 )
            {
                trawa_kafel[ x ].informacje( x );
            }
            if( kafel[ x ] == 200 )
            {
                ziemia_kafel[ x ].informacje( x );
            }
            if( kafel[ x ] == 300 )
            {
                kamien_kafel[ x ].informacje( x );
            }
        }
    }
}
int main()
{
    dzialanie();
    getch();
}

Jak co programistą nie jestem ani żadnym informatykiem.
P-64935
SeaMonster131
» 2012-09-14 21:19:52
1. Źle korzystasz z klas. Zrób klasę Kafelek, i następnie Kafelek ziemia,trawa,kamien (lub lepiej Kafelek kafel[3]). A nie 3 osobne klasy..

2.
C/C++
int identyfikuj( int nr )
{
    kod == nr;
}
== to operator porównania.
= to operator przypisania.

3. Co to ma robić według Ciebie:
kafel[ x ];
 ?

4. I tak jak mówiłem w pkt 1. Wtedy zamiast:
C/C++
if( kafel[ z ] == 100 )
{
    trawa_kafel[ z ].informacje( z );
    cout << "Uszkodzenia : ";
    cin >> c;
    trawa_kafel[ z ].niszczenie( c );
    trawa_kafel[ z ].informacje( z );
}
if( kafel[ z ] == 200 )
{
    ziemia_kafel[ z ].informacje( z );
    cout << "Uszkodzenia : ";
    cin >> c;
    ziemia_kafel[ z ].niszczenie( c );
    ziemia_kafel[ z ].informacje( z );
}
if( kafel[ z ] == 300 )
{
    kamien_kafel[ z ].informacje( z );
    cout << "Uszkodzenia : ";
    cin >> c;
    kamien_kafel[ z ].niszczenie( c );
    kamien_kafel[ z ].informacje( z );
}
mógłbyś zrobić coś w tym stylu:
C/C++
kafel[ z ].informacje( z );
cout << "Uszkodzenia : ";
cin >> c;
kafel[ z ].niszczenie( c );
kafel[ z ].informacje( z );
P-64939
kubawal
» 2012-09-15 17:57:40
C/C++
void sprawdz()
{
    wytrzymalosc;
}
 
Hmm...
Co to niby ma robić?
P-64974
Nekronomik
Temat założony przez niniejszego użytkownika
» 2012-09-15 22:19:56
Właśnie te klasy też mi się nie podobały,ale posłuchałem ciebie SeaMonster131 i zmieniłem kod na taki:

C/C++
#include<iostream>
#include<conio.h>
#include<string>
using namespace std;
class kafel
{
private:
    int kod;
    int kod_trawa;
    int kod_ziemia;
    int kod_kamien;
    string rodzaj_trawa;
    string rodzaj_ziemia;
    string rodzaj_kamien;
    string rodzaj;
public:
    int wytrzymalosc_trawa;
    int wytrzymalosc_ziemia;
    int wytrzymalosc_kamien;
    int wytrzymalosc;
    kafel()
    {
        kod_trawa = 100;
        kod_ziemia = 200;
        kod_kamien = 300;
        rodzaj_trawa = "trawa";
        rodzaj_ziemia = "ziemia";
        rodzaj_kamien = "kamien";
        wytrzymalosc_trawa = 10;
        wytrzymalosc_ziemia = 20;
        wytrzymalosc_kamien = 30;
    }
    int uszkodzenia( int ile )
    {
        wytrzymalosc = wytrzymalosc - ile;
    }
    void trawa()
    {
        rodzaj = rodzaj_trawa;
        wytrzymalosc = wytrzymalosc_trawa;
        kod = kod_trawa;
    }
    void ziemia()
    {
        rodzaj = rodzaj_ziemia;
        wytrzymalosc = wytrzymalosc_ziemia;
        kod = kod_ziemia;
    }
    void kamien()
    {
        rodzaj = rodzaj_kamien;
        wytrzymalosc = wytrzymalosc_kamien;
        kod = kod_kamien;
    }
    void sprawdz()
    {
        if( kod == kod_trawa )
        {
            if( wytrzymalosc <= 0 )
            {
                ziemia();
            }
        }
        if( kod == kod_ziemia )
        {
            if( wytrzymalosc <= 0 )
            {
                kamien();
            }
        }
    }
    int informacje( int nr )
    {
        cout << "Kafel-" << nr << " .Rodzaj : " << rodzaj << "  .Wytrzymalosc : " << wytrzymalosc << endl;
    }
};
void dzialanie()
{
    kafel typ[ 4 ];
    for( int x = 0; x < 4; x++ )
    {
        typ[ x ].trawa();
        typ[ x ].informacje( x );
    }
    for( int x = 0, k, u;; x++ )
    {
        cout << "Podaj kafel : ";
        cin >> k;
        typ[ k ].informacje( k );
        cout << "Uszkodzenia : ";
        cin >> u;
        typ[ k ].uszkodzenia( u );
        typ[ k ].sprawdz();
        typ[ k ].informacje( k );
        cout << endl;
        if( x == 3 )
        {
            for( int x = 0; x < 4; x++ )
            {
                typ[ x ].informacje( x );
            }
            x =- 1;
        }
    }
}
int main()
{
    dzialanie();
    getch();
}
Działa tak samo jak ten wcześniej.

Co do tego kawałka kodu kafel[ x ]; miał to być lokalizator położenia kafla,nie wiem jak to wytłumaczyć.
Na operatorach porównania i przypisania znam się,po prostu nie usunąłem tych zbędnych funkcji
int identyfikuj( int nr ) i void sprawdz()  
P-65000
yoogi
» 2012-09-16 08:27:43
Każdy kod jest funkcjonalny. Dobrym wyjściem jest sprawdzenie szybkości obu kodów :) tak "o", żeby mieć lepsze pojęcie w razie czego co zmienić, aby zwiększyć szybkość gry
P-65029
Parodia0
» 2012-09-16 10:01:00
Pyry pyry pyry
P-65039
Mrovqa
» 2012-09-16 14:53:19
@Parodia0
Pyry pyry pyry

ehh... a jednak zachciało mu się założyć nowe konto... @mati1qazxsw2 przestań w końcu trollować :P

@topic
Jeśli chodzi o uniwersalny kod, który potem łatwo byłoby przenieść to radzę zacząć od kartki papieru i długopisu. Na początku może to być niezbyt przyjemne, ale zauważysz sporą różnicę na plus. Naprawdę warto wszystko (prawie wszystko :P) dobrze wcześniej zaprojektować ;)
P-65048
« 1 »
  Strona 1 z 1