Was mache ich falsch?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Zenon

Betreff: Was mache ich falsch?

BeitragFr, Jan 27, 2006 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe da ein Problem mit meinem Programm. Funktioniert nur manchmal richtig, das ist sehr sonderbar und ich finde auch keinen Fehler.
Das Programm vergleicht immer die Vorgaben mit der Eingabe und gibt rechts aus, ob Position(Lila) oder Farbe(weiß) stimmen.
Wenn man beliebige Werte für a,b,c,d usw. eingibt, dann kommt die Ausgabe. Diese stimmt aber nicht immer, ich habe es schon öfter erlebt, dass nach dem 5 oder 7 Schleifendurchlauf die weißen und lilafarbenen Kreise nicht mehr stimmen. Z.B. wurden nur 2 weiße Kreise bei der Eingabe a=1,b=2,c=3,d=4,e=4,f=3,g=2,h=1 dargestellt . Aber es müssen ja eigentlich 4 sein, alle Farben sind ja richtig, nur falsch positioniert. Nachdem ich das Programm geschlossen habe und es erneut aufgerufen habe und die gleichen Zahlen eingegeben habe, ging's wieder. Warum denn??? Ich habe doch nichts am code geändert. Könnt ihr mir helfen???Rolling Eyes

Code:

Repeat
Graphics 800,600,32,2
AppTitle "rot,grün,blau,gelb,cyan,magenta"
A=Input ("A= ")
B=Input ("B= ")
C=Input ("C= ")
D=Input ("D= ") 


;ERSTE EINGABE
;e f g h
Print""
E=Input (" Farbe auf Position Nr. 1: ")
 
F=Input (" Farbe auf Position Nr. 2: ")

G=Input (" Farbe auf Position Nr. 3: ")

H=Input (" Farbe auf Position Nr. 4: ")
Print""

If E=1 Then Color 255,0,0:Oval 350,40,25,25
If E=2 Then Color 0,255,0:Oval 350,40,25,25
If E=3 Then Color 0,0,255:Oval 350,40,25,25
If E=4 Then Color 255,255,0:Oval 350,40,25,25
If E=5 Then Color 0,255,255:Oval 350,40,25,25
If E=6 Then Color 255,0,255:Oval 350,40,25,25

If F=1 Then Color 255,0,0:Oval 380,40,25,25
If F=2 Then Color 0,255,0:Oval 380,40,25,25
If F=3 Then Color 0,0,255:Oval 380,40,25,25
If F=4 Then Color 255,255,0:Oval 380,40,25,25
If F=5 Then Color 0,255,255:Oval 380,40,25,25
If F=6 Then Color 255,0,255:Oval 380,40,25,25

If G=1 Then Color 255,0,0:Oval 410,40,25,25
If G=2 Then Color 0,255,0:Oval 410,40,25,25
If G=3 Then Color 0,0,255:Oval 410,40,25,25
If G=4 Then Color 255,255,0:Oval 410,40,25,25
If G=5 Then Color 0,255,255:Oval 410,40,25,25
If G=6 Then Color 255,0,255:Oval 410,40,25,25

If H=1 Then Color 255,0,0:Oval 440,40,25,25
If H=2 Then Color 0,255,0:Oval 440,40,25,25
If H=3 Then Color 0,0,255:Oval 440,40,25,25
If H=4 Then Color 255,255,0:Oval 440,40,25,25
If H=5 Then Color 0,255,255:Oval 440,40,25,25
If H=6 Then Color 255,0,255:Oval 440,40,25,25

;---------------------------------------
;---------------------------------------
;---------------------------------------



If Not SAPIENS=1735294763 Then Color 255,255,255
;-----

If E=A Then Color 100,0,170 :Oval 600,40,25,25:Goto apfel

If E=B And F<>B Then Color 255,255,255:Oval 600,40,25,25:EvB=1:Goto apfel

If E=C And G<>C Then Color 255,255,255:Oval 600,40,25,25:EvC=1:Goto apfel

If E=D And H<>D Then Color 255,255,255:Oval 600,40,25,25:EvD=1:Goto apfel
;---------------------------

.apfel

If F=B Then Color 100,0,170 :Oval 630,10,25,25 : Goto blut

