实验背景:

人:Joe、Bob和AI希望参见赛狗赌博。最初,Joe有50元,Bob有75元,AI有45元。每次比赛前,他们都会各自决定是否下注以及所押的赌金。直到比赛前,他们都可以改变赌金,但是一旦比赛开始,赌金就再不能更改了。

赌场:赌场会跟踪每个人持有的现金,以及每个人下注的对象。每次下注至少5元。一场比赛中,赌场对每个人只取一次赌金;也就是说每个人不得重复下注。赌场会检查下注的人确实有足够的现金支付他的赌金,所以如果没有钱来作赌资这个人就不能下注。

下注:每次下注都会“翻倍或全陪”,要求最低5元,而且每个人对一只狗最多下注15元。

比赛:有4只狗在直道上比赛。比赛胜者是第一只穿过终点线的狗。

书中给出的作为参考的类图:

参考别人的博客写的代码

Greyhound类

class Greyhound
{
public int Index; //狗的号码
public int StartingPosition=0;//图片起始坐标
public int RacetrackLength = 600; //路程
public PictureBox MyPictureBox = null; //图片控件
public int Location = 0;//已完成路程
public Random Randomizer;//
//构造函数
public Greyhound(PictureBox picturebox)
{
this.MyPictureBox = picturebox;
this.Index = index;
} public bool Run()
{ int speed=Randomizer.Next(1, 20);
Point p = MyPictureBox.Location;
p.X += speed;
System.Threading.Thread.Sleep(100);
MyPictureBox.Location = p;
if (p.X >= RacetrackLength)
return true;
else return false;
}
public void TakeStartingPosition()
{
this.MyPictureBox.Location = new Point(this.StartingPosition, MyPictureBox.Location.Y);
this.Location = 0;
}
}

对Grayhound初始化(学着点)

        void InitGrey()
{
grey = new Greyhound[]
{
new Greyhound(pictureBox2){Index=1,Randomizer=mainRand},
new Greyhound(pictureBox3){Index=2,Randomizer=mainRand},
new Greyhound(pictureBox4){Index=3,Randomizer=mainRand},
new Greyhound(pictureBox5){Index=4,Randomizer=mainRand},
};
}

Guy类

    public class Guy
{
public string Name;//姓名
public Bet Mybet=new Bet ();//赌注信息
public int Cash;//剩余现金 public RadioButton MyRadioButton;
public Label MyLabel; /// <summary>
/// 下注更新显示信息
/// </summary>
public void UpdateRadio()
{
MyRadioButton.Text = string.Format("{0} has {1} bucks",this.Name,this.Cash.ToString());
} /// <summary>
/// 重置赌注为0
/// </summary>
public void ClearBet()
{
MyLabel.Text=string.Format("{0} has't placed a bet",this.Name);
Mybet.Amout = 0;
} /// <summary>
/// 下注
/// </summary>
public bool PlaceBet(int Amout, int Dog)
{
if (Amout > this.Cash)
return false;
this.Mybet.Amout = Amout;
this.Mybet.Dog = Dog;
this.Mybet.Bettor = this;
MyLabel.Text= Mybet.GetDescription();
return true;
} /// <summary>
/// 清算结果
/// </summary>
public void Collect(int Winner)
{
this.Cash += this.Mybet.PayOut(Winner);
UpdateRadio();
ClearBet();
}
}

