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

funkcja zadająca obrażenia zależne od straconego hp świruje

VPS Starter Arubacloud
0 głosów
139 wizyt
pytanie zadane 3 listopada 2015 w C i C++ przez Avernis Nałogowiec (27,400 p.)

Mam takie 2 funkcje, 1 obliczająca: 

float WizardSkills::heatred(RectangleShape shape, float Maxhp, float hp)
{
    Skills s;
    float score;
    if(s.champion == 1)
    {
        if(Mouse::isButtonPressed(Mouse::Right))
        {
            if(hp <= Maxhp/2)
            {
                score = (Maxhp - hp) / 100;
            }
        }
    }
    return score;
}

oraz wykonująca: 

float Player::attack(RenderWindow &window, Player &player, Player &enemy, float maxHP, float who, float dmg, int distance, Clock clock, Time time)
{
    WizardSkills w;
    Vector2i MousePos;
    MousePos = Mouse::getPosition(window);
    Vector2f position[2];

    position[0] = Player::checkPosition(player.rect);
    position[1] = Player::checkPosition(enemy.rect);

    position[2].x = position[0].x - position[1].x;
    position[2].y = position[0].y - position[1].y;

        if(time.asSeconds() > 1)
        {
            if(Player::checkDistance(player.rect, enemy.rect, 50))
            {
                if(Mouse::isButtonPressed(Mouse::Right))
                {
                    who = who - dmg;
                    who = w.heatred(enemy.rect, maxHP, who);
                }
            }
            clock.restart();
        }
    time = clock.getElapsedTime();
    return who;
}

A wywołuję to w ten sposób: konstruktor: 

Player p(Vector2f(0, 0), Vector2f(25, 25));
Player w(Vector2f(100, 100), Vector2f(20, 20));

Oraz wywołanie: 

wolfStruct.WolfHP[0] = p.attack(window, p, w, wolfStruct.WolfMaxHP[0], wolfStruct.WolfHP[0], 0, 70, clock, time);

Funkcja zamienia wartość hp odrazu na 0 niezależnie od poziomu hp, a powinno zadawać obrażenia równe 1% straconego hp przeciwnika jeżeli spadnie poniważ 50%

1 odpowiedź

0 głosów
odpowiedź 3 listopada 2015 przez furas Maniak (53,800 p.)

Nawstawiaj w różnych miejscach wypisywanie najróżniejszych zmiennych
aby przekonać się co się dzieje w programie.

---

Przyjrzał bym się tej części kodu z `headred()`

float score;

if(s.champion == 1)
{
        // ...
}

return score;

Jaka wartość zostanie zwrócona gdy `s.champion != 1` ?
A potem ta wartość jest przypisywana do `who` i zwracana przez `p.attack()`

komentarz 3 listopada 2015 przez Avernis Nałogowiec (27,400 p.)
champion to zmienna reprezentująca klasę postaci jaką się wybrało, i jest zapisana w pliku od początko zarejestrowania się, i jeżeli nie jest równo 1 to napewno 2 lub 3 czyli innej klasy
komentarz 3 listopada 2015 przez furas Maniak (53,800 p.)
ale jeśli akurat będzie `s.champion != 1` to wtedy `score` będzie miało wartość `zero` co ostatecznie zostaje przekazane do `wolfStruct.WolfHP[0]` - czy to nie o taki błąd chodzi ?
komentarz 3 listopada 2015 przez Avernis Nałogowiec (27,400 p.)
Nie, sprawdzałem, jego wartość to 1 innej nie może być bo outomatycznie przy uruchamianiu się programu wartość jest wczytywana z pliku, ale nie jest nigdzie dalej przekazywana, a ja obecnie dla testów mam ciągle ustawioną na 1.
komentarz 3 listopada 2015 przez furas Maniak (53,800 p.)
Tam są jeszcze dwa warunki do spełnienia aby przypisało wartość do `score`. Jeśli jeden z nich nie zostanie spełniony to `score` przyjmie wartość `zero` bo tam nie ma żadnego `else`, które by to zmieniało.

Zawsze można przed `return score` dodać wypisywanie `score` aby przekonać się jaka rzeczywiście wartość jest zwraca.

---

Jakby co to zostaje wypisywać inne zmienne lub iść z rozumowaniem od końca:

- `wolfStruct.WolfHP[0]` przyjmuje wartość `zero` gdy `p.attack()` zwraca `zero`

- `p.attack()` zwraca `zero` gdy `return who` zwraca `zero`

- `who` jest `zero` gdy ... itd.

i wtedn sposób można wypisywać zmienne związane z kolejnymi krokami aby przekonać się czy pojawia się tam `zero`
komentarz 4 listopada 2015 przez Avernis Nałogowiec (27,400 p.)

Już wiem co było źle. Nie dałem sprawdzania funkcji czyli.

int champion = checkChampion();

 

Podobne pytania

0 głosów
1 odpowiedź 143 wizyt
pytanie zadane 14 stycznia 2016 w C i C++ przez Avernis Nałogowiec (27,400 p.)
0 głosów
2 odpowiedzi 156 wizyt
pytanie zadane 1 listopada 2015 w C i C++ przez Avernis Nałogowiec (27,400 p.)
0 głosów
1 odpowiedź 494 wizyt
pytanie zadane 23 października 2015 w C i C++ przez Avernis Nałogowiec (27,400 p.)

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...