If F=A And E<>A Then Color 255,255,255:Oval 630,10,25,25:FvA=1:Goto blut

If F=C And G<>C And EvC=0 Then Color 255,255,255:Oval 630,10,25,25:FvC=1:Goto blut
If F=D And H<>D And EvD=0 Then Color 255,255,255:Oval 630,10,25,25:FvD=1:Goto blut
;-----------------------------------------

.blut

If G=C  Then Color 100,0,170:Oval 660,40,25,25:Goto mandarine

If G=A And E<>A And FvA=0 Then Color 255,255,255:Oval 660,40,25,25:GvA=1:Goto mandarine
If G=B And F<>B And EvB=0 Then Color 255,255,255:Oval 660,40,25,25:GvB=1:Goto mandarine

If G=D And H<>D And EvD=0 And FvD=0 Then Color 255,255,255:Oval 660,40,25,25:GvD=1:Goto mandarine
;--------------------------------------------------


.mandarine

If H=D Then Color 100,0,170 :Oval 630,70,25,25:Goto stabi

If H=A And E<>A And FvA=0 And GvA=0 Then Color 255,255,255:Oval 630,70,25,25:HvA=1:Goto stabi
If H=B And F<>B And EvB=0 And GvB=0 Then Color 255,255,255:Oval 630,70,25,25:HvB=1:Goto stabi
If H=C And G<>C And EvC=0 And FvC=0 Then Color 255,255,255:Oval 630,70,25,25:HvC=1:Goto stabi
.stabi

;--------------------------------------------------------------------
If Not HABILIGENSIS=1735294763 Then Color 255,255,255


WaitKey
If E=A And F=B And G=C And H=D Then Print "GESCHAFFT!!!"
Print A
Print B
Print C
Print D
Text 190,510,"LOESUNG"
If Not ZC=1735294763 Then Color 255,255,255
;---
If A=1 Then Color 255,0,0:Oval 260,500,25,25
If A=2 Then Color 0,255,0:Oval 260,500,25,25
If A=3 Then Color 0,0,255:Oval 260,500,25,25
If A=4 Then Color 255,255,0:Oval 260,500,25,25
If A=5 Then Color 0,255,255:Oval 260,500,25,25
If A=6 Then Color 255,0,255:Oval 260,500,25,25

If B=1 Then Color 255,0,0:Oval 290,500,25,25
If B=2 Then Color 0,255,0:Oval 290,500,25,25
If B=3 Then Color 0,0,255:Oval 290,500,25,25
If B=4 Then Color 255,255,0:Oval 290,500,25,25
If B=5 Then Color 0,255,255:Oval 290,500,25,25
If B=6 Then Color 255,0,255:Oval 290,500,25,25

If C=1 Then Color 255,0,0:Oval 320,500,25,25
If C=2 Then Color 0,255,0:Oval 320,500,25,25
If C=3 Then Color 0,0,255:Oval 320,500,25,25
If C=4 Then Color 255,255,0:Oval 320,500,25,25
If C=5 Then Color 0,255,255:Oval 320,500,25,25
If C=6 Then Color 255,0,255:Oval 320,500,25,25

If D=1 Then Color 255,0,0:Oval 350,500,25,25
If D=2 Then Color 0,255,0:Oval 350,500,25,25
If D=3 Then Color 0,0,255:Oval 350,500,25,25
If D=4 Then Color 255,255,0:Oval 350,500,25,25
If D=5 Then Color 0,255,255:Oval 350,500,25,25
If D=6 Then Color 255,0,255:Oval 350,500,25,25
;---
If Not ZC=1735294763 Then Color 255,255,255

WaitKey
Until (A=E And B=F And C=G And D=H)
 

Dreamora

BeitragFr, Jan 27, 2006 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Grundlegende Anmerkung:
Code:

Graphics 800,600,32,2
AppTitle "rot,grün,blau,gelb,cyan,magenta"


Müssen DRINGEND vor die Schleife.
Sie gehören zum Initialisierungsteil und nicht zur Hauptschleife, genausowenig wie zb Laden von Grafik und Sound nie in der Hauptschleife sein darf.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Florian

