Entwickler-Ecke

WinForms - Projekt (Mastermind)


Firefox69 - Sa 18.02.12 17:19
Titel: Projekt (Mastermind)
Hallo,
Ich bin ein Anfänger in C# und muss ein Projekt fertig stellen..
Unten ist alles geschrieben was & wie es zu machen ist |
Ich habe mir das so oft durchgelesen & versucht Anzufangen aber komme einfach nicht weiter
Ich bin echt verzweifelt
Bitte hilft mir BITTE

------------------------------------------------------------------------------------------------------------------------
Mastermind

Spielregel:

Ein Spieler legt zu Beginn einen fünfstelligen Farbcode fest, der aus acht Farben ausgewählt wird. Jede Farbe kommt dabei nur einmal vor. Der andere Spieler versucht, den Code herauszufinden. Dazu setzt er einen gleichartigen Farbcode als Frage; beim ersten Zug blind geraten, bei den weiteren Zügen mit Hilfe der Antworten zu den vorangegangenen Zügen. Auf jeden Zug hin bekommt der Rater die Information, wie viele Stifte er in Farbe und Position richtig gesetzt hat und wie viele Stifte zwar die richtige Farbe haben, aber an einer falschen Position stehen. Ein Treffer in Farbe und Position wird durch einen schwarzen Stift angezeigt, ein farblich richtiger Stift an falscher Steller durch einen weißen Stift. Alle Fragen und Antworten bleiben bis zum Ende des Spieles sichtbar. Man hat 12 versuche.

Aufgabenstellung:

Erstelle das Spiel entsprechend der folgenden Vorgaben. Diese sind EXAKT einzuhalten:

1. Erstelle eine Klasse Master mit folgenden Eigenschaften:

zahl 5 elementiges Array, enthält die zu erratenden Zahlen
--------------------------------------------------------------------------
Master() Konstruktor: ruft nur start() auf
--------------------------------------------------------------------------
start() Legt 5 unterschiedliche Zufallszahlen fest
--------------------------------------------------------------------------
getSchwarz() Gibt zurück, wie viele Zahlen am richtigen Platz sind
--------------------------------------------------------------------------
getWeiss() Gibt zurück, wie viele Zahlen vorhanden, aber am
falschen Platz sind
--------------------------------------------------------------------------

Wichtig hierbei: Innerhalb der Klasse dürfen keinerlei Ein- bzw. Ausgaben gemacht werden. Den Funktionen getWeiss(),bzw. getSchwarz() wird ein Array mit Zahlen übergeben, das mit dem Array zahl verglichen wird.

2. Jetzt wird eine zweite Klasse erstellt. Nämlich entweder ConsoleMaster(console) oder WinMaster (graphische Oberfläche), die die oberflächenabhängigen Funktionen enthält.
Achtung: Ein- und Ausgbaben auf die Oberfläche sind hier speziell erlaubt und erwünscht.

arr | Feld, das die Benutzereingaben enthält
--------------------------------------------------------------------------
m | Ein Objekt der Klasse Master, mit dem die klasse
ConsoleMaster arbeitet
--------------------------------------------------------------------------
cheat() | Schreibt die Code-Zahlen auf den Bildschirm
(zu Testzwecken)
--------------------------------------------------------------------------
eingabe() | Eine komplette Benutzereingabe
--------------------------------------------------------------------------
gewonnen() | Liefert an das Hauptprogramm die Information zurück,
| ob die Kombination herausgefunden wurde
--------------------------------------------------------------------------
printZeile() | Schreibt die Anzahl der schwarzen,
| bzw. weissen Stifte auf dem Bildschirm
--------------------------------------------------------------------------
printErg() | Schreibt die Anzahl der schwarzen,
| bzw. weissen Stifte auf den Bildschirm
--------------------------------------------------------------------------
spielRegel() | Zeigt die Spielregeln
--------------------------------------------------------------------------

3. Zum Spielen wird jetzt das Hauptprogramm erstellt.

Zum Schluss: Bitte auch Kommentare schreiben und wo nötig falsche Eingaben verhindern

Moderiert von user profile iconNarses: Titel geändert, "Hilfeee !!!" entfernt.


Christian S. - Sa 18.02.12 18:12

Hallo und :welcome:!

Wir helfen Dir gerne, Deine Hausaufgaben zu machen. Aber wir machen sie nicht für Dich. :mahn:

