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

Gra rpg zapisywanie zdobytego expa i lepszy balans miedzy lvl potwora a poscaci

Ostatnio zmodyfikowano 2015-06-14 19:15
Autor Wiadomość
duszek
Temat założony przez niniejszego użytkownika
Gra rpg zapisywanie zdobytego expa i lepszy balans miedzy lvl potwora a poscaci
» 2015-06-14 17:58:07
witam tak jak w temacie ;) jestem jeszcze zielony i powoli dłubię przy projekcie na programowanie obiektowe chętnie usłyszał bym uwagi czy rady ;)

C/C++
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0502
#endif
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <time.h>
#include <cstdio>
#include <ctime>
#include <string>
#include <fstream>
#include <ctype.h>
#include <sstream>
using namespace std;
int y_pom, x_pom = 35, strtoint;
char wybor, plansza[ 40 ][ 70 ], bohater = 1;
string nick_pom = "";
int x = 69, y = 39, y1 = y, x1 = x;


int i, k, j, j2, x2 = 34, y2 = 20, liczba_przeciwnikow = 0, przeciwnicy_x[ 5 ], przeciwnicy_y[ 10 ]; //y,x-wspolrzedne postaci, y1,x1-pomocnicze wspolrzedne postaci, y2,x2-wspolrzedne kursora menu
char ruch, ekran = 'm', plec, znak, odpowiedz; //m-menu n-nowa gra w-wznow gre x-wyjscie i-interakcja
bool czy_ruch = true, pierwsze_uruchomienie_gry = true;
string linia, gracz_statystyki[ 8 ];
fstream plik;
string lvlp, hpp, strp, mpp, agp, defp, expp;
string nickp, zmienna_pomocnicza;



int rzut_kostka() //losowanie
{
    int s = rand() % 20 + 1;
    return s;
}


class Postac
{
public:
    int lvl;
    string nazwa;
    int hp;
    int sila;
    int mana;
    int zrecznosc;
    int s;
    int def;
    string rodzaj;
    int exp;
   
    Postac( string n )
    {
        nazwa = n;
        lvl = 1;
        hp = 100 + 150 * lvl;
        sila = 40 + 40 * lvl;
        mana = 100 + 10 * lvl;
        zrecznosc = 10 + 10 * lvl;
        def = 100 + 75 * lvl;
        exp = 0;
       
    }
   
   
    Postac()
    {
        nazwa;
        lvl = 1;
        hp = 100 + 150 * lvl;
        sila = 40 + 40 * lvl;
        mana = 100 + 10 * lvl;
        zrecznosc = 10 + 10 * lvl;
        def = 100 + 75 * lvl;
        exp = 0;
       
    }
   
    int doswiadczenie()
    {
        if( exp < 600 )
             lvl = 1;
        else if(( exp >= 600 ) &&( exp < 1800 ) )
             lvl = 2;
        else if(( exp >= 1800 ) &&( exp < 3000 ) )
             lvl = 3;
        else if(( exp >= 3000 ) &&( exp < 4800 ) )
             lvl = 4;
        else if(( exp >= 4800 ) &&( exp < 9200 ) )
             lvl = 5;
        else if(( exp >= 9200 ) &&( exp < 18400 ) )
             lvl = 6;
        else if(( exp >= 18400 ) &&( exp < 36800 ) )
             lvl = 7;
        else if(( exp >= 75000 ) &&( exp < 100000 ) )
             lvl = 8;
        else if( exp >= 100000 )
             lvl = 9;
       
    }
   
   
   
};

class Potwor
{
public:
    int lvl;
    string nazwa;
    int hp;
    int sila;
    int mana;
    int zrecznosc;
    int s;
    int def;
    string rodzaj;
   
    Potwor()
    {
        lvl = rand() % 5 + 1;
        hp = rand() % 100 + 100 * lvl;
        sila = rand() % 20 + 30 * lvl;
        mana = rand() % 100 + 10 * lvl;
        zrecznosc = rand() % 100 + 10 * lvl;
       
        int s = rand() % 100;
       
        //losowwanie rodzaju potwora
        if( s % 4 == 0 )
        {
            nazwa = "Smok";
            def = 75 + 10 * lvl + rand() % 100;
        }
        else if( s % 4 == 1 )
        {
            nazwa = "Demon";
            def = 100 + 10 * lvl + rand() % 100;
        }
        else if( s % 4 == 2 )
        {
            nazwa = "Duch";
            def = 20 + 10 * lvl + rand() % 100;
        }
        else if( s % 4 == 3 )
        {
            nazwa = "Zombie";
            def = 50 + 10 * lvl + rand() % 100;
        }
       
        //losowanie rodzaju
        if( s <= 70 )
        {
            rodzaj = "Normal ";
            def = def + 100;
        }
        else if( s > 70 && s <= 90 )
        {
            rodzaj = "Rare ";
            def = def + 150;
        }
        else if( s > 90 && s <= 98 )
        {
            rodzaj = "Legend ";
            def = def + 200;
        }
        else
        {
            rodzaj = "Heroic";
            def = def + 250;
        }
    }
};



class Boss
    : public Potwor //ostateczny boss
{
public:
   
   
    Boss()
        : Potwor()
    {
        lvl = 10;
        nazwa = "Krol Labu";
        hp = 1000;
        sila = 300;
        mana = 300;
        zrecznosc = 150;
        def = 800;
    }
   
   
};


