Десятичная дробь не учитывается в уравнении

Я только недавно вошел в C ++ и планирую делать игры в основном. Естественно, я решил поиграть и посмотреть, что я могу сделать.

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int main ()
{
int HIT, DMG, HRT, ATK, DEF, EVS, EVS1, CRT, CRT1, CRT2, CRTMUL, CRTMUL1, BK, BKDMG;

srand( time(0));

HIT=rand()%100+1;

cout<<"Please enter thier Evasion: ";
cin >> EVS;

EVS1 = 100 - EVS;

if ( HIT < EVS1 ) {
cout<<"Hit!";
cout << '\n';
}

else if ( HIT > EVS1 ) {
cout<<"Miss!";
return 0;
}

cout<<"Please enter your Damage: ";
cin >> DMG;

cout<<"Please enter your Attack: ";
cin >> ATK;

cout<<"Please enter thier Defence: ";
cin >> DEF;

cout<<"Please enter your Crit Chance: ";
cin >> CRT;

cout<<"Please enter your Crit Multiplier: ";
cin >> CRTMUL1;CRT1=rand()%100+1;

CRT2 = 100 - CRT;

if ( CRT1 < CRT2 ) {
cout<<"You didnt crit.";
cout << '\n';
CRTMUL = 1;
}

else if ( CRT1 > CRT2 ) {
cout<<"Crit!";
cout << '\n';
CRTMUL = CRTMUL1;
}// no matter what you input here,...
cout<<"From where did you hit them? ";
cout << '\n';
cout<<"(1 for from the back, 2 for from the side, 3 for from the front).";
cout << '\n';
cin >> BK;
// ...this area...
if ( BK = 1 ) {
BKDMG = 1.6;
}

else if ( BK = 2 ) {
BKDMG = 1.3;
}

else if ( BK = 3 ) {
BKDMG = 1;
}
// ... to this area wont work, in the equation below BKDMG is allways 1
HRT =  ((((((ATK/5)/100)+1)*(DMG))-(((((ATK/5)/100)+1)*(DMG))/100)*(DEF/5))*BKDMG)*CRTMUL;

cout<<"You hit for ";
cout<<HRT;
cout<<" damage!";

return 0;
}

Как вы можете видеть в коде, независимо от того, что вы вводите для BK, кажется, что BKDMG всегда приведет к 1. Я считаю, что это из-за округления? Если нет, дайте мне знать.

Если так, как я могу решить эту проблему? Я думаю, что ответ где-то здесь, но я не знаю точно, что искать, потому что я не знаю точно, в чем проблема. Из того, что я могу понять, поплавок может мне помочь? Я не понимаю, что такое поплавок, так как это первое, что я написал.

0

Решение

Вы определили тип BKDMG int Это означает, что он может содержать только целые числа. Так что, да, если вы присвоите ему значение действительного числа, оно округлит его до следующего целого значения. С помощью double или же float вероятно, будет достаточно для этого примера.

Ваши условия также неверны:

if ( BK = 1 ) {
BKDMG = 1.6;
}

Поскольку «BK = 1» является присваиванием, оно всегда устанавливает значение BK равным 1. Вышеприведенный фрагмент кода должен быть:

if ( BK == 1 ) {
BKDMG = 1.6;
}
1

Другие решения

if ( BK = 1 )

Это классическая (начинающая) ошибка. Вы не сравниваете, вы назначаете.

Так должно быть

if ( BK == 1 )

Или даже лучше,

if ( 1 == BK)

Если сначала поставить константу, то ошибиться невозможно.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector