![]() |
Der "Color-Code"
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo meine lieben mit Streiter des Programierfeldes.
Ein Kumpel von mir weis das ich Spiele Programierer werden will und gab mir die klitze kleine aufgabe für ihn ein "Spiel" zu entwerfen. Er nannte es "Color-Code" Und wie der Name schon sagt es geht darum, das man einen Farben Code zusammen bekommt und ihn sich merkt. Alles funktionier einband frei das programm generiert einband frei und bla bla bla nur! ich müss meinen Abgleich zurück Initalisiren, Mit "Abgleich:=StrToInt('');" gehts nicht wäre Super wenn da jemand was passendes hätte :) Ich werde das Spiel gleich mal mit Anhängen :) Eine gute nacht und einen Traum voller Codes Wünscht euch DragonD93 |
AW: Der "Color-Code"
Zitat:
|
AW: Der "Color-Code"
Guten Abend...
2 Nachfragen: - Kannst du bitte mal den Ablauf des Spieles näher erklären ? - wozu dienen die 2 Variablen Abgleich und Abfolge ? Hinweise: - Randomize nur einmal im Programm aufrufen. z.B. im OnCreate des Formulars - DRY Prinzip. Es gibt Möglichkeiten doppelten Code zu vermeiden. Aber erst mal muß es funktionieren...:zwinker: |
AW: Der "Color-Code"
Liste der Anhänge anzeigen (Anzahl: 1)
Eigentlich funktionierte bis bis auf das einmalige Setzen der Farben gar nichts...ich weiß nicht ob ich den Sinn des Spieles wirklich verstanden haben...
|
AW: Der "Color-Code"
Zitat:
Das hab ich schon öfter im Forum gelesen und wollte mal fragen, was dahinter steckt. Auch 'nur' DRY oder nochwas anderes? |
AW: Der "Color-Code"
Nein, kein DRY.
Der Zufallsgenerator liefert über die Zeit eine "gleichverteilte" Zahlenmenge. Initialisierst du ihn ständig neu (Randomize ist ja dafür da), dann kann die Verteilung ungünstig beeinflußt werden, wobei dann einige Werte viel öfters vorkommen, als Andere. Es könnte sogar passieren, daß sich Zahlengruppen in kurzer Zeit wiederholen.
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE} uses SysUtils; var i1, i2, i3, i4: Integer; i5, i6, i7, i8: Integer; begin try RandSeed := 123456789; //Randomize; i1 := Random(100); i2 := Random(100); i3 := Random(100); i4 := Random(100); RandSeed := 123456789; //Randomize; i5 := Random(100); i6 := Random(100); i7 := Random(100); i8 := Random(100); WriteLn(Format('%d %d %d %d', [i1, i2, i3, i4])); WriteLn(Format('%d %d %d %d', [i5, i6, i7, i8])); ReadLn; except on E: Exception do begin WriteLn(E.ClassName, ': ', E.Message); ReadLn; end; end; end. ![]() ![]() |
AW: Der "Color-Code"
Verstehe, danke.
RandSeed nutzt man also (wie in deinem Beispiel), wenn man Zufallszahlen reproduzieren oder einen "ganz bestimmten Zufall" haben will? Macht wahrsch. nur zu Testzwecken Sinn, da ja in den Links bzw. der Hilfe steht, dass man es keinesfalls zur Verschlüsselung verwenden soll. |
AW: Der "Color-Code"
Man sollte besser von Pseudozufall (engl. pseudo random) sprechen. Der eigentliche Generator liefert immer eine feste Folge von 32-Bit Werten, insgesamt 2^32 = 4294967296. Das einzige was man mit Randseed (oder Randomize) wählt, ist die Startposition innerhalb dieser Folge.
Man sollte den Generator u.a. deshalb nicht für ernsthafte kryptographische Zwecke benutzen, weil die 2^32-Zustände einfach viel zu wenig sind (und damit in vielen Fällen dann Bruteforce-Attacken möglich sind). |
AW: Der "Color-Code"
Zeichnet sich ein ''Zufall'' nicht dadurch aus, das jede option bei jeder ziehung die selbe wahrscheinlichkeit hat und das es eben auch möglich ist immer die selbe sache zu ziehen?
(Möglich nur eben gering wahrscheinlich..) Daher müsste doch Randomize genau das gewünschte ergebeniss bringen oder ? einen reellen zufall |
AW: Der "Color-Code"
Zitat:
|
AW: Der "Color-Code"
Zitat:
Zitat:
|
AW: Der "Color-Code"
oh oh oh,
genau das habe ich mir schon gedacht das der sinn des spiel und die funktions weise nicht ganz klar ist ;) also fangen wir am besten einfach mal von forne an :) der sinn des spiels liegt darin das der spieler auf den obrigen button "Aögorythmus berechnen" drückt und eine farbe als hintergrund bekommt die er au drücken muss (button mit der dazugehörigen farbe). beim erssten mal ist es eine frabe beim 2. mal 2 farben aber mit der 1. farbe + eine zufälleige und so weiter ich denke das sollte wohl geklärt sein und wozu mach ich das? er wollte das spiel einfach mal haben und bisschen euch beschäftigen :) und das es weit bessere methoden gibt für den gleichen code etc war mir irgend wie schon klar nur man muss ja erst mal wissen wie und ein funktionirendes programm haben :) hoffe das beantwortet alles Gruß DragonD93 Edit: Die Variablen haben noch gefehlt es tut mir leid :) also Die variable Abfolge steht für Die Kombination die der Spieler Drücken muss Die Variable Abgleich steht für die Kombination die der Spieler eingibt PS: Bummi danke für den hinweis mit Case of aber den hätte ich höchstwahrscheinlich später selbst noch eingefügt ;) |
AW: Der "Color-Code"
Liste der Anhänge anzeigen (Anzahl: 1)
Mahlzeit ihr lieben ^.^
vorweg: Ich hoffe ich verstoße nicht gegen die foren regeln verstoße mit einem doppel post. Nun zum eigentlichen post ich wollte einfach nur mal durch geben das ich das Spiel soweit funktions tüchtig gemacht habe, sprich wenn man die richtige Kombination eingegeben hat dann kommt ne meldung das es die richtige kombination war. wenn man jetzt aber eine faschle kombination eingibt kommt kein error. wenn mir da jemand etwas nützliches geben könnte wäre es sehr nett. ich hänge einfach noch mal das funktionirende Spiel an und hoffe auf hilfe :) bisdahin DragonD93 |
AW: Der "Color-Code"
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ab Level2 geht es nämlich bei mir nicht mehr wie es sollte. Dieser 'Lacher' & der die Tatsache, dass ich bisher noch nie ein "Spiel" entwickelt habe waren der Grund genug weshalb ich mich ebend hingesetzt habe um es zu programmieren. Es war von der Logik doch etwas umfangreicher als zu erst angenommen. (Ca. 1:00 Std) Tipp für das nächste Mal: Konkretisier deine Frage so gut es geht WAS genau WO (sofern bekannt) nicht geht. Niemand hat i.d.R. Lust dir dein Programm zu schreiben :thumb: Liebe Grüße, Mike P.S.: Solltest du Probleme haben es zu öffnen mit Delphi6 (Da mit Delphi2007 geschrieben), dann öffne dir die Unit2.pas im Editor und kopiere den Quellcode manuell. |
AW: Der "Color-Code"
Hey Mike,
danke das du dir die Zeit genommen hast :) Dein Programm ist nicht schlecht :) Es stellt sich mir nun die frage, wenn ich immer nur auf die neue farbe drücken muss wo bleibt dann die herausforderung? Die schwirigkeit die ich mir vorgestellt habe war wie gesagt das man sich die vorherigen farben merken musste. Beispiel: Generierte farben in den ersten 3 fällen: {Generiert mit der variable X} -Blau -Grün -Gelb {Die kombination der farben ist bei mir die Variable "Abfolge" Die "Abfolge" muss erreicht werden um ein level auf zusteigen. Neben bei wird eine Zähler Variable "Zahlenlaenge" hoch gezählt für die Level bedingungen.} Erster zug: Das Programm sagt das der Spieler blau drücken soll - Spieler drückt Blau um in level 2 zu gelangen {Die Eingabe ist der "Abgleich" wie der name schon sagt gleicht die variable ab und wenn Abfolge und Abgleich gleich sind steigt der Spieler ein Level auf. Neben bei wird hier auch eine Zähler Variable "Knopfdrucks" mit gezählt für die bedingung des verliehrens.} Zweiter Zug: Das Programm sagt das der Spieler Grün drücken soll - Spieler muss Blau + Grün drücken um in Level 3 zu gelangen Dritter Zug: Das Programm sagt das der Spieler Gelb drücken soll - Spieler muss Blau + Grün + Gelb drücken um in Level 4 zu gelangen das ist die schwirigkeit die sich mir gegenüber stellt das die kombination eingeben muss und bei einer fehl eingabe das spiel neugestartet wird. ich hoffe anhand meines beispieles wird das sichtbar ich brauche nur eine abbruch bedingung, imoment sieht die so aus If(Abgleich <> Abfolge) and (Zahlenlaenge = Knopfdrucks) then aber da bekomme ich immer einen fehler, das Programm/Spiel was auch immer ist ja 2 beiträger vorher wenn jemand mal darauf gucken mag und vielleicht eine idee hat wäre das sehr schön :) weil ein Programm/Spiel das nicht sagt wenn man falsch liegt ist doch doof oder? ;) und um Mikes tipp gleich direkt mal an zu wenden Das Dick makierte 5 Zeilen weiter oben ist die abbruch bedingung die mir exteme kopfschmerzen bereitet da bräuchte ich hilfe :) |
AW: Der "Color-Code"
Zitat:
Ist simpel in mein gepostetest Programm integrierbar. Du machst dir eine weitere Hilfsvariable herein vom Typ TColor welche du anstelle der Form2.Color mit dem aktuellen Farblevel (Bei dir hieß es Abfolge) füllst. Dann haust du noch eine if Abfrage in die entsprechende Prozedur/en, dass wenn Farblevel... [Gedankenblitz] Ich erinnere mich gerad welches Spiel du meinst und programmier das mal so um dass es auch "hübsch" aussieht. |
AW: Der "Color-Code"
Zitat:
Und wieso hat er dich damit zum lachen gebracht? Jeder fängt mal klein an, und lieber sowas programmieren als irgendein komplexes Programm, was heute die Neulinge andauernd herstellen wollen, wieso auch immer. Und deine 1h arbeit hat wohl auch net ausgereicht, denn bis Level 10 (hab ich getestet) geht bei dir außer Rot und Blau auch nichts.... |
AW: Der "Color-Code"
Scheint sich hier wohl um ein Nachbau von "Senso" zu handeln.
Werden vermutlich die älteren hier noch kennen :stupid: |
AW: Der "Color-Code"
Liste der Anhänge anzeigen (Anzahl: 2)
Lieber lbccaleb,
als ich heute früh auf den Post geantwortet hatte, kam es mir ebenfalls überheblich vor. So wurde er aber nicht verfasst wie du dir die Zitate herausgepickt hast, siehe : Zitat:
Abgesehen davon habe ich selbst 3 neue Dinge aus diesem Projekt gelernt und möchte das Wissen, was mir Delphi Praxis bringt auch in einer Form zurückgeben. Denn so funktioniert eine gute Community. Zitat:
Das liegt einfach an Randomize. (Siehe dieser Thread, hast du bestimmt gelesen.) Kann dir auch passieren, dass eine Farbe bis Level 20 kommt. :lol: Ich schließe mit dem tollen Zitat von mkinzler ab :) Zitat:
Sollte ich dich bei einem Delphi-Praxis Treffen mal treffen, lachen wir bei einem Bier hierüber :-D Zitat:
Spiel ist im Anhang. Herzliche Grüße, Mike |
AW: Der "Color-Code"
hey mike,
danke für dein programm im anhang, leider funktioniert es bei mir nicht richtig und es gibt einen deplhi praxis treffen? o.O wann isn das? |
AW: Der "Color-Code"
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:
Ich gehe eher davon aus dass du es nicht "einfach importieren" kannst, du du eine andere Delphi Version verwendest. Daher ist folgendes angesagt : 1.) Neue VCL Form erstellen in deiner IDE. [Neues Projekt] 2.) Ziehe dir 1 Button und 5 Panels auf die Form. 3.) Füge auf Panel1 folgendes hinzu 1 x TLabel -> Name: Label_Level 1 x TLabel -> Name: Label1 4.) Benenne die Panels2-5 um in: Panel2 -> Panel_Col0 Panel3 -> Panel_Col1 Panel4 -> Panel_Col2 Panel5 -> Panel_Col3 Dann muss deine Struktur so aussehen wie im Anhang. 5.) Kopiere dir den relevanten Teil aus dem Quellcode: (Bei dir wird die Form ggf. anders heißen, daher nicht einfach Str+c und Str+v einfügen und dann sagen "geht nicht". Kopiere sinnvoll !
Delphi-Quellcode:
Edit://
////
//Created on 06.02.11 by Mike_ //// unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm2 = class(TForm) Button1: TButton; Label1: TLabel; Label_Level: TLabel; Panel1: TPanel; Panel_Col0: TPanel; Panel_Col1: TPanel; Panel_Col2: TPanel; Panel_Col3: TPanel; procedure FormCreate(Sender: TObject); procedure mixColors(); procedure NextColor(); procedure NextLevel (); procedure FirstStart(); procedure ShowColorSqeuence(); procedure CheckAnswer(ColorOfButton: TColor); procedure Button1Click(Sender: TObject); procedure Panel2Clck(Sender: TObject); procedure Panel_Col2Click(Sender: TObject); procedure Panel_Col1Click(Sender: TObject); procedure Panel_Col3Click(Sender: TObject); private { Private declarations } public { Public declarations} end; var Form2: TForm2; FarbListe: TStringList; Level, DerzeitigesFarbLevel: Integer; implementation {$R *.dfm} procedure Delay(time:Integer); var i: integer; begin for i := 0 to time do begin Sleep(10); Application.ProcessMessages; end; end; procedure TForm2.ShowColorSqeuence(); var i : Integer; begin for I := 1 to FarbListe.Count - 1 do begin case ColorToRGB(StringToColor(FarbListe.ValueFromIndex[I])) of 32768: RandSeed:=0; // RGB of clGreen 255: RandSeed:=1; // RGB of clRed 65535: RandSeed:=2; // RGB of clYellow 16711680: RandSeed:=3; // RGB of clBlue end; TPanel(FindComponent('Panel_Col'+IntToStr(RandSeed))).Color := StringToColor(FarbListe.ValueFromIndex[I]); Delay(75); TPanel(FindComponent('Panel_Col'+IntToStr(RandSeed))).Color := clBtnFace; Delay(25); end; end; procedure TForm2.mixColors(); begin Randomize; RandSeed := Random(4); //ShowMessage(IntToStr(RandSeed)); case RandSeed of 0: FarbListe.Add('cclGreen'); 1: FarbListe.Add('cclRed'); 2: FarbListe.Add('cclYellow'); 3: FarbListe.Add('cclBlue'); end; end; //Next Level procedure TForm2.NextLevel (); begin mixColors(); Level := Level +1; Label_Level.Caption := IntToStr(Level); DerzeitigesFarbLevel := 1; ShowColorSqeuence(); end; //Next Color in same level procedure TForm2.NextColor(); begin DerzeitigesFarbLevel := DerzeitigesFarbLevel + 1; end; procedure TForm2.CheckAnswer(ColorOfButton: TColor); begin //RIGHT ANSWER if FarbListe.ValueFromIndex[DerzeitigesFarbLevel] = ColorToString(ColorOfButton) then begin if DerzeitigesFarbLevel = Level then begin ShowMessage('Das war korrekt, herzlich willkommen im Level '+IntToStr(Level+1)+' !'); NextLevel(); end else //RIGHT BUT NO NEW LEVEL begin //ShowMessage('Ihre Antwort ist korrekt!'); NextColor(); end; end //FALSE ANSWER else begin ShowMessage('Dies war leider verkehrt, das Spiel wird neu gestartet !'); Button1.Click; end; end; //First start of game procedure TForm2.FirstStart(); begin FarbListe.Clear; (* Da TStirngList bei 0 anfängt zu zählen wir aber der Übersicht halber bei Level 1 anfangen *) FarbListe.Insert(0, ''); mixColors(); DerzeitigesFarbLevel := 1; Level := 1; Label_Level.Caption := IntToStr(Level); ShowColorSqeuence(); end; procedure TForm2.Button1Click(Sender: TObject); begin FirstStart(); end; procedure TForm2.Panel2Clck(Sender: TObject); begin CheckAnswer(clGreen); end; procedure TForm2.Panel_Col1Click(Sender: TObject); begin CheckAnswer(clRed); end; procedure TForm2.Panel_Col2Click(Sender: TObject); begin CheckAnswer(clYellow); end; procedure TForm2.Panel_Col3Click(Sender: TObject); begin CheckAnswer(clBlue); end; procedure TForm2.FormCreate(Sender: TObject); begin FarbListe := TStringList.Create; Label_Level.Caption := ''; //ShowMessage(IntToStr(ColorToRGB(clGreen))+' '+IntToStr(ColorToRGB(clRed))+' '+IntToStr(ColorToRGB(clYellow))+' '+IntToStr(ColorToRGB(clBlue))); end; end. Im Anhang habe ich dir noch mal den Sourcecode + funktionierende .exe hingepackt. |
AW: Der "Color-Code"
danke das du es mir noch einmal erklärt hast :)
aber das meinte ich garnicht nun gut ich wollte damit meinen das deine exe in deinem anhang bei mir nicht funktionierte :D wenn ich auf new game gedrückt habe leuchtete keine farbe auf hatte ich mal das glück das ich aus zufall den richtigen button gefunden habe sah ich immernoch nicht die farbe :D |
AW: Der "Color-Code"
Ich habe es mir ebend selbst heruntergeladen, bei mir funktioniert es.
Die .exe kann sich eigentlich bei dir und mir nicht so unterschiedlich verhalten !? |
AW: Der "Color-Code"
ich weis das verhält sich sehr komisch und teilweise sogar unrea und bekloppt aber ich habe einfach mal ein kleines bild gemacht
![]() ich kann dazu nur sagen so siehts bei mir aus und das ist kein scherz o.O |
AW: Der "Color-Code"
Liste der Anhänge anzeigen (Anzahl: 1)
Sieht so aus als wenn WinVista/7 die Panels transparent setzt.
Ich hab dir mal eine weitere Variante angehangen. Sag mir bitte welches Panel bei dir angezeigt wird. |
AW: Der "Color-Code"
bei mir sind alle panels grau bis auf das unten links
|
AW: Der "Color-Code"
Liste der Anhänge anzeigen (Anzahl: 1)
bei mir (hier D 2010 ) schlägt ValueFromIndex und ColorToString bei der Farbnamesvergabe fehl..., der Anhang funktioniert
|
AW: Der "Color-Code"
Ich weiß nicht, in wie weit das Problem inzwischen behoben wurde, aber evtl. könnte die Eienschaft "ParentBackground" das Verhalten ändern. Ich kann allerdings im Moment nicht sagen, ab welcher Delphi-Version diese Eigenschaft vorhanden ist.
Generell würde ich aber voschlagen, die graphische Ausgabe selbst zu zeichnen und beispielsweise über eine Paintbox auszugeben. Da kann man sich dann graphisch etwas "austoben", was ja gerade bei Spielen nie verkehrt ist ;-) |
AW: Der "Color-Code"
es wurden bei mir eigentlich alle probleme behoben bummi hat eine nette kleine version gepostet die bei mir funktioniert ich müsste mich bei meiner version nur noch der verschönerung widmen und der fehler meldung aber ansonsten sollte alles wohl gesagt sein :)
ich bedanke mich bei allen von ganzenherzen die bei der lösung des problems geholen haben :) wer mag darf das spiel für seine zwecke ruhig weiter entwickeln/umentwickeln oder einfach als nachguck objekt benutzen :) noch mal an alle danke und bis demnächst wenn ich wieder einmal ein problem haben sollte^^ |
AW: Der "Color-Code"
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Dadurch ist das unerklärliche Phänomen auch verschwunden, weshalb in der TStringList immer das erste Zeichen verschluckt wurde. Das ValueFromIndex benötigt man nirgendwo, habe es dank deinem Hinweis an allen 3 Stellen entfernt. :thumb: Danke dir :thumb: Zitat:
Im Anhang der der "Fix für Win7/Vista". EDIT:\ Anhang gelöscht, weiteren Bug entdeckt. Neue Version wird geuploaded. Edit2:\ Erneuter Bugfix im Anhang |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz