Autor Beitrag
Namenlosnameless
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Sa 13.06.09 08:27 
Hallo!

Ich habe ein Problem mit meinem Programm, welches Turniere generieren soll (Also Mitspielerlisten in Paare und Gegner aufteilen) und zwar basiert es auf Spielstärke von 1-3. Es dürfen immer nur Spieler mit der gleichen Stärke gegeinander antreten. Die Spielstärke wird mit einem NumericUpdown fetsgestellt, die Spieler müssen die stärke bei einem Spiel selber einschätzen!

ich habe nun 2 Array's erstellt in den ersten sind nun die "textBox.Text" mit den Spielernamen enthalten im 2ten die Values von den numericUpDown's.

Da immer 2 Spieler gegen 2 andere Spielen sollen habe ich 4 variablen mit dem Random Befehl auslosen lassen,
Es werden nun alle Spiel stärken der 4 ausgelosten Spieler aus dem 2ten Array verglichen wenn sie gleich sind werden die namen in andere Textboxen geschrieben.

1Problem: Das programm braucht ewig um nur eine Textbox mit den 4 Namen zu füttern, da ich noch blutiger Anfänger bin und mein Befehlwortschatz noch ziemlich eingeschränkt ist würde ich euch bitten mir eine einfachere Variante vorzuschlagen. Den Programmcode findet ihr unten!

Wenn das geschehen ist muss irgendwie sicher gestellt werden das der selbe Name nicht 2 Mal vorkommt ich habe mir gedacht die Value des numericUpDown's auf null zu setzen und mit einer if auszusortieren.

2Problem: Ich kann im array nicht die Value des nuericUpDowns ändern!





Achtung dieser Code basiert auf einem Testlauf das heißt er ist nur für das füllen einer Textbox gedacht.

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:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
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
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string[] Array1 = {textBox1.Text, textBox2.Text, textBox3.Text, textBox4.Text, textBox5.Text, textBox6.Text, textBox7.Text, textBox8.Text, textBox9.Text, textBox10.Text, textBox11.Text, textBox12.Text, textBox13.Text, textBox14.Text, textBox15.Text, textBox16.Text, textBox17.Text, textBox18.Text, textBox19.Text, textBox20.Text, textBox21.Text, textBox22.Text, textBox23.Text, textBox24.Text, textBox25.Text, textBox26.Text, textBox27.Text, textBox28.Text, textBox29.Text, textBox30.Text, textBox31.Text, textBox32.Text, textBox33.Text, textBox34.Text, textBox35.Text, textBox36.Text, textBox37.Text, textBox38.Text, textBox39.Text, textBox40.Text, textBox41.Text, textBox42.Text, textBox43.Text, textBox44.Text, textBox45.Text, textBox46.Text, textBox47.Text, textBox48.Text, textBox49.Text, textBox50.Text, textBox51.Text, textBox52.Text, textBox53.Text, textBox54.Text, textBox55.Text, textBox56.Text, textBox57.Text, textBox58.Text, textBox59.Text, textBox60.Text, textBox61.Text, textBox62.Text, textBox63.Text, textBox64.Text, textBox65.Text, textBox66.Text, textBox67.Text, textBox68.Text, textBox69.Text, textBox70.Text, };
            decimal[] Array2 = { numericUpDown1.Value, numericUpDown2.Value, numericUpDown3.Value, numericUpDown4.Value, numericUpDown5.Value, numericUpDown6.Value, numericUpDown7.Value, numericUpDown8.Value, numericUpDown9.Value, numericUpDown10.Value, numericUpDown11.Value, numericUpDown12.Value, numericUpDown13.Value, numericUpDown14.Value, numericUpDown15.Value, numericUpDown16.Value, numericUpDown17.Value, numericUpDown18.Value, numericUpDown19.Value, numericUpDown20.Value, numericUpDown21.Value, numericUpDown22.Value, numericUpDown23.Value, numericUpDown24.Value, numericUpDown25.Value, numericUpDown26.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, numericUpDown1.Value, };

        Random Rnd=new Random();
        int x;
        int y;
        int z;
        int w;
        int Stellenanzahl;
        string v;
        int a;
        string Spieler1;
        string Spieler2;
        string Gegner1;
        string Gegner2;
        decimal Stärke1;
        decimal Stärke2;
        decimal Stärke3;
        decimal Stärke4;
        int b;
        int c;
        int d;
        int f;


        v = textBox71.Text;
        a = 0;

        if (v == "")
        {
            MessageBox.Show("Bitte die Mitspieleranzahl in das Untere Dialogfeld eintragen!");
        }

        Stellenanzahl = Convert.ToInt32(v);
        

        while (a != Stellenanzahl)
        {
        Reference2:
         x = Rnd.Next(0, Stellenanzahl);
        w = Rnd.Next(0, Stellenanzahl);
        y = Rnd.Next(0, Stellenanzahl);
        z = Rnd.Next(0, Stellenanzahl);

        Stärke1 = Array2[x];
        Stärke2 = Array2[y];
        Stärke3 = Array2[w];
        Stärke4 = Array2[z];
        Spieler1=Array1[x];
        Spieler2=Array1[y];
        Gegner1=Array1[w];
        Gegner2=Array1[z];

        b = Convert.ToInt32(Stärke1);
        c = Convert.ToInt32(Stärke2);
        d = Convert.ToInt32(Stärke3);
        f = Convert.ToInt32(Stärke4);

        if (b==c)
        {
            goto Reference1;
        }
        if (b == 0 || c == 0 || d == 0 || f == 0)
        {
            goto Reference1;
        }

        goto Reference2;
        Reference1:
        if (b == d)
        {
            goto Reference3;
        }
        goto Reference1;
        Reference3:
        if (b == f)
        {
            goto Reference4;
        }
        goto Reference1;
        Reference4:
            if(a==0)
            {
                textBox72.Text = (Spieler1 + " und " + Spieler2 + " vs." + Gegner1 + " und " + Gegner2);
            }
        if (a == 1)
        {
            textBox73.Text = (Spieler1 + " und " + Spieler2 + " vs." + Gegner1 + " und " + Gegner2);
        }
        
        a = a + 1;
        }




        }
    }
}

