Vorschläge und Ideen gesucht für Slotmaschine ;)

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Vorschläge und Ideen gesucht für Slotmaschine ;)

Beitrag von True29 »

grüßt euch,
ich suche wie im Thread Titel geschrieben Vorschläge und Ideen zur verwirklichung ;)

Ich habe vor mit Purebasic eine Slotmaschine nachzuprogrammieren wie man sie in Spielcasinos trifft.
Gerade scheitere ich daran wie ich folgendes umsetzten soll.

erledigt: Per zufall wird ausgelost ob und was gewonnen wurde.
zu tun: Anzeigen der Symbole auf den Trommeln je nach Gewinn.

Sollte dann so aussehen: Die Trommeln drehen sich > Gewinn wird ausgelost > Trommeln werden bei der ausgelosten Position gestopt.
Mein Ziel ist es dann auch z.b zu steuern wieviel % chance ein Jackpot kommt.

Gesagt sei noch das ich nicht einfach die Bilder zufällig auf den Bildschirm schmeißen will ;)

Ich würde mich über Vorschläge sowie Ideen und Anregungen sehr freuen.
Grüße
i7,12gb ram , Windows 10 ,Purebasic 5.50
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Re: Vorschläge und Ideen gesucht für Slotmaschine ;)

Beitrag von True29 »

so hab schon ne idee gehabt zur steuerung der bildausgabe nur funktioniert nicht :/

Code: Alles auswählen