void postac_staty( Postac & p ) //statystyki postaci
{
    cout << "Imie postaci: " << p.nazwa << endl;
    cout << "Lvl: " << p.lvl << endl;
    cout << "Ilosc zycia: " << p.hp << endl;
    cout << "Ilosc sily: " << p.sila << endl;
    cout << "Ilosc many: " << p.mana << endl;
    cout << "Wartosc zrecznosc: " << p.zrecznosc << endl;
    cout << "Wartosc defensywy: " << p.def << endl;
    cout << "Doswiadczenie: " << p.exp << endl;
    cout << endl;
}

void potwor_staty( Potwor & d )
{
    cout << "Nazwa Potwora :" << d.nazwa << endl;
    cout << "rodzaj potwora :" << d.rodzaj << endl;
    cout << "Lvl : " << d.lvl << endl;
    cout << "Ilosc zycia :" << d.hp << endl;
    cout << "ilosc sily :" << d.sila << endl;
    cout << "ilosc many :" << d.mana << endl;
    cout << "wartosc zrecznosci :" << d.zrecznosc << endl;
    cout << "Wartosc defensywy :" << d.def << endl;
    cout << endl;
}

int atak( Postac & p, Potwor & d )
{
    int atak = 0.2 * p.sila + 0.1 * p.zrecznosc + 2.5 * p.lvl - 0.01 * d.def;
    p.mana = p.mana - 10;
    return atak;
}

int atak_potwor( Potwor & d, Postac & p )
{
    int atak = 0.2 * d.sila + 0.1 * d.zrecznosc + 2.5 * d.lvl - 0.01 * p.def;
    d.mana -= 10;
    return atak;
}

void regeneracja( Postac & p ) //regeneracja statystyk po walce
{
    cout << " Potwor Spagetti wstapil z czelusci bigosu i podarowal Ci kolejne zycie. Wlasnie uzyles cudownej potki oczyszczenia, ktora regeneruje twoje zycie i mane." << endl;
    p.hp = 100 + 100 * p.lvl;
    p.mana = 100 + 10 * p.lvl;
}

