分析
石头剪刀布游戏其中的对象人,电脑,判断输赢的中间裁判
人含有的属性和方法,人需要知道出拳的结果,出拳的方法(需要一个参数从前台接收出拳),电脑需要知道出拳结果,出拳方法(随机生成)
然后把两边的出拳结果(使用数字)传递给裁判,裁判进行判断输赢,由于结果有平、输、赢三种,所以我们可以把裁判判断输赢方法的返回值类型设置为枚举
玩家类:namespace 面向对象石头剪刀布游戏
{
public class person
{
//出拳结果
public string fistResult
{
get;
set;
}
/// <summary>
/// 出拳方法
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
public int Resu(string s)
{
int result = -1;
switch (s)
{
case "石头":
result=1;
break;
case "剪刀":
result=2;
break;
case "布":
result=3;
break;
}
this.fistResult = s;
return result;
}
}
}
电脑类:
public class Computer
{
public string fistResult
{
get;
set;
}
public int ShowFist()
{
Random ran= new Random();
int res= ran.Next(1, 4); //去下限无上限
switch (res)
{
case 1:
fistResult = "石头";
break;
case 2:
fistResult = "剪刀";
break;
case 3:
fistResult = "布";
break;
}
return res;
}
}
}
裁判类:
namespace 面向对象石头剪刀布游戏
{
public enum userState
{
Playwin,
Ulose,
OK
}
public class CaiPan
{
public static userState IsPlayWin(int plays,int comps)//返回值有三中状态 平,赢,输,所以尽量使枚举
{
if (plays == comps)
{
return userState.OK;
}
else if (plays - comps == -1 || plays - comps == 2)
{
return userState.Playwin;
}
else
{
return userState.Ulose;
}
}
}
}
前台调用代码:
private void btn石头_Click(object sender, EventArgs e)
{
Button btn = ( Button)sender;//判断事件源
NewMethod(btn.Text);
}
private void NewMethod(string fist)
{
person p = new person();
int pfist = p.Resu(fist);
Computer com = new Computer();
int comfist = com.ShowFist();
label5.Text = com.fistResult;
lblU.Text = p.fistResult;
userState user = CaiPan.IsPlayWin(pfist, comfist);
if (user == userState.Playwin)
{
lblResult.Text = "YouWin!";
}
else if (user == userState.Ulose)
{
lblResult.Text = "Youlose!";
}
else
{
lblResult.Text = "平手!";
}
}
最终效果: