Mini-Roulettespiel (Trefferauswertung)

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

progger3D

Betreff: Mini-Roulettespiel (Trefferauswertung)

BeitragDi, Sep 21, 2010 21:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Sep 21, 2010 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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


Question Question Question

Xeres

Moderator

BeitragDi, Sep 21, 2010 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

progger3D

BeitragDi, Sep 21, 2010 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
danke Exclamation
aber trotzdem zeigt er immer als treffer 3 an!

Badudel

BeitragMi, Sep 22, 2010 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
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-Feld
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...Next) ersetzt werden
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
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


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

BeitragMi, Sep 22, 2010 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Stelle mal ein Code: [AUSKLAPPEN]
SeedRnd MilliSecs()
an den Anfang deines Programmes, das sollte das mit dem immer gleichen Zufallszahlen lösen.

Badudel

BeitragMi, Sep 22, 2010 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Das steht da schon Wink
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

BeitragMi, Sep 22, 2010 21:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt

BladeRunner

Moderator

BeitragMi, Sep 22, 2010 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Sep 26, 2010 2:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Okt 06, 2010 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
danke, habe es gesschafft

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group