• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Funkacj lvl up

Object Storage Arubacloud
0 głosów
344 wizyt
pytanie zadane 13 kwietnia 2016 w C i C++ przez Weboo Nowicjusz (160 p.)
tworzę bardzo prostego i ubogiego RPG'a w C++ i potrzebuję pomocy z funkcją lvl up która nie chce mi wyjść.
Ogólnym założeniem jest że funkcja sprawdza czy nasze punkty doświadczenia spełniają wymóg jaki jest potrzebny do otrzymania poziomu, jako wzór ustawiłem że nasza postać ma startowo pierwszy poziom i ilość punktów jaką potrzebuje do osiągnięcia poziomu drugiego wyraziłem wzorem punkty_wymagane=1000*aktualny_poziom, innymi słowy funkcja ma sprawdzać czy nasza postać ma określoną ilość punktów doświadczenia i jeśli tak to wraz z poziomem otrzymujemy zwiększenie statystyk naszej postaci, natomiast jeśli nie mamy tylu punktów funkcja wyświetla nam napis "Nie osiągnięto nowego poziomu, potrzeba jeszcze" i w tym miejscu pojawia się ile punktów nam brakuje aby uzyskać kolejny poziom, w programie stosuję programowanie obiektowe.
Z góry dziękuję za pomoc.

3 odpowiedzi

+1 głos
odpowiedź 13 kwietnia 2016 przez Porcupine Nałogowiec (31,560 p.)
A z czym dokładnie masz problem? Ja bym stworzył dwie funkcje:

Pierwsza sprawdzałaby czy gracz osiągnął wymagane doświadczenie jeśli tak wywołujesz drugą funkcje jeśli nie wypisujesz ten komunikat, który podałeś. Za każdym razem kiedy gracz zdobędzie jakiekolwiek doświadczenie wywołujesz tą funkcję.

Druga po prostu aktualizuje statystyki postaci, inkrementuje poziom i zmienia wartość wymaganego doświadczenia na kolejny poziom.

Pozdrawiam,
komentarz 13 kwietnia 2016 przez Weboo Nowicjusz (160 p.)
b1.punkty_doswiadczenia=b1.punkty_doswiadczenia+2000;
if (b1.punkty_doswiadczenia>=b1.poziom*1000)

tak zrobiłem otrzymywanie doświadczenia, w przypadku gdy jest prawdziwe chcę abu odpalała się funkcja tego typu

cout<<"Lvl up"<<endl;
            cout<<"aktualne statystyki"<<endl;
            b1.poziom=b1.poziom+1;
            b1.sila=b1.sila+2;
            b1.inte=b1.inte+2;
            b1.agil=b1.agil+1;
            b1.mana=b1.mana+40;
            b1.hp=b1.hp+100;

natomiast jeśli warunek nie jest prawdziwy to ma wywołać się ta funkcja

b1.punkty_doswiadczenia_left=(b1.poziom*1000)-b1.punkty_doswiadczenia;
        cout<<"Nie zdobyles nowego poziomu"<<endl<<"Potrzebujesz jeszcze "<<b1.punkty_doswiadczenia_left<<" punktow doswiadczenia"<<endl;

taki jest miej więcej zarys zdobywania poziomów, oczywiście można to wklejać po każdej walce bez funkcji ale nie o to mi chodzi dlatego liczę na pomoc.

komentarz 13 kwietnia 2016 przez Aisekai Nałogowiec (42,190 p.)
Tylko, że z logicznego punktu widzenia, przy każdym dodaniu do zmiennej przechowujacej ilość doświadczenia, musisz sprawdzić, czy ilość doświadczenia nie pozwala na awans/lvl up.
komentarz 13 kwietnia 2016 przez Aisekai Nałogowiec (42,190 p.)
Ew w funkcji dodajacej doświadczenie, bo zakładam że doświadczenie jest prywatne, mógłbyś dodać tą funkcję która by sprawdzała czy nastąpił lvl up
0 głosów
odpowiedź 13 kwietnia 2016 przez Grzyboo Nałogowiec (28,860 p.)
Bierzesz sie za "RPG", gdy nie potafisz sprawdzić czy jedna liczba jest większa od drugiej? Proponuję zacząć od przerobienia podstaw.
komentarz 13 kwietnia 2016 przez Szahid Pasjonat (20,930 p.)
Właśnie pisząc tego RPG nauczy się podstaw i robi to poprzez to forum
komentarz 13 kwietnia 2016 przez Grzyboo Nałogowiec (28,860 p.)
No ale litości. Wystarczy przerobić kurs / przeczytać książkę i już się te podstawy ma. Uczenie się just-in-time działa, ale nie gdy masz zerową wiedzę.
komentarz 13 kwietnia 2016 przez Szahid Pasjonat (20,930 p.)
Wydaje mi się że wystarczy znać instrukcje przypisania, cin i cout i można brać się za programowanie ale to moje zdanie
komentarz 13 kwietnia 2016 przez Grzyboo Nałogowiec (28,860 p.)

Jasne, poleć początkującemu, który zna

instrukcje przypisania, cin i cout

