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

Czytanie tablic w funkcji

Ostatnio zmodyfikowano 2014-11-14 11:10
Autor Wiadomość
wilkoo13
» 2014-11-12 21:18:48
Ponieważ pętla while(wyprawa) nigdy nie przestanie się wykonywać. Tak sądzę
P-120472
oen432
Temat założony przez niniejszego użytkownika
» 2014-11-12 21:30:40
Przestanie, są momenty gdy się zatrzymuje.
P-120475
Monika90
» 2014-11-12 22:08:35
Jak już napisałes te wszystkie funkcje, to teraz musissz je wywołać z main, przekazując odpowiednie argumenty.

C/C++
postac_tab( player, 3 );
potwor_tab( enemy, 2 );
postac_info( player[ 0 ] );
walka( player[ 0 ], enemy[ 0 ], enemy[ 1 ] );
P-120488
oen432
Temat założony przez niniejszego użytkownika
» 2014-11-13 09:00:48
Po kompilacji program przestaje działać.

C/C++
#include <iostream>
#include <windows.h>

bool wyprawa = true;

int NT_SetConsoleDisplayMode( HANDLE hOutputHandle, DWORD dwNewMode )
{
    typedef BOOL( WINAPI * SCDMProc_t )( HANDLE, DWORD, LPDWORD );
   
    SCDMProc_t SetConsoleDisplayMode;
    HMODULE hKernel32;
    BOOL bFreeLib = FALSE, ret;
    const char KERNEL32_NAME[] = "kernel32.dll";
    hKernel32 = GetModuleHandleA( KERNEL32_NAME );
   
    if( hKernel32 == NULL )
    {
        hKernel32 = LoadLibraryA( KERNEL32_NAME );
        if( hKernel32 == NULL )
             return FALSE;
       
        bFreeLib = true;
    }
   
    SetConsoleDisplayMode =
    ( SCDMProc_t ) GetProcAddress( hKernel32, "SetConsoleDisplayMode" );
   
    if( SetConsoleDisplayMode == NULL )
    {
        SetLastError( ERROR_CALL_NOT_IMPLEMENTED );
        ret = FALSE;
    }
    else
    {
        DWORD dummy;
        ret = SetConsoleDisplayMode( hOutputHandle, dwNewMode, & dummy );
    }
    if( bFreeLib )
         FreeLibrary( hKernel32 );
   
    return ret;
}

struct postac
{
    std::string nazwa;
    std::string klasa;
    int poziom;
    int exp_min;
    int exp_max;
    int zycie_min;
    int zycie_max;
    int mana_min;
    int mana_max;
    int atak;
    int obrona;
    int sila;
    int zrecznosc;
    int inteligencja;
    int wytrzymalosc;
    int witalnosc;
};

struct potwor
{
    std::string nazwa;
    std::string opis;
    int zycie_min;
    int zycie_max;
    int atak;
    int obrona;
    int exp;
    int gold;
    int ilosc;
};

void potwor_tab( potwor * enemy1, potwor * enemy2, int rozmiar )
{
    enemy1->nazwa = "Szczur";
    enemy1->opis = "Gryzon";
    enemy1->zycie_min = 5;
    enemy1->zycie_max = 5;
    enemy1->exp = 1;
    enemy1->ilosc = 5;
   
    enemy2->nazwa = "Pies";
    enemy2->opis = "Piesek";
    enemy2->zycie_min = 10;
    enemy2->zycie_max = 10;
    enemy2->exp = 2;
    enemy2->ilosc = 5;
}

void postac_tab( postac * player, int rozmiar )
{
    player->klasa = "Test";
    player->poziom = 1;
    player->exp_min = 0;
    player->exp_max = 10;
    player->zycie_min = 100;
    player->zycie_max = 100;
    player->mana_min = 50;
    player->mana_max = 50;
}

void postac_info( const postac & player )
{
    //informacje o postaci
    std::cout << "====================================" << std::endl;
    std::cout << "Nazwa: " << player.nazwa << std::endl;
    std::cout << "Klasa: " << player.klasa << std::endl;
    std::cout << "Poziom: " << player.poziom << std::endl;
    std::cout << "Doswiadczenie: " << player.exp_min << "/" << player.exp_max << std::endl;
    std::cout << "Zdrowie: " << player.zycie_min << "/" << player.zycie_max << std::endl;
    std::cout << "Mana: " << player.mana_min << "/" << player.mana_max << std::endl;
    std::cout << "====================================" << std::endl;
}

void postac_nowylvl( postac & player )
{
   
    if( player.exp_min == player.exp_max )
    {
        int opcja;
        wyprawa = false;
        system( "cls" );
        std::cout << "Awansowales na nowy poziom" << std::endl;
        std::cin >> opcja;
        switch( opcja )
        {
        case 1:
            player.zycie_max += 10;
            player.zycie_min = player.zycie_max;
            wyprawa = true;
            break;
           
        case 2:
            wyprawa = true;
            break;
        }
        player.exp_max += player.exp_max * 2;
        player.exp_min = 0;
    }
}

