简单的三国杀

宇智波 鼬 2019-05-12 11:49:29
麻烦大佬帮帮忙,需要一个简单的三国杀,只需要实现 杀 闪桃的效果就行
...全文
266 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
neu_ZZM 2019-05-16
  • 打赏
  • 举报
回复
不谢,老哥把这个帖子结一下呗,让我尝尝获得积分的感觉
宇智波 鼬 2019-05-15
  • 打赏
  • 举报
回复
引用 4 楼 neu_ZZM的回复:
这是接上面的,他们都在Form类里,顺便一提这个代码是在winform上运行的
类名是这样的

public partial class Form1 : Form
{}


private void enemyturn()//敌人的回合,抽牌!(不是)
{
loseblood = 1;
int num = 0;
enemy.draw(2);//敌人摸牌
display(enemycard, "draw card");
display(enemycardnum, (enemy.numdodge + enemy.numkill + enemy.numpeach).ToString());
Thread.Sleep(1000);
while (enemy.numkill > 0)//只要敌人有杀,就出杀
{
turnplay = turnstate.enemy;
enemy.numkill--;
display(enemycardnum, (enemy.numdodge + enemy.numkill + enemy.numpeach).ToString());
display(enemycard, "kill");
if (gamer.numdodge > 0)//如果玩家有闪,闪进入等待状态,直到玩家出闪或者跳过
{
turnplay = turnstate.dodgewait;
while (turnplay == turnstate.dodgewait) ;
}
else//如果玩家没闪,则扣血
{
gamer.numblood--;
display(gamercard, "Hp-" + (++num).ToString());
display(bloodnum, gamer.numblood.ToString());
if (gamer.numblood == 0)//如果玩家血量为0
{
if (gamer.numpeach == 0)//如果玩家没桃,则输了
{
display(state, "You lose");
buttonctrl(kill);
buttonctrl(dodge);
buttonctrl(peach);
buttonctrl(pass);
}
else//如果玩家有桃,则等待玩家出桃或跳过
{
turnplay = turnstate.peachwait;
while (turnplay == turnstate.peachwait) ;
}
}
}
Thread.Sleep(1000);
}
while (enemy.numpeach > 0 && enemy.numblood < 3)//如果敌人有桃,且损血了
{
enemy.numpeach--;//出桃回血
enemy.numblood++;
display(enemycardnum, (enemy.numdodge + enemy.numkill + enemy.numpeach).ToString());
display(enemybloodnum, enemy.numblood.ToString());
display(enemycard, "peach");
Thread.Sleep(1000);
}

enemy.drop(enemy.numkill + enemy.numdodge + enemy.numpeach - enemy.numblood);//敌人丢牌
display(enemycardnum, (enemy.numdodge + enemy.numkill + enemy.numpeach).ToString());
display(enemycard, "drop card");
Thread.Sleep(1000);
display(enemycard, "your turn");
gamer.draw(2);
display(gamercard, "draw card");//玩家摸牌
turnplay = turnstate.play;
display(killnum, gamer.numkill.ToString());
display(dodgenum, gamer.numdodge.ToString());
display(peachnum, gamer.numpeach.ToString());

t.Abort();
}

void display(Label label, string s)
{
if (label.InvokeRequired)
{
DisplayCallback d = new DisplayCallback(display);
label.Invoke(d, new object[] { label, s });
}
else
{
label.Text = s;
}
}

void buttonctrl(Button button)
{
if (button.InvokeRequired)
{
ButtonctrlCallback d = new ButtonctrlCallback(buttonctrl);
button.Invoke(d, new object[] { button });
}
else
{
button.Enabled = false;
}
}

之后是Player这个类,里面放的是玩家的相关代码

public class Player
{
public int numkill;
public int numdodge;
public int numpeach;
public int numblood;

public Player(int num)
{
numkill = 0;
numdodge = 0;
numpeach = 0;
numblood = 3;
draw(num);
}

public void draw(int num)
{
for (int i = 0; i < num; i++)
{
Random rand = new Random();
int randnum = rand.Next(9);
if (randnum <= 2)
numkill++;
else if (randnum <= 5)
numdodge++;
else
numpeach++;
Thread.Sleep(50);
}
}

public void drop(int num)
{
for (int i = 0; i < num; i++)
{
Random rand = new Random();
int randnum = rand.Next(9);
if (randnum <= 2)
numkill--;
else if (randnum <= 5)
numdodge--;
else
numpeach--;
Thread.Sleep(50);
}
}
}
老哥真的谢谢你了 真的
neu_ZZM 2019-05-14
  • 打赏
  • 举报
回复
这是接上面的,他们都在Form类里,顺便一提这个代码是在winform上运行的
类名是这样的

public partial class Form1 : Form
{}