void walka( Potwor & d2 ) //walka ze zwykymi potworami
{
   
   
    Postac * p1 = new Postac();
   
   
    plik.open( "panel_gracza.txt", ios::in );
    if( plik.good() == true )
    {
        while( !plik.eof() )
        {
            for( i = 0; i < 5; i++ )
            {
                getline( plik, linia );
                gracz_statystyki[ i ] = linia;
            }
        }
        plik.close();
    }
    for( i = 0; i <= 70; i++ )
    {
        if(( gracz_statystyki[ 3 ] )[ i ] == 40 )
        {
            i++;
            do
            {
                zmienna_pomocnicza +=(( gracz_statystyki[ 3 ] )[ i ] );
                i++;
            }
            while(( gracz_statystyki[ 3 ] )[ i ] != 41 );
           
            zmienna_pomocnicza += 7; //oddzielenie zmiennych, 7 bo 32 gryzie sie ze spacjami jesli nick ma wiecej niz slowo
        }
    }
    j = 0;
    for( i = 0; i < 70; i++ ) //zapisanie zmiennych ze zmiennej pomocniczej do osobnych zmiennych pomocniczych
    {
        if( j == 0 )
             lvlp += zmienna_pomocnicza[ i ];
        //p.lvl=lvl_pom;
        if( j == 1 )
             nick_pom += zmienna_pomocnicza[ i ];
       
        if( j == 2 )
             hpp += zmienna_pomocnicza[ i ];
       
        if( j == 3 )
             strp += zmienna_pomocnicza[ i ];
       
        if( j == 4 )
             mpp += zmienna_pomocnicza[ i ];
       
        if( j == 5 )
             agp += zmienna_pomocnicza[ i ];
       
        if( j == 6 )
             defp += zmienna_pomocnicza[ i ];
       
        if( j == 7 )
             expp += zmienna_pomocnicza[ i ];
       
        if( zmienna_pomocnicza[ i ] == 7 )
             j++;
       
    }
    p1->lvl = atoi( lvlp.c_str() );
    p1->nazwa = nickp;
    p1->hp = atoi( hpp.c_str() );
    p1->sila = atoi( strp.c_str() );
    p1->mana = atoi( mpp.c_str() );
    p1->zrecznosc = atoi( agp.c_str() );
    p1->def = atoi( defp.c_str() );
    p1->exp = atoi( expp.c_str() );
   
   
   
   
   
   
   
   
   
    cout << "Czy chcesz walczyc? (T)/(N)" << endl;
    cin >> odpowiedz;
    if( odpowiedz == 't' )
         odpowiedz = 'T'; //zamiana malych liter na duze
    else if( odpowiedz == 'n' ) { odpowiedz = 'N'; }
   
   
    switch( odpowiedz ) {
    case 'T':
        do {
            int r = rzut_kostka();
            cout << "Rzut kostka, wypadlo " << r << "." << endl;
            int a = r + atak( * p1, d2 );
            cout << "Zadales " << a << " obrazen mieczem." << endl;
            d2.hp = d2.hp - a;
            cout << "Przeciwnikowi pozostalo " << d2.hp << " zycia." << endl;
            cout << "Pozostalo przeciwnikowi " << d2.mana << " many!" << endl;
           
            if( d2.hp > 0 )
            {
                cout << "*Przeciwnik atakuje.*" << endl;
                int r1 = rzut_kostka();
                cout << "rzut kostka =" << r1 << endl;
                int ap = r1 + atak_potwor( d2, * p1 );
                cout << "Zadaje " << ap << " obrazen." << endl;
                p1->hp = p1->hp - ap;
                cout << "Pozostalo " << p1->hp << " zycia!" << endl;
                cout << "Pozostalo " << p1->mana << " many!" << endl;
                cout << endl;
            }
           
            if(( d2.hp <= 0 && p1->hp > 0 ) ||( d2.mana < 0 && p1->hp > 0 ) ) { p1->exp = p1->exp + 600 * d2.lvl; p1->doswiadczenie(); cout << "*** WYGRALES WALKE!!! ***" << endl; cout << endl; break; } //wygrana walka, mo¿na tutaj wpisaæ dane do pliku z tego miejsca
            else if(( p1->hp <= 0 && d2.hp > 0 ) ||( p1->mana < 0 && d2.hp > 0 ) )
            {
               
                p1->exp = p1->exp - 100;
                p1->doswiadczenie();
               
               
               
               
                cout << "´´´´´´´´´´´´´´´´´´´´´´´´¶´´´´´´´´´¶´´´´´´´´´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´´´´´´´´¶´´´´´´´´´¶´´´´´´´´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´´´´¶´´´¶´´´´´´´´´¶´´´¶´´´´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´´´´¶´´¶¶´´´´´´´´´¶¶´´¶´´´´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´´´´¶¶´¶¶¶´´´´´´´¶¶¶´¶¶´´´´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´¶´´´´´´¶¶´´´¶¶¶´´´´´¶¶¶´´´¶¶´´´´´´¶´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´¶¶´´´´´´¶¶´´´¶¶¶´´´´´¶¶¶´´´¶¶´´´´´´¶¶´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´¶¶´´´´´´¶¶´´´´¶¶¶¶´´´¶¶¶¶´´´´¶¶´´´´´´¶¶´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´¶¶´´´´´¶¶¶´´´´¶¶¶¶´´¶¶¶¶¶´´´´¶¶¶´´´´´¶¶¶´´´´´´´´´´" << endl;
                cout << "´´´´´´´¶´´¶¶¶´´´´¶¶¶¶´´´´¶¶¶¶´´´¶¶¶¶´´´´¶¶¶¶´´´¶¶¶¶´´¶´´´´´´´" << endl;
                cout << "´´´´´´´¶¶´¶¶¶¶¶´´¶¶¶¶´´´¶¶¶¶¶´´´¶¶¶¶¶´´´¶¶¶¶´´¶¶¶¶¶´¶¶´´´´´´´" << endl;
                cout << "´´´´´´´¶¶´¶¶¶¶¶´´¶¶¶¶¶¶¶¶¶¶¶´´´´´¶¶¶¶¶¶¶¶¶¶¶´´¶¶¶¶¶´¶¶´´´´´´´" << endl;
                cout << "´´´´´´´¶¶´¶¶¶¶¶´´¶¶¶¶¶¶¶¶¶¶¶´´´´´¶¶¶¶¶¶¶¶¶¶¶´´¶¶¶¶¶´¶¶´´´´´´´" << endl;
                cout << "´´´´´´¶¶¶´´¶¶¶¶´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´¶¶¶¶´´¶¶¶´´´´´´" << endl;
                cout << "´´´´´¶¶¶¶´´¶¶¶¶´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´¶¶¶¶´´¶¶¶¶´´´´´" << endl;
                cout << "´´´´¶¶¶¶´´´¶¶¶¶¶´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´¶¶¶¶¶´´´¶¶¶¶´´´´" << endl;
                cout << "´´´¶¶¶¶´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´¶¶¶¶´´´´" << endl;
                cout << "´´´¶¶¶¶¶´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´¶¶¶¶´´´´" << endl;
                cout << "´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´" << endl;
                cout << "´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´" << endl;
                cout << "´´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´´" << endl;
                cout << "´´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´´" << endl;
                cout << "´´´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´´´" << endl;
                cout << "´´´´´¶¶¶¶¶´´´´´´´´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´´´´´´´´¶¶¶¶¶´´´´´" << endl;
                cout << "´´´´´¶¶¶¶¶¶´´´´´´´´´´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´´´´´´´´´´¶¶¶¶¶¶´´´´´" << endl;
                cout << "´´´´´´¶¶¶¶¶¶¶´´´´´´´´..´´´´´¶¶¶¶¶¶¶¶¶´´´´´..´´´´´´´´¶¶¶¶¶¶´´´" << endl;
                cout << "´´´´´´´¶¶¶¶¶¶¶¶´´´´´´´´´´´´´¶¶¶¶¶´´´´´´´´´´´´´¶¶¶¶¶¶¶¶´´´´´´´" << endl;
                cout << "´´´´´´´´¶¶¶¶¶¶¶¶¶¶´´´´´´´´´´´¶¶¶´´´´´´´´´´´¶¶¶¶¶¶¶¶¶¶´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´¶¶¶¶¶¶¶¶¶¶´´´´´¶¶¶¶¶¶¶¶¶¶´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´´¶¶¶¶¶¶¶¶´´´´´´´¶¶¶¶¶¶¶¶´´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´¶¶¶¶¶¶¶¶¶´´´´´´´¶¶¶¶¶¶¶¶¶´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´¶¶¶¶¶¶¶¶¶´¶¶¶¶¶´¶¶¶¶¶¶¶¶¶´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´¶¶¶´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´¶¶¶´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´¶¶´´¶¶¶¶´´¶¶¶¶¶´´¶¶¶¶´´¶¶´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´´´´´¶¶¶¶´´¶¶¶¶¶´´¶¶¶¶´´´´´´´´´´´´´´´´´´´´´" << endl;
               
               
               
               
                cout << endl;
                regeneracja( * p1 );
                break;
            }
           
            else { cout << "Walka dalej trwa!" << endl; cout << endl; }
           
           
        } while( p1->hp > 0 );
       
        break;
    case 'N':
        cout << "Uciekasz w poplochu, rzuc kostka by sie przekonac, czy udalo ci sie uciec" << endl;
        int r3 = rzut_kostka();
        cout << "Wyrzuciles " << r3 << "." << endl;
        if( r3 <= 10 )
        {
           
            cout << "Niestety, uciekajac potknales sie o korzen drzewa i upadles. W miedzyczasie potwor dogonil ciebie i zaatakowal." << endl;
            cout << "Umierasz w meczarniach. Tracisz doswiadczenie." << endl;
            cout << endl;
           
            p1->hp = 0;
            p1->exp = p1->exp - 100;
            p1->doswiadczenie();
            regeneracja( * p1 );
           
        }
        else
        {
            cout << "Udalo ci sie uciec od bestii, ktora ciebie gonila. Masz teraz szanse pojsc inna droga by ominac bezduszna bestie!" << endl;
            cout << endl;
        }
        break;
    }
}