Das heißt konkret: Zeige her, was Du bisher versucht hast und was Du Dir bisher überlegt hast. Erkläre, was Du nicht verstehst. Sage, wo Du nicht weiter kommst. Dabei helfen wir Dir gerne. Aber ein Posting im Sinne von "Ich komm nicht weiter, macht Ihr mal" wird hier auf wenig Gegenliebe stoßen.

Viele Grüße,
Christian


Firefox69 - Sa 18.02.12 18:14

Das war ja auch so nicht gemeint den Anfang mit dem Konstruktor versteh ich einfach nicht & das mit dem 8 farben aber nur 5 werden genommen bringt mich durcheinander


Christian S. - Sa 18.02.12 18:33

Was verstehst Du bei dem Konstruktor nicht?

Bei den Farben ist das so gemeint, dass es einen "Vorrat" von acht Farben gibt und fünf Farben aus diesem Vorrat genommen werden.

Vielleicht hilft es auch, wenn Du Dir die Offline-Variante des Spiels ansiehst: http://de.wikipedia.org/wiki/Mastermind (da werden aber andere Anzahlen von Farben benutzt)


Firefox69 - Sa 18.02.12 18:39

Das ist meine Klasse bis jetzt -.-" ich verstehs einfach nicht | Ich weiß nicht mal ob der start jetzt richtig war ?

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Mastermind
{
    class Master
    {
        int[] zahl = new int[5];

    }
}


Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


Christian S. - Sa 18.02.12 19:06

Die Konstruktor ist schonmal richtig, aber zahlen muss ein Feld der Klasse sein, im Moment ist es aber eine lokale Variable im Konstruktor.


Firefox69 - Sa 18.02.12 19:09

Das heißt ?!


Christian S. - Sa 18.02.12 19:15

Das heißt, dass ich mich vertippt habe, es muss "der Konstruktor" heißen.


Firefox69 - Sa 18.02.12 19:17

Findest du das Lustig ?


Christian S. - Sa 18.02.12 19:20

Findest Du, dass "Das heißt ?!" eine sinnvolle Frage ist?


Firefox69 - Sa 18.02.12 19:22

Ja , weil ich nicht verstanden hab was du meinst ;) ?


Christian S. - Sa 18.02.12 19:23

Und wie soll ich drauf antworten, wenn Du nicht sagst, WAS du nicht verstanden hast?


Firefox69 - Sa 18.02.12 19:26

muss ein feld der klasse sein ? |


Mitmischer 1703 - So 19.02.12 00:11

Weißt du, was Felder sind?


Th69 - So 19.02.12 11:43

Hallo Christian,

aber so wie es da steht
Firefox69 hat folgendes geschrieben:


C#-Quelltext
1:
2:
3:
4:
5:
    class Master
    {
        int[] zahl = new int[5];

    }


ist es ein Feld (Member) der Klasse, da ja gar kein Konstruktor dort deklariert ist :gruebel:

Firefox69, bist du denn jetzt schon weitergekommen? Ich hoffe mal, daß du die Grundlagen der C#-Programmierung (Klassen, Methoden, ...) schon gelernt hast, denn sonst wirst du kaum die Aufgabe hinbekommen.


Christian S. - So 19.02.12 12:40

Verdammt, da muss ich echt Tomaten auf den Augen gehabt haben :shock: :oops:


Firefox69 - So 19.02.12 17:11