private void enemyturn()//敌人的回合,抽牌!(不是)
{
loseblood = 1;
int num = 0;
enemy.draw(2);//敌人摸牌
display(enemycard, "draw card");
display(enemycardnum, (enemy.numdodge + enemy.numkill + enemy.numpeach).ToString());
Thread.Sleep(1000);
while (enemy.numkill > 0)//只要敌人有杀,就出杀
{
turnplay = turnstate.enemy;
enemy.numkill--;
display(enemycardnum, (enemy.numdodge + enemy.numkill + enemy.numpeach).ToString());
display(enemycard, "kill");
if (gamer.numdodge > 0)//如果玩家有闪,闪进入等待状态,直到玩家出闪或者跳过
{
turnplay = turnstate.dodgewait;
while (turnplay == turnstate.dodgewait) ;
}
else//如果玩家没闪,则扣血
{
gamer.numblood--;
display(gamercard, "Hp-" + (++num).ToString());
display(bloodnum, gamer.numblood.ToString());
if (gamer.numblood == 0)//如果玩家血量为0
{
if (gamer.numpeach == 0)//如果玩家没桃,则输了
{
display(state, "You lose");
buttonctrl(kill);
buttonctrl(dodge);
buttonctrl(peach);
buttonctrl(pass);
}
else//如果玩家有桃,则等待玩家出桃或跳过
{
turnplay = turnstate.peachwait;
while (turnplay == turnstate.peachwait) ;
}
}
}
Thread.Sleep(1000);
}
while (enemy.numpeach > 0 && enemy.numblood < 3)//如果敌人有桃,且损血了
{
enemy.numpeach--;//出桃回血
enemy.numblood++;
display(enemycardnum, (enemy.numdodge + enemy.numkill + enemy.numpeach).ToString());
display(enemybloodnum, enemy.numblood.ToString());
display(enemycard, "peach");
Thread.Sleep(1000);
}

enemy.drop(enemy.numkill + enemy.numdodge + enemy.numpeach - enemy.numblood);//敌人丢牌
display(enemycardnum, (enemy.numdodge + enemy.numkill + enemy.numpeach).ToString());
display(enemycard, "drop card");
Thread.Sleep(1000);
display(enemycard, "your turn");
gamer.draw(2);
display(gamercard, "draw card");//玩家摸牌
turnplay = turnstate.play;
display(killnum, gamer.numkill.ToString());
display(dodgenum, gamer.numdodge.ToString());
display(peachnum, gamer.numpeach.ToString());

t.Abort();
}

void display(Label label, string s)
{
if (label.InvokeRequired)
{
DisplayCallback d = new DisplayCallback(display);
label.Invoke(d, new object[] { label, s });
}
else
{
label.Text = s;
}
}

void buttonctrl(Button button)
{
if (button.InvokeRequired)
{
ButtonctrlCallback d = new ButtonctrlCallback(buttonctrl);
button.Invoke(d, new object[] { button });
}
else
{
button.Enabled = false;
}
}

之后是Player这个类,里面放的是玩家的相关代码

public class Player
{
public int numkill;
public int numdodge;
public int numpeach;
public int numblood;

public Player(int num)
{
numkill = 0;
numdodge = 0;
numpeach = 0;
numblood = 3;
draw(num);
}

public void draw(int num)
{
for (int i = 0; i < num; i++)
{
Random rand = new Random();
int randnum = rand.Next(9);
if (randnum <= 2)
numkill++;
else if (randnum <= 5)
numdodge++;
else
numpeach++;
Thread.Sleep(50);
}
}

public void drop(int num)
{
for (int i = 0; i < num; i++)
{
Random rand = new Random();
int randnum = rand.Next(9);
if (randnum <= 2)
numkill--;
else if (randnum <= 5)
numdodge--;
else
numpeach--;
Thread.Sleep(50);
}
}
}
neu_ZZM 2019-05-14
  • 打赏
  • 举报
回复
简单实现了一下三国杀的基本功能,1V1,有杀闪桃,可以正常摸牌出牌丢牌,电脑的出牌原则是先出杀,然后出桃,丢牌时是随机丢的,代码太长了这是其中一部分

Player enemy;//敌人
Player gamer;//玩家
Thread t;
int loseblood;
enum turnstate//当前回合的状态
{
play,
enemy,
dodgewait,
peachwait,
drop,
death
}
turnstate turnplay;

delegate void DisplayCallback(Label label, string s);
delegate void ButtonctrlCallback(Button button);

public Form1()
{
InitializeComponent();
t = new Thread(enemyturn);
reset();
}

void reset()
{
enemy = new Player(4);//抽牌
gamer = new Player(6);
bloodnum.Text = gamer.numblood.ToString();//文字初始化
killnum.Text = gamer.numkill.ToString();
dodgenum.Text = gamer.numdodge.ToString();
peachnum.Text = gamer.numpeach.ToString();
enemycardnum.Text = (enemy.numdodge + enemy.numkill + enemy.numpeach).ToString(); ;
enemybloodnum.Text = enemy.numblood.ToString();
state.Text = "";
enemycard.Text = "";
gamercard.Text = "";
kill.Enabled = true;//按键使能
dodge.Enabled = true;
peach.Enabled = true;
pass.Enabled = true;
turnplay = turnstate.play;
loseblood = 1;
t.Abort();//线程停止
}