_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 13.06.09 09:15 
Durch die ganzen goto Befehle ist das Programm auch praktisch nicht überschaubar, da ist es selbstverständlich schwer zu optimieren...

Bis man da den Quelltext überblickt, dauert es lange, wenn man den nicht kennt. Insbesondere auch wegen der Variablenbezeichnungen (a, b, c, d, textBox72, textBox73, ...). Deshalb kann ich auf die Schnelle erst einmal nichts weiter dazu sagen. Ich vermute aber, wenn du dir das ohne goto richtig überlegst, dann wird es auch schon schneller sein.

Direkt sehen tue ich eigentlich nichts was da so besonders lange dauern sollte, aber ich schau nochmal hin was da eigentlich passiert...
Namenlosnameless Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Sa 13.06.09 09:28 
Das mit Textbox 72 kommt dadurch zustande das es bis zu 70 mitspieler sein können und eine Textbox für die Mitgliederanzahl und noch 18 andere für weitere für 17 doppel und ein einzel

was soll ich an den goto anders machen? Gibt es in der if schleife wenn man die definition ein gibt einen Befehl das beide bedignungen gelten müssen also praktisch ein "and"? dann würde das schon mal ziemlich schnell werden!

Imo ist das programm so langsam weil sobal die erste bidingung das bedeutet die erste Stärke(als b bezeichnet) nicht gelich der 2ten ist er alle 4 neu auslost!

_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 13.06.09 09:30 
user profile iconNamenlosnameless hat folgendes geschrieben Zum zitierten Posting springen:
Gibt es in der if schleife
if-schleife.de/

user profile iconNamenlosnameless hat folgendes geschrieben Zum zitierten Posting springen:
wenn man die definition ein gibt einen Befehl das beide bedignungen gelten müssen also praktisch ein "and"?
ausblenden C#-Quelltext
1:
2:
if ((a > b) && (c > d))
  MessageBox.Show("a ist größer als b UND c ist größer als d");
// EDIT:
msdn.microsoft.com/d...ibrary/2a723cdk.aspx
msdn.microsoft.com/d...ibrary/6a71f45d.aspx
Namenlosnameless Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Sa 13.06.09 09:40 
sry das ich nicht gegoogelt habe aber diese idee wurde während des schreibens geboren!

