Länderspiel

Die Programmiersprache C# und Programmierung im .NET Framework/Mono
Antworten
dragonfight86
Beiträge: 15
Registriert: So Feb 28, 2016 6:17 pm

Länderspiel

Beitrag von dragonfight86 » Do Jan 26, 2017 8:56 pm

Hallo zusammen, ich habe folgendes Problem aber erstmal kurze Fakten.

Es geht um die Erstellung eines Quiz in der der Spieler nach Anmeldung entscheidet ob er nach Land,Hauptstadt oder Flagge gefragt wird und dazu die Antwort Land,HS oder Flagge gibt ( natürlich wird gleiches ausgeschlossen) und danach kann ausgewählt werden ob alle Länder oder nur ausgewählte Kontinente gespielt werden.

Das ganze geht in Verbindung mit SQL wo ich in der DB 2 Tabellen habe eine für den Spieler und eine Land
( LandID | Landontinent|LandHauptstadt|LandName)

Problem 1 :
Wie bekomme ich nach der gegebenen Antwort meine Form aktualisiert bzw. die 2. Frage eingelesen ? Habe es mit Refrech versucht aber irgendwie komme ich da nicht weiter.

Problem 2 :
Ich bekomme die Eingrenzung mit den Kontinenten nicht hin, stehe da vollkommen im Wald und finde nichtmal eine Idee und hoffe da auf eure Hilfe.




Dazu der Code 1.Form

Code: Alles auswählen

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;

namespace Startseite
{
    public partial class Startseite : Form
    {
        string AuswahlKontinent;
        string AuswahlLinks;
        string AuswahlRechts;
        Datenbank DB = new Datenbank();
        List<Spieler> listSpieler = new List<Spieler>();

        public Startseite()
        {
            InitializeComponent();
        }

        private void Startseite_Load(object sender, EventArgs e)
        {
            SpielerAnzeigen();
            btnFlaggen.Enabled = false;
            btnFlagge2.Enabled = false;
            btnHauptstadt.Enabled = false;
            btnHauptstadt2.Enabled = false;
            btnLaender.Enabled = false;
            btnLaender2.Enabled = false;
            checkedListBox1.Enabled = false;
            btnNeuesSpiel.Enabled = false;
        }

        private void SpielerAnzeigen()
        {
            try
            {
                DB.dbVerbinden();
                listSpieler.Clear();
                cbxSpielerAuswahl.Items.Clear();
                DB.dbSpielerEinlesen(listSpieler);
                for (int i = 0; i < listSpieler.Count; i++)
                {
                    cbxSpielerAuswahl.Items.Add(listSpieler[i].SpielerVorname + " " + listSpieler[i].SpielerNachname);
                }
            }
            catch (Exception EX)
            {
                MessageBox.Show(EX.Message);
            }
        }

        private void btnNeuerSpieler_Click(object sender, EventArgs e)
        {
            Neuer_Spieler NS = new Neuer_Spieler();
            NS.ShowDialog();
            SpielerAnzeigen();
        }

        private void Startseite_FormClosing(object sender, FormClosingEventArgs e)
        {
            DB.dbVerbindungSchließen();
        }

        private void btnFlaggen_Click(object sender, EventArgs e)
        {
            btnHauptstadt.BackColor = Color.FromArgb(255, 240, 240, 240);
            btnLaender.BackColor = Color.FromArgb(255, 240, 240, 240);
            btnHauptstadt2.Enabled = true;
            btnLaender2.Enabled = true;
            btnFlagge2.Enabled = false;
            btnFlaggen.BackColor = Color.FromArgb(195, 50, 141, 171);
            AuswahlLinks = "Flagge";
        }

        private void btnLaender_Click(object sender, EventArgs e)
        {
            btnFlaggen.BackColor = Color.FromArgb(255, 240, 240, 240);
            btnHauptstadt.BackColor = Color.FromArgb(255, 240, 240, 240);
            btnHauptstadt2.Enabled = true;
            btnLaender2.Enabled = false;
            btnFlagge2.Enabled = true;
            btnLaender.BackColor = Color.FromArgb(195, 50, 141, 171);
            AuswahlLinks = "Land";
        }

        private void btnHauptstadt_Click(object sender, EventArgs e)
        {
            btnFlaggen.BackColor = Color.FromArgb(255, 240, 240, 240);
            btnLaender.BackColor = Color.FromArgb(255, 240, 240, 240);
            btnHauptstadt2.Enabled = false;
            btnLaender2.Enabled = true;
            btnFlagge2.Enabled = true;
            btnHauptstadt.BackColor = Color.FromArgb(195, 50, 141, 171);
            AuswahlLinks = "Stadt";
        }

        private void btnFlagge2_Click(object sender, EventArgs e)
        {
            btnLaender2.BackColor = Color.FromArgb(255, 240, 240, 240);
            btnHauptstadt2.BackColor = Color.FromArgb(255, 240, 240, 240);
            btnFlagge2.BackColor = Color.FromArgb(195, 50, 141, 171);
            AuswahlRechts = "Flagge";
        }

        private void btnLaender2_Click(object sender, EventArgs e)
        {
            btnFlagge2.BackColor = Color.FromArgb(255, 240, 240, 240);
            btnHauptstadt2.BackColor = Color.FromArgb(255, 240, 240, 240);
            btnLaender2.BackColor = Color.FromArgb(195, 50, 141, 171);
            AuswahlRechts = "Land";
        }

        private void btnHauptstadt2_Click(object sender, EventArgs e)
        {
            btnLaender2.BackColor = Color.FromArgb(255, 240, 240, 240);
            btnFlagge2.BackColor = Color.FromArgb(255, 240, 240, 240);
            btnHauptstadt2.BackColor = Color.FromArgb(195, 50, 141, 171);
            AuswahlRechts = "Stadt";

        }

        private void btnNeuesSpiel_Click(object sender, EventArgs e)
        {
            try
            {
                AuswahlKontinent = checkedListBox1.SelectedItem.ToString();
                //MessageBox.Show(AuswahlKontinent);
                QuestionPicture QP = new QuestionPicture(AuswahlLinks, AuswahlRechts, AuswahlKontinent);
                QP.ShowDialog();

            }
            catch (Exception EX)
            {
                MessageBox.Show(EX.Message);
            }
        }

        private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
        {
            btnNeuesSpiel.Enabled = true;
        }

        private void cbxSpielerAuswahl_SelectedIndexChanged(object sender, EventArgs e)
        {
            btnFlaggen.Enabled = true;
            btnHauptstadt.Enabled = true;
            btnLaender.Enabled = true;
            checkedListBox1.Enabled = true;
        }
    }
}
Dazu der Code 2.Form

Code: Alles auswählen

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

namespace Startseite
{
    public partial class QuestionPicture : Form
    {
        string Pfad = @"C:\Users\Chris\Desktop\Länderspiel\Grafik\flags-big\";
        Random rndZahl = new Random();
        Datenbank DB = new Datenbank();
        List<Land> listLand = new List<Land>();
        string AuswahlLinks;
        string AuswahlRechts;
        string AuswahlKontinent;
        //int Spiellänge;
        int counter = 0;
        int Punkte;
        Button bRichtig;

        public QuestionPicture(string AuswahlLinks, string AuswahlRechts, string AuswahlKontinent)
        {
            InitializeComponent();
            this.AuswahlLinks = AuswahlLinks;
            this.AuswahlRechts = AuswahlRechts;
            this.AuswahlKontinent = AuswahlKontinent;
        }

        private void QuestionPicture_Load(object sender, EventArgs e)
        {
            try
            {
                DB.dbLandEinlesen(listLand);
                if (AuswahlRechts.Equals("Flagge"))
                {
                    txtBox.Visible = false;
                    pictureBox1.Visible = true;
                }
                else
                {
                    txtBox.Visible = true;
                    pictureBox1.Visible = false;
                }
                Fragen(ZufallsZahlFrage(), ZufallsZahlAntwort(), counter);
                ZufallsZahlFrage();
            }
            catch (Exception EX)
            {
                MessageBox.Show(EX.Message);
            }
        }

        public int[] ZufallsZahlAntwort()
        {
            int[] ZufallsZahlAntwort = new int[4/*spiellänge*/];
            int i, y;
            for (i = 0; i <= ZufallsZahlAntwort.Length - 1; i++)
            {
                ZufallsZahlAntwort[i] = rndZahl.Next(0, 4);

                for (y = i - 1; y >= 0; y--)
                {
                    if (ZufallsZahlAntwort[i] == ZufallsZahlAntwort[y])
                    {
                        ZufallsZahlAntwort[i] = rndZahl.Next(0, 4);
                        y = i;
                    }
                }
            }
            return ZufallsZahlAntwort;
        }

