Seite 1 von 1

Bilder mit Executable schicken

Verfasst: 10.07.2023 12:10
von cyerangle
Hallo zusammen,
ich schreibe an einem Wüfelspiel und möchte die 7 Würfelbilder ( Würfel von 1 - 6 und 1 fliegender Würfel) mit dem Programm mitschicken.
Ich mache das mit :

Code: Alles auswählen

DataSection
  Image_WF_1:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_1.jpg"
  Image_WF_2:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_2.jpg"
  Image_WF_3:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_3.jpg"
  Image_WF_4:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_4.jpg"
  Image_WF_5:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_5.jpg"
  Image_WF_6:   
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_6.jpg"
  Image_flieg:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/Wuerfel_ohne.jpg"
EndDataSection
Dann rufe ich die Bilder mit CatchImage() auf das klappt gut.
Nun möchte ich aber eine Prozedur schreiben wo die mit dem Zufallgenerator gewürfeltenZahlen den Bildern zugeordnet werden dazu habe ich eine
Select Schleife von 1 bis 6 für die gewürfelten werte doch dann findet das Programm die Sprungmarke nicht.

bei werft = ?Image_WF_1 sagt er mir : Label not found(?Image_WF_1)

die gleiche Fehlermeldung kommt wenn ich es mit einem Zeiger versuche *zeig1 = ?Image_WF_1

bitte konnt Ihr mir helfen???

Danke Mike

Re: Bilder mit Executable schicken

Verfasst: 10.07.2023 16:38
von NicTheQuick
Ohne Code kann ich nur raten: Label funktionieren nur im selben Scope. Das heißt wenn du ein Label im Hauptcode definierst, existiert er in einer Procedure nicht, und umgekehrt.

Re: Bilder mit Executable schicken

Verfasst: 10.07.2023 19:03
von jacdelad
Ich würde die Bilder alle beim Programmstart laden und die Handles in einer Map speichern, mit den Bezeichnungen "1" bis "6". Dann kannst du sie aus der Map supereinfach per Zufall abrufen.

Re: Bilder mit Executable schicken

Verfasst: 11.07.2023 11:01
von Lord
Das funktioniert bei mir im Prinzip so:

Code: Alles auswählen

Dim ImgAdr(6)

Procedure ReadImgAdr()
  Shared ImgAdr()
  ImgAdr(0)=?Image_flieg
  ImgAdr(1)=?Image_WF_1
  ImgAdr(2)=?Image_WF_2
  ImgAdr(3)=?Image_WF_3
  ImgAdr(4)=?Image_WF_4
  ImgAdr(5)=?Image_WF_5
  ImgAdr(6)=?Image_WF_6
EndProcedure
Procedure RollDice()
  Shared ImgAdr()
;   Debug ImgAdr(Random(6, 0))
  Debug ImgAdr(Random(6, 1))
EndProcedure

ReadImgAdr()
RollDice()

DataSection
  Image_flieg:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/Wuerfel_ohne.jpg"
  Image_WF_1:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_1.jpg"
  Image_WF_2:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_2.jpg"
  Image_WF_3:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_3.jpg"
  Image_WF_4:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_4.jpg"
  Image_WF_5:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_5.jpg"
  Image_WF_6:   
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_6.jpg"
EndDataSection

Re: Bilder mit Executable schicken

Verfasst: 11.07.2023 16:53
von cyerangle
Hallo Lord,
ich habe das Programm etwas am meine Bedürfnisse angepasst, aber nun sagt er mir in Enumeration sind nur konstanten. erlaubt.
Hier mein Programm.

Code: Alles auswählen

Dim ImgAdr(6)

Global Image_25, Image_26, Image_27

Enumeration FormImage
  #Img_Hf_1_0
  #Img_Hf_1_1    ;;;   0 bis 2 für Würfel
  #Img_Hf_1_2
EndEnumeration

Enumeration Fenster
  #HaupFenst


Procedure ReadImgAdr()
  Shared ImgAdr()
  ImgAdr(0)=?Image_flieg
  ImgAdr(1)=?Image_WF_1
  ImgAdr(2)=?Image_WF_2
  ImgAdr(3)=?Image_WF_3
  ImgAdr(4)=?Image_WF_4
  ImgAdr(5)=?Image_WF_5
  ImgAdr(6)=?Image_WF_6