BeitragFr, Jan 27, 2006 22:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum benutzt du kein Array?

In einen guten Code gehört kein goto hinein.
 

Der Programierer

BeitragSo, Jan 29, 2006 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Also bei mir hat's geklappt. Aber mal was anderes: sollte man das Prigramm nicht ein bisschen übersichtlicher mach, vielleicht in dem man eine oder mehrere Include-Dateien anlegt?

tyty

BeitragSo, Jan 29, 2006 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
...und den Variablen verständliche Namen gibt.
z.B.: Blau, Grün, Rot...
User posted image

Kaikille suomea puhuville ihmisille: tyty = tyty the technical youngster!!!

5k41

BeitragSo, Jan 29, 2006 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
UFF! man man man was ein code! Ich empfehle dir dringend funktionen und schleifen! was denkst du was man aus deinem code machen könnte wenn man eine for-schleife benutzt und das dann per Formel berechnen lässt?ich glaub echt da kann man einiges an code sparen...ausserdem schließ ich mich der anderen an VARIABLEN NAMEN!!!!
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image
 

Der Programierer

BeitragSo, Jan 29, 2006 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab's jetzt mal ein bisschen umgeschrieben:
[syntax="bb"]AppTitle "rot,grün,blau,gelb,cyan,magenta"
Graphics 800,600,32,2
Include ".\data1.bb"
Global A
Global B
Global C
Global D
Global E
Global F
Global G
Global H
A=Input ("A= ")
B=Input ("B= ")
C=Input ("C= ")
D=Input ("D= ")
;ERSTE EINGABE
;e f g h
Print""
E=Input (" Farbe auf Position Nr. 1: ")
F=Input (" Farbe auf Position Nr. 2: ")
G=Input (" Farbe auf Position Nr. 3: ")
H=Input (" Farbe auf Position Nr. 4: ")
Print""
Repeat

If Not SAPIENS=1735294763 Then Color 255,255,255

If E=A Then Color 100,0,170 :Oval 600,40,25,25:apfel

If E=B And F<>B Then Color 255,255,255:Oval 600,40,25,25:EvB=1: apfel

If E=C And G<>C Then Color 255,255,255:Oval 600,40,25,25:EvC=1:apfel

If E=D And H<>D Then Color 255,255,255:Oval 600,40,25,25:EvD=1:apfel
;--------------------------------------------------------------------
If Not HABILIGENSIS=1735294763 Then Color 255,255,255
WaitKey
FA
Farbe2
;---
If Not ZC=1735294763 Then Color 255,255,255

WaitKey
Until (A=E And B=F And C=G And D=H)[/syntax]
Und als Include-Datei dann:
[syntax="bb"]Function Farbe()
If E=1 Then Color 255,0,0:Oval 350,40,25,25
If E=2 Then Color 0,255,0:Oval 350,40,25,25
If E=3 Then Color 0,0,255:Oval 350,40,25,25
If E=4 Then Color 255,255,0:Oval 350,40,25,25
If E=5 Then Color 0,255,255:Oval 350,40,25,25
If E=6 Then Color 255,0,255:Oval 350,40,25,25

If F=1 Then Color 255,0,0:Oval 380,40,25,25
If F=2 Then Color 0,255,0:Oval 380,40,25,25
If F=3 Then Color 0,0,255:Oval 380,40,25,25
If F=4 Then Color 255,255,0:Oval 380,40,25,25
If F=5 Then Color 0,255,255:Oval 380,40,25,25
If F=6 Then Color 255,0,255:Oval 380,40,25,25

If G=1 Then Color 255,0,0:Oval 410,40,25,25
If G=2 Then Color 0,255,0:Oval 410,40,25,25
If G=3 Then Color 0,0,255:Oval 410,40,25,25
If G=4 Then Color 255,255,0:Oval 410,40,25,25
If G=5 Then Color 0,255,255:Oval 410,40,25,25
If G=6 Then Color 255,0,255:Oval 410,40,25,25

If H=1 Then Color 255,0,0:Oval 440,40,25,25
If H=2 Then Color 0,255,0:Oval 440,40,25,25
If H=3 Then Color 0,0,255:Oval 440,40,25,25
If H=4 Then Color 255,255,0:Oval 440,40,25,25
If H=5 Then Color 0,255,255:Oval 440,40,25,25
If H=6 Then Color 255,0,255:Oval 440,40,25,25
End Function

Function apfel ()
If F=B Then Color 100,0,170 :Oval 630,10,25,25 : blut
If F=A And E<>A Then Color 255,255,255:Oval 630,10,25,25:FvA=1:blut
If F=C And G<>C And EvC=0 Then Color 255,255,255:Oval 630,10,25,25:FvC=1:blut
If F=D And H<>D And EvD=0 Then Color 255,255,255:Oval 630,10,25,25:FvD=1:blut
End Function

Function blut ()
If G=C Then Color 100,0,170:Oval 660,40,25,25:mandarine
If G=A And E<>A And FvA=0 Then Color 255,255,255:Oval 660,40,25,25:GvA=1:mandarine
If G=B And F<>B And EvB=0 Then Color 255,255,255:Oval 660,40,25,25:GvB=1:mandarine
If G=D And H<>D And EvD=0 And FvD=0 Then Color 255,255,255:Oval 660,40,25,25:GvD=1:mandarine
End Function

Function mandarine ()
If H=D Then Color 100,0,170 :Oval 630,70,25,25:Goto stabi
If H=A And E<>A And FvA=0 And GvA=0 Then Color 255,255,255:Oval 630,70,25,25:HvA=1:Goto stabi
If H=B And F<>B And EvB=0 And GvB=0 Then Color 255,255,255:Oval 630,70,25,25:HvB=1:Goto stabi
If H=C And G<>C And EvC=0 And FvC=0 Then Color 255,255,255:Oval 630,70,25,25:HvC=1:Goto stabi
.stabi
End Function

Function FA()
If E=A And F=B And G=C And H=D Then Print "GESCHAFFT!!!"
Print A
Print B
Print C
Print D
Text 190,510,"LOESUNG"
If Not ZC=1735294763 Then Color 255,255,255
End Function

Function Farbe2 ()
If A=1 Then Color 255,0,0:Oval 260,500,25,25
If A=2 Then Color 0,255,0:Oval 260,500,25,25
If A=3 Then Color 0,0,255:Oval 260,500,25,25
If A=4 Then Color 255,255,0:Oval 260,500,25,25
If A=5 Then Color 0,255,255:Oval 260,500,25,25
If A=6 Then Color 255,0,255:Oval 260,500,25,25

If B=1 Then Color 255,0,0:Oval 290,500,25,25
If B=2 Then Color 0,255,0:Oval 290,500,25,25
If B=3 Then Color 0,0,255:Oval 290,500,25,25
If B=4 Then Color 255,255,0:Oval 290,500,25,25
If B=5 Then Color 0,255,255:Oval 290,500,25,25
If B=6 Then Color 255,0,255:Oval 290,500,25,25

If C=1 Then Color 255,0,0:Oval 320,500,25,25
If C=2 Then Color 0,255,0:Oval 320,500,25,25
If C=3 Then Color 0,0,255:Oval 320,500,25,25
If C=4 Then Color 255,255,0:Oval 320,500,25,25
If C=5 Then Color 0,255,255:Oval 320,500,25,25
If C=6 Then Color 255,0,255:Oval 320,500,25,25

If D=1 Then Color 255,0,0:Oval 350,500,25,25
If D=2 Then Color 0,255,0:Oval 350,500,25,25
If D=3 Then Color 0,0,255:Oval 350,500,25,25
If D=4 Then Color 255,255,0:Oval 350,500,25,25
If D=5 Then Color 0,255,255:Oval 350,500,25,25
If D=6 Then Color 255,0,255:Oval 350,500,25,25
End Function[/syntax]
So ist es doch schon mal übersichtlicher.

5k41

BeitragSo, Jan 29, 2006 20:56
Antworten mit Zitat
Benutzer-Profile anzeigen
BITTE TU DIR DEN GEFALLEN UND NENN ALLE VARIABLEN UM...es lohnt sich wirklich! nenn sie doch magenta und blau und grün und so...oder farbe_magenta oder so machs so verständlich wie möglcih dann noch ein paar kommentare und schleifen...was mir grad so auffällt...du könntest es so machen:
Code:

