myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

Mastermind c#

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 18.05.09, 09:42   #1
Sunkidz
Anfänger
 
Registriert seit: Apr 2009
Beiträge: 10
Bedankt: 2
Sunkidz ist noch neu hier! | 0 Respekt Punkte
Standard Mastermind c#

Guten Morgen liebe Gullianer


Ich habe in der Schule aufbekommen das Spiel Mastermind zu programmieren.


Das Spiel soll so aussehen das es 4 Farben und 10 Versuche gibt.

Das ganze soll in C# programmiert werden.


Jetzt wollt ich fragen ob mir da eventuell jemand helfen kann, entweder hier im Forum, oder unter 234 336 932


MfG
Sunkidz ist offline   Mit Zitat antworten
Ungelesen 19.05.09, 22:38   #2
newlokider
Anfänger
 
Benutzerbild von newlokider
 
Registriert seit: May 2009
Ort: Thüringen
Beiträge: 17
Bedankt: 2
newlokider ist noch neu hier! | 0 Respekt Punkte
Standard

Zuerst, ich werde dir hier kein C#-Quelltext schreiben, sondern nur kurz darstellen, wie ich die Aufgabe angehen würde (schließlich hast du die Aufgabe in der Schule aufbekommen).
Außerdem muss ich noch anmerken, das ich noch nie mit C# gearbeitet habe, aber dieses sollte sich ja eigentlich nicht so stark von anderen Objektorientierten Sprachen unterscheiden.

Also, da C# nunmal den Vorteil von Klassen bietet, nutzen wir diese auch, das spart uns eine Menge schreibarbeit:

Zuerst erstellen wir das GUI (Graphical User Interface), also die Oberfläche:
Hier kannst du selber Kreativ werden, ich empfehle, das du für die Farben, die der Benutzer als Code eingeben soll 4 Canvas Elemente nebeneinander platzierst, für je eine Reihe...
Neben einer Reihe baust du je 4 runde Punkte hin (ich hab dies mit Elementen der Klasse OVAL gemacht, ich weiß nicht, ob es die in C# gibt, Canvas geht aber auch, dann musst du noch ein zusätzliches Paintevent schreiben, für Kreise, oder du hast halt kleinere 4Ecke)
Bei mir sieht das (unter MacOSX) so aus:

http://img222.imageshack.us/my.php?image=mindmaster.jpg

Nun geht es um die bennenung, die Canvaselemente, die bei mir 4eckig sind, bennenst du alle Gleich und gibst ihnen einen Index (du speicherst sie also in einem Array), das erleichtert die spätere Arbeit.
Genauso gehst du bei den anderen Elementen vor (bei mir rote Punkte)...

Nun erstellst du 2 Klassen, die du von Canvas ableitest (den Namen darfst du selber wählen), die wir jetzt mit Eigenschaften und Methoden ausstatten.
Die Steuerelemente, die du schon erstellt hast, lässt du von einer dieser beiden Klassen erben, die 4eckigen von Klasse 1 und die Runden von Klasse 2.


Klasse 1 (die für die 4eckigen Elemente):

Eigenschaften:
BgColor: Hintergrundfarbe des Elementes (As Color)
Filled: Ob dieses Element schon mit einer Farbe belegt wurde (As Boolean)
HitMode: Ob das Element von Position und Farbe übereinstimmt (dann vergibst du zum Beispiel die 2), oder nur die Farbe Richtig ist aber die Position falsch, oder beides Falsch ist (As Integer)

Methoden:
SetColor(): Dialog zur Farbauswahl aufrufen, wenn auf das Element geklickt wurde, ausgewählte Farbe als BgColor setzten für das Element, nach Überprüfung, ob noch keine Farbe gesetzt wurde [BgColor=0] (bei Realbasic wird das Element welches die Methode aufruft mit ME angesprochen, sollte in C# ähnlich sein), Compare() aufrufen


Klasse 2 (die für die runden Elemente)
Eigenschaften:
BgColor: Hintergrundfarbe des Elementes (As Color)

Methoden:
SetColor(Color): Hier wird diesmal nur die Hintergrundfarbe neu gesetzt und das Element zeigt somit den Treffer an, es wird allerdings kein Farbauswahdialog benötigt (die Farbe wird vorher von compare() übergeben)


Globales
Eigenschaften:
Felder: Ein Array in der jedes Feld an der Position seines Indexs den Wert ablegt, der seinem Treffertyp entsprcht (As Integer)
Code: Array mit 4 Stellen, in dem an jeder Stelle eine Farbe gespeichtert wird

Methoden:
Compare(Element): Vergleichen, ob das Element dieselbe Farbe und Position hat wie das entsprechende Element des geheimen Codes, entsprechend HitMode des Elements setzten und dem Element der Klasse 2,welches den selben Index hat eine neue Farbe zuweisen, also die Methode SetColor(Color) aufrufen (damit der Nutzer nachvollziehen kann, was für einen Treffer er gelandet hat), außerdem speichern in Felder.
newGame: Alle Felder (der Klasse 1 und 2) Zurücksetzten die globale Eigenschaft Felder leeren


Ich hoffe das ich mich wenigstens einigermaßen verständlich ausgedrückt habe und es nicht zu unübersichtlich geworden ist.
Ein Nachteil hierbei ist natürlich, das eine Methode mehrere Funktionen darstellt, das kann man, wenn man sauberer programmieren will, noch weiter zerlegen und somit den Wartungsaufwand und das Debbugen weniger Aufwändig gestalten...


P.s.: Damit es nur 4 Farben sind, hat jede Reihe nur 4 Felder (du solltest dann auch beim Farbauswahldialog darauf achten, das es eben nur 4 Farben gibt zwischen denen man wählen kann, ich würde Rot [RGB:FF0000], Grün [RGB:00FF00], Blau [RGB:0000FF] und Gelb [RGB:FFFF00] empfehlen.
Um das ganze Spiel auf 10 Versuche zu limitieren, kannst du entweder einen Zähler definieren, der jedesmal, wenn eine Farbe von einem Element der Klasse 1 gesetzt wird inkrementiert wird und das Spiel abbrechen, wenn dieser höher als 40 (also eigentlich 39, da die 0 mitgezählt wird in der Programmierung) ist.
Oder du überprüfst jedesmal, ob alle Elemente des globalen Arrays "Felder" ungleich 0 sind und brichst das Spiel ab, wenn dies der Fall ist.

Wenn du Fragen hast, dann schick einfach eine PM, ich versuche diese dann zu beantworten, soweit mir das als Anfänger möglich ist.


P.p.s: Was mir gerade noch auffällt, die wichtigsten Methode hab ich vergessen, du musst natürlich auch ausgeben, das wenn alle Felder einer Reihe von der Position und der Farbe mit dem Code übereinstimmen, dann sollte der Spieler gewonnen haben.
Und natürlich fehlt noch eine Funktion zum generieren eines Codes, diese ist sehr impel, du nutzt die Methode Random (möglicherweise musst du vorher einen Seed setzen, damit der Zufallsgenerator Zufallszahlen erzeugen kann, nimm hierfür am besten die aktuelle verstrichene Zeit seit der Einführung von Unix), diese rufst du in einer Schleife 4 mal auf, im Wertebereich von 1 bis 4, wobei du danach jede Zufallszahl mit einem Array deiner 4 Farben gleichsetzt und die erhaltene Farbe an der Position im Array "Code" speicherst, die identisch ist mit dem Schleifenaufruf (Schleifenaufruf n ; Code(n) = Farbe)
newlokider ist offline   Mit Zitat antworten
Ungelesen 20.05.09, 09:29   #3
Sunkidz
Anfänger
 
Registriert seit: Apr 2009
Beiträge: 10
Bedankt: 2
Sunkidz ist noch neu hier! | 0 Respekt Punkte
Standard

Ich finds toll das du dir die mühe gemacht hast, aber....

ich kenne ja nichtmal die Grundbegriffe die ich brauche.


Mein Lehrer (wer sonst ) sitzt einfach nur vorne und sagt " programmiert jetzt Mastermind" und wer mir das nicht glauben will der kann gerne in meiner Klasse nachfragen
Sunkidz ist offline   Mit Zitat antworten
Ungelesen 20.05.09, 18:29   #4
Veni_Vidi_Vici
Banned
 
Registriert seit: Sep 2008
Ort: Bayern
Beiträge: 175
Bedankt: 8
Veni_Vidi_Vici ist noch neu hier! | 0 Respekt Punkte
Standard

Dann wirds zeit, dass du dir mal ein C# Tutorial durchliest
Veni_Vidi_Vici ist offline   Mit Zitat antworten
Ungelesen 20.05.09, 22:31   #5
newlokider
Anfänger
 
Benutzerbild von newlokider
 
Registriert seit: May 2009
Ort: Thüringen
Beiträge: 17
Bedankt: 2
newlokider ist noch neu hier! | 0 Respekt Punkte
Standard

Also ganz ehrlich, du darfst das jetzt bitte nicht gegen dich gerichtet verstehen, aber wenn euer Lehrer euch nicht beigebracht hat, was Klasse, Eigenschaften, Methoden, Arrays usw. sind, dann geh zu ihm hin und sag ihm, das er unfähig ist und das ein Projekt wie Mindmaster eine strukturierte Programmierung erfordert, da ansonsten der Aufwand, den du für die Programmierung betreiben müsstest, in keinem Verhältnis zum Ergebnis steht und genau das ist der Sinn eines Programmes, eine Aufgabe, bestmöglich abzuarbeiten, das heißt, möglichst schnell (in diesem Fall ist der Unterschied zwischen Objektorientiert und ohne Klassen, zeitlich gesehen vertrehtbar, allerdings ist Mindmaster ja auch ein relativ kleines Projekte, welches in maximal 5-6 Stunden zu schaffen ist), mit möglichst wenig Speicherverbrauch (auch eher bei größeren Projekten, zum Beispiel 3D-Games relevant).
Um diese Anforderungen zu erreichen, abstrahiert man ja als Programmierer ein Problem und dann setzt man es in Programmcode um, wobei es hilfreich ist und schreibarbeit abnimmt, wenn man das Problem soweit abstrahiert, das man es in immer wieder erscheinende Teilprobleme zerlegen kann, die man dann in verschiedenen Methoden abarbeitet, damit man ein Teilproblem nicht 5 mal neu lösen muss im Code, sondern einfach eine Methode für dieses Teilproblem aufrufen kann.

Wenn nun aber die Grundlagen für eine solche strukturierte Programmierung fehlt, dann dauert nicht nur der Prozess des Programm schreibens sehr lange (aufgrund der Tatsache, das es weitaus länger dauert, ein Problem mehrmals neu zu lösen, als einmal eine allgemeine Lösung zu entwickeln und diese dann mit Parametern zu füllen), sondern es entsteht dabei hochgradig ineffizienter Code, der nicht nur lange in der Ausführung dauert und enorme Speichverluste verursachen kann, sondern der zudem, aufgrund seiner Unübersichtlichkeit, Unsicher ist, also zum Beispiel viele Buffer-Over-Flows bietet.

Das alles ist bei einem kleineren Projekt wie Mindmaster natürlich nicht so ein großes Problem, da wir aber als Schüler anhand eines solchen Projektes ja lernen sollen, wie ein Projekt grundsätzlich lösbar ist, denke ich ist es sinnvoll, von Anfang an richtig programmieren zu lernen...

Ich selber habe mit PHP angefangen und das völlig unstrukturiert, so wurde der Umstieg auf Objektorientierte Sprachen für mich zum Horrortrip, das möchte ich dir einfach ersparen.

Vielleicht kannst du ja mithilfe meiner Schilderungen deinen Lehrer davon überzeugen, das es absolut sinnfrei ist, von euch zu verlangen ein solches Projekt anzugehen, ohne euch die Grundlagen vermittelt zu haben.




P.s.: Ich würde mir an deiner Stelle einfach mal vom Lehrer zeigen lassen, wie er die Aufgabe angehen würde:
- Wenn er eine Lösung hat, die objektorientiert ist (mit Klassen und Ableitungen), dann sollte er einsehen,
das er euch zuerst diese Grundlagen beibringen muss.
- Wenn er eine unstrukturierte Lösung hat, dann kannst du ihm ruhig sagen, das er ein Versager seines
Faches ist und doch lieber Kochkurse geben soll, vielleicht liegt ihm das mehr.
- Wenn er gar keine Lösung hat, dann verlange von ihm, das er eine Beispiellösung erstellt, damit er selber
sieht, wie schwer die Aufgabe ist
- Wenn er eine funktionelle, einfache Lösung hat, die sich von meiner in der Herangehensweise unterscheidet,
dann frag ihn in meinem Namen mal bitte nach seinem Lösungweg, damit ich auch daraus lernen kann


Sorry, das es wieder so Lang geworden ist....
newlokider ist offline   Mit Zitat antworten
Ungelesen 27.05.09, 12:10   #6
Milltach
Pinguinsharingan -nutzer
 
Benutzerbild von Milltach
 
Registriert seit: May 2009
Ort: Schweiz
Beiträge: 8
Bedankt: 76
Milltach ist noch neu hier! | 0 Respekt Punkte
Standard

Hi,

also wenn der lehrer gemeint hat, dass Ihr das einfach programmieren sollt, dann heißt das für mich dass es egal ist wie dein code aussieht. Dh. objektorientiert oder auch nicht ist egal. Was schonmal gut ist, dann kannst du als anfänger schön nen [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ] hinklatschen und gut ist

Zum glück ist C# an windows user gerichtet => idiotensicher und kann leicht erlent werden. Wie schon gesagt, einfach mal tutorials durchlesen. Aber eine wichtige frage wäre da schon: Wenn du sagst du kennst nichtmal die grundbegriffe, was meinst du damit? Dass ihr in der schule kaum was könnt oder dass DU kaum was kannst. Weil wenn es andere gibt die besser sind als du, kannst du ja mit den das ganze zeug besprechen, ist immer besser wie mit leuten die nicht an deine schule sind und somit garnicht wirklich wissen was sache ist.

Gruß
__________________
Du bist [ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
Milltach ist offline   Mit Zitat antworten
Ungelesen 22.10.09, 08:34   #7
urga
Mitglied
 
Benutzerbild von urga
 
Registriert seit: Aug 2009
Ort: void* (*wtf[])(void **);
Beiträge: 454
Bedankt: 137
urga ist noch neu hier! | 0 Respekt Punkte
Standard

wenn mal wieder jemand mastermind in c# benoetigt, hier:
[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]

allerdings gibts dafür vom lehrer garantiert 0 punkte, weil nicht dokumentiert

mastermind per gui ist m.e. ziemlich ungeeignet für blutige anfänger. es gibt doch einige
hürden.
als billige consolenanwendung evntl. machbar, dann aber nicht wirklich spielbar. und das macht keinen spaß.
__________________
entropie erfordert keine wartung
urga ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:33 Uhr.


Sitemap

().