Head First C#中的一个程序,求大神帮我看看错在哪里了!!
这是head first C#里的一道实验题,就是一个赛狗的程序,一共3个类,Guy是下注的人,Greyhound是狗,Bet是下的注。其他的请各位大神自己看下,问题是出在每次用guys.collect()方法都会提示我时候NullReferenceException异常,不知道错误在哪里?求解!!
程序代码:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace A_Day_at_the_Race
{
class Guy
{
public string Name;//The guy's name
public Bet MyBet;//An instance of Bet() that has his bet
public int Cash;//How much cash he has
//The last two fields are the guy's GUI controls on the form
public RadioButton MyRadioButton;//My RadioButton
public Label MyLabel;//My Label
public void UpdateLabels()
{
MyLabel.Text =this .Name + MyBet.GetDescription();//Set my label to my bet's description.and the label on my
MyRadioButton.Text = Name + " has " + this.Cash + " bucks";//my radio button to show my cash("Joe has 43 bucks")
}
public void ClearBet()
{
//Reset my bet so it's zero
MyLabel.Text = Name + " hasn't place a bet";
}
public bool PlaceBet(int Amount, int Dog)
{
//Place a new bet and store it in my bet field
//Return true if the guy had enough money to bet
MyBet = new Bet() { Amount = Amount, Dog = Dog, Bettor = this };
if (this.Cash >= Amount)
return true;
else
return false;
}
public void Collect(int Winner)
{
//Ask my bet to pay out
this.Cash += MyBet.PayOut(Winner);
UpdateLabels();
}
}
}
程序代码:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace A_Day_at_the_Race
{
class Bet
{
public int Amount;//The amount of cash that was bet
public int Dog;//The number of the dog the bet is on
public Guy Bettor;//The guy who placed the bet
public string GetDescription()
{
//Return a string that says who placed the bet,how much
//cash was bet,and which dog he bet on ("Joe bets 8 on
//dog #4).If the amount is zero,no bet was placed
//("Joe hasn't placed a bet").
if (Amount == 0)
return " hasn't placed a bet";
else
return " bets " + Amount + " on dog #" + Dog;
}
public int PayOut(int Winner)
{
//The parameter is the winner of the race.If the dog won,
//return the amount bet.Otherwise,return the negative of
//the amount bet.
if (Dog == Winner)
return Amount;
else
return -Amount;
}
}
}
程序代码:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows .Forms;
using System.Drawing;
namespace A_Day_at_the_Race
{
class Greyhound
{
public int StartingLocation;//Where my PictureBox start
public int RacetrackLength=438;//How long the racetrack is
public PictureBox MyPictureBox = null;//My PictureBox object
public int Location = 0;//My Location on the racetrack
public Random Randomizer ;//An instance of Random
public bool Run()
{
//Move forward either 1,2,3 or 4 spaces at the random
//Update the position of my PictureBox on the form
//Return true if I won the race
Randomizer = new Random();
Point p = MyPictureBox.Location;
p.X += Randomizer.Next(1, 5);
MyPictureBox.Location = p;
if (p.X >= RacetrackLength )
return true;
else
return false;
}
public void TakeStartingPosition()
{
Point p = MyPictureBox.Location;
p.X = 8;
MyPictureBox.Location = p;
}
}
}
程序代码:using System;
using System.Collections.Generic;
using using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace A_Day_at_the_Race
{
public partial class Form1 : Form
{
Greyhound[] dogs;
Guy[] guys;
public Form1()
{
InitializeComponent();
dogs = new Greyhound[4];
dogs[0] = new Greyhound();
dogs[1] = new Greyhound();
dogs[2] = new Greyhound();
dogs[3] = new Greyhound();
dogs[0].MyPictureBox = pictureBox1;
dogs[1].MyPictureBox = pictureBox2;
dogs[2].MyPictureBox = pictureBox3;
dogs[3].MyPictureBox = pictureBox4;
guys = new Guy[3];
guys[0] = new Guy();
guys[1] = new Guy();
guys[2] = new Guy();
guys[0].Name = "Joe";
guys[0].Cash = 50;
guys[0].MyLabel = label1;
guys[0].MyRadioButton = radioButton1;
guys[1].Name = "Bob";
guys[1].Cash = 75;
guys[1].MyLabel = label2;
guys[1].MyRadioButton = radioButton2;
guys[2].Name = "Al";
guys[2].Cash = 45;
guys[2].MyLabel = label3;
guys[2].MyRadioButton = radioButton3;
}
private void button2_Click(object sender, EventArgs e)
{
bool check = dogs[0].Run() | dogs[1].Run() | dogs[2].Run() | dogs[3].Run();
while (check == false)
{
for (int i = 0; i <= 3; i++)
{
dogs[i].Run();
System.Threading.Thread.Sleep(50);
check = dogs[0].Run() | dogs[1].Run() | dogs[2].Run() | dogs[3].Run();
if (check == true)
{
MessageBox.Show("We have a winner - dog #"+(i+1).ToString());
for (int j = 0; j < 3; j++)
{
guys[j].Collect(i);
}
break;
}
}
}
for (int k = 0; k < 4; k++)
{
dogs[k].TakeStartingPosition();
}
}
private void button1_Click(object sender, EventArgs e)
{
int x = 0;
switch (label6.Text)
{
case "Joe":
x = 0;
break;
case "Bob":
x = 1;
break ;
case "Al":
x = 2;
break ;
}
if (guys[x].PlaceBet((int)numericUpDown1.Value, (int)numericUpDown2.Value))
guys[x].UpdateLabels();
}
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{
label6.Text = "Joe";
}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{
label6.Text = "Bob";
}
private void radioButton3_CheckedChanged(object sender, EventArgs e)
{
label6.Text = "Al";
}
}
}