        public int[] ZufallsZahlFrage()
        {
            int[] ZufallsZahlFrage = new int[10/*spiellänge*/];
            int i, y;
            for (i = 0; i <= ZufallsZahlFrage.Length - 1; i++)
            {
                ZufallsZahlFrage[i] = rndZahl.Next(0, listLand.Count);

                for (y = i - 1; y >= 0; y--)
                {
                    if (ZufallsZahlFrage[i] == ZufallsZahlFrage[y])
                    {
                        ZufallsZahlFrage[i] = rndZahl.Next(0, listLand.Count);
                        y = i;
                    }
                }
            }
            return ZufallsZahlFrage;
        }

        public void Fragen(int[] ZahlenFrage, int[] ZahlenAntwort, int counter)
        {
            Button[] txtArray = new Button[] { btnAntwort1, btnAntwort2, btnAntwort3, btnAntwort4 };


            switch (AuswahlRechts)
            {
                case "Flagge":
                    pictureBox1.Image = Image.FromFile(Pfad + listLand[ZahlenFrage[counter]].LandFlagge + ".png");
                    pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;

                    if (AuswahlLinks.Equals("Stadt"))
                    {
                        txtArray[ZahlenAntwort[0]].Text = listLand[ZahlenFrage[counter]].LandHauptstadt;
                        bRichtig = txtArray[ZahlenAntwort[0]];
                        txtArray[ZahlenAntwort[1]].Text = listLand[ZahlenAntwort[0]].LandHauptstadt;
                        txtArray[ZahlenAntwort[2]].Text = listLand[ZahlenAntwort[1]].LandHauptstadt;
                        txtArray[ZahlenAntwort[3]].Text = listLand[ZahlenAntwort[2]].LandHauptstadt;
                    }
                    else
                    {
                        txtArray[ZahlenAntwort[0]].Text = listLand[ZahlenFrage[counter]].LandName;
                        bRichtig = txtArray[ZahlenAntwort[0]];
                        txtArray[ZahlenAntwort[1]].Text = listLand[ZahlenAntwort[0]].LandName;
                        txtArray[ZahlenAntwort[2]].Text = listLand[ZahlenAntwort[1]].LandName;
                        txtArray[ZahlenAntwort[3]].Text = listLand[ZahlenAntwort[2]].LandName;
                    }
                    break;
                case "Land":
                    //txtBox.Text = "Welche Flagge gehört zur ";
                    if (AuswahlLinks.Equals("Stadt"))
                    {
                        txtBox.Text += " Nenne die Hauptstadt von " + listLand[ZahlenFrage[counter]].LandName;
                        txtArray[ZahlenAntwort[0]].Text = listLand[ZahlenFrage[counter]].LandHauptstadt;
                        bRichtig = txtArray[ZahlenAntwort[0]];
                        txtArray[ZahlenAntwort[1]].Text = listLand[ZahlenAntwort[0]].LandHauptstadt;
                        txtArray[ZahlenAntwort[2]].Text = listLand[ZahlenAntwort[1]].LandHauptstadt;
                        txtArray[ZahlenAntwort[3]].Text = listLand[ZahlenAntwort[2]].LandHauptstadt;
                    }
                    else
                    {
                        txtBox.Text = "Welche Flagge gehört zu " + listLand[ZahlenFrage[counter]].LandName;
                        txtArray[ZahlenAntwort[0]].Image = Image.FromFile(Pfad + listLand[ZahlenFrage[counter]].LandFlagge + ".png");
                        bRichtig = txtArray[ZahlenAntwort[0]];
                        txtArray[ZahlenAntwort[1]].Image = Image.FromFile(Pfad + listLand[ZahlenAntwort[0]].LandFlagge + ".png");
                        txtArray[ZahlenAntwort[2]].Image = Image.FromFile(Pfad + listLand[ZahlenAntwort[1]].LandFlagge + ".png");
                        txtArray[ZahlenAntwort[3]].Image = Image.FromFile(Pfad + listLand[ZahlenAntwort[2]].LandFlagge + ".png");
                    }
                    break;
                case "Stadt":
                    if (AuswahlLinks.Equals("Land"))
                    {
                        txtBox.Text = listLand[ZahlenFrage[counter]].LandHauptstadt + " ist Die Hauptstadt von ...";
                        txtArray[ZahlenAntwort[0]].Text = listLand[ZahlenFrage[counter]].LandName;
                        bRichtig = txtArray[ZahlenAntwort[0]];
                        txtArray[ZahlenAntwort[1]].Text = listLand[ZahlenAntwort[0]].LandName;
                        txtArray[ZahlenAntwort[2]].Text = listLand[ZahlenAntwort[1]].LandName;
                        txtArray[ZahlenAntwort[3]].Text = listLand[ZahlenAntwort[2]].LandName;
                    }
                    else
                    {
                        txtBox.Text = listLand[ZahlenFrage[counter]].LandHauptstadt + " ist Die Hauptstadt von ...";
                        txtArray[ZahlenAntwort[0]].Image = Image.FromFile(Pfad + listLand[ZahlenFrage[counter]].LandFlagge + ".png");
                        bRichtig = txtArray[ZahlenAntwort[0]];
                        txtArray[ZahlenAntwort[1]].Image = Image.FromFile(Pfad + listLand[ZahlenAntwort[0]].LandFlagge + ".png");
                        txtArray[ZahlenAntwort[2]].Image = Image.FromFile(Pfad + listLand[ZahlenAntwort[1]].LandFlagge + ".png");
                        txtArray[ZahlenAntwort[3]].Image = Image.FromFile(Pfad + listLand[ZahlenAntwort[2]].LandFlagge + ".png");

                    }
                    break;
            }
        }
        private void btnAntwort1_Click(object sender, EventArgs e)
        {
            Button gedr = (Button)sender;

            if (bRichtig == gedr)
            {
                Punkte += 10;
                gedr.BackColor = Color.Green;
            }
            else
            {
                gedr.BackColor = Color.Red;
                bRichtig.BackColor = Color.Green;
            }
            counter++;
            System.Threading.Thread.Sleep(1000); // 2sekunden Pause

        }
    }
}
Und Klasse Datenbank