private void kill_Click(object sender, EventArgs e)
{
if (turnplay == turnstate.play)//如果处在出牌状态
{
if (gamer.numkill > 0)//如果杀数大于0,则出杀
{
gamer.numkill--;
gamercard.Text = "kill";
killnum.Text = gamer.numkill.ToString();
}
else//否则就当无事发生过
{
gamercard.Text = "";
return;
}

if (enemy.numdodge == 0)//如果敌人没闪就扣血
{
enemy.numblood--;
enemybloodnum.Text = enemy.numblood.ToString();
enemycard.Text = "Hp-" + (loseblood++).ToString();
if (enemy.numblood == 0 && enemy.numpeach == 0)//如果敌人没血也没桃
{
state.Text = "You Win";//输出你赢了,然后将下面4个按键使能关闭
kill.Enabled = false;
dodge.Enabled = false;
peach.Enabled = false;
pass.Enabled = false;
}
else if (enemy.numblood == 0 && enemy.numpeach != 0)//如果敌人没血但是有桃
{
enemycard.Text = "peach";//敌人出桃,回血,牌数量-1
enemy.numpeach--;
enemy.numblood++;
enemybloodnum.Text = enemy.numblood.ToString();
enemycardnum.Text = (enemy.numdodge + enemy.numkill + enemy.numpeach).ToString(); ;
}
}
else//如果敌人有闪
{
enemy.numdodge--;//出闪
enemycardnum.Text = (enemy.numdodge + enemy.numkill + enemy.numpeach).ToString();
enemycard.Text = "dodge";
}
}
else if(turnplay==turnstate.drop)
{
if(gamer.numkill>0)
{
gamer.numkill--;
killnum.Text = gamer.numkill.ToString();
if (gamer.numkill + gamer.numdodge + gamer.numpeach == gamer.numblood)
{
turnplay = turnstate.enemy;
gamercard.Text = "";
enemycard.Text = "";
t = new Thread(enemyturn);
t.Start();
}
}
}
}

private void dodge_Click(object sender, EventArgs e)
{
if (turnplay == turnstate.dodgewait && gamer.numdodge > 0)//如果闪的状态处于等待,并且玩家有闪
{
gamer.numdodge--;//出闪,之后将状态设置为敌人
gamercard.Text = "dodge";
dodgenum.Text = gamer.numdodge.ToString();
turnplay = turnstate.enemy;
}
else if(turnplay==turnstate.drop && gamer.numdodge > 0)
{
gamer.numdodge--;
dodgenum.Text = gamer.numdodge.ToString();
if (gamer.numkill + gamer.numdodge + gamer.numpeach == gamer.numblood)
{
turnplay = turnstate.enemy;
gamercard.Text = "";
enemycard.Text = "";
t = new Thread(enemyturn);
t.Start();
}
}
}

private void peach_Click(object sender, EventArgs e)
{
if (turnplay == turnstate.peachwait)//如果桃的状态为等待
{
gamer.numpeach--;//出桃回血,之后将桃的状态设为敌人
peachnum.Text = gamer.numpeach.ToString();
gamer.numblood++;
bloodnum.Text = gamer.numblood.ToString();
turnplay = turnstate.enemy;
}
else if (turnplay == turnstate.play)//如果桃的状态处于玩家
{
if (gamer.numpeach > 0 && gamer.numblood < 3)//并且手里有桃且玩家血量小于3
{
gamer.numpeach--;//出桃回血
peachnum.Text = gamer.numpeach.ToString();
gamer.numblood++;
bloodnum.Text = gamer.numblood.ToString();
gamercard.Text = "peach";
}
}
else if(turnplay==turnstate.drop&&gamer.numpeach>0)
{
gamer.numpeach--;
peachnum.Text = gamer.numpeach.ToString();
if (gamer.numkill + gamer.numdodge + gamer.numpeach == gamer.numblood)
{
turnplay = turnstate.enemy;
gamercard.Text = "";
enemycard.Text = "";
t = new Thread(enemyturn);
t.Start();
}
}
}

private void pass_Click(object sender, EventArgs e)
{
if (turnplay == turnstate.death)//如果玩家处于濒死状态,点击这个键视为认输
{
state.Text = "You lose";
kill.Enabled = false;
dodge.Enabled = false;
peach.Enabled = false;
pass.Enabled = false;
return;
}
if (turnplay == turnstate.dodgewait)//如果闪处于等待状态,点这个键视为不出闪扣血
{
gamer.numblood--;
bloodnum.Text = gamer.numblood.ToString();
turnplay = turnstate.enemy;
return;
}
if(turnplay==turnstate.play)
{
turnplay = turnstate.drop;
gamercard.Text = "drop card";
if (gamer.numkill + gamer.numdodge + gamer.numpeach <= gamer.numblood)
{
turnplay = turnstate.enemy;
gamercard.Text = "";
enemycard.Text = "";
t = new Thread(enemyturn);
t.Start();
}
}
}

private void button_reset_Click(object sender, EventArgs e)
{
reset();
}
stherix 2019-05-13
  • 打赏
  • 举报
回复
和实现简单的淘宝差不多
Bridge_go 2019-05-13
  • 打赏
  • 举报
回复
你这不简单啊

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