napisanie gry 3D pokroju Minecrafta. Myślę, że to dobry pomysł, bo się dużo nauczy.

 

Wszystko trzeba małymi krokami. Rzucanie się na duży projekt bez podstawowej wiedzy nie jest wcale dobre. A przynajmniej jest nieefektywne, bo zamiast przerobić wszystko po kolei to nasuwają się tylko kolejne pytania, na które nie potrafimy znaleźć odpowiedzi.

0 głosów
odpowiedź 13 kwietnia 2016 przez Szahid Pasjonat (20,930 p.)
edycja 13 kwietnia 2016 przez Szahid
if (b1.punkty_doswiadczenia>=b1.poziom*1000) { Tutaj wywołań funkcje która ma podnieść staty } else { tu funkcja co mówi że nie ma wystarczająco pd} O to Ci chodziło? Zaraz wrócę do domu to Ci to ładnie rozpisze
komentarz 13 kwietnia 2016 przez Weboo Nowicjusz (160 p.)
Być może jestem typowym bobem programowania ale nie potrafię teraz rozwiązać problemu z tym błędem,

expected primary-expresion before'&' token <--- pojawia się nadal w tych samych miejscach co poprzednio i nie mam pojęcia jak to naprawić.
komentarz 13 kwietnia 2016 przez Szahid Pasjonat (20,930 p.)
Na pw napisze Ci maila. Wyślij mi tam proszę plik z kodem
komentarz 13 kwietnia 2016 przez Szahid Pasjonat (20,930 p.)

To ja jestem bobem :) 

if (b1.punkty_doswiadczenia>=b1.poziom*1000)
{
  
   b1.lvl_up();
}
  
else
  
{
  
  b1.non_lvl_up( ); 
}

Przepraszam Cie ale robie kika rzeczy na raz  a sam pewnie wiesz jak to wtedy jest. Dlatego się tak motam 

komentarz 13 kwietnia 2016 przez Szahid Pasjonat (20,930 p.)
funkcja jest wewnątrz klasy bohater więc bez parametrów się wywołuje
komentarz 13 kwietnia 2016 przez Weboo Nowicjusz (160 p.)
#include <cstdio>
#include <cstdarg>
#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
int Rand( const int amount,...)
{
    if( amount <= 0 ) return - 1;

    int * percent = new int[ amount ];
    int val = 0;
    va_list vl;
    va_start( vl, amount );
    for( int i = 0; i < amount; ++i ) {
        percent[ i ] = va_arg( vl, int );
        val += percent[ i ];
    }
    va_end( vl );
    if( val != 100 ) {
        delete[] percent;
        return - 1;
    }
    int r = rand() % 100 + 1;
    int tmp = 0;
    for( int i = 0; i < amount; ++i ) {
        if( r <= tmp + percent[ i ] ) {
            delete[] percent;
            return i;
        }
        tmp += percent[ i ];
    }
    delete[] percent;
    return - 1;
}

class wrog
{
    public:
 string nazwa;
 int hp;
 int sila;
 int obrazenia;
 int agil;
 int non_crit;
 int crit;
};
class bohater
{
public:
    int poziom;
    int punkty_doswiadczenia;
    int punkty_doswiadczenia_left;
    int mana;
    int hp;
    string nazwa;
    int sila;
    int inte;
    int agil;
    int obrazenia;
    int non_crit;
    int crit;

    void lvl_up(bohater& b1 )
    {


            cout<<"Lvl up"<<endl;
            cout<<"aktualne statystyki"<<endl;
            b1.poziom=b1.poziom+1;
            b1.sila=b1.sila+2;
            b1.inte=b1.inte+2;
            b1.agil=b1.agil+1;
            b1.mana=b1.mana+40;
            b1.hp=b1.hp+100;
            cout<<"HP: "<<b1.hp<<endl<<"Mana: "<<b1.mana<<endl<<"sila: "<<b1.sila<<endl<<"Inteligencja: "<<b1.inte<<endl<<"Zrecznosc: "<<b1.agil<<endl;
    }
     void non_lvl_up(bohater& b1)
     {




        b1.punkty_doswiadczenia_left=(poziom*1000)-b1.punkty_doswiadczenia;
        cout<<"Nie zdobyles nowego poziomu"<<endl<<"Potrzebujesz jeszcze "<<b1.punkty_doswiadczenia_left<<" punktow doswiadczenia"<<endl;

    }
};
void walka()
{
cout<<"[1] Atak podstawowy"<<endl;
cout<<"[2] Atak specialny"<<endl;
cout<<"[3] Run Bitch run!!!!"<<endl;
}