Code: Alles auswählen

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
using System.Windows.Forms;


namespace Startseite
{
    class Datenbank
    {
        MySqlConnection connect;
        MySqlCommand command;
        MySqlDataReader read;

        public void dbVerbinden()
        {
            try
            {
                connect = new MySqlConnection("Server=localhost;UID=root;Password=;");
                connect.Open();
                command = connect.CreateCommand();
            }
            catch (Exception EX)
            {
                MessageBox.Show("Keine Verbindung zur Datenbank");
            }
        }

        public List<Spieler> dbSpielerEinlesen(List<Spieler> listSpieler)
        {
            try
            {
                string sql = "select * from christianarmasmartinez.Spieler;";
                command.CommandText = sql;
                read = command.ExecuteReader();

                while (read.Read())
                {
                    listSpieler.Add(new Spieler(Convert.ToInt32(read.GetValue(0)),
                                                                read.GetValue(1).ToString(),
                                                                read.GetValue(2).ToString(),
                                                                 read.IsDBNull(3) ? 0 : Convert.ToInt32(read.GetValue(3))));
                }
                read.Close();
            }
            catch (Exception EX)
            {
                MessageBox.Show("Keine Spieler vorhanden \n " + EX.Message);
            }
            return listSpieler;
        }

        public void dbSpielerSpeichern(List<Spieler> listSpieler)
        {
            try
            {
                string sql = "insert into christianarmasmartinez.spieler (SpielerVorname,SpielerNachname) values ('"
                                                                                        + listSpieler[listSpieler.Count - 1].SpielerVorname + "','"
                                                                                        + listSpieler[listSpieler.Count - 1].SpielerNachname + "');";
                command.CommandText = sql;
                command.ExecuteNonQuery();

            }
            catch (Exception EX)
            {
                MessageBox.Show(EX.Message);
            }
        }

        public void dbSpielerPunkteSpeichern(List<Spieler> listSpieler)
        {
            try
            {

            }
            catch (Exception EX)
            {
                MessageBox.Show(EX.Message);
            }

        }