void walka( postac & player, potwor & enemy1, potwor & enemy2 )
{
    int akcja;
   
    potwor * aktualny = & enemy1;
    potwor * aktualny2 = & enemy2;
   
    while( wyprawa )
    {
        while( aktualny->ilosc >= 0 )
        {
            system( "cls" );
            std::cout << "Nazwa: " << enemy1.nazwa << std::endl;
            std::cout << "Opis: " << enemy1.opis << std::endl;
            std::cout << "Zycie: " << enemy1.zycie_min << "/" << enemy1.zycie_max << std::endl;
            std::cout << "Ilosc: " << enemy1.ilosc << std::endl;
            std::cin >> akcja;
           
            switch( akcja )
            {
            case 1:
                enemy1.zycie_min -= 1;
                break;
               
            case 2:
                break;
            }
           
            if( enemy1.zycie_min != 0 )
            {
                enemy1.ilosc--;
                player.exp_min += 1;
            }
        }
       
        while( aktualny2->ilosc >= 0 )
        {
            std::cout << "Nazwa: " << enemy2.nazwa << std::endl;
            std::cout << "Opis: " << enemy2.opis << std::endl;
            std::cout << "Zycie: " << enemy2.zycie_min << "/" << enemy2.zycie_max << std::endl;
            std::cout << "Ilosc: " << enemy2.ilosc << std::endl;
            std::cin >> akcja;
           
            switch( akcja )
            {
            case 1:
                enemy2.zycie_min -= 1;
                break;
               
            case 2:
                break;
            }
        }
       
    }
}

int main( postac * player, potwor * enemy1, potwor * enemy2 )
{
    postac_tab( player, 1 );
    potwor_tab( enemy1, enemy2, 2 );
    postac_info( player[ 0 ] );
    walka( player[ 0 ], enemy1[ 0 ], enemy2[ 1 ] );
   
    //zmiany w konsoli
    NT_SetConsoleDisplayMode( GetStdHandle( STD_OUTPUT_HANDLE ), 1 );
    system( "color 7f" );
    SetConsoleTitle( TEXT( "Guthix RPG by oeN." ) );
   
    return 0;
}

||=== Build: Debug in guthix (compiler: GNU GCC Compiler) ===|
F:\guthix\silnik.cpp|202|warning: first argument of 'int main(postac*, potwor*, potwor*)' should be 'int' [-Wmain]|
F:\guthix\silnik.cpp|202|warning: second argument of 'int main(postac*, potwor*, potwor*)' should be 'char **' [-Wmain]|
F:\guthix\silnik.cpp|202|warning: third argument of 'int main(postac*, potwor*, potwor*)' should probably be 'char **' [-Wmain]|
||=== Build finished: 0 error(s), 3 warning(s) (0 minute(s), 6 second(s)) ===|
||=== Run: Debug in guthix (compiler: GNU GCC Compiler) ===|
P-120505
Monika90
» 2014-11-13 17:59:23
Funkcja main nie może przyjmować takich argumentów. Main dostaje argumenty przkazane z systemu operacyjnego. System operacyjny nie stworzy dla ciebie tablicy potworów i nie przekaże jej do main. Musisz te tablice sam zadeklarować.

C/C++
int main()
{
    postac players[ 1 ];
    potwor enemies[ 2 ];
    postac_tab( players, 1 );
    potwor_tab( & enemies[ 0 ], & enemies[ 1 ], 2 );
    postac_info( player[ 0 ] );
    walka( player[ 0 ], enemies[ 0 ], enemies[ 1 ] );
   
    //zmiany w konsoli
    NT_SetConsoleDisplayMode( GetStdHandle( STD_OUTPUT_HANDLE ), 1 );
    system( "color 7f" );
    SetConsoleTitle( TEXT( "Guthix RPG by oeN." ) );
   
    return 0;
}
Teraz chyba będzie OK.

I widzę, że niestety nic z tego nie rozumiesz, więc kup sobie jakąś dobrą książkę o C++.
P-120520
oen432
Temat założony przez niniejszego użytkownika
» 2014-11-13 21:47:48
Po prostu takie użycie zostało mi zasugerowane do potrzeb stworzenia tej gry. Fakt, nie rozumiem tego do końca bo nie jestem na tym poziomie.
Dobrą książkę? Poczytałem trochę na forach i wychodzi na to że na początek dobrą opcją jest Symfonia C++.

Dziękuję za pomoc.
P-120552
Memento96
» 2014-11-14 08:30:50
Nie symfonia c++ a symfonia c++ standard jak już
P-120568
oen432
Temat założony przez niniejszego użytkownika
» 2014-11-14 11:10:43
O tą mi chodziło.

Problem rozwiązany i pomoc udzielona więc temat zamykam.
P-120569
1 « 2 »
Poprzednia strona Strona 2 z 2