void walka_boss( Boss & b ) //walka z bossem, nie dziala mi jak nalezy
{
    cout << "Nazwa :" << b.nazwa << endl;
    cout << "rodzaj potwora :" << b.rodzaj << endl;
    cout << "Lvl : " << b.lvl << endl;
    cout << "Ilosc zycia :" << b.hp << endl;
    cout << "ilosc sily :" << b.sila << endl;
    cout << "ilosc many :" << b.mana << endl;
    cout << "wartosc zrecznosci :" << b.zrecznosc << endl;
    cout << "Wartosc defensywy :" << b.def << endl;
   
    Postac * p = new Postac();
   
   
    plik.open( "panel_gracza.txt", ios::in );
    if( plik.good() == true )
    {
        while( !plik.eof() )
        {
            for( i = 0; i < 5; i++ )
            {
                getline( plik, linia );
                gracz_statystyki[ i ] = linia;
            }
        }
        plik.close();
    }
    for( i = 0; i <= 70; i++ )
    {
        if(( gracz_statystyki[ 3 ] )[ i ] == 40 )
        {
            i++;
            do
            {
                zmienna_pomocnicza +=(( gracz_statystyki[ 3 ] )[ i ] );
                i++;
            }
            while(( gracz_statystyki[ 3 ] )[ i ] != 41 );
           
            zmienna_pomocnicza += 7; //oddzielenie zmiennych, 7 bo 32 gryzie sie ze spacjami jesli nick ma wiecej niz slowo
        }
    }
    j = 0;
    for( i = 0; i < 70; i++ ) //zapisanie zmiennych ze zmiennej pomocniczej do osobnych zmiennych pomocniczych
    {
        if( j == 0 )
             lvlp += zmienna_pomocnicza[ i ];
        //p.lvl=lvl_pom;
        if( j == 1 )
             nick_pom += zmienna_pomocnicza[ i ];
       
        if( j == 2 )
             hpp += zmienna_pomocnicza[ i ];
       
        if( j == 3 )
             strp += zmienna_pomocnicza[ i ];
       
        if( j == 4 )
             mpp += zmienna_pomocnicza[ i ];
       
        if( j == 5 )
             agp += zmienna_pomocnicza[ i ];
       
        if( j == 6 )
             defp += zmienna_pomocnicza[ i ];
       
        if( j == 7 )
             expp += zmienna_pomocnicza[ i ];
       
        if( zmienna_pomocnicza[ i ] == 7 )
             j++;
       
    }
    p->lvl = atoi( lvlp.c_str() );
    p->nazwa = nickp;
    p->hp = atoi( hpp.c_str() );
    p->sila = atoi( strp.c_str() );
    p->mana = atoi( mpp.c_str() );
    p->zrecznosc = atoi( agp.c_str() );
    p->def = atoi( defp.c_str() );
    p->exp = atoi( expp.c_str() );
   
   
   
   
   
    string gotowosc;
   
    cout << "Aby uwolnic ksiezniczke z rak zlego krola, nalezy go pokonac walce. Nie masz juz odwrotu. Bierz za swoj miecz i zgladz przeciwnika!" << endl;
    cout << "Aby rozpoczac walke, zadeklaruj w konsoli swa gotowosc wpisujac *gotowy*." << endl;
    cin >> gotowosc;
    string gotowy = "gotowy";
   
    if( gotowosc == gotowy ) //proba interakcji z graczem
    {
        while( p->hp > 0 ) {
            int r = rzut_kostka();
            cout << "Rzut kostka, wypadlo " << r << "." << endl;
            int a = r + atak( * p, b );
            cout << "Zadales " << a << " obrazen mieczem." << endl;
            b.hp = b.hp - a;
            cout << "Przeciwnikowi pozostalo " << b.hp << " zycia." << endl;
            cout << "Pozostalo przeciwnikowi " << b.mana << " many!" << endl;
           
            if( b.hp > 0 )
            {
                cout << "*Krol atakuje.*" << endl;
                int r1 = rzut_kostka();
                int ap = r1 + atak_potwor( b, * p );
                cout << "Zadaje " << ap << " obrazen." << endl;
                p->hp = p->hp - ap;
                cout << "Pozostalo " << p->hp << " zycia!" << endl;
                cout << "Pozostalo " << p->mana << " many!" << endl;
                cout << endl;
            }
           
            if(( b.hp <= 0 && p->hp > 0 ) ||( b.mana < 0 && p->hp > 0 ) ) { p->exp = p->exp + 100 * b.lvl; cout << "*** WYGRALES OSTATECZNA WALKE!!! ***" << endl; cout << endl; break; }
            else if(( p->hp <= 0 && b.hp > 0 ) ||( p->mana < 0 && b.hp > 0 ) )
            {
               
                p->exp = p->exp - 100 * p->lvl;
               
                cout << endl;
               
                cout << "´´´´´´´´´´´´´´´´´´´´´´´´¶´´´´´´´´´¶´´´´´´´´´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´´´´´´´´¶´´´´´´´´´¶´´´´´´´´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´´´´¶´´´¶´´´´´´´´´¶´´´¶´´´´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´´´´¶´´¶¶´´´´´´´´´¶¶´´¶´´´´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´´´´¶¶´¶¶¶´´´´´´´¶¶¶´¶¶´´´´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´¶´´´´´´¶¶´´´¶¶¶´´´´´¶¶¶´´´¶¶´´´´´´¶´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´¶¶´´´´´´¶¶´´´¶¶¶´´´´´¶¶¶´´´¶¶´´´´´´¶¶´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´¶¶´´´´´´¶¶´´´´¶¶¶¶´´´¶¶¶¶´´´´¶¶´´´´´´¶¶´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´¶¶´´´´´¶¶¶´´´´¶¶¶¶´´¶¶¶¶¶´´´´¶¶¶´´´´´¶¶¶´´´´´´´´´´" << endl;
                cout << "´´´´´´´¶´´¶¶¶´´´´¶¶¶¶´´´´¶¶¶¶´´´¶¶¶¶´´´´¶¶¶¶´´´¶¶¶¶´´¶´´´´´´´" << endl;
                cout << "´´´´´´´¶¶´¶¶¶¶¶´´¶¶¶¶´´´¶¶¶¶¶´´´¶¶¶¶¶´´´¶¶¶¶´´¶¶¶¶¶´¶¶´´´´´´´" << endl;
                cout << "´´´´´´´¶¶´¶¶¶¶¶´´¶¶¶¶¶¶¶¶¶¶¶´´´´´¶¶¶¶¶¶¶¶¶¶¶´´¶¶¶¶¶´¶¶´´´´´´´" << endl;
                cout << "´´´´´´´¶¶´¶¶¶¶¶´´¶¶¶¶¶¶¶¶¶¶¶´´´´´¶¶¶¶¶¶¶¶¶¶¶´´¶¶¶¶¶´¶¶´´´´´´´" << endl;
                cout << "´´´´´´¶¶¶´´¶¶¶¶´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´¶¶¶¶´´¶¶¶´´´´´´" << endl;
                cout << "´´´´´¶¶¶¶´´¶¶¶¶´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´¶¶¶¶´´¶¶¶¶´´´´´" << endl;
                cout << "´´´´¶¶¶¶´´´¶¶¶¶¶´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´¶¶¶¶¶´´´¶¶¶¶´´´´" << endl;
                cout << "´´´¶¶¶¶´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´¶¶¶¶´´´´" << endl;
                cout << "´´´¶¶¶¶¶´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´¶¶¶¶´´´´" << endl;
                cout << "´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´" << endl;
                cout << "´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´" << endl;
                cout << "´´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´´" << endl;
                cout << "´´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´´" << endl;
                cout << "´´´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´´´" << endl;
                cout << "´´´´´¶¶¶¶¶´´´´´´´´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´´´´´´´´¶¶¶¶¶´´´´´" << endl;
                cout << "´´´´´¶¶¶¶¶¶´´´´´´´´´´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´´´´´´´´´´¶¶¶¶¶¶´´´´´" << endl;
                cout << "´´´´´´¶¶¶¶¶¶¶´´´´´´´´..´´´´´¶¶¶¶¶¶¶¶¶´´´´´..´´´´´´´´¶¶¶¶¶¶´´´" << endl;
                cout << "´´´´´´´¶¶¶¶¶¶¶¶´´´´´´´´´´´´´¶¶¶¶¶´´´´´´´´´´´´´¶¶¶¶¶¶¶¶´´´´´´´" << endl;
                cout << "´´´´´´´´¶¶¶¶¶¶¶¶¶¶´´´´´´´´´´´¶¶¶´´´´´´´´´´´¶¶¶¶¶¶¶¶¶¶´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´¶¶¶¶¶¶¶¶¶¶´´´´´¶¶¶¶¶¶¶¶¶¶´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´´¶¶¶¶¶¶¶¶´´´´´´´¶¶¶¶¶¶¶¶´´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´¶¶¶¶¶¶¶¶¶´´´´´´´¶¶¶¶¶¶¶¶¶´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´¶¶¶¶¶¶¶¶¶´¶¶¶¶¶´¶¶¶¶¶¶¶¶¶´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´¶¶¶´´¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶´´¶¶¶´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´¶¶´´¶¶¶¶´´¶¶¶¶¶´´¶¶¶¶´´¶¶´´´´´´´´´´´´´´´´´´" << endl;
                cout << "´´´´´´´´´´´´´´´´´´´´´´¶¶¶¶´´¶¶¶¶¶´´¶¶¶¶´´´´´´´´´´´´´´´´´´´´´" << endl;
               
                cout << endl;
                break;
            }
           
            else { cout << "Walka dalej trwa!" << endl; cout << endl; }
           
           
        }
    }
    else
    {
        cout << "Nie badz cykor, walcz!" << endl; //zacheta gracza do walki :P
    }
   
   
}







