Autor Beitrag
interessierter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: Di 18.06.13 22:16 
Hallo Zusammen

Ich mache grad den Ein Tag beim Rennen Work Shop vom C# von Kopf bis Fuss Buch. Ich habe es fast hingekriegt bis auf eine Sache. Meine Hunde (pictureboxen) bewegen sich alle gleich Richtung Ziel, obwohl sie sich eigentlich je Hund Random zwischen 1 - 4 Kästchen nach vorne bewegen sollten, damit es am Schluss einen Sieger gibt. Ich glaube der Fehler liegt in der Form1 Klasse. Die Klasse Windhund ist meiner Meinung nach richtig, und liefert das was sie soll. Wo liegt mein Fehler in der Form1 Klasse? Folgend beide Klassen.

Form1:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
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;
using System.Threading;

namespace Mehrere_Pictureboxen_gleichzeitig_bewegen
{
    public partial class Form1 : Form
    {
        Windhund[] Hund = new Windhund[4];

        public Form1()
        {
            InitializeComponent();
            for (int i = 0; i < Hund.Length; i++)
            {
                Hund[i] = new Windhund();
            }
            Hund[0].Bild = pictureBox2;
            Hund[1].Bild = pictureBox3;
            Hund[2].Bild = pictureBox4;
            Hund[3].Bild = pictureBox5;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            bool gewinner = false;
            int gewinnerHund = 0;

            while (!gewinner)
            {
                for (int i = 0; i < 4; i++)
                {
                    if (Hund[i].Laufen())
                    {
                        gewinner = true;
                        gewinnerHund = i;
                    }
                }
                Thread.Sleep(30);
            }
            MessageBox.Show("" + gewinnerHund);
        }
    }
}


Klasse Windhund:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;


namespace Mehrere_Pictureboxen_gleichzeitig_bewegen
{
    class Windhund
    {
        public int Startposition = 12;
        public int Rennbahnlänge = 493;
        public PictureBox Bild = null;
        public int Ort = 0;
        public Random Zufallszahl = new Random();

        public bool Laufen()
        {
            int distanz = Zufallszahl.Next(14);
            Point p = Bild.Location;
            p.X += distanz;
            Bild.Location = p;

            if (Bild.Location.X > Rennbahnlänge)
                return true;
            else
                return false;
        }
    }
}


Ich habe echt schon alles durchprobiert, aber verzweifle an dieser Randomsache. Bitte gebt mit Lösungsansätze.

Grüsse
interessierter
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Di 18.06.13 22:34 
Hi!

Mach das Random-Object namens Zufallszahl mal statisch, damit alle Hunde dasselbe Objekt benutzen. Du intialisiert nämlich im Moment vier Zufallsgeneratoren praktisch zeitgleich, womit sie den selben Seed haben und identische Zahlenfolgen ausgeben. Es ist immer besser, nur einen Zufallsgenerator zu verwenden (Ausnahme: Multithreading, aber das haben wir hier ja nicht).

Viele Grüße
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
interessierter Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 75



BeitragVerfasst: Di 18.06.13 22:37 
Das leuchtet mit ein, hatte grad ein AHA-Erlebnis. Static funzt und es gewinnt jeweils Random ein anderer Hund. Perfekt. Weiter gehts. Danke viel mal.

Grüsse
interesserter