_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>
Namenlosnameless Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Sa 13.06.09 11:21 
hat jetzt irgendwer eine idee wie jeder Name nur einmal verwendet wird? Oder wie man objekte durch einen Array auswählt und dann die Properties ändern kann

_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 13.06.09 11:30 
user profile iconNamenlosnameless hat folgendes geschrieben Zum zitierten Posting springen:
Oder wie man objekte durch einen Array auswählt und dann die Properties ändern kann
Da gibt es Control.ControlCollection.Find:
msdn.microsoft.com/d...collection.find.aspx
Namenlosnameless Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Sa 13.06.09 11:47 
oke danke! Ich hab das Problem anders gelöst!

mit
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
Array2[x]=0;
Array2[y]=0;

if (Array2[x]==0||Array2[y]==0)
{
Goto Reference1;
}


Das funktioniert auch!

_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Sa 13.06.09 12:24 
Hallo,

auch wenn du inzwischen "weiter" bist, möchte ich noch ein paar Hinweise geben. Sebastians Warnung vor den vielen goto's unterstütze ich vehement. Es gibt viele ernsthafte Programmierer, die bedauern es außerordentlich, dass goto überhaupt noch zulässig ist.

Arrays haben (im wesentlichen) eine feste Größe, sind also nicht flexibel. Das mag für die Spieler einer Partie angehen, aber wenn du bis zu 70 Teilnehmer hast, solltest du besser auf List<string> übergehen. Wegen der Spielstärke ist vielleicht sogar Dictionary<string, int> für Name+Spielstärke geeignet.

Du solltest die Spiellogik von der Anzeige in den Textboxen trennen und in eine eigene Klasse auslagern. Das wird vieles zusätzlich vereinfachen. Vielleicht sollte es auch noch eine Klasse Spieler geben.

new Random gehört einmalig in den Konstruktor (oder Form-Load), aber nicht in jeden Button-Click.

Jürgen

/Edit
Für Arrays gibt es IndexOf, für Listen IndexOf und Contains, für Dictionary ähnliche Methoden. Auch deshalb plädiere ich dafür.
Namenlosnameless Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Sa 13.06.09 15:13 
Ich blick durch die Klassen noch nicht ganz durch! wozu brauch ich berhaupt klassen?

Wenn ich das Random in Form1_Load schreibe, ist das "Rnd" oder wie auch immer ich das nenne auch für Button_Click oder andere Events gültig???

Was ist der Konstruktor?

Sry das ich so blöde fragen stelle aber ich programmiere erst seit ca. 3 Wochen!

_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Sa 13.06.09 15:33 
user profile iconNamenlosnameless hat folgendes geschrieben Zum zitierten Posting springen:
Ich blick durch die Klassen noch nicht ganz durch! wozu brauch ich berhaupt klassen?

:roll: Das NET Framework und damit auch C# ist OOP (objekt-orientierte Programmierung), und die Objekte werden durch Klassen dargestellt. Alles sind Klassen, auch ein int (= System.Int32) oder ein String. Ist dir schon aufgefallen, dass dein allererster Code ziemlich am Anfang so lautet:
ausblenden C#-Quelltext
1:
    public partial class Form1 : Form					

Auch hier beginnt eine Klasse, ebenso auch das "Hauptprogramm" in der Datei program.cs.

user profile iconNamenlosnameless hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich das Random in Form1_Load schreibe, ist das "Rnd" oder wie auch immer ich das nenne auch für Button_Click oder andere Events gültig???

Du musst natürlich darauf achten, wo eine Variable deklariert wird. Wenn sie innerhalb einer Methode deklariert wird, ist sie nur dort gültig und wird sofort danach wieder aufgelöst und dem GC (Garbage Collector) zum Aufräumen freigegeben. Wenn sie mehrfach benötigt wird wie der Zufallsgenerator, muss sie an einer Stelle deklariert werden, wo sie während der Gültigkeit von Form1 (genauer: einer Instanz der Klasse Form1) zur Verfügung steht, also innerhalb von "class Form1", aber nicht innerhalb einer Methode.

