Laden...

Wie kann ich Pictureboxen in einem Array richtig am UI aktualisieren?

Erstellt von hendrikator vor 3 Jahren Letzter Beitrag vor 3 Jahren 534 Views
H
hendrikator Themenstarter:in
5 Beiträge seit 2020
vor 3 Jahren
Wie kann ich Pictureboxen in einem Array richtig am UI aktualisieren?

Weinen wundersschönen Tag Euch,

ich baue aus spaß gerade an einer Slot Maschine diese klappt auch recht gut nun habe ich aber das problem das beim 2ten mal gewonnen die (Früchte) nicht stimmen

[Bilder entfernt - Coffeebean]
hier ist es richtig

Hier ist es falsch
[Bilder entfernt - Coffeebean]


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

namespace Slotmashine
{
    public partial class Form1 : Form
    {
        
        
        Random rand = new Random();
        int[] liste = new int[16];
      
        public Form1()
        {
            
            InitializeComponent();
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 16; i++)
            {
                liste[i] = 0;
                pictureBox1.Image = null;
            }
            int line = 0;
            bool gewonnen = false;
            PictureBox[] picturebox = { pictureBox1, pictureBox2, pictureBox3, pictureBox4, pictureBox5, pictureBox6, pictureBox7, pictureBox8, pictureBox9, pictureBox10, pictureBox11, pictureBox12, pictureBox13, pictureBox14, pictureBox15, pictureBox16 };


            for (int i = 0; i < 16; i++)
            {

                liste[i] = rand.Next(1, 6);
                //  MessageBox.Show(Convert.ToString(liste[i]));

                switch (liste[i])
                {

                    case 1:
                        picturebox[i].Image = Properties.Resources.banana;
                        break;
                    case 2:
                        picturebox[i].Image = Properties.Resources.cherry;
                        break;
                    case 3:
                        picturebox[i].Image = Properties.Resources.grapes;
                        break;
                    case 4:
                        picturebox[i].Image = Properties.Resources.orange;
                        break;
                    case 5:
                        picturebox[i].Image = Properties.Resources.seven;
                        break;
                    default:
                        break;
                }

            }
            Debug.WriteLine("");
            Debug.WriteLine("");
            for (int i = 0; i < 4; i++)
            {
                Debug.Write(liste[i]);

            }
            Debug.WriteLine("");
            for (int iii = 4; iii < 8; iii++)
            {
                Debug.Write(liste[iii]);

            }
            Debug.WriteLine("");
            for (int iii = 8; iii < 12; iii++)
            {
                Debug.Write(liste[iii]);

            }
            Debug.WriteLine("");
            for (int iii = 12; iii < 16; iii++)
            {
                Debug.Write(liste[iii]);

            }

            if (liste[0] == 1 && liste[1] == 1 && liste[2] == 1 && liste[3] == 1)
            {
                gewonnen = true;
                line = 1;
            }
            if (liste[0] == 2 && liste[1] == 2 && liste[2] == 2 && liste[3] == 2)
            {
                gewonnen = true;
                line = 1;
            }
            if (liste[0] == 3 && liste[1] == 3 && liste[2] == 3 && liste[3] == 3)
            {
                gewonnen = true;
                line = 1;
            }
            if (liste[0] == 4 && liste[1] == 4 && liste[2] == 4 && liste[3] == 4)
            {
                gewonnen = true;
                line = 1;
            }
            if (liste[0] == 5 && liste[1] == 5 && liste[2] == 5 && liste[3] == 5)
            {
                gewonnen = true;
                line = 1;
            }


            if (liste[5] == 1 && liste[6] == 1 && liste[7] == 1 && liste[8] == 1)
            {
                gewonnen = true;
                line = 2;

            }
            if (liste[5] == 2 && liste[6] == 2 && liste[7] == 2 && liste[8] == 2)
            {
                gewonnen = true;
                line = 2;
            }
            if (liste[5] == 3 && liste[6] == 3 && liste[7] == 3 && liste[8] == 3)
            {
                gewonnen = true;
                line = 2;
            }
            if (liste[5] == 4 && liste[6] == 4 && liste[7] == 4 && liste[8] == 4)
            {
                gewonnen = true;
                line = 2;
            }
            if (liste[5] == 5 && liste[6] == 5 && liste[7] == 5 && liste[8] == 5)
            {
                gewonnen = true;
                line = 2;
            }



            if (liste[9] == 1 && liste[10] == 1 && liste[11] == 1 && liste[12] == 1)
            {
                gewonnen = true;
                line = 3;
            }
            if (liste[9] == 2 && liste[10] == 2 && liste[11] == 2 && liste[12] == 2)
            {
                gewonnen = true;
                line = 3;
            }
            if (liste[9] == 3 && liste[10] == 3 && liste[11] == 3 && liste[12] == 3)
            {

                gewonnen = true;
                line = 3;
            }
            if (liste[9] == 4 && liste[10] == 4 && liste[11] == 4 && liste[12] == 4)
            {
                gewonnen = true;
                line = 3;
            }
            if (liste[9] == 5 && liste[10] == 5 && liste[11] == 5 && liste[12] == 5)
            {
                gewonnen = true;
                line = 3;
            }

            if (gewonnen == true)
            {
                MessageBox.Show("gewonnen " + line);
            }
            
        }

    }
}