EndProcedure
Procedure RollDice()
  Shared ImgAdr()
  Debug ImgAdr(Random(3, 1))
  Debug ImgAdr(Random(3, 1))
  Debug ImgAdr(Random(3, 1))
  Debug ?Image_WF_1
  Debug ?Image_WF_2
  Debug ?Image_WF_3
EndProcedure

ReadImgAdr()
RollDice()
CatchImage(#Img_Hf_1_0, ?Image_WF_0)

;CatchImage(#Img_Hf_1_0, ?Image_WF_4)
;CatchImage(#Img_Hf_1_0, ?Image_WF_6)

HauptFenst_1 = OpenWindow(#HaupFenst , 0, 0, 808, 688, "Shock out", #PB_Window_SystemMenu)
SetWindowColor(#HaupFenst, RGB(254,255,0))
;Image_25 = ImageGadget(#PB_Any, 200, 472, 51, 68, ImageID(#Img_Hf_1_0), #PB_Image_Border)
;Image_26 = ImageGadget(#PB_Any, 304, 472, 51, 68, ImageID(#Img_Hf_1_6), #PB_Image_Border)
;Image_27 = ImageGadget(#PB_Any, 400, 472, 51, 68, ImageID(#Img_Hf_1_6), #PB_Image_Border)

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

DataSection
  Image_flieg:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/Wuerfel_ohne.jpg"
  Image_WF_1:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_1.jpg"
  Image_WF_2:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_2.jpg"
  Image_WF_3:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_3.jpg"
  Image_WF_4:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_4.jpg"
  Image_WF_5:
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_5.jpg"
  Image_WF_6:   
  IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_6.jpg"
EndDataSection
Was mache ich falsch

Re: Bilder mit Executable schicken

Verfasst: 11.07.2023 17:00
von cyerangle
Sorry irgend wie wurde ein EndEnumeration bei mir gelöscht. Jetzt meckert er in Zeile 45
Das können doch nur Flüchtikeitsfehler von mir sein

Re: Bilder mit Executable schicken

Verfasst: 11.07.2023 19:22
von mk-soft
Nicht jedesmal das Image mit CatchImage überschreiben.
Einmal am Anfang alle Bilder einmal übernehmen und dann nach Zufall zum ImageGadget zuweisen

Da ich die Bilder nicht habe, mit #Demo = 1 Dummy Bilder erstellt

Code: Alles auswählen

;-TOP

#ProgramTitle = "Main Window"
#ProgramVersion = "v1.01.2"

Enumeration Windows
  #Main
EndEnumeration

Enumeration MenuBar
  #MainMenu
EndEnumeration

Enumeration MenuItems
  #MainMenuAbout
  #MainMenuExit
EndEnumeration

Enumeration Gadgets
  #MainImage
EndEnumeration

Enumeration StatusBar
  #MainStatusBar
EndEnumeration

; ----

UseJPEGImageDecoder()

Global Dim MyImage(6)

#Demo = 1

Procedure InitImages()
  CompilerIf Not #Demo
    MyImage(0) = CatchImage(#PB_Any, ?Image_flieg)
    MyImage(1) = CatchImage(#PB_Any, ?Image_WF_1)
    MyImage(2) = CatchImage(#PB_Any, ?Image_WF_2)
    MyImage(3) = CatchImage(#PB_Any, ?Image_WF_3)
    MyImage(4) = CatchImage(#PB_Any, ?Image_WF_4)
    MyImage(5) = CatchImage(#PB_Any, ?Image_WF_5)
    MyImage(6) = CatchImage(#PB_Any, ?Image_WF_6)
  CompilerElse
    MyImage(0) = CreateImage(#PB_Any, 200, 200, 32, RGB(255,255,255))
    MyImage(1) = CreateImage(#PB_Any, 200, 200, 32, Random($FFFFFF, $404040))
    MyImage(2) = CreateImage(#PB_Any, 200, 200, 32, Random($FFFFFF, $404040))
    MyImage(3) = CreateImage(#PB_Any, 200, 200, 32, Random($FFFFFF, $404040))
    MyImage(4) = CreateImage(#PB_Any, 200, 200, 32, Random($FFFFFF, $404040))
    MyImage(5) = CreateImage(#PB_Any, 200, 200, 32, Random($FFFFFF, $404040))
    MyImage(6) = CreateImage(#PB_Any, 200, 200, 32, Random($FFFFFF, $404040))
  CompilerEndIf
EndProcedure

; ----

Procedure UpdateWindow()
  Protected dx, dy
  dx = WindowWidth(#Main)
  dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar) - MenuHeight()
  ; Resize gadgets
EndProcedure

Procedure Main()
  Protected dx, dy
  
  #MainStyle = #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget
  
  If OpenWindow(#Main, #PB_Ignore, #PB_Ignore, 800, 600, #ProgramTitle , #MainStyle)
    ; Menu
    CreateMenu(#MainMenu, WindowID(#Main))
    MenuTitle("&File")
    CompilerIf #PB_Compiler_OS = #PB_OS_MacOS
      MenuItem(#PB_Menu_About, "")
    CompilerElse
      MenuItem(#MainMenuAbout, "About")
    CompilerEndIf
    ; Menu File Items
    
    CompilerIf Not #PB_Compiler_OS = #PB_OS_MacOS
      MenuBar()
      MenuItem(#MainMenuExit, "E&xit")
    CompilerEndIf
    
    ; StatusBar
    CreateStatusBar(#MainStatusBar, WindowID(#Main))
    AddStatusBarField(#PB_Ignore)
    
    ; Gadgets
    dx = WindowWidth(#Main)
    dy = WindowHeight(#Main) - StatusBarHeight(#MainStatusBar) - MenuHeight()
    ImageGadget(#MainImage, 10, 10, 200, 200, 0)
    
    ; Bind Events
    BindEvent(#PB_Event_SizeWindow, @UpdateWindow(), #Main)
    
    ; Init Program
    InitImages()
    
    AddWindowTimer(#Main, 1, 1000)
    
    ; Event Loop
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Select EventWindow()
            Case #Main
              Break
              
          EndSelect
          
        Case #PB_Event_Menu
          Select EventMenu()
            CompilerIf #PB_Compiler_OS = #PB_OS_MacOS   
              Case #PB_Menu_About
                PostEvent(#PB_Event_Menu, #Main, #MainMenuAbout)
                
              Case #PB_Menu_Preferences
                
              Case #PB_Menu_Quit
                PostEvent(#PB_Event_CloseWindow, #Main, #Null)
                
            CompilerEndIf
            
          Case #MainMenuAbout
            MessageRequester("About", #ProgramTitle + #LF$ + #ProgramVersion, #PB_MessageRequester_Info)
              
          Case #MainMenuExit
            PostEvent(#PB_Event_CloseWindow, #Main, #Null)
            
          EndSelect
          
        Case #PB_Event_Gadget
          Select EventGadget()
              
          EndSelect
          
        Case #PB_Event_Timer
          Select EventTimer()
            Case 1
              nummer = Random(6)
              SetGadgetState(#MainImage, ImageID(MyImage(nummer)))
              StatusBarText(#MainStatusBar, 0, "Nummer: " + nummer)
          EndSelect
          
      EndSelect
    ForEver
    
  EndIf
  
EndProcedure : Main()

CompilerIf Not #Demo
  
  DataSection
    Image_WF_1:
    IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_1.jpg"
    Image_WF_2:
    IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_2.jpg"
    Image_WF_3:
    IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_3.jpg"
    Image_WF_4:
    IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_4.jpg"
    Image_WF_5:
    IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_5.jpg"
    Image_WF_6:   
    IncludeBinary "/Users/mike/Documents/PureBasic/JPG/WF_6.jpg"
    Image_flieg:
    IncludeBinary "/Users/mike/Documents/PureBasic/JPG/Wuerfel_ohne.jpg"
  EndDataSection
  
CompilerEndIf

Re: Bilder mit Executable schicken

Verfasst: 13.07.2023 13:49
von cyerangle
Hallo zusammen besonderrs MK-Soft,
Ich habe Dein Programm direkt einmal ausprobiert, und da sind mir benahe die Ohren abgefallen.

Da sind Sachen drinnen, von denen habe ich noch nichts gehört, oder die sind in der Hilfe in der Frorm nicht zu finden. z.B.
steht in der Hilfe nicht das man Randam() auch mit Hexea Zahlen betreiben kann. auch die ganzen Compiler Direktiven habe ich mir noch nie
angesehen. Zum Glück habe ich ab morgen anderthalb Wochen Urlaub da werde ich mein Tablet mitnehmen und mich mit dem Programm
befassen. Was ich dann nicht verstehe werde ich hier posten und hoffe, da jemand von Euch mir unter die Arme greifen kann.

Vielen Dank Mike