int main()
{
int liczba, obrazenia, wynik,leczenie=0, pick;
bohater b1;
cout<<"Kim jestes ?"<<endl<<"1. Wojownik"<<endl<<"2. Mag"<<endl<<"3. Lucznik"<<endl;
cin>>pick;
system("cls");
switch (pick)
{
    case 1:
b1.hp=500, b1.mana=50, b1.sila=6, b1.inte=3, b1.agil=4, b1.crit, b1.non_crit, b1.punkty_doswiadczenia=0, b1.poziom=1;
cout<<"Jestes Wojownikiem"<<endl<<"Statystyki: "<<endl<<"HP: "<<b1.hp<<endl<<"Mana: "<<b1.mana<<endl<<"sila: "<<b1.sila<<endl<<"Inteligencja: "<<b1.inte<<endl<<"Zrecznosc: "<<b1.agil<<endl;
break;
    case 2:
     b1.hp=450, b1.mana=160, b1.sila=4, b1.inte=6, b1.agil=3, b1.crit, b1.non_crit, b1.punkty_doswiadczenia=0, b1.poziom=1;
cout<<"Jestes Magiem"<<endl<<"Statystyki: "<<endl<<"HP: "<<b1.hp<<endl<<"Mana: "<<b1.mana<<endl<<"sila: "<<b1.sila<<endl<<"Inteligencja: "<<b1.inte<<endl<<"Zrecznosc: "<<b1.agil<<endl;
break;
    case 3:
        b1.hp=450, b1.mana=80, b1.sila=5, b1.inte=4, b1.agil=6, b1.crit, b1.non_crit, b1.punkty_doswiadczenia=0, b1.poziom=1;
cout<<"Jestes Lucznikiem"<<endl<<"Statystyki: "<<endl<<"HP: "<<b1.hp<<endl<<"Mana: "<<b1.mana<<endl<<"sila: "<<b1.sila<<endl<<"Inteligencja: "<<b1.inte<<endl<<"Zrecznosc: "<<b1.agil<<endl;
break;
}
system("pause");
system("cls");
wrog w1;
w1.hp=500;
w1.agil=2;
w1.sila=5;
w1.crit;
w1.non_crit;
cout<<"Wild bloody queen appeared"<<endl;
system("pause");
system("cls");
cout<<"Bloody Queen stats :"<<endl;
cout<<"HP: "<<w1.hp<<endl<<"Strengh: "<<w1.sila<<endl<<"agility: "<<w1.agil<<endl;
do
{
cout<<"HP Wroga "<<w1.hp<<endl;
cout<<"Twoje HP "<<b1.hp<<endl;
walka();
cin>>liczba;
system("cls");
switch (liczba)
{
case 1:
obrazenia=b1.sila*10;
        b1.crit=b1.agil*10;
    b1.non_crit=100-b1.crit;
     wynik = Rand( 2, b1.crit, b1.non_crit );
        printf( "%d\n", wynik );
if(wynik==0){obrazenia=obrazenia*2;}
w1.hp=w1.hp-obrazenia;
obrazenia=w1.sila*10;

        w1.crit=w1.agil*10;
    w1.non_crit=100-w1.crit;
     wynik = Rand( 2, w1.crit, w1.non_crit );
        printf( "%d\n", wynik );
if(wynik==0){obrazenia=obrazenia*2;}
b1.hp=b1.hp-obrazenia;
leczenie=obrazenia+leczenie;
system("cls");
break;
case 2:
if(b1.mana<=19){cout<<"nie masz many";}
else{
b1.mana=b1.mana-20;
obrazenia=b1.inte*10;
b1.crit=b1.agil*10;
b1.non_crit=100-b1.crit;
 wynik = Rand( 2, b1.crit, b1.non_crit );
printf( "%d\n", wynik );
if(wynik==0){obrazenia=obrazenia*2;}
w1.hp=w1.hp-obrazenia;
system("cls");
   }
obrazenia=w1.sila*10;
        w1.crit=w1.agil*10;
    w1.non_crit=100-w1.crit;
     wynik = Rand( 2, w1.crit, w1.non_crit );
        printf( "%d\n", wynik );
if(wynik==0){obrazenia=obrazenia*2;}
b1.hp=b1.hp-obrazenia;
leczenie=obrazenia+leczenie;
break;
case 3:
    cout<<"Uciekasz"<<endl;
    return 0;
    break;
}
}
while(w1.hp>0&&b1.hp>0);
if(w1.hp<=0){cout<<"bloody queen has been slained "<<endl;
b1.hp=b1.hp+leczenie;
cout<<"uleczyles swoje rany"<<endl;
cout<<"otrzymales 2000 exp'a"<<endl;
system("pause");
system("cls");
b1.punkty_doswiadczenia=b1.punkty_doswiadczenia+2000;
if (b1.punkty_doswiadczenia>=b1.poziom*1000)
{

   b1.lvl_up();
}

else

{

  b1.non_lvl_up();
}
}
if(b1.hp<=0){cout<<"You have been slained "<<endl;}
return 0;
}

tak wygląda cały program w dużym skrócie bo to będzie rozwinięte, w momencie wprowadzenia ostatniej poprawki pojawiło się kilka nowych, obcych mi błędów część jest w funkcji a część w main()

 

Podobne pytania

0 głosów
1 odpowiedź 155 wizyt
pytanie zadane 5 marca 2016 w C i C++ przez niezalogowany
0 głosów
0 odpowiedzi 71 wizyt
pytanie zadane 14 czerwca 2020 w JavaScript przez inazuma-code33 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 93 wizyt

92,583 zapytań

141,434 odpowiedzi

319,669 komentarzy

61,966 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...