Mini-Taschenrechner programmieren

Anfängerfragen zum Programmieren mit PureBasic.
Wolfvater Loki
Beiträge: 53
Registriert: 22.05.2022 15:37

Mini-Taschenrechner programmieren

Beitrag von Wolfvater Loki »

Hallo PB-Team. Ich möchte ein Programm für ein Kartenspiel entwickeln, mit dem eine Wahrscheinlichkeitsrechnung für ein bestimmtes Blatt durchgeführt werden kann. Die Subtraktion-Prozedur soll nur anzeigen, wie viele Karten noch im Deck sind.

Code: Alles auswählen

Global master$
Global master3$

Procedure.s Subtraktion()
  decksize$ = GetGadgetText(4)
  placeintothedeck$ = GetGadgetText(9)
  master$ = decksize$ + placeintothedeck$
EndProcedure
Procedure.s Wahrscheinlichkeit()
  decksize$ = GetGadgetText(4)
  handsize$ = GetGadgetText(5)
  placeintothedeck$ = GetGadgetText(9)
EndProcedure

OpenWindow(1,0,0,1000,600,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
FrameGadget(1,5,5,990,570,"",#PB_Frame_Flat)
TextGadget(2,10,10,65,20,"Deckgröße:")
SetGadgetColor(2,#PB_Gadget_BackColor,RGB(0,255,255))
TextGadget(3,10,50,70,20,"Handgröße:")
SetGadgetColor(3,#PB_Gadget_BackColor,RGB(0,255,255))
StringGadget(4,90,10,100,25,"",#PB_String_Numeric)
StringGadget(5,90,50,100,25,"",#PB_String_Numeric)
FrameGadget(6,10,80,285,490,"",#PB_Frame_Flat)
TextGadget(7,15,85,45,15,"Karten:")
SetGadgetColor(7,#PB_Gadget_BackColor,RGB(0,255,255))
StringGadget(8,15,105,100,25,"")
StringGadget(9,130,105,25,25,"",#PB_String_Numeric)
StringGadget(10,180,105,25,25,"",#PB_String_Numeric)
StringGadget(11,230,105,25,25,"",#PB_String_Numeric)
TextGadget(12,120,85,45,15,"im Deck")
SetGadgetColor(12,#PB_Gadget_BackColor,RGB(0,255,255))
TextGadget(13,180,85,25,15,"Min")
SetGadgetColor(13,#PB_Gadget_BackColor,RGB(0,255,255))
TextGadget(14,230,85,25,15,"Max")
SetGadgetColor(14,#PB_Gadget_BackColor,RGB(0,255,255))
TextGadget(400,300,10,100,100,"")
SetGadgetColor(400,#PB_Gadget_BackColor,RGB(0,255,255))
ButtonGadget(401,410,10,150,25,"Berechnung")
ButtonGadget(402,410,40,150,25,"weitere Wahrscheinlichkeit")
TextGadget(403,260,105,30,30,"")
SetGadgetColor(403,#PB_Gadget_BackColor,RGB(0,255,255))
ButtonGadget(404,410,70,150,25,"Karten")
AddKeyboardShortcut(1,#PB_Shortcut_Escape,1)
close = 0
Repeat
  event = WaitWindowEvent()
  If event = #PB_Event_Gadget
    Select EventGadget()
      Case 401
        master$ = Wahrscheinlichkeit()
        ultimatetext$ = "Die Wahrscheinlichkeit beträgt: "
        SetGadgetText(400,ultimatetext$+master$)
      Case 404
        master$ = Subtraktion()
        anzahldeckkarten$ = master$
        SetGadgetText(403,anzahldeckkarten$)
    EndSelect
  EndIf
  If event = #PB_Event_Menu
    Select EventMenu()
      Case 1
        close = 1
    EndSelect
  EndIf
Until event = #PB_Event_CloseWindow Or close = 1
Wolfvater Loki
Er wünscht euch schöne Grüße.
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Mini-Taschenrechner programmieren

Beitrag von Kiffi »

ok, dass der Code nicht funktioniert, wirst Du ja schon selber rausgefunden haben. Den anderen Threads mit Deiner Beteiligung hier im Forum entnehme ich, dass Du den Unterschied zwischen numerischen und String-Variablen kennen solltest.

Hast Du denn auch eine konkrete Frage?
a²+b²=mc²
Wolfvater Loki
Beiträge: 53
Registriert: 22.05.2022 15:37

Re: Mini-Taschenrechner programmieren

Beitrag von Wolfvater Loki »

Meine Frage ist halt, wie ich es schaffe die Prozeduren zum Hauptfenster hinzuzufügen, sodass der Code funktioniert?
Ich habe schon festgestellt, dass der Code nicht funktioniert.
Wolfvater Loki
Er wünscht euch schöne Grüße.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Mini-Taschenrechner programmieren

Beitrag von Nino »

Wolfvater Loki hat geschrieben: 15.12.2022 19:23 Meine Frage ist halt, wie ich es schaffe die Prozeduren zum Hauptfenster hinzuzufügen
Ich weiß zwar nicht, was du mit „Prozeduren zum Hauptfenster hinzuzufügen“ meinst. Aber wenn ich mir deinen Code ansehe, dann möchtest du wahrscheinlich dass deine Prozeduren einen Wert an das Hauptprogramm zurückgeben. Lies doch mal die Hilfe zu Procedure, und achte dabei besonders auf die Verwendung des Befehls ProcedureReturn.
Wolfvater Loki
Beiträge: 53
Registriert: 22.05.2022 15:37

Re: Mini-Taschenrechner programmieren

Beitrag von Wolfvater Loki »

Nino hat geschrieben: 15.12.2022 19:47
Wolfvater Loki hat geschrieben: 15.12.2022 19:23 Meine Frage ist halt, wie ich es schaffe die Prozeduren zum Hauptfenster hinzuzufügen
Ich weiß zwar nicht, was du mit „Prozeduren zum Hauptfenster hinzuzufügen“ meinst. Aber wenn ich mir deinen Code ansehe, dann möchtest du wahrscheinlich dass deine Prozeduren einen Wert an das Hauptprogramm zurückgeben. Lies doch mal die Hilfe zu Procedure, und achte dabei besonders auf die Verwendung des Befehls ProcedureReturn.
Danke für den Tipp. Ich habe einen Fehler im Code. Bei der Subtraktion-Prozedur habe ich eine Addition statt eine Subtraktion gemacht.

Code: Alles auswählen

  Procedure.s Subtraktion()
  decksize$ = GetGadgetText(4
    placeintothedeck$ = GetGadgetText(9)
  master$ = decksize$ + placeintothedeck$
      ProcedureReturn master$
EndProcedure
Bei der Subtraktion kommt trotdem "Syntax error" raus:

Code: Alles auswählen

  Procedure.s Subtraktion()
  decksize$ = GetGadgetText(4)
  placeintothedeck$ = GetGadgetText(9)
  master$ = decksize$ - placeintothedeck$
  ProcedureReturn master$
EndProcedure
Wolfvater Loki
Er wünscht euch schöne Grüße.
Wolfvater Loki
Beiträge: 53
Registriert: 22.05.2022 15:37

Re: Mini-Taschenrechner programmieren

Beitrag von Wolfvater Loki »

Gibt es eine Möglichkeit einen Wert in einen String zu konvertieren?
Ich habe jetzt ein Problem damit, dass ich im Hauptprogramm ein String zum TextGadget brauche.

Code: Alles auswählen

Global master$
Procedure Subtraktion()
  decksize$ = GetGadgetText(4)
  placeintothedeck$ = GetGadgetText(9)
  meindeck = Val(decksize$)
  kartensicht = Val(placeintothedeck$)
  master = meindeck - kartensicht
EndProcedure
Procedure.s Wahrscheinlichkeit(decksize$,handsize$,placeintothedeck$)
  decksize$ = alpha$
  handsize$ = beta$
  placeintothedeck$ = gamma$
  
EndProcedure

OpenWindow(1,0,0,1000,600,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
FrameGadget(1,5,5,990,570,"",#PB_Frame_Flat)
TextGadget(2,10,10,65,20,"Deckgröße:")
SetGadgetColor(2,#PB_Gadget_BackColor,RGB(0,255,255))
TextGadget(3,10,50,70,20,"Handgröße:")
SetGadgetColor(3,#PB_Gadget_BackColor,RGB(0,255,255))
StringGadget(4,90,10,100,25,"",#PB_String_Numeric)
StringGadget(5,90,50,100,25,"",#PB_String_Numeric)
FrameGadget(6,10,80,285,490,"",#PB_Frame_Flat)
TextGadget(7,15,85,45,15,"Karten:")
SetGadgetColor(7,#PB_Gadget_BackColor,RGB(0,255,255))
StringGadget(8,15,105,100,25,"")
StringGadget(9,130,105,25,25,"",#PB_String_Numeric)
StringGadget(10,180,105,25,25,"",#PB_String_Numeric)
StringGadget(11,230,105,25,25,"",#PB_String_Numeric)
TextGadget(12,120,85,45,15,"im Deck")
SetGadgetColor(12,#PB_Gadget_BackColor,RGB(0,255,255))
TextGadget(13,180,85,25,15,"Min")
SetGadgetColor(13,#PB_Gadget_BackColor,RGB(0,255,255))
TextGadget(14,230,85,25,15,"Max")
SetGadgetColor(14,#PB_Gadget_BackColor,RGB(0,255,255))
TextGadget(400,300,10,100,100,"")
SetGadgetColor(400,#PB_Gadget_BackColor,RGB(0,255,255))
ButtonGadget(401,410,10,150,25,"Berechnung")
ButtonGadget(402,410,40,150,25,"weitere Wahrscheinlichkeit")
TextGadget(403,260,105,30,30,"")
SetGadgetColor(403,#PB_Gadget_BackColor,RGB(0,255,255))
ButtonGadget(404,410,70,150,25,"Karten")
AddKeyboardShortcut(1,#PB_Shortcut_Escape,1)
close = 0
Repeat
  event = WaitWindowEvent()
  If event = #PB_Event_Gadget
    Select EventGadget()
      Case 401
        alpha$ = GetGadgetText(4)
        beta$ = GetGadgetText(5)
        gamma$ = GetGadgetText(9)
        ultimatetext$ = "Die Wahrscheinlichkeit beträgt: "
        SetGadgetText(400,ultimatetext$)
      Case 404
        anzahlkarten = Subtraktion()
        SetGadgetText(403,anzahlkarten$)
    EndSelect
  EndIf
  If event = #PB_Event_Menu
    Select EventMenu()
      Case 1
        close = 1
    EndSelect
  EndIf
Until event = #PB_Event_CloseWindow Or close = 1
Wolfvater Loki
Er wünscht euch schöne Grüße.
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Re: Mini-Taschenrechner programmieren

Beitrag von Andesdaf »

Bitte nutze EnableExplicit in deinen Codes, das zwingt dich, Variablen ordentlich zu deklarieren. anzahlkarten und anzahlkarten$ sind zwei verschiedene Variablen.

In deinem letzten Code gibt die Prozedur Subtraktion keinen Wert zurück. Konvertierung zwischen Integer und String geht per Str().
Win11 x64 | PB 6.20
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Mini-Taschenrechner programmieren

Beitrag von Kiffi »

Code: Alles auswählen

Procedure Subtraktion()
  
  Protected decksize
  Protected placeintothedeck
  
  decksize = Val(GetGadgetText(4))
  placeintothedeck = Val(GetGadgetText(9))
  
  ProcedureReturn decksize - placeintothedeck
  
EndProcedure
und gewöhn' Dir bitte an, EnableExplicit zu verwenden. Gerade für Einsteiger ist das empfehlenswert.
a²+b²=mc²
Wolfvater Loki
Beiträge: 53
Registriert: 22.05.2022 15:37

Re: Mini-Taschenrechner programmieren

Beitrag von Wolfvater Loki »

Danke für die Hilfe bei der Subtraktion.
Wolfvater Loki
Er wünscht euch schöne Grüße.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Mini-Taschenrechner programmieren

Beitrag von Nino »

Andesdaf hat geschrieben: 15.12.2022 22:02 Bitte nutze EnableExplicit in deinen Codes, das zwingt dich, Variablen ordentlich zu deklarieren.
Ja! Darauf habe ich ihn allerdings schon vor knapp 2 Monaten hingewiesen. Das Problem mit manchen Leuten ist nicht, dass sie Anfänger sind, sondern dass sie sich standhaft weigern etwas dazuzulernen ...

Die Variablen sollten dann übrigens mit Define und Protected deklariert werden anstatt mit Global. Gerade Anfänger lernen am besten gleich von Beginn an, sauber zu programmieren und nicht alles „irgendwie“ zusammenzuschmeißen. Global kann für Profis in Einzelfällen nützlich sein, in denen sie es bewusst verwenden, weil sie genau wissen was sie tun.
Antworten