Function color(wert)
 if wert=1 then color 255,0,0
 if wert=2 then color 0,255,0
;usw...
end function

dann kannst du einfach immer schreiben:
Code:

if e>0 then
 color(e)
 oval 350,40,25,25
endif

hat den gleichen effekt wie:
Code:

 If E=1 Then Color 255,0,0:Oval 350,40,25,25
If E=2 Then Color 0,255,0:Oval 350,40,25,25
If E=3 Then Color 0,0,255:Oval 350,40,25,25
If E=4 Then Color 255,255,0:Oval 350,40,25,25
If E=5 Then Color 0,255,255:Oval 350,40,25,25
If E=6 Then Color 255,0,255:Oval 350,40,25,25

denkt mal drüber nach Wink
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image
 

Zenon

BeitragMi, Feb 01, 2006 0:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, das mögen Verbesserung der Darstellung sein, aber mein eigentliches Problem ist nicht behoben. Die Eingaben werden mit A, B, C und D verglichen. Wenn E=A ist, dann stimmt die Position und F, G und H müssen also nicht mehr mit A verglichen werden. Wenn aber E=B ist, dann stimmt die Farbe(nicht Position) nur dann, wenn F<>B ist, denn sonst wäre es ja ne richtige Position einer Farbe auf Position Nummer 2. Diese Überlegungen brachten mich auf diesen Code und wenn man ihn anschaut, dann sieht man was ich meine. Ich finde keinen Fehler der das Ergebnis falsch beeinflussen könnte. Es geht ja auch prima, aber manchmal stimmen die Antwortkreise rechts eben doch nicht, nach Neustart des Programms geht's dann aber wieder obwohl ich GENAU das gleiche eingebe. Könnt Ihr mir bitte helfen??? Ich habe keine Ahnung, warum es nicht geht und ich finde auch keinen Fehler in meinen Überlegungen und im Code. NEED YOUR SUPPORT!!!
Crying or Very sad Crying or Very sad Crying or Very sad

Wie kann bitte sowas entstehen???
user posted image

5k41

BeitragMi, Feb 01, 2006 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Ich würde (wie wahrscheinlicht viele andere auch) dir ja gerne helfen aber sooo ein langer Code schreckt echt verdammt ab...wäre cool wenn du ihn nochmal mit meinen ansätzen überarbeiten würdest und dann nochmal posten könnest...
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image
 

Gerhard

BeitragMi, Feb 01, 2006 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Was ist denn eigentlich falsch?
Der weisse Kreis besagt doch, dass eine Farbe stimmt (grün). Und keine sitzt am richtigen Platz.

Besser wäre m.E. nur 5 verschiedene Farben zuzulassen.

Ich habe (in einem unveröffentlichten Werk von 2003 Very Happy ) das Problem so gelöst:

Block(1) bis Block(5) sind die Vorgaben, Gewinn(1) bis Gewinn(5) die Eingaben des Spielers.

Code:


; 5 verschiedene Farben: bereits geprüft
Treffer = 0 ; richtige Farbe
Stellen = 0 ; richtige Farbe an der richtigen Stelle

; stimmen Farben und Stellen?-----------------------
For i = 1 To 5
   For j = 1 To 5
      If Block(i) = Gewinn(j) Then Treffer = Treffer + 1
   Next
   If Block(i) = Gewinn(i) Then Stellen = Stellen + 1
Next

; Ergebnis zeigen--------------------------------------
For i = 1 To 5   
   If Stellen >= i Then
      EntityColor kugel(aktZeile,i),250,0,0 ; rot geht vor gruen (Farbe + Stelle ok)
   Else
      If Treffer >= i Then EntityColor kugel(aktZeile,i),0,180,0 ; nur Farbe ok
   EndIf
Next

; gewonnen?--------------------------------------------
If Stellen = 5 Then ; gewonnen !
...


Anzahl der roten Kugeln = Zahl der (richtigen) Farben an der richtigen Stelle.
Anzahl der grünen Kugeln = Zahl der (richtigen) Farben an der falschen Stelle.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group