void kursor_xy( int x, int y ) //alternatywa dla gotoxy
{
    COORD c;
    c.X = x - 1;
    c.Y = y - 1;
    SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), c );
}

void wypisanie_pliku() //wypisuje plik linia po linii w nowej linii + zamyka plik
{
    if( plik.good() == true )
    {
        while( !plik.eof() )
        {
            getline( plik, linia );
            cout << linia << endl;
        }
        plik.close();
    }
}

int main( int argc, char ** argv )
{
    srand( time( NULL ) );
    //maksymalizacja okna
    SetConsoleDisplayMode( GetStdHandle( STD_OUTPUT_HANDLE ), CONSOLE_FULLSCREEN_MODE, NULL );
    zapetlenie_gry:
    SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_RED | FOREGROUND_INTENSITY );
    system( "cls" );
   
    switch( ekran )
    {
    case 'n': //nowa gra
        {
            plik.open( "nowy_gracz.txt", ios::trunc | ios::in );
            wypisanie_pliku();
            cout << "Podaj imie bohatera: "; cin >> nick_pom;
            cout << "\nZapisywanie postaci"; //pseudo zapisywanie, pic na wode
            Sleep( 1024 ); cout << "."; Sleep( 1024 ); cout << "."; Sleep( 1024 ); cout << ".";
            Postac * p1 = new Postac( nick_pom );
            plik.open( "panel_gracza.txt", ios::trunc | ios::out ); //zapisywanie nowych danych do pliku
            plik << endl;
            plik << "                    (M)-menu     (P)-pomoc     (X)-wyjscie" << endl;
            plik << "................................................................................" << endl;
           
            plik << "     Lvl(" << p1->lvl << ") ";
            plik << "Imie(" << p1->nazwa << ") ";
            plik << "Hp(" << p1->hp << ") ";
            plik << "Str(" << p1->sila << ") ";
            plik << "Mp(" << p1->mana << ") ";
            plik << "Ag(" << p1->zrecznosc << ") ";
            plik << "Def(" << p1->def << ") ";
            plik << "Exp(" << p1->exp << ") " << endl;
            plik << "................................................................................";
            plik.close();
            ekran = 'w';
            goto zapetlenie_gry;
            break;
        }
       
    case 'w': //wznow gre
        {
            /*wypisanie planszy*/
            for( i = 0; i < 40; i++ )
            for( j = 0; j < 70; j++ )
                 plansza[ i ][ j ] = 32; //wypelnienie komórek spacjami - ¿eby zrobiæ warunki dla postaci i wyrownac komorki
           
            for( i = 0; i < 40; i++ )
            for( j = 0; j < 70; j++ )
            {
                if( i <= 39 && j <= 8 )
                     plansza[ i ][ j ] = 29; //margines lewy
               
                if( j >= 10 && j <= 48 &&( i == 0 || i == 39 ) || i == 39 && j >= 53 && j <= 68 || j == 9 && i >= 1 && i <= 38 || j == 69 && i >= 20 && i <= 38 )
                     plansza[ i ][ j ] = 5; //drzewa(obramowanie)
               
                if( j >= 23 && j <= 42 &&( j - 23 ) >= i && i >= 1 && i <= 25 )
                     plansza[ i ][ j ] = 5; //drzewa (prawy trojkat)
               
                if( j >= 10 && j <= 30 && i > j && i >= 1 && i <= 30 )
                     plansza[ i ][ j ] = 5; //drzewa (lewy trojkat)
               
                if( j >= 49 && j <= 52 &&( i >= 0 && i <= 25 || i >= 28 && i <= 39 ) )
                     plansza[ i ][ j ] = 37; //rzeka
               
                if( j >= 55 && j <= 67 && i == 0 || i == 19 &&( j >= 55 && j <= 60 || j >= 62 && j <= 67 ) || i >= 2 && i <= 17 &&( j == 53 || j == 69 ) ||( j == 53 || j == 54 || j == 68 || j == 69 ) &&( i == 0 || i == 1 || i == 18 || i == 19 ) )
                     plansza[ i ][ j ] = 22; //mury zamku
               
            }
            if( liczba_przeciwnikow != 10 ) //przeciwnicy
            {
                for( i = liczba_przeciwnikow; i <= 9; i++ )
                {
                    losowaniey: //losowanie wsporzednych y dla i-tego wroga
                    przeciwnicy_y[ i ] = rand() % 39 + 1;
                    if( przeciwnicy_y[ i ] >= 39 )
                         goto losowaniey;
                   
                    losowaniex: //losowanie wsporzednych x dla i-tego wroga
                    przeciwnicy_x[ i ] = rand() % 50 + 11;
                    if( przeciwnicy_x[ i ] >= 49 )
                         goto losowaniex;
                   
                    if( plansza[ przeciwnicy_y[ i ] ][ przeciwnicy_x[ i ] ] != 32 ) //sprawdzenie czy pole nie jest np drzewem
                         goto losowaniey;
                   
                    plansza[ przeciwnicy_y[ i ] ][ przeciwnicy_x[ i ] ] = 2;
                    liczba_przeciwnikow++;
                }
            }
            else
            for( i = 0; i <= 9; i++ )
                 plansza[ przeciwnicy_y[ i ] ][ przeciwnicy_x[ i ] ] = 2;
           
            for( i = 0; i < 40; i++ ) //wypisanie tablicy
            for( j = 0; j < 70; j++ )
            {
                znak = plansza[ i ][ j ];
                switch( znak ) //kolorowanie tablicy
                {
                case 2: //przeciwnik
                    SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_RED | BACKGROUND_GREEN );
                    break;
                case 5: //drzewo
                    SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_GREEN );
                    break;
                case 22: //mury
                    SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), NULL | FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE );
                    break;
                case 29: //lewy margines
                    SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), NULL );
                    break;
                case 32: //puste pole
                    SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_GREEN | BACKGROUND_GREEN );
                    break;
                case 37: //rzeka
                    SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_BLUE | FOREGROUND_INTENSITY | BACKGROUND_BLUE );
                    break;
                    default: //menu
                    // SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
                    break;
                }
                cout << plansza[ i ][ j ];
                if( j == 69 ) cout << endl;
               
            }
            SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_RED | FOREGROUND_INTENSITY );
            plik.open( "panel_gracza.txt", ios::in );
            cout << endl;
            wypisanie_pliku();
            /*rysowanie postaci*/
            while( true )
            {
                /*to mo¿na niekoniecznie musi tu byc*/
                SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_BLUE | BACKGROUND_GREEN );
                kursor_xy( x, y );
                cout << bohater;
                ruch = getch();
                kursor_xy( x, y );
                cout << ' ';
                switch( ruch )
                {
                case 72:
                    {
                        if( plansza[ y - 2 ][ x - 1 ] != 32 )
                        {
                            if( plansza[ y - 2 ][ x - 1 ] == 2 )
                            {
                                ekran = 'i';
                                goto zapetlenie_gry;
                            }
                            else
                                 break;
                           
                        }
                        else
                        {
                            y--;
                            kursor_xy( x, y );
                            cout << bohater;
                            break;
                        }
                    }
                case 80:
                    {
                        if( plansza[ y ][ x - 1 ] != 32 )
                        {
                            if( plansza[ y ][ x - 1 ] == 2 )
                            {
                                ekran = 'i';
                                goto zapetlenie_gry;
                            }
                            else
                                 break;
                           
                        }
                        else
                        {
                            y++;
                            kursor_xy( x, y );
                            cout << bohater;
                            break;
                        }
                    }
                case 75:
                    {
                        if( plansza[ y - 1 ][ x - 2 ] != 32 )
                        {
                            if( plansza[ y - 1 ][ x - 2 ] == 2 )
                            {
                                ekran = 'i';
                                goto zapetlenie_gry;
                            }
                            else
                                 break;
                           
                        }
                        else
                        {
                            x--;
                            kursor_xy( x, y );
                            cout << bohater;
                            break;
                        }
                    }
                case 77:
                    {
                        if( plansza[ y - 1 ][ x ] != 32 )
                        {
                            if( plansza[ y - 1 ][ x ] == 2 )
                            {
                                ekran = 'i';
                                goto zapetlenie_gry;
                            }
                            else
                                 break;
                           
                        }
                        else
                        {
                            x++;
                            kursor_xy( x, y );
                            cout << bohater;
                            break;
                        }
                    }
                }
                if( ruch == 'x' || ruch == 'X' )
                {
                    goto koniec_gry;
                }
                if( ruch == 'm' || ruch == 'm' )
                {
                    ekran = 'm';
                    goto zapetlenie_gry;
                }
            }
            break;
        }
    case 'm':
        {
            plik.open( "menu.txt", ios::in );
            wypisanie_pliku();
            y_pom = 17;
            kursor_xy( x_pom, y_pom );
            cout << " ";
            do
            {
                wybor = getch();
                switch( wybor )
                {
                case 72:
                    {
                        if( y_pom == 17 )
                             y_pom = 21;
                        else
                             y_pom--;
                       
                        break;
                    }
                case 80:
                    {
                        if( y_pom == 21 )
                             y_pom = 17;
                        else
                             y_pom++;
                       
                        break;
                    }
                case 13: //wybor opcji
                    {
                        if( y_pom == 17 ) //nowa gra
                        {
                            system( "cls" );
                            ekran = 'n';
                            goto zapetlenie_gry;
                        }
                        if( y_pom == 18 ) //nowa gra
                        {
                            system( "cls" );
                            ekran = 'w';
                            goto zapetlenie_gry;
                        }
                        if( y_pom == 19 ) //pomoc
                        {
                            system( "cls" );
                            plik.open( "pomoc.txt", ios::in ); //wczytanie pomocy z pliku
                            wypisanie_pliku();
                            cout << "Teraz nastapi powrot do menu. ";
                            system( "PAUSE" );
                            goto zapetlenie_gry;
                        }
                        if( y_pom == 20 ) //resetuj gre
                        {
                            plik.open( "panel_gracza.txt", ios::trunc | ios::out );
                            plik.close();
                            nickp = "";
                           
                        }
                        if( y_pom == 21 ) //wyjscie
                        {
                            koniec_gry:
                            SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_RED | FOREGROUND_INTENSITY );
                            system( "cls" );
                            exit( NULL );
                        }
                        break;
                    }
                    default:
                    {
                        break;
                    }
                }
               
                kursor_xy( x_pom, y_pom );
                cout << " ";
            }
            while( wybor != 13 );
           
            break;
        }
    case 'i':
        {
           
            system( "CLS" );
            Potwor * d = new Potwor();
            potwor_staty( * d );
           
            walka( * d ); //przed tym wstawiæ t¹ funkcjê z czytywaniem
           
           
           
           
            system( "PAUSE" );
            ekran = 'w';
            goto zapetlenie_gry;
        }
       
       
       
       
    }
   
    goto zapetlenie_gry;
    return 0;
}
P-133570
DejaVu
» 2015-06-14 18:46:39
Ręczne ustawianie progu lvl-a jest słabym pomysłem. Lepiej poczytaj jakieś artykuły na ten temat. Większość z nich zaleci Ci stosowanie równań określających wzrost poziomu umiejętności. No chyba, że z góry masz założoną maksymalną ilość poziomów bohatera. Myślę, że ciekawym wzorem na zdobycie lepszego levela może być:
C/C++
#include <cstdio>

