Zadanie "Dzień na wyścigach" z książki "Head First C#" - dokończenie programu

0

Dzień dobry. Zacznę od tego, że trochę głupio mi tu pisać ale po prostu bardzo mi zależy na tym żeby nauczyć się programować. Próbuję właśnie zrobić przykład z książki Head First C#. Edycja polska - Helion - dzień na wyścigach. http://www.headfirstlabs.com/books//hfcsharp/lab01.php - tutaj jest napisane o co chodzi. Powiem szczerze, że idzie mi okropnie, tzn czuję się kompletnie zagubiony. Czy ktoś kto ma cierpliwość i chęć pomocy mógłby mnie trochę naprowadzić? Wklejam to co naskrobałem, zdaję sobie sprawę, że wygląda to dość żałośnie ale będę bardzo wdzięczny za wskazówki i pomoc. Pozdrawiam

BET.CS

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public class Bet
    {
        public int Amount; // ilość postawionych pieniędzy
        public int Dog; // numer obstawionego psa
        public Guy Bettor; // osoba która złożyła zakład

        public string GetDescription()     //metoda która ustawia tekst kto obstawił, ile pieniędzy i numer psa
        {
            string description = string.Format(Bettor.Name + "postawił" + Amount + "na psa numer" + Dog);
            return description;
        }
        public int Payout(int Winner) //jeśli pies wygrał zwróć wartość postawioną, w przeciwnym razie zabierz wartość postawioną
        {
            if (Dog == Winner)
                return Amount;
            else
                return -Amount;

        }
    }
}
 

GUY.CS

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
   public class Guy
    {
        public string Name; //imie 
        public Bet MyBet; // instancja klasy bet przechowująca informacje o zakładzie
        public int Cash; //pieniądze która posiada

        public RadioButton MyRadioButton; // pole wyboru
        public Label MyLabel; //etykieta


        public void UpdateLabels() // uaktualnij tabele
        {
            MyRadioButton.Text = String.Format(Name + " ma " + Cash + " złotych");
            MyLabel.Text = String.Format(Name + " nie postawił jeszcze");
        }

        public void ClearBet() // skopiowałem to, nie wiem dokładnie co to robi...
        {
            this.MyLabel.Text = Name + " nie obstawił jeszcze";
            this.MyRadioButton.Text = Name + " ma " + Cash + " złotych";
        }

        public bool PlaceBet(int Amount, int Dog) //ustal nowy zakład, ilosc pieniedzy, numer psa
        {
            MyBet = new Bet();
            return (this.Cash >= Amount ); // ???
        }

        public void Collect(int Winner) // ???
        {

        }
    }

}

GREYHOUND.CS

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace WindowsFormsApplication1
{
    public class Greyhound
    {
        public int StartingPosition; // pozycja startowa
        public int RaceTrackLenght; // długość wyscigu
        public PictureBox MyPictureBox = null; // obiekt picturebox
        public int Location = 0; // lokacja na torze
        public Random MyRandom; // instancja klasy random
        public bool Run() //metoda run
        {
            int move = MyRandom.Next(1, 4); // przesun do przodu o losowo 1,2,3,4
            Point p = MyPictureBox.Location;
            p.X += move;
            MyPictureBox.Location = p;

            if (p.X >= RaceTrackLenght)  // jesli przekroczyl mete zwroc true
                return true;
            else
                return false;
        }
        public void TakeStartPosition()

        {
            StartingPosition = 0; // ??
        }
    }
}
 

