Mini-Roulettespiel (Trefferauswertung)
Übersicht

progger3DBetreff: Mini-Roulettespiel (Trefferauswertung) |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
ich hoffe ihr könnt mir helfen! Zuerst soll man tippen welche zahlen kommen werden! Danach werden 10 Bilder mit den Zahlen angezeigt Und zum Schluss soll überprüft werden ob ein Tipp mit einem der 10 Bilder übereinstimmte! Code: [AUSKLAPPEN] Graphics 640, 480, 0, 1
Global treffer=0 SeedRnd MilliSecs() start = LoadImage("C:\Users\Niklas Schäfer\Desktop\Niklas Datein\Sonstige Datein\Sonstiges\Spiel Blitz 3D\Roloute\start.jpg") Global Niklas .Vorspann DrawBlock start ,0,0 Print"Roulette auf deinem PC" .Spieler Print"Gebe deine Spielerzahl an!(1/2/3/...)" variable=Input() .Willkommen Print "Gebe deinen Namen ein! Willkommen im Land der Drehscheiben" variable=Input() .Lotto Print"Jetzt werden 10 Bilder angezeigt!!! Auf welche Zahlen tippst du (3)?" Print"Dann schaue ob deine Zahl in den 10 ist!" tipp_I=Input() tipp_II=Input() tipp_III=Input() If Not tipp_I Or tipp_II Or tipp_III = "" Then Print"Eingabe korrekt" Else Goto Ende EndIf .Alter Print"Gebe dein Alter ein" variable=Input() .Spiel Cls Print "Los geht's" xI = Rand(1, 36) Bild = LoadImage("C:\Users\Niklas Schäfer\Desktop\Niklas Datein\Sonstige Datein\Sonstiges\Spiel Blitz 3D\Roloute\Neuer Ordner\"+ xI +".jpg") DrawBlock Bild, 0,0 Delay (1) WaitKey .Spie xII = Rand(1, 36) Bild = LoadImage("C:\Users\Niklas Schäfer\Desktop\Niklas Datein\Sonstige Datein\Sonstiges\Spiel Blitz 3D\Roloute\Neuer Ordner\"+ xII +".jpg") DrawBlock Bild, 0,0 Delay (1) WaitKey .Spi xIII = Rand(1, 36) Bild = LoadImage("C:\Users\Niklas Schäfer\Desktop\Niklas Datein\Sonstige Datein\Sonstiges\Spiel Blitz 3D\Roloute\Neuer Ordner\"+ xIII +".jpg") DrawBlock Bild, 0,0 Delay (1) WaitKey .Sp xIV = Rand(1, 36) Bild = LoadImage("C:\Users\Niklas Schäfer\Desktop\Niklas Datein\Sonstige Datein\Sonstiges\Spiel Blitz 3D\Roloute\Neuer Ordner\"+ xIV +".jpg") DrawBlock Bild, 0,0 Delay (1) WaitKey .S xV = Rand(1, 36) Bild = LoadImage("C:\Users\Niklas Schäfer\Desktop\Niklas Datein\Sonstige Datein\Sonstiges\Spiel Blitz 3D\Roloute\Neuer Ordner\"+ xV +".jpg") DrawBlock Bild, 0,0 Delay (1) WaitKey .SpielS xVI = Rand(1, 36) Bild = LoadImage("C:\Users\Niklas Schäfer\Desktop\Niklas Datein\Sonstige Datein\Sonstiges\Spiel Blitz 3D\Roloute\Neuer Ordner\"+ xVI +".jpg") DrawBlock Bild, 0,0 Delay (1) WaitKey .SpielSp xXVII = Rand(1, 36) Bild = LoadImage("C:\Users\Niklas Schäfer\Desktop\Niklas Datein\Sonstige Datein\Sonstiges\Spiel Blitz 3D\Roloute\Neuer Ordner\"+ xVII +".jpg") DrawBlock Bild, 0,0 Delay (1) WaitKey .SpielSpi xIIX = Rand(1, 36) Bild = LoadImage("C:\Users\Niklas Schäfer\Desktop\Niklas Datein\Sonstige Datein\Sonstiges\Spiel Blitz 3D\Roloute\Neuer Ordner\"+ xIIX +".jpg") DrawBlock Bild, 0,0 Delay (1) WaitKey .SpielSpiel xIX = Rand(1, 36) Bild = LoadImage("C:\Users\Niklas Schäfer\Desktop\Niklas Datein\Sonstige Datein\Sonstiges\Spiel Blitz 3D\Roloute\Neuer Ordner\"+ xIX +".jpg") DrawBlock Bild, 0,0 Delay (1) WaitKey .SpielSpielS xX = Rand(1, 36) Bild = LoadImage("C:\Users\Niklas Schäfer\Desktop\Niklas Datein\Sonstige Datein\Sonstiges\Spiel Blitz 3D\Roloute\Neuer Ordner\"+ xX +".jpg") DrawBlock Bild, 0,0 Delay (1) WaitKey .LottoTotto Cls Print"Hast du richtig getippt?" If tipp_I = xI Or xII Or xIII Or xIV Or xV Or xVI Or xVII Or xIIX Or xIX Or xX Then treffer=treffer+1 EndIf If tipp_II = xI Or xII Or xIII Or xIV Or xV Or xVI Or xVII Or xIIX Or xIX Or xX Then treffer=treffer+1 EndIf If tipp_III = xI Or xII Or xIII Or xIV Or xV Or xVI Or xVII Or xIIX Or xIX Or xX Then treffer=treffer+1 EndIf .Ende Print"Vielen Dank:" + treffer WaitKey End Als Treffer wird immer 3 angezeigt! Was habe ich falsch gemacht? |
||
progger3D |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Kann es sein weil tipp_... Text ist und (x...) eine Zahl!
Wenn ich aber dann das davor setzte:Code: [AUSKLAPPEN] tipp_I$=tipp_I tipp_II$=tipp_II tipp_III$=tipp_III ... kommt eine Fehlermeldung ![]() ![]() ![]() |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
1) Benutzte relative Pfade statt absolute wenn du deine Programme jemals bei wem anders zum laufen bekommen möchtest.
2) Benutzte kein GoTo um dein Programm zu strukturieren - das kann Niemand übersehen/verstehen. 3) Du kannst den Input direkt zu Int casten: Code: [AUSKLAPPEN] variable% = Int(Input())
Du kannst keine Variablen mit gleicher bezeichnung aber unterschiedlichem Datentyp verwenden (wie BB dir in der Fehlermeldung vermutlich mitteilen wird). |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
progger3D |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke ![]() aber trotzdem zeigt er immer als treffer 3 an! |
||
![]() |
Badudel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sorry, aber diesen Code möchte ich mir nicht anschauen (und wahrscheinlich alle anderen Mitglieder ebenfalls).
Je unübersichtlicher du programmierst desto schwerer wird auch eine Fehlersuche. 1. Nimm nicht tipp_I, II und III sondern ein Dim ![]() 2. Versuche, aussagekräftige Variablennamen zu finden. Was soll Niklas sein? xI? (-> auch hier Dim ![]() 3. Wenn man Goto benutzt (bitte jetzt nicht wieder diskutieren, ob überhaupt), dann auch hier so sparsamst wie möglich (am Besten gar nicht) und auch hier mit aussagekräftigen Namen 4. Diese ganzen Label mit den Spiel-Label-Variationen müssen raus und durch eine Schleife (For ![]() ![]() 5. Dein eigentlicher Fehler resultiert aus den Punkten 1-4 und steckt wahrscheinlich igendwo in diesem Abschnitt: BlitzBasic: [AUSKLAPPEN] If tipp_I = xI Or xII Or xIII Or xIV Or xV Or xVI Or xVII Or xIIX Or xIX Or xX Then Wo genau, kann (und will) ich dir nicht sagen, da dieser Block einfach zu komplex ist. Wenn du mit Dim-Feldern arbeitest, sieht es gleich viel übersichtlicher aus. Ich hoffe, ich konnte dir ein Bisschen helfen. Viel Erfolg beim weiteren Programmieren! |
||
Wir werden dem Schwein schon schlachten, auch wenn ihm quiekt.
Zum Teufel mit das Grammatik! |
![]() |
M2M |
![]() Antworten mit Zitat ![]() |
---|---|---|
Stelle mal ein Code: [AUSKLAPPEN] SeedRnd MilliSecs() an den Anfang deines Programmes, das sollte das mit dem immer gleichen Zufallszahlen lösen.
|
||
![]() |
Badudel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das steht da schon ![]() treffer wird auch gar nicht per Rand berechnet, sondern durch diesen großen Block weiter oben. |
||
Wir werden dem Schwein schon schlachten, auch wenn ihm quiekt.
Zum Teufel mit das Grammatik! |
Sterbendes Lüftlein |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Text entfernt | ||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Totensturm, bitte lass es doch den Neuen solche Ratschläge zu geben - damit gewöhnen sie sich nur einen Stil an der ihnen später wiederholt das Genick bricht. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
primero |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hab mich mal mit deinem Code beschäftigt. hier mal einige Punkte:
1. mach dir einen sauberen Programmanfang. (fast) jedes Programm benötigt die Zeilen Graphics 640, 480, 0, 1 und SeedRnd MilliSecs() also setz die einfach ganz oben hin und lass danach etwas platz: Code: [AUSKLAPPEN] Graphics 640, 480, 0, 1
SeedRnd MilliSecs() Variablen Programm 2. Lade immer Variabel (wurde ja schon genannt). Das bedeutet so dass dein programm auch dann läuft wenn es in einem anderen Ordner befindet. BB ist dabei intelligent. du musst beim Laden nicht immer den gesammten Pfad angeben. Wenn du kein Laufwerk angiebst startet BB immer in dem Verzeichniss in dem dein Programm gerade läuft. Code: [AUSKLAPPEN] ;alt:
; start = LoadImage("C:\Users\Niklas Schäfer\Desktop\Niklas Datein\Sonstige ;neu: start = LoadImage("start.jpg") 3. Wie ja schon gesagt, lass das Goto weg. um das Programm abzubrechen bei der falschen eingabe mach einfach ein "end" Code: [AUSKLAPPEN] ;alt ; Else ; Goto Ende ; EndIf ;neu Else End EndIf Und keine Angst vor Funktionen. auch wenn du sie in den ersten Programme wohl nicht brauchst, sie sind sehr einfach. eine Funktion ist im grund ein programmabschnitt mit einem eigenen Namen, genau wie das goto. großer vorteil ist dass die Function stehen kann wo sie will. so kannst du alle Functionen zusammenfassen, ans ende oder Anfang deines Programms stellen und nacheinander aufrufen. das ist dann schon alles. nach der function läuft das programm in der nächsten Zeile einfach weiter. Code: [AUSKLAPPEN] ;alt
;Else ; Goto Ende ; EndIf ; ; ... programmcode ... ; ;.Ende ; Print"Vielen Dank:" + treffer ; WaitKey ;End ;neu else progende() endif ; ... programmcode ... function progende() ;legt den Functionsname fest. Klammern nicht vergessen!! print"vielen dank:"+treffer waitkey; Code wie vorher unter .ende end end function; beendet die Function 4. nimm nicht "print" für eine Textausgabe. wie du gemerkt hast steht alles linksbündig von oben nach unten. man kann es zwar woanders ausgeben, ist aber relativ aufwändig. benutz daher lieber "text". es funktioniert wie print, nur dass du noch zusätzlich die position angeben kannst an der der Text erscheint (z.B. mitten im Bildschirm). in deiner ersten Zeile hast du angegeben wie viele Bildpunkte du auf dem Bildschirm ausgibst (Graphics640,480,0,1), wieviel mögliche Positionen du also für deinen Text hast. und zwar in x-richtung (waagerecht) 640 und y-richtung (senkrecht) 480 die Position gibst du einfach vor deinem Text an. setzen wir doch mal deinen begrüßungstext so dass er das eingangsbild nicht stört, also etwas weiter in die Mitte: Zitat: ;alt:
; Print"Roulette auf deinem PC" ;neu: Text 200,200,"Roulette auf deinem PC" ;x und y wert geben immer nur den Startpunkt deines Textes an, daher starten wir nicht ganz mittig 5. bei Abfragen, speziell jetzt hier bei deinen If-bedingungen, verursacht das hier einen Fehler: Zitat: If Not tipp_I Or tipp_II Or tipp_III = "" Then
du musst jedesmal genau festhalten was denn tipp_I nicht sein soll, Tipp_II nicht sein soll und tipp_III nicht sein soll, also so: Zitat: If not tipp_I = "" And tipp_II = "" And tipp_III = "" Then
Grund: wenn nur die Variable da steht bzw die variable allein zwischen "if, not, or" prüft BB nur OB überhaubt etwas sich darin befindet oder nicht. also nur 1(ja) oder 0(nein). deine Zeile hätte also NICHT bedeutet: "wenn tipp_I, tipp_II, Tipp_III nicht "" sind dann ..." sondern "wenn tipp_I nichts enthält ODER tipp_II nichts enthält ODER tipp_III etwas anderes enthält als "" dann ..." Anstelle des "or" musst du in dem fall "AND" (und) setzen, ansonsten wird auch bei nur einer richtigen eingabe gesagt dass alles richtig ist und weiter gemacht anstatt abgebrochen. übersichtlicher wirkt es aber wenn du if-s immer deffinierst mit dem WIE etwas sein soll: Zitat: If tipp_I <> "" And tipp_II <> "" And tipp_III <> "" Then
also jedesmal kleiner (<) oder größer (>) als nichts. Vorteil: wenn nun tipp_III unbedingt "" sein müsste musst du nicht erst lang ins negative setzten was du im falle eines "if not" befehl eingeben musst. daher if immer auf das setzen bei was es eintritt, und nicht bei was es nicht eintreten soll. 6. verwende ruhig öfters "cls" und lass "delay" weg, besonders wenn danach eh "waitkey" kommt Zitat: ;alt:
;.Spiel ;Cls ;Print "Los geht's" ; xI = Rand(1, 36) ; Bild = LoadImage(xI +".jpg") ; DrawBlock Bild, 0,0 ; Delay (1) ;WaitKey ;.Spie ; xII = Rand(1, 36) ; Bild = LoadImage(xII +".jpg") ; DrawBlock Bild, 0,0 ; Delay (1) ;WaitKey ;neu (rot wurde verändert): Cls Text 200,220 "Los geht's" xI = Rand(1, 36) Bild = LoadImage(xI +".jpg") DrawBlock Bild, 0,0 WaitKey Cls xII = Rand(1, 36) Bild = LoadImage(xII +".jpg") DrawBlock Bild, 0,0 WaitKey 7. als letztes noch die Variablen. wurden ja schon einige male angesprochen. a) benutze eindeutige Namen! anstelle "XII" z.B. "zufall_II" b) benutze arrays! hört sich als neuling schlimm und kompliziert an, ist aber etwas echt einfaches. ein array ist genau das selbe wie deine bisherigen römischen zahlen, nur dass BB es für dich übernimmt. arrays werden am besten am programmanfang deffiniert: Code: [AUSKLAPPEN] Global treffer=0 ;TIPP: das =0 kann auch weg, zu beginn haben alle Variablen den
;wert 0 array zufall(20) nun hast du 20 verschiedene Variablen "zufall". anstatt aber nun hinten dran deine römischen ziffern zu hängen (zufallII,ZufallIII,...) setzt du nun die nummer einfach in klammer (zufall(2), zufall(3) ), ansonsten ändert sich nichts. Vorteil: übersichtlicher, einfacher zu handhaben wenn du mit größeren mengen arbeitest. So, ich denke das reicht erst mal. wenn du das genau durch liest dann wirst du auch den Fehler finden warum du immer den wert 3 ausgegeben bekommst. Natürlich kann man dein programm noch weiter optimieren, z.B. durch eine schleife aber das dann auf nachfrage. hoffe das hilft dir etwas, gruß primero |
||
progger3D |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke, habe es gesschafft | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group