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

system walki

Ostatnio zmodyfikowano 2016-11-08 13:10
Autor Wiadomość
kirito1996
Temat założony przez niniejszego użytkownika
system walki
» 2016-11-04 17:27:31
cześć tak się zastanawiałem jak się robi system walki w jakieś gierce i postanowiłem napisać taki trochę prymitywny ;) ale do rzeczy, jestem na dobrej drodzę ? można coś takiego wykorzystać ?
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int walka( int t[], int rozmiar )
{
    srand( time( NULL ) );
    int przedzial =( rand() % 3 ) + 0;
    t[ 0 ] =( rand() % 10 ) + 0; //slabe
    t[ 1 ] =( rand() % 20 ) + 11; //srednie
    t[ 2 ] =( rand() % 30 ) + 31; //mocne
    if( przedzial == 0 )
         cout << "slabo ";
    else if( przedzial == 1 )
         cout << "srednio ";
    else if( przedzial == 2 )
         cout << "mooocno ";
   
    przedzial = t[ przedzial ];
    if( przedzial == 0 )
         cout << endl << endl << " potknales sie czy co 0.o " << endl << endl;
   
    cout << " uderzyles za: " << przedzial;
    return przedzial;
}

int main()
{
    int tablica[ 3 ];
    int suma = 0;
    do
    {
        cout << " wpisz 1 aby zatakowac. ";
        int atak;
        cin >> atak;
        if( atak == 1 )
             suma = suma + walka( tablica, 3 );
       
        cout << " przeciwnikowi zostalo :  " << 1100 - suma << " zycia" << endl;
       
    } while( suma < 1100 );
   
    return 0;
}
mile widziane inne przykłady xD oczywiście tego kodu nie brać poważnie chyba że na cos się nada ;D
P-153371
DejaVu
» 2016-11-04 17:40:17
1. po co tablica
2. po co tyle randów
3. wystarczy zrobić:
C/C++
int walka( int _iNormalnaSilaCiosu )
{
    return(( rand() % 101 ) * _iNormalnaSilaCiosu ) / 100;
}
P-153372
kirito1996
Temat założony przez niniejszego użytkownika
» 2016-11-04 17:46:44
o kurde ;D to jest całkiem inne niż na kursach haha
return(( rand() % 101 )
 do tego miejsca rozumiem ale skąd to * i na końcu / 100 ;D wklej mi tutaj kod do przeanalizowania, czy tak gwiazdeczka nie jest czasem wskaźnikiem ? xD
dzięki;D a załóżmy że chce aby obrażenia były zależne od umiejętności to ten zapis też będzie ok ? chciałem właśnie żeby ciosy były podzielone na słabe średnie i mocne wtedy bym mógł zrobić jakiś cios krytyczny ;d czy coś w tym rodzaju ;D
P-153373
kistel66
» 2016-11-04 18:06:03
To jest mnożenie, kumpel.
Wylosowaną liczbę pomnóż przez SileCiosu, a następnie wynik podziel przez 100.
P-153374
latajacaryba
» 2016-11-05 01:49:24
Pierwszy raz komukolwiek pomagam na tym forum, mam nadzieję, że jest dobrze. Mam również nadzieję, że komentarze są czytelne.
C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std; // gdyby nie ta linijka musielibysmy pisac np. std::cout zamiast cout
int odbiorcaataku( int obr, int & hp, bool kryt ); // odbiera hp przeciwnika
int atak( int obr_bronii, int sila ); // wylicza obrazenia zadane przeciwnikowi
bool czywszedl( int obr, int obr_bronii, int sila ); // funkcja sprawdza czy wszedl atak krytyczny. obr oznacza tu obrazenia zadawane przez gracza (je wezmiemy z funkcji atak)
/****************************************************/
/****************************************************/
int main()
{
    int hpprzeciwnika = 40; // nasz przeciwnik bedzie mial 40 pkt. hp (w sumie to glupota tak pisac bo hp to healt points czyli piszemy punkty punktow zycia... hmm...)
    cout << "hp przeciwnika = " << hpprzeciwnika << endl;
    int uderzenie = atak( 5, 2 ); // obr_bronii = 5, sila = 2. do zmiennej uderzenie przypisujemy wartosc zwrocona przez funkcje atak z argumentami 5 i 2
    odbiorcaataku( uderzenie, hpprzeciwnika, czywszedl( uderzenie, 5, 2 ) ); //argumentami FORMALNYMI sa 2 zmienne int i 1 zmienna bool. Pierwszym argumentem AKTUALNYM jest funkcja (funkcja typu int, czyli zwracajaca
    cout << "po wszystkim przeciwnik ma " << hpprzeciwnika << endl; // liczbe albo zmienna typu int), drugi argument to zmienna oznaczaja hp przeciwnika a trzeci to funkcja zwracajaca true albo false.
    cout << "gdybysmy w funkcji odbiorcaataku nie uzyli znaku \"&\" (ampersand) to nadal\n program wypisywalby nam wartosc 40";
}
/****************************************************/
/****************************************************/
int atak( int obr_bronii, int sila )
{
    srand( time( NULL ) );
    int zadaneobr =( rand() % 100 ) * obr_bronii * sila / 20; // liczba z przedzialu 0-100 mnozona przez obrazenia bronii (u nas 5) i sile (u nas 2). podzeililem przez 20 bo wychodzily niefajnie duze liczy
    return zadaneobr; // zwraca zmienna int, w ktorej jest wartosc zadanych obrazen
}
/****************************************************/

int odbiorcaataku( int obr, int & hp, bool kryt ) //hp jest przeslane przez referencje, by funkcja dzialala na oryginale a nie kopii argumentu (to po to, ze potem sobie to hp sprawdzimy przed i po ataku w main)
{
    hp -= obr; // tu prosto - od hp jest odejmowane obr. wlasciwy zapis to hp = hp - obr. ale tak jest dluzej :p
    if( kryt ) // to skrot od (kryt == true). analogicznie (!kryt) to (kryt == flase)
         cout << "cios krytyczny!\n";
   
    cout << "przeciwnik otrzymal " << obr << " obrazen\n";
    if( hp < 0 ) // jesli hp jest mniejsze od 0 to...
    {
        hp = 0; // jesli hp jest mniejsze od 0 to hp = 0. Bo brzydko wygladaloby "przeciwnik ma -6hp"
        cout << "gracz pokonal przeciwnika\n"; // no i wypisanie, gracz pokonal przeciwnika
    }
}
/****************************************************/
bool czywszedl( int obr, int obr_bronii, int sila )
{
    if( obr >= 75 * obr_bronii * sila / 20 ) // jesli obrazenia (ktore wczesniej wyliczylismy z funkcji atak(2,5)) sa wieksze lub rowne od 75 (losowana liczba) * obrazenia broni * sila /20
         return true; //czyli jesli wypadnie nam liczba od 75 do 100 w losowaniu w funkcji atak, to znaczy, ze jest to atak krytyczny. czyli zwracamy true (prawda)
    else
         return false; // w przeciwnym wypadku zwracamy false (falsz)
   
}
Chociaż ta funkcja sprawdzająca czy są to obrazenia krytyczne to takie pyrrusowe zwycięstwo, mogłem zrobić to łatwiej w funkcji odbiorcaataku ale dzięki temu może dowiesz się czegoś nowego :)
P-153380
kirito1996
Temat założony przez niniejszego użytkownika
» 2016-11-08 13:10:41
dzięki wielkie przeanalizuje to sobie ;) nie jednemu się to przyda xD, teraz to w całości przeczytałem naprawdę dobra robota że też ci się chciało wszystko opisywać naprawdę doceniam i szanuje ;) pozdrawiam
P-153478
« 1 »
  Strona 1 z 1