FORM1.CS

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        Guy[] guys = new Guy [3];
        Greyhound[] dogs = new Greyhound[4];
        Random MyRandom = new Random(); 
        
       
        public Form1()
        {
            InitializeComponent();
            guys[0] = new Guy() { Name = "Janek", Cash = 50, MyRadioButton = this.janekRadioButton, MyLabel = this.janekBetLabel };
            guys[1] = new Guy() { Name = "Bartek", Cash = 75, MyRadioButton = this.bartekRadioButton, MyLabel = this.bartekBetLabel };
            guys[2] = new Guy() { Name = "Arek", Cash = 100, MyRadioButton = this.arekRadioButton, MyLabel = this.bartekBetLabel };
            dogs[0] = new Greyhound() { MyPictureBox = pictureBox2, StartingPosition = pictureBox2.Location.X, RaceTrackLenght = pictureBox1.Width};
            dogs[1] = new Greyhound() { MyPictureBox = pictureBox3, StartingPosition = pictureBox3.Location.X, RaceTrackLenght = pictureBox1.Width};
            dogs[2] = new Greyhound() { MyPictureBox = pictureBox4, StartingPosition = pictureBox4.Location.X, RaceTrackLenght = pictureBox1.Width};
            dogs[3] = new Greyhound() { MyPictureBox = pictureBox5, StartingPosition = pictureBox5.Location.X, RaceTrackLenght = pictureBox1.Width};
         }

        private void button1_Click(object sender, EventArgs e) // tutaj chcialem zeby w labelach po prawej stronie w labelach wpisywane byly zaklady ale nie dziala
        {
            foreach (Guy guy in guys)
            {
                if (Guy.MyRadioButton.Checked)
                {
                    if (Guy.PlaceBet ((int)numericUpDownBetSize.Value, (int)numericUpDownDogNumber.Value))
                    {
                        Guy.MyLabel.Text = Guy.MyBet.GetDescription();
                    }
                }
            }
        }
    }
}
 
0

A mógłbyś zadać jakieś konkretne pytanie?

0
  private void button1_Click(object sender, EventArgs e) // tutaj chcialem zeby w labelach po prawej stronie w labelach wpisywane byly zaklady ale nie dziala
        {
            foreach (Guy guy in guys)
            {
                if (Guy.MyRadioButton.Checked)
                {
                    if (Guy.PlaceBet ((int)numericUpDownBetSize.Value, (int)numericUpDownDogNumber.Value))
                    {
                        Guy.MyLabel.Text = Guy.MyBet.GetDescription(); 

dlaczego ten fragment nie działa. Otrzymuje cztery komunikaty

Error	1	An object reference is required for the non-static field, method, or property 'WindowsFormsApplication1.Guy.MyRadioButton'
Error	3	An object reference is required for the non-static field, method, or property 'WindowsFormsApplication1.Guy.MyLabel'	
Error	2	An object reference is required for the non-static field, method, or property 'WindowsFormsApplication1.Guy.PlaceBet(int, int)'	
Error	4	An object reference is required for the non-static field, method, or property 'WindowsFormsApplication1.Guy.MyBet'

dodanie znacznika <code class="none"> - @furious programming

0

Zamień Guy na guy we wszystkich ifach.

0
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public class Bet
    {
        public int Amount; // ilość postawionych pieniędzy
        public int Dog; // numer obstawionego psa
        public Guy Bettor; // osoba która złożyła zakład

        public string GetDescription()     //metoda która ustawia tekst kto obstawił, ile pieniędzy i numer psa
        {
            string description = string.Format(Bettor.Name + "postawił" + Amount + "na psa numer" + Dog);
            return description;
        }
        public int Payout(int Winner) //jeśli pies wygrał zwróć wartość postawioną, w przeciwnym razie zabierz wartość postawioną
        {
            if (Dog == Winner)
                return Amount;
            else
                return -Amount;

        }
    }
}

Zmieniłem i pomogło z tym że teraz podkreslilo mi na zolto

string description = string.Format(Bettor.Name + "postawił" + Amount + "na psa numer" + Dog);

z komentarzem Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu. Nie bardzo rozumiem o co chodzi

czy chodzi o to, że bettor.name jest nieużywane?

dodanie znacznika <code class="csharp"> - @furious programming

0

Chodzi o to, że Bettor nie istnieje, czyli ma wartość null. Przypisz coś do tej zmiennej przed użyciem.

0

dziękuję trochę zaczynam to ogarniać. Mam jeszcze jedno pytanie metoda run() zwraca wartość true lub false. Jak użyć tego true lub false aby harty przestały biec jeśli któryś z nich wygra?

0

ktoś coś? :/

1 użytkowników online, w tym zalogowanych: 0, gości: 1