von der Programmierung her bin ich auch gerade nicht so angetan wüsste aber nicht wie es einfacher geht

Hinweis von Coffeebean vor 3 Jahren

BItte keinen externen Filehoster - [Hinweis] Wie poste ich richtig?

3.825 Beiträge seit 2006
vor 3 Jahren

Deine Graphiken oben kann man nicht sehen, da sie auf privat stehen.

liste(x) kann doch nur 1 bis 5 beinhalten ?

Dann könntest Du dein Programm zusammenfassen zu :


linie = 0;
if (liste[1] == liste[2] && liste[1] == liste[3] && liste[1] == liste[4]) line = 1;
if (liste[5] == liste[6] && liste[5] == liste[7] && liste[5] == liste[8]) line = 2;
if (liste[9] == liste[10] && liste[9] == liste[11] && liste[9] == liste[12]) line = 3;
if (linie > 0) ...

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

H
hendrikator Themenstarter:in
5 Beiträge seit 2020
vor 3 Jahren

Danke hab ich angepasst.

ja genau die Liste kann den wert 1-5 haben.

für den einen Tipp bin ich dir dankbar sieht schon besser aus.

309 Beiträge seit 2020
vor 3 Jahren

Vielleicht würde es dir einfacher fallen das ganze in eine eigene Klasse auszulagern.

Pseudo-Beispiel:



public class Machine(){

 public bool RowTopWin{...} // gibt zurück ob 1. Zeile Gewinn
 public bool RowMiddleWin{...}
 public bool ColumnLeftWin{...}

}


H
hendrikator Themenstarter:in
5 Beiträge seit 2020
vor 3 Jahren

Auch keine schlechte Idee leider ist der fehler mit den falschen früchten immer noch.

3.825 Beiträge seit 2006
vor 3 Jahren

Die Zuordnung der Pictureboxen an das Array finde ich sehr unglücklich.

Was passiert wenn Du das nur einmal machst am Anfang in Form1_Load() ?

Was passiert wenn Du das Image direkt pictureBox1 zuordnest ?

Ich würde nur mit einem Array bzw. List <> arbeiten.

Alternativ ohne Array :

pictureBox1.Image = GetImage(liste[0]);
pictureBox2.Image = GetImage(liste[1]);
pictureBox3.Image = GetImage(liste[2]);
...

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

309 Beiträge seit 2020
vor 3 Jahren

Auch keine schlechte Idee leider ist der fehler mit den falschen früchten immer noch.

Da würdest du oder wir zumindest den Fehler auf den ersten Blick erkennen, und nicht wie bei diesem Wirrwarr 😉

H
hendrikator Themenstarter:in
5 Beiträge seit 2020
vor 3 Jahren

@BerndFfm Stehe gerade auf dem schlauch was du meinst.

@JimStark finde den fehler trozdem nicht ^^

D
261 Beiträge seit 2015
vor 3 Jahren
3.825 Beiträge seit 2006
vor 3 Jahren
for (int i = 0; i < 16; i++) liste[i] = rand.Next(1, 6);

pictureBox1.Image = GetImage(liste[0]);
pictureBox2.Image = GetImage(liste[1]);
pictureBox3.Image = GetImage(liste[2]);
...


private Image GetImage(int nr)
{
    if (nr == 1) return Properties.Resources.banana;
    if (nr == 2) return Properties.Resources.cherry;
    if (nr == 3) return Properties.Resources.grapes;
    if (nr == 4) return Properties.Resources.orange;
    if (nr == 5) return Properties.Resources.seven;
    return null;
}

Mehr kann ich nicht schreiben sonst habe ich das fertig programmiert.

Wir wissen immer noch nicht was denn genau nicht funktioniert.

Mach die Bilder mal als Anhang an den Beitrag wie es gedacht ist.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

H
hendrikator Themenstarter:in
5 Beiträge seit 2020
vor 3 Jahren
 if (liste[0] == liste[1] && liste[0] == liste[2] && liste[0] == liste[3]) gewonnen = true;
            if (liste[4] == liste[5] && liste[4] == liste[6] && liste[4] == liste[7]) gewonnen = true;
            if (liste[8] == liste[9] && liste[8] == liste[10] && liste[8] == liste[11]) gewonnen = true;
            if (liste[12] == liste[13] && liste[12] == liste[14] && liste[12] == liste[15]) gewonnen = true ;


so klappt es war also bei meiner auswertung falsch also der teil


            if (liste[0] == 1 && liste[1] == 1 && liste[2] == 1 && liste[3] == 1)
            {
                gewonnen = true;
                line = 1;
            }
            if (liste[0] == 2 && liste[1] == 2 && liste[2] == 2 && liste[3] == 2)
            {
                gewonnen = true;
                line = 1;
            }
            if (liste[0] == 3 && liste[1] == 3 && liste[2] == 3 && liste[3] == 3)
            {
                gewonnen = true;
                line = 1;
            }
            if (liste[0] == 4 && liste[1] == 4 && liste[2] == 4 && liste[3] == 4)
            {
                gewonnen = true;
                line = 1;
            }
            if (liste[0] == 5 && liste[1] == 5 && liste[2] == 5 && liste[3] == 5)
            {
                gewonnen = true;
                line = 1;
            }