Head First C#(赛狗日)的更多相关文章

  1. 赛狗日源码分享 《Head First C#》第三版

    目录 前言 效果展示 步骤 熟读任务说明 搭界面 开始代码 From.cs Greyhound.cs Guy.cs Bet.cs 写在后面的话 本次遇见的一些问题 关于优化 可以设定狗的特性 去掉Be ...

  2. 天气预报API开发

    天气预报API开发 一.        寻觅篇 最近想要跟着视频练习一下利用API开发一个天气预报系统,就在网上找了一下可以用的API,结果好多都已经失效了... 1.       百度车联网天气预报 ...

  3. Alpha版本十天冲刺--Day4

    站立式会议 会议总结 队员 今天完成 遇到的问题 明天要做 感想 鲍亮 解决线程信息传递问题(使用函数回调),Android登录验证接口完善 无 json解析,忘记密码界面验证码获取接口,忘记密码请求 ...

  4. 关于webstorm(phpstorm)设置了编码格式之后还是乱码的问题

    今天在使用phpstorm的时候,页面开始是设置utf-8的,一切正常.但是,当我从一个gbk页面复制了一段代码到phpstorm里面的时候,页面预览的时候,居然打不开了,显示是乱码.接着我就把复制的 ...

  5. selenium提供的截图功能

    get_screenshot_as_file()提供一个截屏功能.在自动化执行过程中,执行失败后只能看到代码的运行错误,而不能直接看到ui上的错误,利用截屏保存下来很容易的进行问题的判断 先来执行一个 ...

  6. QQ的成功,远没有你想象的那么顺利和轻松

    本文来自公众号“傅老师”(ID:fustory)的原创分享,感谢作者. 1.引言 如果QQ是一个人,看似风光,其实从出生到成长,过程饱经错荡,堪算坎坷.它的人生历程确实也够励志的了.   学习交流: ...

  7. 【新知识】队列&bfs【洛谷p1996约瑟夫问题&洛谷p1451求细胞数量】

    (是时候为五一培训准备真正的技术了qwq) part1  队列(FIFO) 算法简介: FIFO:First In First Out(先进先出) 队列是限定在一端进行插入,另一端进行删除的特殊线性表 ...

  8. IOS初级:AFNetworking

    狗 日的,第三方框架真j8难搞 1.为什么NS_ASSUME_NONNULL_BEGIN在6.2报错,你他么的还挑IDE,你这是什么态度? 2.还有,你他么的自动给老子转json了,有问过我么? #i ...

  9. CSDN优秀博客连接,博客之星连接。

    点击链接 获得[红杏出墙]插件,FQ上网无压力!谷歌搜索无压力! 2013年度CSDN十大博客之星 TOP 作者 专注领域 博客地址 邹晓艺 机器学习及算法 zouxy09 2 王然 潜在的集大成者 ...

随机推荐

  1. 使用xtrabakcup 备份inodb数据库

    1,获取yum源 rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1- ...

  2. Javascript - IE8下parseInt()方法的取值异常

      公司的测试小妹妹跑来对我说,下拉框第9项始终无法正确提交的时候,我还以为见鬼了.   parseInt()会把'0'开头的数字以8进制来解析,当有大于7的数字时候就按10进制来解析.   // p ...

  3. Android HttpClient框架get和post方式提交数据(非原创)

    1.fragment_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android& ...

  4. PHP学习笔记十五【面向对象二】

    <?php class Cat{ //public 访问修饰符 public $name; public $age; } //创建 $cat1=new Cat; $cat1->name=& ...

  5. contentSize、contentInset和contentOffset

    contentSize.contentInset和contentOffset 是 scrollView三个基本的属性. contentSize: The size of the content vie ...

  6. DataGridView常用功能

    最近做Winform开发,DataGridView是必不可少的控件.整理了一下用到的基本功能的设置 1.情景1:当GridView的列没有自动填充,会出现一片空白的地方,特别不美观. 设置 自动填充G ...

  7. qq去广告

    首先呢,在文件资源管理器中选择查看"隐藏的项目"或"显示隐藏的文件.文件夹和驱动器"(入口不一样,选择显示隐藏文件的方式也不一样),随后进入 C:\Users\ ...

  8. setInterval && setTimeout || 定时器

    来自w3school的解释 定时器setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式. setInterval() 方法会不停地调用函数,直到 clearInterva ...

  9. 两个string数组对应比较

    最近做的array string类型对比.这个可能比较复杂,用的是linq 是请教别人的,我在这里记录一下 jquery 方法里面的数组 function arrtxt() { var arrt= [ ...

  10. URL锚点定位

    我们都知道<a>标签中的url属性有三种值: 绝对 URL - 指向另一个站点(比如 href="http://www.example.com/index.htm") ...