Taschenrechner...Frage?

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

 

Yuvilee

BeitragSa, Sep 20, 2008 2:56
Antworten mit Zitat
Benutzer-Profile anzeigen
altes thema rauskram*

hi,
ich neuling will mich auch nochmal zu wort melden. ich habe das selbe problem wie der topic ersteller.
nur soll mein rechner etwas komplexer werden und mit der maus zu bedienen sein.

hier mal der aktuelle code:
Code: [AUSKLAPPEN]
Graphics 640, 480, 16, 0
AppTitle ("taschenrechner")
HidePointer
SetBuffer BackBuffer ()


Mauszeigerbild = LoadImage("c:\blitz3d\mauszeiger2.png")

schrift1 = LoadFont("arial", 30)
SetFont schrift1

While Not KeyHit (1)       ; hauptschleife

Cls

If text1 = 7 Then Text 233,100,text1
If text2 = 8 Then Text 218,100,text2
If text3 = 9 Then Text 218,100,text3
If text4$ = "+" Then Text 218,100,text4$


; ergebniszeile
Color 255, 255, 255
Rect 200, 90, 215, 50, 0
   
; zeile 1
Color 140, 140, 140       ; dunkleres grau
Rect 200, 145, 50, 50, 1    ; x-achse, y-achse, breite, hoehe, 1=gefuellt / 0=leer
Rect 255, 145, 50, 50, 1
Rect 310, 145, 50, 50, 1
Color 160, 160, 160       ; helleres grau
Rect 365, 145, 50, 50, 1

; zeile 2
Color 140, 140, 140
Rect 200, 200, 50, 50, 1
Rect 255, 200, 50, 50, 1
Rect 310, 200, 50, 50, 1
Color 160, 160, 160
Rect 365, 200, 50, 50, 1

; zeile 3
Color 140, 140, 140
Rect 200, 255, 50, 50, 1
Rect 255, 255, 50, 50, 1
Rect 310, 255, 50, 50, 1
Color 160, 160, 160
Rect 365, 255, 50, 50, 1

; zeile 4
Color 140, 140, 140
Rect 200, 310, 160, 50, 1
Color 160, 160, 160
Rect 365, 310, 50, 50, 1

; zeile 5
Rect 200, 365, 160, 50, 1
Rect 365, 365, 50, 50, 1
   

; nummern
Color 0, 0, 0            ; schwarz
Text 218, 158, "7"
Text 273, 158, "8"
Text 328, 158, "9"
Text 218, 212, "4"
Text 273, 212, "5"
Text 328, 212, "6"
Text 218, 267, "1"
Text 273, 267, "2"
Text 328, 267, "3"
Text 273, 322, "0"

; zeichen
Color 255, 255, 255         ; weiss
Text 383, 158, "+"
Text 383, 212, "-"
Text 383, 267, "*"
Text 383, 322, "/"
Text 252, 377, "Enter"
Text 383, 377, ","
   
   
maus_x_koordinaten = MouseX()
maus_y_koordinaten = MouseY()
DrawImage mauszeigerbild, maus_x_koordinaten , maus_y_koordinaten
MaskImage mauszeigerbild, 255, 0, 248 ; pink


If MouseHit(1) Then
   If MouseX() >= 200 And MouseX() < (200+50) Then
   If MouseY() >= 145 And MouseY() < (145+50) Then   
      text1 = 7
   EndIf EndIf

   If MouseX() >= 255 And MouseX() < (255+50) Then
   If MouseY() >= 145 And MouseY() < (145+50) Then
      text2 = 8
   EndIf EndIf

   If MouseX() >= 310 And MouseX() < (310+50) Then
   If MouseY() >= 145 And MouseY() < (145+50) Then
      text3 = 9
   EndIf EndIf

   If MouseX() >= 365 And MouseX() < (365+50) Then
   If MouseY() >= 145 And MouseY() < (145+50) Then
      text4$ = "+"
   EndIf EndIf
EndIf


Flip

Wend   ; hauptschleife ende

End


1 -in der while-wend schleife steht ganz oben wird angegeben wo die angeklickten zahlen in das ergebnisfeld geschrieben werden - leider uebereinander

2 -dadrunter sind die codes fuer das zeichnen der buttons und deren farbliche gestaltung.

3 -dadrunter kommen die zahlen auf den buttons

4 -dann wird die maus gezeichnet

5 -und dann kommt der zweite teil, der fuer die eingabe der zahlen in der ergebniszeile vonnoeten ist. dieser teil steht in direkter verbindung mit punk 1.

im 5. abschnitt wird bestimmt, wo sich die maus zum zeitpunkt eines klicks befinden muss, damit eine der zahlen ausgewaehlt wird. der klick auf eine zahl bestimmt die dazugehoerige integerzahl, die dann in abschnit 1 verarbeitet werden soll.


