Я только недавно вошел в 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. Я считаю, что это из-за округления? Если нет, дайте мне знать.
Если так, как я могу решить эту проблему? Я думаю, что ответ где-то здесь, но я не знаю точно, что искать, потому что я не знаю точно, в чем проблема. Из того, что я могу понять, поплавок может мне помочь? Я не понимаю, что такое поплавок, так как это первое, что я написал.
Вы определили тип BKDMG int
Это означает, что он может содержать только целые числа. Так что, да, если вы присвоите ему значение действительного числа, оно округлит его до следующего целого значения. С помощью double
или же float
вероятно, будет достаточно для этого примера.
Ваши условия также неверны:
if ( BK = 1 ) {
BKDMG = 1.6;
}
Поскольку «BK = 1» является присваиванием, оно всегда устанавливает значение BK равным 1. Вышеприведенный фрагмент кода должен быть:
if ( BK == 1 ) {
BKDMG = 1.6;
}
if ( BK = 1 )
Это классическая (начинающая) ошибка. Вы не сравниваете, вы назначаете.
Так должно быть
if ( BK == 1 )
Или даже лучше,
if ( 1 == BK)
Если сначала поставить константу, то ошибиться невозможно.