        public List<Land> dbLandEinlesen(List<Land> listLand)
        {
            try
            {
                string sql;
                //if (Kontinent == String.Empty)
                //{
                sql = "select * from christianarmasmartinez.land;";
                //}
                //else
                //{
                //    switch (Kontinent)
                //    {
                //        case "Afrika":
                //            sql = "select * from christianarmasmartinez.land;";
                //            break;
                //        case "Asien":
                //            sql = "select * from christianarmasmartinez.land where christianarmasmartinez.land = 'Asien';";
                //            break;
                //    }



            //}
                dbVerbinden();
            command.CommandText = sql;
            read = command.ExecuteReader();

            while (read.Read())
            {
                listLand.Add(new Land(Convert.ToInt32(read.GetValue(0)),
                                                      read.GetValue(1).ToString(),
                                                      read.GetValue(2).ToString(),
                                                      read.GetValue(3).ToString(),
                                                      read.GetValue(4).ToString()));
            }
            read.Close();
        }
            catch (Exception EX)
            {
                MessageBox.Show(EX.Message);
            }
            return listLand;
        }


public void dbVerbindungSchließen()
{
    try
    {
        connect.Close();
    }
    catch (Exception EX)
    {
        MessageBox.Show(EX.Message);
    }
}




    }
}

dragonfight86
Beiträge: 15
Registriert: So Feb 28, 2016 6:17 pm

Re: Länderspiel

Beitrag von dragonfight86 » Fr Jan 27, 2017 10:36 am

Hallo zusammen,

jetzt habe ich nur noch ein Problem, wie bekomme ich die nächste Frage eingelesen.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Länderspiel

Beitrag von Xin » Fr Jan 27, 2017 4:06 pm

Da wäre erstmal die Frage, wo die Frage steht... vermutlich in einer dritten Tabelle?

Wenn ich das richtig verstehe, willst Du dem User mehrere Fragen stellen, es müsste also einen Counter geben, welche Frage gerade dran ist und die musst Du dann genauso einlesen, wie Du zuvor aus anderen Tabellen Daten geholt hast und Deine "Fragedialog" entsprechend überarbeiten.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

dragonfight86
Beiträge: 15
Registriert: So Feb 28, 2016 6:17 pm

Re: Länderspiel

Beitrag von dragonfight86 » Fr Jan 27, 2017 10:14 pm

Die Frage wird durch ein Array mit Zuffalszahlen durch rnd.Next(0,listLand.Count) erstellt, die Zahl im Array verweist hierbei auf die ID in der Tabelle Land.
Weiter habe ich ein Button Array wo ich die 4 Button rein gepackt habe und ein Array mit 4 Zufallszahlen habe ich nun erstellt wobei jede Antwort einem Button zugewiesen wird.
Die richtige Antwort speichere ich mir nun in einer Variiablen ab und vergleiche Sie anschließend mit dem gedrückten Button

Code: Alles auswählen

 private async void btnAntwort1_Click(object sender, EventArgs e)
        {
            Button gedr = (Button)sender;

            if (bRichtig == gedr)
            {
                Punkte += 10;
                gedr.BackColor = Color.Green;
                await Task.Delay(2000);
                gedr.BackColor =  Color.DimGray;
            }
            else
            {
                gedr.BackColor = Color.Red;
                bRichtig.BackColor = Color.Green;
                await Task.Delay(2000);
                gedr.BackColor = Color.DimGray;
                bRichtig.BackColor = Color.DimGray;
            }
            counter++;

            if (counter <= Spiellänge - 1)
            {
                Fragen(ZufallsZahlFrage(Spiellänge), ZufallsZahlAntwort(), counter, Spiellänge);
            }
            else
            {
                MessageBox.Show("Erreichte Punkte :" + Punkte);
                this.Close();
            }

        }
Jetzt habe ich das nächste Problem, meine Antworten sind meist gleich bzw. doppelt. Lösung wird gesucht...lange Nacht ? wahrscheinlich.

dragonfight86
Beiträge: 15
Registriert: So Feb 28, 2016 6:17 pm

Re: Länderspiel

Beitrag von dragonfight86 » Mi Apr 05, 2017 12:03 pm

Gelöst

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Länderspiel

Beitrag von Xin » Mi Apr 05, 2017 12:56 pm

Das waren einige lange Nächte? ^^

Die beste Chance programmieren zu lernen. :)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten