Laden...

Fragen und Antworten je nach Auswahl in eine Form geben => MVC Pattern verwenden

Erstellt von Dragonfight86 vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.213 Views
D
Dragonfight86 Themenstarter:in
5 Beiträge seit 2017
vor 7 Jahren
Fragen und Antworten je nach Auswahl in eine Form geben => MVC Pattern verwenden

Hallo zusammen,
Ich schreibe gerade ein kleines Spiel welches via SQL sämtliche laender mit Hauptstadt,Flagge und Kontinent bereitgestellt bekommt. In der DB ist eine 2 Tabelle Spieler.

Nach dem Programmstart wird ein Spieler ausgewählt und danach entscheidet dieser ob er Land,Stadt,Flagge von land,stadt,flagge spielt und ob alle Kontinente oder mit eingrenzung.

Danach öffnet eine 2.form für das Spiel und hier hänge ich.

Bis jetzt habe ich eine list mit Länder Objekten gefüllt und ein Array mit Zufallszahlen generiert um 10 zufaellige Fragen zu stellen.
Die Form hat eine picturebox und ein Textfeld wo je nach Auswahl eins enable ist. Für die Antwort gibt es 4 Button die ich in ein Array gepackt habe.

Wie bekomme ich jetzt die richtige Frage(je nach Auswahl ) und die richtige Antwort sowie 3 falsch Antworten in die Form

Ich brauche gedanklich einen kräftigen anstoss.
Vielen Dank vorab

3.003 Beiträge seit 2006
vor 7 Jahren

Für eine Herangehensweise, die zu Code führt, den du noch überblickst, der leicht erweiterbar ist und den du auch nach Jahren noch pflegen kannst, braucht es eine gewisse Struktur - sowohl in deiner Vorgehensweise, wie auch vom Code selbst. Zum Glück bist du nicht der erste, der vor dem Problem steht, eine geeignete Herangehensweise zu finden. Für die Strukturierung von (Oberflächen-)Code gibt es mehrere solche Muster, neudeutsch Pattern. Bei Windows Forms hat sich das sog. MVC-Pattern bewährt - langer Rede kurzer Sinn: schau dir MVC an, versteh es, und wende es auf dein Projekt an. Viele deiner Fragen erübrigen sich dann schon.

MVC explained
Implementing MVC in Windows Forms
EDIT: MVP: Model-View-Presenter (ein Subtyp von MVC, der für WinForms gut geeignet ist)

(Google bringt auch noch etliche Treffer, auch hier im Forum)

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

P
1.090 Beiträge seit 2011
vor 7 Jahren

Bei neuen Projekten, sollte man vieleicht direkt auf WPF setzen oder das MVVM Pattern für Windows Forms in betracht ziehen.
entwickler.de: MVVM und WinForms

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

D
Dragonfight86 Themenstarter:in
5 Beiträge seit 2017
vor 7 Jahren

Hallo Danke für eure Antworten,

schulisch bedingt sollen wir die Form verwenden,verstehe ich jedoch auch nicht.

Eine Struktur insoweit das ich weiß was passieren muss habe ich doch hapert es an der Umsetzung.

Einige Probleme habe ich lösen können doch bleiben 2 wesentliche Probleme.

  1. Ich habe einer Frage 4 Antworten zugewiesen (3 falsche & 1 richtig) doch wie Zähle ich nun Punkte für eine richtige Antwort, ich stehe im Wald.
 switch (AuswahlRechts)
            {
                case "Flagge":
                    pictureBox1.Image = Image.FromFile(@"C:\Users\ca.martinez\Desktop\Länderspiel\Grafik\flags-big\" + listLand[ZahlenFrage[counter]].LandFlagge + ".png");
                    pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;

                    if (AuswahlLinks.Equals("Stadt"))
                    {
                        txtArray[ZahlenAntwort[0]].Text = listLand[ZahlenFrage[counter]].LandHauptstadt;
                        txtArray[ZahlenAntwort[1]].Text = listLand[ZahlenAntwort[0]].LandHauptstadt;
                        txtArray[ZahlenAntwort[2]].Text = listLand[ZahlenAntwort[1]].LandHauptstadt;
                        txtArray[ZahlenAntwort[3]].Text = listLand[ZahlenAntwort[2]].LandHauptstadt;
 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;  
3.003 Beiträge seit 2006
vor 7 Jahren

Bei neuen Projekten, sollte man vieleicht direkt auf WPF setzen oder das MVVM Pattern für Windows Forms in betracht ziehen.

>

Sehr geil, wie er in dem Tutorial MVVM sagt und MVP umsetzt xD Tut aber nix zur Sache, daher OT.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

P
1.090 Beiträge seit 2011
vor 7 Jahren
  1. Ich habe einer Frage 4 Antworten zugewiesen (3 falsche & 1 richtig) doch wie Zähle ich nun Punkte für eine richtige Antwort, ich stehe im Wald.

Eine "einfache" Lösung ist es für die Spieler eine Variable Punktestand zu verwenden und diese bei einer Richtigen Antwort hochzuziehen.

Sauberer wäre es ein Klasse Spiel zu haben, das Spiel hat dann für jeden Spieler eine Property Spieler. Der Spieler ist wider eine Klasse und hatte die Propertys Name und Punktestand.
In der Klasse Spiel bildest du dann die Logik ab und erhörst bei einer Richtigen Antwort, den Punktestand des passenden Spielers.

@LaTino.
Ich hab den Artikel jetzt nur Überflogen (war das 1. Google Ergebnis auf Deutsch).
Sah aber jetzt erst mal richtig aus. Die View kennt, das VM und das kennt das Model. Updates der View laufen über Events des VM.
Bei MVC, kennt ja der Controller View und Model. Und die View benachrichtigt den Controller über Events über Änderungen. (Wobei es auch Varienten, gibt an denen der Controller Zusätzlich das Model kennt).

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

D
985 Beiträge seit 2014
vor 7 Jahren

In dem Artikel sind beide Pattern (MVVM und MVP) vorhanden.

Model -> ViewModel -> View { Model ( = ViewModel ) -> Presenter -> View }

Und ich behaupte jetzt mal ganz frech (ohne es wirklich zu wissen), dass bei WPF für die Präsentation MVP verwendet wird. Wir sehen davon nur nichts (gottlob).

P
1.090 Beiträge seit 2011
vor 7 Jahren

Und ich behaupte jetzt mal ganz frech (ohne es wirklich zu wissen), dass bei WPF für die Präsentation MVP verwendet wird. Wir sehen davon nur nichts (gottlob).){gray}

Da gibts einen Beitrag von John Gossman ("Erfinder" des MVVM Pattern)zu.
Further reflection on PresentationModel

Sollte man mal gelesen haben:

Clean Code Developer
Entwurfsmuster
Anti-Pattern

D
985 Beiträge seit 2014
vor 7 Jahren

Hier mal ein gewaltiger Anstoß (mit Bezug zum aktuellen Zeitgeschehen):


ÿusing System;
using System.Collections.Generic;
using System.Linq;

namespace Quest.ConsoleApp
{
    class Program
    {
        static void Main( string[] args )
        {
            var quest = new Quest( GetQuestions( ), 3 );

            while ( quest.NextQuestion( ) )
            {
                do
                {
                    Console.WriteLine( quest.CurrentQuestion.QuestionText );
                    foreach ( var item in quest.CurrentQuestion.PossibleFacts.Select( ( f, index ) => new { Index = index, Fact = f } ) )
                    {
                        Console.WriteLine( "{0}. {1}", item.Index, item.Fact );
                    }
                    var input = Console.ReadLine( );

                    int answerIndex;
                    if ( !int.TryParse( input, out answerIndex ) )
                    {
                        Console.WriteLine( "Die Antwort <{0}> habe ich nicht verstanden ... ", input );
                        continue;
                    }

                    try
                    {
                        quest.CurrentQuestion.AnswerIndex = answerIndex;
                        switch ( quest.CurrentQuestion.State )
                        {
                            case QuestionState.NotAnswered:
                                break;
                            case QuestionState.WrongAnswer:
                                Console.WriteLine( "Das war leider nicht richtig. Die richtige Antwort ist:" );
                                Console.WriteLine( "{0}. {1}", quest.CurrentQuestion.RightAnswerIndex, quest.CurrentQuestion.PossibleFacts[ quest.CurrentQuestion.RightAnswerIndex.Value ] );
                                break;
                            case QuestionState.ValidAnswer:
                                Console.WriteLine( "Gut gemacht. Das war die richtige Antwort." );
                                break;
                        }
                    }
                    catch ( Exception ex )
                    {
                        Console.WriteLine( ex.Message );
                    }

                } while ( quest.CurrentQuestion.State == QuestionState.NotAnswered );
            }

            Console.WriteLine( "Dein Ergebnis: Du hast {0} richtige und {1} falsche Antworten gegeben.", quest.ValidAnswers, quest.WrongAnswers );

        }

        static IList<QuestionDto> GetQuestions()
        {
            return new List<QuestionDto> {
                new QuestionDto {
                    QuestionText = "Wie heißt der Bürgermeister von Wesel?",
                    Fact = "Esel",
                    AlternativeFacts = new string[] { "Peter", "Walter", "Erwin", "Hannes", "Anton" },
                },
                new QuestionDto {
                    QuestionText = "Allen steht das Wasser bis zum Hals, nur nicht ...",
                    Fact = "Rainer, der ist kleiner.",
                    AlternativeFacts = new string[] { "Peter, der kommt später.", "Hannes, denn der kann es.", "Klaus, denn der ist im Haus." },
                },
            };
        }
    }


    public class QuestionDto
    {
        public string QuestionText { get; set; }
        public string Fact { get; set; }
        public string[] AlternativeFacts { get; set; }
    }

    public enum QuestionState
    {
        NotAnswered,
        WrongAnswer,
        ValidAnswer
    }

    public class Question
    {
        private readonly QuestionDto _data;
        private readonly int _possibleFactsCount;

        public Question( QuestionDto data, int possibleFactCount )
        {
            if ( data == null )
                throw new ArgumentNullException( nameof( data ) );
            if ( possibleFactCount <= 0 )
                throw new ArgumentOutOfRangeException( nameof( possibleFactCount ) );
            if ( data.AlternativeFacts == null )
                throw new ArgumentException( "<{0}> enthält keine " + nameof( data.AlternativeFacts ), nameof( data ) );
            if ( data.AlternativeFacts.Length < possibleFactCount - 1 )
                throw new ArgumentException( "<{0}> enthält nicht genügend " + nameof( data.AlternativeFacts ), nameof( data ) );
            _data = data;
            _possibleFactsCount = possibleFactCount;
        }

        public string QuestionText => _data.QuestionText;
        private List<string> _possibleFacts;
        public List<string> PossibleFacts
        {
            get
            {
                if ( _possibleFacts == null )
                {
                    _possibleFacts = GeneratePossibleFacts( _possibleFactsCount );
                }
                return _possibleFacts;
            }
        }
        public QuestionState State { get; private set; } = QuestionState.NotAnswered;

        private int? _answerIndex;
        public int? AnswerIndex
        {
            get { return _answerIndex; }
            set
            {
                if ( value != null && ( value < 0 || value >= PossibleFacts.Count ) )
                {
                    throw new ArgumentOutOfRangeException( nameof( AnswerIndex ) );
                }

                if ( _answerIndex != null && _answerIndex != value )
                {
                    throw new InvalidOperationException( "Eine Antwort kann nicht geändert werden." );
                }

                if ( _answerIndex != value )
                {
                    _answerIndex = value;
                    if ( _answerIndex == null )
                    {
                        State = QuestionState.NotAnswered;
                    }
                    else
                    {
                        RightAnswerIndex = _possibleFacts.IndexOf( _data.Fact );
                        if ( _answerIndex == RightAnswerIndex )
                        {
                            State = QuestionState.ValidAnswer;
                        }
                        else
                        {
                            State = QuestionState.WrongAnswer;
                        }
                    }
                }
            }
        }

        public int? RightAnswerIndex { get; private set; }

        private List<string> GeneratePossibleFacts( int possibleFactsCount )
        {
            // aus den alternative Fakten 3 zufällige Einträge auswählen
            var possibleFacts = _data.AlternativeFacts.Shuffle( ).Take( possibleFactsCount ).ToList( );
            // die richtige Antwort hinzufügen
            possibleFacts.Add( _data.Fact );
            // nochmal mischen und zur Verfügung stellen
            return possibleFacts.Shuffle( ).ToList( );
        }
    }

    public class Quest
    {
        private readonly IList<QuestionDto> _questions;
        private readonly List<Question> _answeredQuestions = new List<Question>( );
        private readonly int _possibleFactsCount;

        public Quest( IList<QuestionDto> questions, int possibleFactsCount )
        {
            if ( questions == null )
                throw new ArgumentNullException( nameof( questions ) );
            if ( possibleFactsCount <= 0 )
                throw new ArgumentOutOfRangeException( nameof( possibleFactsCount ) );
            if ( questions.Count == 0 )
                throw new ArgumentException( "{0} ist leer", nameof( questions ) );

            _questions = questions;
            _possibleFactsCount = possibleFactsCount;
        }

        public Question CurrentQuestion { get; private set; }
        public int QuestionIndex => _answeredQuestions.Count;
        public int QuestionCount => _questions.Count;

        public int WrongAnswers { get; private set; }
        public int ValidAnswers { get; private set; }

        public bool NextQuestion()
        {
            if ( CurrentQuestion != null )
            {
                switch ( CurrentQuestion.State )
                {
                    case QuestionState.NotAnswered:
                        throw new InvalidOperationException( "Beantworte die Frage" );
                    case QuestionState.WrongAnswer:
                        WrongAnswers++;
                        break;
                    case QuestionState.ValidAnswer:
                        ValidAnswers++;
                        break;
                    default:
                        throw new InvalidOperationException( "Unknown State" );
                }

                _answeredQuestions.Add( CurrentQuestion );
            }

            if ( QuestionIndex < QuestionCount )
            {
                CurrentQuestion = new Question( _questions[ QuestionIndex ], _possibleFactsCount );
                return true;
            }
            return false;
        }
    }

    public static class EnumerableExtensions
    {
        private static readonly Random _rng = new Random( );

        public static IEnumerable<T> Shuffle<T>( this IEnumerable<T> source )
        {
            return source.Shuffle( _rng );
        }

        public static IEnumerable<T> Shuffle<T>( this IEnumerable<T> source, Random rng )
        {
            if ( source == null )
                throw new ArgumentNullException( nameof( source ) );
            if ( rng == null )
                throw new ArgumentNullException( nameof( rng ) );

            return source.ShuffleIterator( rng );
        }

        private static IEnumerable<T> ShuffleIterator<T>(
            this IEnumerable<T> source, Random rng )
        {
            var buffer = source.ToList( );
            for ( int i = 0; i < buffer.Count; i++ )
            {
                int j = rng.Next( i, buffer.Count );
                yield return buffer[ j ];

                buffer[ j ] = buffer[ i ];
            }
        }
    }

}

D
Dragonfight86 Themenstarter:in
5 Beiträge seit 2017
vor 7 Jahren

@ Palin eine gute idee, ich werde das noch einbauen.
@ Sir Rufo, nette Fragen und passende Antworten.
Werde mir deinen Code jetzt mal genauer angucken und hoffe das ich da durchsteige.

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

        }
    }
}

Meine Datenbank hat eine Tabelle Land in der
//// LandID, LandKontinent,LandHauptstadt/LandName/LandFlagge ///

Habe jetzt noch folgendes Problem, wenn ich eingangs mir einen Kontinent auswählen möchte ob die Fragen darauf zu begrenzen, kann ich die Auswahl der Zufallszahlen weiter eingrenzen indem ich sage nur Zahlen (entspricht je der LandID) welche als Kontinent den ausgewählten Kontinent haben....