int obliczLevel( int _iZabitychPrzeciwnikow )
{
    int iLevelUp = 3;
    int iLevelBohatera = 1;
    while( _iZabitychPrzeciwnikow - iLevelUp >= 0 )
    {
        _iZabitychPrzeciwnikow -= iLevelUp;
        ++iLevelBohatera;
        iLevelUp += 2; // Ile potworkow wiecej trzeba zabic na kolejny level.
    } //while
   
    return iLevelBohatera;
}

int main()
{
    for( int i = 0; i <= 1000; i += 50 )
         printf( "Zabitych przeciwnikow = %d; Level = %d\n", i, obliczLevel( i ) );
   
    return 0;
}

/edit:
Poprawiłem implementację. Wyniki:
Zabitych przeciwnikow = 0; Level = 1
Zabitych przeciwnikow = 50; Level = 7
Zabitych przeciwnikow = 100; Level = 10
Zabitych przeciwnikow = 150; Level = 12
Zabitych przeciwnikow = 200; Level = 14
Zabitych przeciwnikow = 250; Level = 15
Zabitych przeciwnikow = 300; Level = 17
Zabitych przeciwnikow = 350; Level = 18
Zabitych przeciwnikow = 400; Level = 20
Zabitych przeciwnikow = 450; Level = 21
Zabitych przeciwnikow = 500; Level = 22
Zabitych przeciwnikow = 550; Level = 23
Zabitych przeciwnikow = 600; Level = 24
Zabitych przeciwnikow = 650; Level = 25
Zabitych przeciwnikow = 700; Level = 26
Zabitych przeciwnikow = 750; Level = 27
Zabitych przeciwnikow = 800; Level = 28
Zabitych przeciwnikow = 850; Level = 29
Zabitych przeciwnikow = 900; Level = 30
Zabitych przeciwnikow = 950; Level = 30
Zabitych przeciwnikow = 1000; Level = 31
P-133571
DejaVu
» 2015-06-14 19:15:43
Dodam jeszcze, że bohaterów można liczyć za kilka zabić, albo mocniejszych przeciwników liczyć za kilka zabić (dzięki czemu szybciej lvl można zdobywać na mocniejszych jednostkach). Generalnie rzecz biorąc to jest bardzo prosty przykład liczenia lvl-a, a dodatkowo zamiast zabić możesz zmodyfikować wzór tak, aby przyjmował punkty XP zdobyte za zabicie przeciwnika, a nie ilość zabitych przeciwników.

/edit:
Kod przerobiony na XP i podobny do Twojego 'levelowania' w którym swoją drogą masz błędy:
C/C++
#include <cstdio>

int obliczLevelBohatera( int _iDoswiadczenie )
{
    int iLevelUp = 500;
    int iLevelBohatera = 1;
    while( _iDoswiadczenie - iLevelUp >= 0 )
    {
        _iDoswiadczenie -= iLevelUp;
        ++iLevelBohatera;
        iLevelUp += 2500; // Ile doświadczenia trzeba więcej zdobyć w stosunku do poprzedniego poziomu
    } //while
   
    return iLevelBohatera;
}


int doswiadczenie( int exp )
{
    int lvl = 1;
    if( exp < 600 )
         lvl = 1;
    else if(( exp >= 600 ) &&( exp < 1800 ) )
         lvl = 2;
    else if(( exp >= 1800 ) &&( exp < 3000 ) )
         lvl = 3;
    else if(( exp >= 3000 ) &&( exp < 4800 ) )
         lvl = 4;
    else if(( exp >= 4800 ) &&( exp < 9200 ) )
         lvl = 5;
    else if(( exp >= 9200 ) &&( exp < 18400 ) )
         lvl = 6;
    else if(( exp >= 18400 ) &&( exp < 36800 ) )
         lvl = 7;
    else if(( exp >= 75000 ) &&( exp < 100000 ) )
         lvl = 8;
    else if( exp >= 100000 )
         lvl = 9;
   
    return lvl;
}

int main()
{
    for( int i = 0; i <= 100000; i += 5000 )
         printf( "Punkty doswiadczenia = %d; Level = %d; TwojLvl = %d\n", i, obliczLevelBohatera( i ), doswiadczenie( i ) );
   
    return 0;
}

Punkty doswiadczenia = 0; Level = 1; TwojLvl = 1
Punkty doswiadczenia = 5000; Level = 3; TwojLvl = 5
Punkty doswiadczenia = 10000; Level = 4; TwojLvl = 6
Punkty doswiadczenia = 15000; Level = 4; TwojLvl = 6
Punkty doswiadczenia = 20000; Level = 5; TwojLvl = 7
Punkty doswiadczenia = 25000; Level = 5; TwojLvl = 7
Punkty doswiadczenia = 30000; Level = 6; TwojLvl = 7
Punkty doswiadczenia = 35000; Level = 6; TwojLvl = 7
Punkty doswiadczenia = 40000; Level = 6; TwojLvl = 1
Punkty doswiadczenia = 45000; Level = 7; TwojLvl = 1
Punkty doswiadczenia = 50000; Level = 7; TwojLvl = 1
Punkty doswiadczenia = 55000; Level = 7; TwojLvl = 1
Punkty doswiadczenia = 60000; Level = 8; TwojLvl = 1
Punkty doswiadczenia = 65000; Level = 8; TwojLvl = 1
Punkty doswiadczenia = 70000; Level = 8; TwojLvl = 1
Punkty doswiadczenia = 75000; Level = 9; TwojLvl = 8
Punkty doswiadczenia = 80000; Level = 9; TwojLvl = 8
Punkty doswiadczenia = 85000; Level = 9; TwojLvl = 8
Punkty doswiadczenia = 90000; Level = 9; TwojLvl = 8
Punkty doswiadczenia = 95000; Level = 10; TwojLvl = 8
Punkty doswiadczenia = 100000; Level = 10; TwojLvl = 9
P-133574
« 1 »
  Strona 1 z 1