Taschenrechner...Frage?
Übersicht

Yuvilee |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
SpionAtom |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group