C# 在我的游戏中,玩家和怪物一起错过了比赛
在我的C#游戏TextQuest中,战斗系统正在进行中,我遇到了一个问题。 如果玩家错过了,怪物也会错过(总是同时错过)。以下是使用的代码:C# 在我的游戏中,玩家和怪物一起错过了比赛,c#,math,random,C#,Math,Random,在我的C#游戏TextQuest中,战斗系统正在进行中,我遇到了一个问题。 如果玩家错过了,怪物也会错过(总是同时错过)。以下是使用的代码: private void button1_Click(object sender, EventArgs e) { Monster_Class mc = new Monster_Class(); Account_Class ac = new Account_Class(); if (hitOrMiss(
private void button1_Click(object sender, EventArgs e)
{
Monster_Class mc = new Monster_Class();
Account_Class ac = new Account_Class();
if (hitOrMiss())
{
int hit = -1;
hit = mc.hitAmount(ac.getAtk(Properties.Settings.Default.CurrentUser), mc.getDef(monster));
mhealth -= hit;
if (hit == -1)
{
setText("You missed.");
}
else
{
setText("You hit " + hit + ".");
}
monsterHit();
update();
}
else
{
setText("You missed.");
monsterHit();
}
}
private void monsterHit()
{
Monster_Class mc = new Monster_Class();
Account_Class ac = new Account_Class();
if (hitOrMiss())
{
int hit = -1;
hit = mc.hitAmount(mc.getAtk(monster), ac.getDef(Properties.Settings.Default.CurrentUser));
phealth -= hit;
if (hit == -1)
{
addText(monster + " missed.");
}
else
{
addText(monster + " hit " + hit + ".");
}
}
else
{
addText(monster + " missed.");
}
}
private bool hitOrMiss()
{
bool hit = true;
Random rand = new Random();
if (rand.Next(101) < 15)
{
hit = false;
}
return hit;
}
public int hitAmount(int Atk, int Def)
{
int hit = -1;
Random rand = new Random();
int deturm = rand.Next(6);
try
{
hit = ((Atk + deturm * 3) / Def + 1) / 2;
if (hit == 0)
{
hit = 1;
}
}
catch { }
return hit;
}
private void按钮1\u单击(对象发送者,事件参数e)
{
怪物类mc=新怪物类();
账户\类别ac=新账户\类别();
if(hitOrMiss())
{
int hit=-1;
hit=mc.hitmount(ac.getAtk(Properties.Settings.Default.CurrentUser),mc.getDef(monster));
mhealth-=hit;
如果(命中==-1)
{
setText(“你错过了。”);
}
其他的
{
setText(“您点击“+点击+”);
}
怪物击中();
更新();
}
其他的
{
setText(“你错过了。”);
怪物击中();
}
}
私有虚怪物命中()
{
怪物类mc=新怪物类();
账户\类别ac=新账户\类别();
if(hitOrMiss())
{
int hit=-1;
hit=mc.hitmount(mc.getAtk(monster),ac.getDef(Properties.Settings.Default.CurrentUser));
菲尔特-=击中;
如果(命中==-1)
{
addText(怪物+“错过”);
}
其他的
{
addText(怪物+命中+命中+);
}
}
其他的
{
addText(怪物+“错过”);
}
}
二等兵布尔·希托米斯()
{
bool hit=true;
Random rand=新的Random();
如果(下一次随机数(101)<15)
{
命中=错误;
}
回击;
}
公共整数命中量(整数Atk、整数Def)
{
int hit=-1;
Random rand=新的Random();
int deturm=rand.Next(6);
尝试
{
命中=((Atk+deturm*3)/Def+1)/2;
如果(命中==0)
{
命中率=1;
}
}
捕获{}
回击;
}
另外,如果你对造成的损失有更好的了解,请告诉我。因为我只是把数字和符号放在一起你不想每次需要一个随机数时都创建一个新的随机对象。否则我怀疑你会得到相同的号码!定义一次全局随机对象,并在每次请求随机数时使用它。您不希望每次需要随机数时都创建一个新的随机对象。否则我怀疑你会得到相同的号码!定义一个全局随机对象一次,并在每次请求随机数时使用它。作为一个提示,我会稍微更改一下设计,例如:
bool hitOrMiss(Entity attacker, Entity defender)
{
// do your calcs
}
int doAttack(Entity attacker, Entity defender)
{
if (hitOrMiss(attacker, defender)) {
// calculate damage
return dmg;
}
else
return 0;
}
private void attachPhase(object sender, EventArgs e)
{
Player player = ...
Monster monster = ...
int playerDmg = doAttack(player, monster);
int monsterDmg = doAttack(monster, player);
if (playerDmg > 0) {
}
if (monsterDmg > 0) {
}
}
作为一个侧面提示,我会稍微改变一下设计,比如:
bool hitOrMiss(Entity attacker, Entity defender)
{
// do your calcs
}
int doAttack(Entity attacker, Entity defender)
{
if (hitOrMiss(attacker, defender)) {
// calculate damage
return dmg;
}
else
return 0;
}
private void attachPhase(object sender, EventArgs e)
{
Player player = ...
Monster monster = ...
int playerDmg = doAttack(player, monster);
int monsterDmg = doAttack(monster, player);
if (playerDmg > 0) {
}
if (monsterDmg > 0) {
}
}
他们总是同时错过。如果玩家错过了,怪物也不应该总是错过。如果玩家击中了怪物,他应该仍然能够回答与问题无关的问题,但是。。。那个
try
块坏了。唯一的例外是被零除的错误,你可以用if
语句(if(Def==0)返回-1;
)-如果你不是想在/
之前应用+1
(假设Def
是>=0)来检查。如果你这样做了,你需要在它周围加上括号。我把它放在那里是因为我正在改变数学,试图找到一些有用的东西,我计划以后再做一些改变,所以我现在就把它放在那里了,因为它们总是同时漏掉。如果玩家错过了,怪物也不应该总是错过。如果玩家击中了怪物,他应该仍然能够回答与问题无关的问题,但是。。。那个try
块坏了。唯一的例外是被零除的错误,你可以用if
语句(if(Def==0)返回-1;
)-如果你不是想在/
之前应用+1
(假设Def
是>=0)来检查。如果你这样做了,你需要在它周围加上括号。我把它放在那里是因为我正在改变数学,试图找到一些有用的东西,我计划以后再做一些改变,所以我现在就把它放在那里了。非常感谢你,我甚至没有想过尝试。非常感谢你,我甚至没有想过尝试。