user profile iconNamenlosnameless hat folgendes geschrieben Zum zitierten Posting springen:
Was ist der Konstruktor?

Etwas mehr Eigeninitiative bitte! Eine mögliche Antwort steht unter Wikipedia, andere in jedem Grundlagenbuch über C#, NET oder OOP. Konkret in deinem Formular ist es die spezielle Methode Form(), die keinen Rückgabewert enthält, sondern nur als public deklariert wurde.

user profile iconNamenlosnameless hat folgendes geschrieben Zum zitierten Posting springen:
Sry das ich so blöde fragen stelle aber ich programmiere erst seit ca. 3 Wochen!

Dann solltest du dich unbedingt konkret einarbeiten mit einem (gedruckten) Buch oder notfalls mit dem OpenBook Visual C#. Zumindest die Fragen nach Klassen und Konstruktoren sehen so aus, als wenn dich das Programmieren nicht wirklich interessiert.

Jürgen
Namenlosnameless Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Sa 13.06.09 15:52 
ICh bin 15 Jahre alt wenn mich das Programmieren nicht interessieren würde dann hätte ich einige andere Sachen zu machen! Ich hab mir ganz am anfang, als ich mit c# begonnen habe alle 600 Seiten von Galileo-Computig durchgelesen! Habe es dabei aber wohl übertrieben und mir nict alles gemerkt!
Aber danke das du mir das erklärt hast!

_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Sa 13.06.09 17:43 
user profile iconNamenlosnameless hat folgendes geschrieben Zum zitierten Posting springen:
ICh bin 15 Jahre alt wenn mich das Programmieren nicht interessieren würde dann hätte ich einige andere Sachen zu machen!

Alles klar, entschuldige, falls ich dich zu hart angegangen bin!

user profile iconNamenlosnameless hat folgendes geschrieben Zum zitierten Posting springen:
Ich hab mir ganz am anfang, als ich mit c# begonnen habe alle 600 Seiten von Galileo-Computig durchgelesen! Habe es dabei aber wohl übertrieben und mir nict alles gemerkt!

Das scheint mir auch so. Vielleicht hättest du dich auf die ersten 50 oder 100 Seiten konzentrieren und diese intensiv durcharbeiten sollen (nicht nur durchlesen).

user profile iconNamenlosnameless hat folgendes geschrieben Zum zitierten Posting springen:
Aber danke das du mir das erklärt hast!

Danke!

Könnte es sein, dass du weitgehend ohne persönliche Rücksprache arbeitest (arbeiten musst)? Das behindert natürlich den Lernfortschritt, wie ich aus eigener Erfahrung weiß; aber ich habe keine Idee, wie man das als "Einzelkämpfer" besser regeln kann.

Gruß Jürgen
Namenlosnameless Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Sa 13.06.09 18:23 
Nein es war nicht hart oder so! Wollte dir nur beweisen das ich mich fürs programmieren interessiere!

Was meinst du ohne Persönliche Rücksprache??

_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Sa 13.06.09 18:54 
user profile iconNamenlosnameless hat folgendes geschrieben Zum zitierten Posting springen:
Was meinst du ohne Persönliche Rücksprache??

Wenn man nur mit dem Computer und virtuellen Gesprächspartnern übers Programmieren redet, aber nicht mit natürlichen Personen, die neben einem sitzen. Diese Vermutung habe ich, weil Grundbegriffe wie Klasse, Konstruktor usw. bei dir noch nicht als selbstverständlich angekommen sind. Jürgen
Namenlosnameless Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 259
Erhaltene Danke: 6

Windows XP Home Edition, Windos Vista
C#
BeitragVerfasst: Sa 13.06.09 19:07 
Naja ich hab jemanden in meiner Klasse Marc Brexner (ist hier auch member) aber er ist etwas sehr stolz darauf das er schon fast Perfekt programmieren kann drum gibt er mir nur beschränkt ausunft gibt! Sonst ihr im Forum.

Achja und zu deiner Vorigen nachricht: Niemand zwingt mich soein Programm zu schreiben, ich mach das rein Freiwillig als Übung und Jux!

_________________
1:<<Life sucks!!>> 2:<< Well okay>> 1: <<Just Yours>> 2:<<Ohmph>>