Nein bin leider nicht weiter gekommen :( ..
Ich bin ehrlich gesagt verzweifelt .. !!!


Th69 - So 19.02.12 18:58

Hallo Firefox69,

um was für ein Projekt handelt es sich denn (Schule, Uni, ...)?
Und was sind deine Probleme bei der Umsetzung? Die Aufgabe gibt ja schon die konkreten Klassen und Methoden vor, d.h. du mußt diese ersteinmal von der Struktur her anlegen und sie dann der Reihe nach ausprogrammieren.

Und bis wann muß die Aufgabe denn erledigt sein? Hast du denn keine Mitschüler oder Kommilitonen, mit denen du gemeinsam diese Aufgabe lösen kannst? Für einzelne Fragen kannst du hier im Forum nachfragen, aber so wie Christian schon geschrieben hat, ist ein Forum der falsche Ort, um ganze Hausaufgaben gemacht zu bekommen.


Firefox69 - So 19.02.12 19:29

Schule | Technisches Gymnasium 11. klasse |
Ich war davor auf der Werkrealschule & hatte keinerlei Vorkenntnisse für das Programmieren
---------------------------------------------------------------------------------------------
Ich hab auch nicht verlangt das mir jemand das ganze programmiert ich hab das aufgabenblatt nur reingestellt das wenn ichs nich richtig erklären kann das ihr ein überblick habt |
------------------------------------------------------------------------------------------------
wenn mir jemand den anfang sagen würd ,dann hätt ich eine ahnung weiter zu machen | aber das mit dem 8 farben aber nur 5 werden gebraucht bringt mich durcheinander da ich jetz nicht weiß ich ich anfangen soll ..
-----------------------------------------------------------------------------------------------
Um ehrlich gesagt bin ich auch kein begabter Schüler mit lauter 1'en |
Wenn mir jemand den Start sagen würde wäre ich sehr dankbar :'P
---------------------------------------------
Ich hab nämlich grad wirklich nicht die leiseste ahnung wie ich anfangen muss :// ..


Th69 - So 19.02.12 20:06

Hallo Firefox69,

wenn es dir nur um die Zufallsmethode geht, dann kann ich dir schnell helfen.
Zuersteinmal mußt du die 8 Farben definieren. Entweder einfach als int von 1 bis 8 oder aber ein eigenes enum dafür anlegen:

C#-Quelltext
1:
2:
3:
4:
5:
enum Color
{
  Red, Green, Yellow, // ... weitere Farben
  Max
}

Dein Array sähe dann so aus:

C#-Quelltext
1:
Color[] zahlen = new Color[5]; // wobei 'zahlen' jetzt kein toller Name hierfür mehr ist ;-)                    

Dann soll dieses Array mit verschiedenen, zufälligen Farben belegt werden - dafür benötigst du die Klasse Random [http://msdn.microsoft.com/de-de/library/system.random.aspx]:

C#-Quelltext
1:
2:
3:
4:
Random random = new Random();

for (int i=0; i<zahlen.Length; i++)
  zahlen[i] = (Color)random.Next((int)Color.Max);

Jetzt fehlt nur noch, daß die Farben nicht doppelt erzeugt werden. Das lasse ich dir mal jetzt als nächste Aufgabe (hier gibt es mehrere Möglichkeiten, dies zu erreichen).
Überlege dir wie man dies logisch umsetzen kann und dann kannst du dich ja noch mal melden.

P.S. Für die 11. Klasse schon eine recht anspruchsvolle Aufgabe (ich weiß aber natürlich nicht, wie lange schon vorher Programmieren (mit C#) gelehrt wurde) - und für dich als Wechsler natürlich noch schwerer.

Hast du denn ein gutes C#-Buch? Ansonsten lies dich mal in das OpenBook Visual C# 2010 [http://openbook.galileocomputing.de/visual_csharp_2010/] bzw. noch besser (um nur die reinen Sprachelemente von C# zu verstehen) C# - Die neue Sprache für Microsofts .NET-Plattform [http://openbook.galileocomputing.de/csharp] ein.


Firefox69 - So 19.02.12 20:10

Ich meld mich sobald ich Neuigkeiten habe =) danke ((:


Firefox69 - Fr 24.02.12 22:55


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:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Mastermind
{
    class Master
    {
        public enum Color { Red = 1, Blue = 2, Green = 3, Yellow = 4, Orange = 5, Purple = 6, Brown = 7, Grey = 8, }
        
        public void Start()
        {
            Random Rnd = new Random();
            int[] zahlen = new int[5];           
            for (int i = 0; i <= zahlen.Length; i++)
            {
                zahlen[i] = Rnd.Next(18);
            }
         }

    }
}



bis jetz bin ich soweit :P ist nicht alzu weit | ist es bis jetz richtig:P

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt


Chiyoko - Fr 24.02.12 23:20

Du solltest dir die Ratschläge, welche die Community dir vorschlaegt auch wahrnehmen.
Konkret heisst das: Ohne Grundkenntnisse in C# hast du verloren.

Zitat:
Um ehrlich gesagt bin ich auch kein begabter Schüler mit lauter 1'en |

Es gibt keine unbegabten Schueler, nur faule oder uninteressierte;) (Ausnahmen bestaetigen die Regel in Form von Krankheiten).

Wenn ich du waere, würde ich mir eine einfache Form aufbauen mit 3 Buttons.
Und du wechselst auf Klick einfach nur den Text auf den Buttons.Das ist mit
der Klasse Random und google.de nicht weiter schwer.

Dabei entwickelst du automatisch eine Grundlage.