Bilder.i(0)= LoadImage(#PB_Any,"a.png",#PB_ImagePlugin_PNG)  

Draw_Trommel(1,Array Bilder.i(0))

Procedure Draw_Trommel(Trommel,ImageID1,ImageID2,ImageID3)
Shared Bilder()

If CreateImage(#BILD_HAUPT,1500,850)
  If StartDrawing(ImageOutput(#BILD_HAUPT))   
      DrawAlphaImage(ImageID(ImageID1),Trommel1_x,Trommel1_y)    
      DrawAlphaImage(ImageID(ImageID2),Trommel1_x,Trommel1_y+200)    
      DrawAlphaImage(ImageID(ImageID3),Trommel1_x,Trommel1_y+400)    
    EndIf
    StopDrawing()
  EndIf  
ResizeImage(#BILD_HAUPT,WindowWidth(0),WindowHeight(0))
ImageGadget(#BILD_GADGET, 0, 0, 1024, 768, ImageID(#BILD_HAUPT))  
EndIf     
EndProcedure
folgender fehler kommt:
ImageID nicht initalisiert
i7,12gb ram , Windows 10 ,Purebasic 5.50
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Vorschläge und Ideen gesucht für Slotmaschine ;)

Beitrag von Josh »

Mach immer einen lauffähigen Code rein, auch wenn dann der von dir gesuchte Fehler auftritt. Die wenigsten haben Lust, für dich die Arbeit zu machen und erst mal was halbwegs lauffähiges zum Testen draus zu machen.

Abgesehen davon, dass dieser Code so ohnehin nie laufen würde, schau dir mal UsePNGImageDecoder an.
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Re: Vorschläge und Ideen gesucht für Slotmaschine ;)

Beitrag von True29 »

so hier der komplette Code, an der Stelle wo der Fehler kommt habe ich notiert.

Code: Alles auswählen

Define Zahler

Dim Bilder.i(11)
Dim Bilder2.i(11)

Bilder.i(0)= LoadImage(#PB_Any,"Gfx\a.png",#PB_ImagePlugin_PNG)  
Bilder.i(1)= LoadImage(#PB_Any,"Gfx\b.png",#PB_ImagePlugin_PNG)  
Bilder.i(2)= LoadImage(#PB_Any,"Gfx\c.png",#PB_ImagePlugin_PNG)  
Bilder.i(3)= LoadImage(#PB_Any,"Gfx\d.png",#PB_ImagePlugin_PNG)  
Bilder.i(4)= LoadImage(#PB_Any,"Gfx\q.png",#PB_ImagePlugin_PNG)
Bilder.i(5)= LoadImage(#PB_Any,"Gfx\z.png",#PB_ImagePlugin_PNG)
Bilder.i(6)= LoadImage(#PB_Any,"Gfx\s1.png",#PB_ImagePlugin_PNG)
Bilder.i(7)= LoadImage(#PB_Any,"Gfx\s2.png",#PB_ImagePlugin_PNG)
Bilder.i(8)= LoadImage(#PB_Any,"Gfx\s3.png",#PB_ImagePlugin_PNG)
Bilder.i(9)= LoadImage(#PB_Any,"Gfx\s4.png",#PB_ImagePlugin_PNG)
Bilder.i(10)= LoadImage(#PB_Any,"Gfx\s5.png",#PB_ImagePlugin_PNG)

Bilder2.i(0)= LoadImage(#PB_Any,"Gfx\a2.png",#PB_ImagePlugin_PNG)  
Bilder2.i(1)= LoadImage(#PB_Any,"Gfx\b2.png",#PB_ImagePlugin_PNG)  
Bilder2.i(2)= LoadImage(#PB_Any,"Gfx\c2.png",#PB_ImagePlugin_PNG)  
Bilder2.i(3)= LoadImage(#PB_Any,"Gfx\d2.png",#PB_ImagePlugin_PNG)  
Bilder2.i(4)= LoadImage(#PB_Any,"Gfx\q2.png",#PB_ImagePlugin_PNG)
Bilder2.i(5)= LoadImage(#PB_Any,"Gfx\z2.png",#PB_ImagePlugin_PNG)
Bilder2.i(6)= LoadImage(#PB_Any,"Gfx\s1_2.png",#PB_ImagePlugin_PNG)
Bilder2.i(7)= LoadImage(#PB_Any,"Gfx\s2_2.png",#PB_ImagePlugin_PNG)
Bilder2.i(8)= LoadImage(#PB_Any,"Gfx\s3_2.png",#PB_ImagePlugin_PNG)
Bilder2.i(9)= LoadImage(#PB_Any,"Gfx\s4_2.png",#PB_ImagePlugin_PNG)
Bilder2.i(10)= LoadImage(#PB_Any,"Gfx\s5.png",#PB_ImagePlugin_PNG)


Enumeration
#FENSTER_HAUPT
#MENU_Gravity
#MENU_Mini
#MENU_Highscore
#MENU_Haupt
#MENU_ENDE
#MENU_UEBER
#BILD_ANZEIGE
#BILD_HAUPT
#BILD_GADGET
#BILD_PRESCREEN
#BILD_LOGO
#BILD_FRAME
#BILD_a
#BILD_SYMBOL
EndEnumeration

Global Ende.i = #False
#FLAGS = #PB_Window_SystemMenu | #PB_Window_ScreenCentered

UseJPEGImageDecoder()
UsePNGImageDecoder()

Procedure Fehlerbehandlung(Ergebnis.i, Text.s)
If Ergebnis = 0
MessageRequester("Fehler", Text, #PB_MessageRequester_Ok)
End
EndIf
EndProcedure

Procedure Reset_Trommel()
  Define.i Trommel1_x = 130
  Define.i Trommel1_y = 145
  Define.i Trommel2_x = 380
  Define.i Trommel2_y = 145
  Define.i Trommel3_x = 630
  Define.i Trommel3_y = 145    
  Define.i Trommel4_x = 880
  Define.i Trommel4_y = 145    
  Define.i Trommel5_x = 1130
  Define.i Trommel5_y = 145    
EndProcedure

Procedure Preload()  
Fehlerbehandlung(LoadImage(#BILD_LOGO, "Gfx\logo.jpg"),"Fehler beim Laden") 
Fehlerbehandlung(LoadImage(#BILD_FRAME,"Gfx\rahmen.png",#PB_ImagePlugin_PNG),"Fehler beim Laden")  
Fehlerbehandlung(LoadImage(#BILD_PRESCREEN,"Gfx\pre_screen.png",#PB_ImagePlugin_PNG),"Fehler beim Laden")  
EndProcedure


Procedure Draw_frame()
ResizeWindow(#FENSTER_HAUPT,#PB_Ignore ,#PB_Ignore ,1500,850)
If CreateImage(#BILD_HAUPT, 1500,850)
  If StartDrawing(ImageOutput(#BILD_HAUPT))  
    DrawImage(ImageID(#BILD_FRAME),0,0)         
    DrawAlphaImage(ImageID(#BILD_PRESCREEN),0,0)    
    StopDrawing()
  EndIf  
ResizeImage(#BILD_HAUPT,WindowWidth(0),WindowHeight(0))
ImageGadget(#BILD_GADGET, 0, 0, 1024, 768, ImageID(#BILD_HAUPT))  
EndIf   
EndProcedure  
  
Procedure Draw_Trommel(Bild.i)
  Debug Bild ;Bild 0 = Bilder.i(0)= LoadImage(#PB_Any,"Gfx\a.png",#PB_ImagePlugin_PNG)  
  
If CreateImage(#BILD_HAUPT, 1500,850)
  If StartDrawing(ImageOutput(#BILD_HAUPT))        
      DrawAlphaImage(ImageID(Bild),Trommel1_x,Trommel1_y+200,3)     ;Fehler #image is nicht initalisiert     
    StopDrawing()
  EndIf  
EndIf
ResizeImage(#BILD_HAUPT,WindowWidth(0),WindowHeight(0))
ImageGadget(#BILD_GADGET, 0, 0, 1500, 900, ImageID(#BILD_HAUPT))  
EndProcedure

Procedure Gravity_main()  
Shared Bilder()
Shared Bilder2()
OpenCryptRandom()

;Grundwerte setzten
Define.i Gebot = 40

Dim Gewinn.i(11)
Gewinn(0)=0
Gewinn(1)=Gebot*1 
Gewinn(2)=0
Gewinn(3)=Gebot*2
Gewinn(4)=0
Gewinn(5)=Gebot*3
Gewinn(6)=0
Gewinn(7)=Gebot*4
Gewinn(8)=0
Gewinn(9)=Gebot*5
Gewinn(10)=0

Gewinn = Gewinn(CryptRandom(10))

;Draw_frame()
Reset_trommel()

;imageID aus Array Auslesen und übergeben an Prozedur
Bild = Bilder(0) 
Draw_Trommel(Bild)
EndProcedure


Preload()

If CreateImage(#BILD_HAUPT, 1024, 768)
  If StartDrawing(ImageOutput(#BILD_HAUPT))  
  DrawImage(ImageID(#BILD_LOGO),0,0)     
  StopDrawing()
  EndIf
EndIf



If OpenWindow(#FENSTER_HAUPT, 0, 0, 1024, 768, "Gravity 0.1", #FLAGS)  
 ; ImageGadget(#BILD_GADGET, 0, 0, 1024, 768, ImageID(#BILD_HAUPT))
  If CreateMenu(#MENU_HAUPT, WindowID(#FENSTER_HAUPT))           
    MenuTitle("Spiel")    
    MenuItem(#MENU_Gravity, "Gravity")
    MenuItem(#MENU_Mini, "Daily Minigame")
    MenuItem(#MENU_Highscore, "Online Highscore")    
    MenuBar()
    MenuItem(#MENU_ENDE, "Beenden")    
    MenuTitle("Hilfe")
    MenuItem(#MENU_UEBER, "Über...")    
    Repeat
      Ereignis.i = WaitWindowEvent()
      Select Ereignis
      Case #PB_Event_Menu
        Select EventMenu()
          Case #MENU_Gravity          
          Gravity_main()         
          Case #MENU_Highscore
            Debug "Highscore"
          Case #MENU_Mini
            Debug "Minigame"
          Case #MENU_ENDE
            Ende = #True
          Case #MENU_UEBER
          MessageRequester("Über", "Hier beschreiben Sie Ihr Programm.")
        EndSelect
      EndSelect
    Until Ereignis = #PB_Event_CloseWindow Or Ende = #True
  EndIf
EndIf
i7,12gb ram , Windows 10 ,Purebasic 5.50
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Vorschläge und Ideen gesucht für Slotmaschine ;)

Beitrag von ts-soft »

Erste Zeile im Code immer: EnableExplicit!

Dann solltest Du Dir mal Gedanken über den Gültigkeitsbereich Deiner Variablen machen, z.B.

Code: Alles auswählen

Procedure Reset_Trommel()
  Define.i Trommel1_x = 130
  Define.i Trommel1_y = 145
  Define.i Trommel2_x = 380
  Define.i Trommel2_y = 145
  Define.i Trommel3_x = 630
  Define.i Trommel3_y = 145   
  Define.i Trommel4_x = 880
  Define.i Trommel4_y = 145   
  Define.i Trommel5_x = 1130
  Define.i Trommel5_y = 145   
EndProcedure
Definierst Du hier mehrere Variablen mit Werten, die nur in der Procedure gültig sind. Die Procedure macht im Endeffekt rein gar nichts.
Ausserdem ist für lokale Variablen in Proceduren Protected besser geeignet.
Draw_Trommel kennt Trommel1_x,Trommel1_y gar nicht, was soll da passieren?
In Gravity_main() :
OpenCryptRandom() ist wohl für die zufällige Auswahl eines Bildes, etwas daneben, mit Kanonen auf Spatzen schiessen?

Eine Enumeration je Objekt, nicht eine gesamte für Fenster, Gadgets und Bilder. Siehe nochmal in der Hilfe nach, über Objekte,
genauso wie über Gültigkeit von Variablen.

Einrücken macht den Code leserlicher, in der IDE Strg. - A und dann Strg. - I sollte eine vernünftige Einrückung verwirklichen.

Dein Code ohne Bilder macht auch nur Arbeit. Entweder die Bilder als Zip irgendwo hochladen, Bilder aus den Beispielen von PB nehmen,
mit #PB_Compiler_Home\... als Pfad oder selber malen, bzw. als Datazeilen.

Als Beispiel sind 3 Bilder vollkommen ausreichend, wir wollen nicht alle 10 Gewinnmöglichkeiten austesten.

Die Fehler, die mir ins Augen stechen hab ich Dir jetzt gesagt, die restlichen können dann mit einem, von Dir erneut erstelltem,
minimalem, direkt ausführbarem Code ermittelt werden.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Re: Vorschläge und Ideen gesucht für Slotmaschine ;)

Beitrag von True29 »

danke schonmal werd die Fehler beheben und dann mit Bildern , den Code hier posten .
Mfg
i7,12gb ram , Windows 10 ,Purebasic 5.50
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Vorschläge und Ideen gesucht für Slotmaschine ;)

Beitrag von ts-soft »

Denk dran, alles was Global gültig sein soll, erfordert auch das Wörtchen Global vor der Deklaration:

Code: Alles auswählen

Global a.l
Global Dim b.l(10)
Global NewList c.l()
Alle Variablen, die Du sharen möchtest, müssen vor der ersten Nutzung, in einer Procedure, mit Define im MainScope
deklariert sein.

Code: Alles auswählen

Define myshared.i

Procedure bla()
  Shared myshared.i
EndProcedure
Es gibt also viele Unterschiede zu XProfan!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Re: Vorschläge und Ideen gesucht für Slotmaschine ;)

Beitrag von True29 »

Ich hoffe ich habe jetzt die Angesprochen Punkte richtig umgesetzt.
Zum Testen habe ich nun die datei "world.png" genommen welche bei Purebasic dabei is einfach in das Verzeichniss vom Code kopieren.

schreibs nochmal was der Code so machen soll.
Aus dem Array Bilder soll er ImageID holen und diese auf dem Bildschirm anzeigen.

und nochmal danke für eure Hilfe!

Mfg

Code: Alles auswählen

EnableExplicit
Global Z.i

Global Ende.i = #False
Global Gebot = 40
Global Dim Gewinn.i(11)
Global Gewinn.i,Bild.i,Ereignis.i

Global Dim Bilder.i(11)
Bilder.i(0)= LoadImage(#PB_Any,"world.png",#PB_ImagePlugin_PNG) 


Enumeration
  #FENSTER_HAUPT
EndEnumeration

Enumeration
  #MENU_Gravity
  #MENU_Mini
  #MENU_Highscore
  #MENU_Haupt
  #MENU_ENDE
  #MENU_UEBER
EndEnumeration  

Enumeration
  #BILD_HAUPT
  #BILD_GADGET
EndEnumeration

#FLAGS = #PB_Window_SystemMenu | #PB_Window_ScreenCentered

UseJPEGImageDecoder()
UsePNGImageDecoder()

Procedure Gravity_main()  
  
Gewinn = Gewinn(Random(10))
Bild = Bilder(0) ;ImageID auslesen aus Array

Debug Bild ;Bild 0 = Bilder.i(0)= LoadImage(#PB_Any,"Gfx\a.png",#PB_ImagePlugin_PNG)  
 
  StartDrawing(WindowOutput(#FENSTER_HAUPT))        
      DrawImage(Bild,0,0)  
  StopDrawing()
EndProcedure


If OpenWindow(#FENSTER_HAUPT, 0, 0, 1024, 768, "Gravity 0.1", #FLAGS)  
 ; ImageGadget(#BILD_GADGET, 0, 0, 1024, 768, ImageID(#BILD_HAUPT))
  If CreateMenu(#MENU_HAUPT, WindowID(#FENSTER_HAUPT))           
    MenuTitle("Spiel")    
    MenuItem(#MENU_Gravity, "Gravity")
    MenuItem(#MENU_Mini, "Daily Minigame")
    MenuItem(#MENU_Highscore, "Online Highscore")    
    MenuBar()
    MenuItem(#MENU_ENDE, "Beenden")    
    MenuTitle("Hilfe")
    MenuItem(#MENU_UEBER, "Über...")    
    Repeat
      Ereignis.i = WaitWindowEvent()
      Select Ereignis
      Case #PB_Event_Menu
        Select EventMenu()
          Case #MENU_Gravity          
          Gravity_main()         
          Case #MENU_Highscore
            Debug "Highscore"
          Case #MENU_Mini
            Debug "Minigame"
          Case #MENU_ENDE
            Ende = #True
          Case #MENU_UEBER
          MessageRequester("Über", "Hier beschreiben Sie Ihr Programm.")
        EndSelect
      EndSelect
    Until Ereignis = #PB_Event_CloseWindow Or Ende = #True
  EndIf
EndIf
i7,12gb ram , Windows 10 ,Purebasic 5.50
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Vorschläge und Ideen gesucht für Slotmaschine ;)

Beitrag von ts-soft »

So kommen wir der Sache schon näher :D
Korrigierter Code, Anmerkungen im Source:

Code: Alles auswählen

EnableExplicit

UseJPEGImageDecoder() ; an den Anfang geschoben (vor der ersten Benutzung)
UsePNGImageDecoder()

Global Z.i

Global Ende.i = #False
Global Gebot = 40
Global Dim Gewinn.i(11)
Global Gewinn.i,Bild.i,Ereignis.i

Global Dim Bilder.i(11)
Bilder.i(0)= LoadImage(#PB_Any, #PB_Compiler_Home + "Examples\Sources\Data\world.png") ; nur damit man sich das Bild kopieren spart!

Enumeration
  #FENSTER_HAUPT
EndEnumeration

Enumeration
  #MENU_Gravity
  #MENU_Mini
  #MENU_Highscore
  #MENU_Haupt
  #MENU_ENDE
  #MENU_UEBER
EndEnumeration 

Enumeration
  #BILD_HAUPT
  #BILD_GADGET
EndEnumeration

#FLAGS = #PB_Window_SystemMenu | #PB_Window_ScreenCentered



Procedure Gravity_main() 
  
  Gewinn = Gewinn(Random(10))
  Bild = Bilder(0) ;ImageID auslesen aus Array
  
  Debug Bild ;Bild 0 = Bilder.i(0)= LoadImage(#PB_Any,"Gfx\a.png",#PB_ImagePlugin_PNG) 
  
  StartDrawing(WindowOutput(#FENSTER_HAUPT))       
  DrawImage(ImageID(Bild), 0, 0) ; ImageID() hinzugefügt
  StopDrawing()
EndProcedure


If OpenWindow(#FENSTER_HAUPT, 0, 0, 1024, 768, "Gravity 0.1", #FLAGS) 
  ; ImageGadget(#BILD_GADGET, 0, 0, 1024, 768, ImageID(#BILD_HAUPT))
  If CreateMenu(#MENU_HAUPT, WindowID(#FENSTER_HAUPT))           
    MenuTitle("Spiel")   
    MenuItem(#MENU_Gravity, "Gravity")
    MenuItem(#MENU_Mini, "Daily Minigame")
    MenuItem(#MENU_Highscore, "Online Highscore")   
    MenuBar()
    MenuItem(#MENU_ENDE, "Beenden")   
    MenuTitle("Hilfe")
    MenuItem(#MENU_UEBER, "Über...")   
    Repeat
      Ereignis.i = WaitWindowEvent()
      Select Ereignis
        Case #PB_Event_Menu
          Select EventMenu()
            Case #MENU_Gravity         
              Gravity_main()         
            Case #MENU_Highscore
              Debug "Highscore"
            Case #MENU_Mini
              Debug "Minigame"
            Case #MENU_ENDE
              Ende = #True
            Case #MENU_UEBER
              MessageRequester("Über", "Hier beschreiben Sie Ihr Programm.")
          EndSelect
      EndSelect
    Until Ereignis = #PB_Event_CloseWindow Or Ende = #True
  EndIf
EndIf 
PS: Der optionale Parameter von LoadImage ist zur Zeit ungenutzt, es wird kein ImagePlugin angegeben!

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Re: Vorschläge und Ideen gesucht für Slotmaschine ;)

Beitrag von True29 »

scheint zu funktionieren :/ lag das ganze nun nur an den Variablen wohl echt ärgerlich
i7,12gb ram , Windows 10 ,Purebasic 5.50
Antworten