das ganze funktioniert soweit wunderbar. ich starte das programm. kann eine zahl anklicken und diese erscheint dann oben im eingabefeld. problem ist nur, dass jede weitere angeklickte zahl einfach ueber die erste drueber geschrieben wird. ich habe auch schon versucht zuletzt eingegebene zahlen mit hilfe von wenn-dann-sonst-formeln hinter die erste schreiben zu lassen. mit diesem code zum beispiel:
Code: [AUSKLAPPEN]
If text2=8 Or Text3=9 Or Text4$="+" Then  If text1 = 7 Then Text 233,100,text1 Else If text1 = 7 Then Text 233,100,text1
If text1=7 Or Text3=9 Or Text4$="+" Then  If text2 = 8 Then Text 233,100,text2 Else If text2 = 8 Then Text 218,100,text2
If text1=7 Or Text2=8 Or Text4$="+" Then  If text3 = 9 Then Text 233,100,text3 Else If text3 = 9 Then Text 218,100,text3
If Text1=7 Or Text2=8 Or Text3=9 Then  If text4$ = "+" Then Text 233,100,text4$ Else If text4$ = "+" Then Text 218,100,text4$

- das uebereinanderschreib-problem gilt es zu loesen und da hoffe ich auf eure hilfe =)

ihr koennt das ganze ja auch einfach mal selber testen. es duerfte ja keine datenansammlung im speicher geben, da ja die schleife am anfang immer geloescht wird.

lg
Yuvilee

ozzi789

BeitragSa, Sep 20, 2008 11:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Du solltest die Bilder 1 mal kreiren und mit createimage / saveimage abspeichern sodass du sie ned immer mit oval usw zeichnen must (der preformance wegen Wink)


Code: [AUSKLAPPEN]
 Text 233,100,text1$ ; ausgabe !


If MouseHit(1) Then
   If MouseX() >= 200 And MouseX() < (200+50) Then
   If MouseY() >= 145 And MouseY() < (145+50) Then   
      text1$ = text1$+"7"
   EndIf EndIf

   If MouseX() >= 255 And MouseX() < (255+50) Then
   If MouseY() >= 145 And MouseY() < (145+50) Then
      text1$ = text1$+"8"
   EndIf EndIf

   If MouseX() >= 310 And MouseX() < (310+50) Then
   If MouseY() >= 145 And MouseY() < (145+50) Then
      text1$ = text1$+"9"
   EndIf EndIf

   If MouseX() >= 365 And MouseX() < (365+50) Then
   If MouseY() >= 145 And MouseY() < (145+50) Then
      text1$ = text1$+"+"
   EndIf EndIf
EndIf



So kanst dus richtig anzeigen lassen, du must einfach die ausgabe und die wirkliche berechnung in 2 verschiedenen variablen speichern Razz
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

SpionAtom

BeitragSa, Sep 20, 2008 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Für Abfragen, ob sich die Maus in einem bestimmten Rechteck befindet, empfehle ich eine Funktion:

Code: [AUSKLAPPEN]
;Prüft, ob sich die Maus in einem angegebenen Rechteck befindet
Function mouseInRect(x, y, w, h)
   If mouse_x < x Then Return False
   If mouse_y < y Then Return False
   If mouse_x > x + w Then Return False
   If mouse_y > y + h Then Return False
   Return True   
End Function


In diesem Beispiel geben x, y die obere linke Ecke des Rechtecks an, und w, h Breite und Höhe. Außerdem verwende ich nicht direkt mousex() und mousey(), ich speichere sie zu Beginn eines Schleifenduchlaufs in die globalen Variablen mouse_x, mouse_y.

Ach, ich spendier mal ein Beispiel:
Code: [AUSKLAPPEN]
   Global mouse_x, mouse_y, mouse_hit
   
   
   SetBuffer BackBuffer()
   Repeat
      mouse_x = MouseX(): mouse_y = MouseY(): mouse_hit = MouseHit(1)   
   
      If mouseInRect(50, 50, 50, 50) Then ;oberes Feld abfragen
         f1 = 1 Else f1 = 0
      End If

      If mouseInRect(30, 150, 100, 20) Then ;Endefeld abfragen
         g1 = 1
         If mouse_hit Then Exit
      Else
         g1 = 0
      End If

      Cls      
      Color 255, 255, 255         ;oberes Feld malen
      Rect 50, 50, 50, 50, f1
      
      Color 255 * g1, 255 * g1, 255 * g1:   Rect 30, 150, 100, 20, 1   ;Endefeld malen
      Color 255, 255, 255: Rect 30, 150, 100, 20, 0
      Color 255 * (1 - g1), 255 * (1 - g1), 255 * (1 - g1)
      Text 40, 155, "Ende"
      Flip()
   
   Until KeyDown(1)
   End
   

;Prüft, ob sich die Maus in einem angegebenen Rechteck befindet
Function mouseInRect(x, y, w, h)
   If mouse_x < x Then Return False
   If mouse_y < y Then Return False
   If mouse_x > x + w Then Return False
   If mouse_y > y + h Then Return False
   Return True   
End Function
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group