Maus Anzeige Probleme

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

chineseboy

Betreff: Maus Anzeige Probleme

BeitragMi, Feb 03, 2010 22:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
;Taschenrechner
Graphics 640,480,16,2
SetBuffer BackBuffer ()
Cls
Repeat
HidePointer

Ueberschrift$("Willkommen!",0)
Ueberschrift$("Bitte wählen sie ihre Funktion",15)
Programmauswahl$(" 1 - für Addition",45)
Programmauswahl$(" 2 - für Subtraktion",60)
Programmauswahl$(" 3 - für Multiplikation",75)
Programmauswahl$(" 4 - für Division",90)
Programmauswahl$(" 5 - Um das Programm zu beenden",105)
Locate 0,150
maus
Auswahl=Input()
Select Auswahl
Case 1 Addition
Case 2 Subtraktion
Case 3 Multiplikation
Case 4 Division
Case 5 End
Default Print "Falsche Auswahl" Cls
End Select
Until Auswahl = 5

Function Maus()
Repeat
Maus=LoadImage ("Maus.bmp")
x=MouseX()
y=MouseY()
CLS
DrawImage Maus,x,y
Flip

Until KeyDown(1)=1
End Function





Function Ueberschrift$(Text$,hoehe)
Text 320,hoehe,Text,1,0
End Function

Function Programmauswahl$(Text$,hoehe)
Text 0,hoehe,Text,0,0
End Function



Function Addition()
Print "Addition"
Zahl1=Input("Geben Sie die 1. Zahl ein: ")
Zahl2=Input("Geben Sie die 2. Zahl ein: ")
Zahl3=Zahl1+Zahl2
Print Zahl3
WaitKey
Cls
End Function

Function Subtraktion()
Print "Subtraktion"
Zahl1=Input("Geben Sie die 1. Zahl ein: ")
Zahl2=Input("Geben Sie die 2. Zahl ein: ")
Zahl3=Zahl1-Zahl2
Print Zahl3
WaitKey
Cls
End Function

Function Multiplikation()
Print "Multiplikation"
Zahl1=Input("Geben Sie die 1. Zahl ein: ")
Zahl2=Input("Geben Sie die 2. Zahl ein: ")
Zahl3=Zahl1*Zahl2
Print Zahl3
WaitKey
Cls
End Function

Function Division()
Print "Division"
Zahl1=Input("Geben Sie die 1. Zahl ein: ")
Zahl2=Input("Geben Sie die 2. Zahl ein: ")
Zahl3=Zahl1/Zahl2
Print Zahl3
WaitKey
Cls
End Function

Halli Hallo und liebe grüße.
Bin neu hier im Board und hoffe auf Hilfe von Experten
So sieht mein Programm aus!
Irgendwie kriege ich das programm nicht so hin wie es sollte.
Ist die Struktur schon kommplett falsch?
Sobald ich CLS befehl einfügen kriege ich das problem das bei mir der text verschwindet.
wenn ichs nicht mache dann kommen zu viele mäuse zu stande.

außerdem hab ich noch das problem sobald ich es in vollbildmodus einschalte ist bei mir ein Teil des bildschirms abgeschnitten

Midimaster

BeitragMi, Feb 03, 2010 22:58
Antworten mit Zitat
Benutzer-Profile anzeigen
in deinem Programm ist leider keine erkennnbare Struktur. Hast du schon einmal mein Programm-Ablauf-Tutorial gelesen?

https://www.blitzforum.de/foru...607#355607

Dort erfährst du viel über eine Struktur, die dir Functionen ermöglicht und den Bildschirm immer stabil aufgebaut lässt.
  • Zuletzt bearbeitet von Midimaster am Do, Feb 04, 2010 8:58, insgesamt einmal bearbeitet
 

BBPro2

BeitragMi, Feb 03, 2010 23:01
Antworten mit Zitat
Benutzer-Profile anzeigen
hi,
wo soll ich anfangen

print und locate solltest du nicht verwenden, verwende stattdessen "text"
die befehle sind veraltet und dienen höchstens debugzwecken

hidepointer gehört auf keinen fall in eine schleife, es reicht wenn du es einmal - VOR repeat - machst

gleiches gilt für Loadimage - das ist allerdings noch viel wichtiger, da du sonst deinen gesamten
grafikram vollhaust mit deinem bild von einer maus... du lädst nämlich in jedem durchlauf ein neues bild dazu.
das kostet zeit, ist unnötig und haut wie gesagt den ram voll

cls solltest du (der übersicht halber) an den anfang der schleife setzen

statt flip solltest du flip 0 verwenden und einen timer (benutze die suche dazu)
damit dein programm nicht ganz windows okkupiert

grundsätzlich sind funktionen gut, aber wenn sie nur eine sache erledigen - meide sie.

dein eigentliches problem rührt jedoch daher, dass du 2 verschiedene schleifen hast

eine am anfang und eine in der funktion maus()

sobald du maus() aufrufst bist du also in einer 2. schleife und kommst nicht mehr zurück zu deinem ursprünglichen programm.
deswegen siehst du auch nichts mehr ovn deinem ursprünglichen programm..

das cls wie auhc das flip gehören in die hauptschleife, also die obere schleife.

die 2. schleife in der funktion maus () brauchst du nicht - bzw sie zerstört dein programm

im übrigen wäre es sinnvoll, wenn du deinen code einrücken würdest, sprich tabulator oder space
verwenden um gedankenblöcke sichtbar zu machen


viel erfolg beim debuggen

ozzi789

BeitragDo, Feb 04, 2010 8:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

Noch etwas benütze die Code Tags und schreibe den Code nicht als Zitat Smile

Code: [AUSKLAPPEN]
[code]Print "Test"[/code]
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Midimaster

BeitragDo, Feb 04, 2010 12:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du es möchtest, biete ich dir an, den Code gemeinsam mit Dir so zu verändern, bis er ein prof. Aussehen hat. Dabei schreibe ich dir regelmäßig irgndwelche Tipps und erkläre sie und auch warum das so besser ist. Und du passt dann den Code an und fragst bitte nach, wenn du etwas nicht verstehst. Du würdest allerhand lernen dabei...
 

chineseboy

BeitragDo, Feb 04, 2010 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
;Taschenrechner
Graphics 640,480,16,2
SetBuffer BackBuffer ()
HidePointer
Global Zahl1,Zahl2,Zahl3,Auswahl

Repeat
   Cls
   Ueberschrift$("Willkommen!",0)
   Ueberschrift$("Bitte wählen sie ihre Funktion",15)
   Programmauswahl$(" 1 - für Addition",45)
   Programmauswahl$(" 2 - für Subtraktion",60)
   Programmauswahl$(" 3 - für Multiplikation",75)
   Programmauswahl$(" 4 - für Division",90)
   Programmauswahl$(" 5 - Um das Programm zu beenden",105)
   Locate 0,150
   Auswahl=Input()
Select Auswahl
   Case 1 Addition
   Case 2  Subtraktion
   Case 3 Multiplikation
   Case 4  Division
   Case 5 End
Default Print "Falsche Auswahl" Cls
End Select
Until Auswahl = 5
End

Function Ueberschrift$(Text$,hoehe)
   Text 320,hoehe,Text,1,0
End Function

Function Programmauswahl$(Text$,hoehe)
   Text 0,hoehe,Text,0,0
End Function

Function Addition()
   Print "Addition"
   Zahl1=Input("Geben Sie die 1. Zahl ein: ")
   Zahl2=Input("Geben Sie die 2. Zahl ein: ")
   Zahl3=Zahl1+Zahl2
   Print Zahl3
   WaitKey
   Cls
End Function

Function Subtraktion()
   Print "Subtraktion"
   Zahl1=Input("Geben Sie die 1. Zahl ein: ")
   Zahl2=Input("Geben Sie die 2. Zahl ein: ")
   Zahl3=Zahl1-Zahl2
   Print Zahl3
   WaitKey
   Cls
End Function

Function Multiplikation()
   Print "Multiplikation"
   Zahl1=Input("Geben Sie die 1. Zahl ein: ")
   Zahl2=Input("Geben Sie die 2. Zahl ein: ")
   Zahl3=Zahl1*Zahl2
   Print Zahl3
   WaitKey
   Cls
End Function

Function Division()
   Print "Division"
   Zahl1=Input("Geben Sie die 1. Zahl ein: ")
   Zahl2=Input("Geben Sie die 2. Zahl ein: ")
   Zahl3=Zahl1/Zahl2
   Print Zahl3
   WaitKey
   Cls
End Function






Ja midimaster ich würde sehr gerne deine hilfe annehmen.!
Ansicht ist die Struktur doch jetzt Korrekt!?!? ????
nur hab ich immer noch keine idee die maus funktion einzubinden!

ozzi789

BeitragDo, Feb 04, 2010 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
So sieht es doch gleich besser aus.


1. Lade ein Bild nicht in einer Schleife, das ist unnsinnig, setz das Loadimage vor die Schleife

2. Benütze nicht Input, denn Input hält dein Programm an, du kannst also währenddessen nichts mit der Maus machen o.ä

3. Setz CLS nur einmal, beim Anfang der Hauptschleife und bei
Code: [AUSKLAPPEN]

Default Print "Falsche Auswahl" WaitKey : Cls   ;habe hier noch ein Waitkey eingebaut, sonst sieht man die "Fehlermeldung nie"


4. Benutze Flip um den Text sichtbar zu machen (Löst das Problem mit dem Fullscreen

5. Zieh Text Print vor.



Noch eine Frage, was willst du mit der Maus machen?
Im windowed modus ist die Maus sichtbar (wenn du das Hidepointer lässt)

Naja solange du Input verwendest wirst du keine Buttons o.ä benützen können


Hier mal der Code, jedoch ohne Mausfunktion (ich lade sie nur um zu zeigen wo das stehn müsste)

Code: [AUSKLAPPEN]
;Taschenrechner
Graphics 640,480,32,1
SetBuffer BackBuffer ()
HidePointer
Global Zahl1,Zahl2,Zahl3,Auswahl,Maus,x,y

Maus=LoadImage("Maus.bmp")



Repeat
   Cls
   Ueberschrift$("Willkommen!",0)
   Ueberschrift$("Bitte wählen sie ihre Funktion",15)
   Programmauswahl$(" 1 - für Addition",45)
   Programmauswahl$(" 2 - für Subtraktion",60)
   Programmauswahl$(" 3 - für Multiplikation",75)
   Programmauswahl$(" 4 - für Division",90)
   Programmauswahl$(" 5 - Um das Programm zu beenden",105)
   Flip   
   Locate 0,150
   Auswahl=Input()
Select Auswahl
   Case 1 Addition
   Case 2  Subtraktion
   Case 3 Multiplikation
   Case 4  Division
   Case 5 End
Default Print "Falsche Auswahl" WaitKey : Cls
End Select
Until Auswahl = 5
End

Function Ueberschrift$(Text$,hoehe)
   Text 320,hoehe,Text,1,0
End Function

Function Programmauswahl$(Text$,hoehe)
   Text 0,hoehe,Text,0,0
End Function

Function Addition()
   Print "Addition"
   Zahl1=Input("Geben Sie die 1. Zahl ein: ")
   Zahl2=Input("Geben Sie die 2. Zahl ein: ")
   Zahl3=Zahl1+Zahl2
   Print Zahl3
   WaitKey
End Function

Function Subtraktion()
   Print "Subtraktion"
   Zahl1=Input("Geben Sie die 1. Zahl ein: ")
   Zahl2=Input("Geben Sie die 2. Zahl ein: ")
   Zahl3=Zahl1-Zahl2
   Print Zahl3
   WaitKey
End Function

Function Multiplikation()
   Print "Multiplikation"
   Zahl1=Input("Geben Sie die 1. Zahl ein: ")
   Zahl2=Input("Geben Sie die 2. Zahl ein: ")
   Zahl3=Zahl1*Zahl2
   Print Zahl3
   WaitKey
End Function

Function Division()
   Print "Division"
   Zahl1=Input("Geben Sie die 1. Zahl ein: ")
   Zahl2=Input("Geben Sie die 2. Zahl ein: ")
   Zahl3=Zahl1/Zahl2
   Print Zahl3
   WaitKey
End Function







mfg ozzi Smile
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Midimaster

BeitragDo, Feb 04, 2010 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Also die Hauptschleife Repeat/Until ist eigentlich nur dazu da, dass das Programm sie 60x pro Sekunde durchläuft. In ihr stehen alle Unterfunktionen die daher ebenfalls 60x pro Sekunde aufgerufen werden.

Im Grunde sieht deine Hauptschleife nicht schlecht aus. Sie beginnt normalerweise mit einem CLS und endet mit einem FLIP. Innerhalb dieser Main-Schleife werden Maus und Tastatur abgefragt und dann entsprechend ein Bildschirm neu gezeichnet. Bei den Tastatur-Abfragen hakt es in deinem Programm. Die Unterfunktionen machen bei dir eigene Repeat/Until-Schleifen auf oder halten das komplette Programm an. So kann der User nicht mehr frei mit der Maus agieren. Was du brauchst, sind also Tastaturabfragen, die weiterhin eine Maus zulassen.

Mein Tipp: Frage die Maus und die Tastatur zwar ab, aber reagiere damit ein Flag zu setzen. Ein Flag ist einfach irgendeine Variable, die sich merkt, was der User gerade getan hat. Du hast sowas schon mit deinem Auswahl benutzt.

Dann kehre sofort in die Hauptschleife zurück und male im Malteil entsprechend dem Ergebnis des Flags einen abweichenden Bildaufbau.

BlitzBasic: [AUSKLAPPEN]
Repeat 
Cls
AuswahlTreffen()
MausAuswahl()
BildschirmMalen()
Flip 1
Until Auswahl = 5
End

Function AusWahlTreffen()
If KeyHit(2) Then
Auswahl=1
ElseIf.....
End Function

Function MausAuswahl()
If MouseX()>.....
Auswahl=1
Else
.....
End Function

Function BildschirmMalen()
If Auswahl=0 Then
; male menü
ElseIf Auswahl=1
; male einen Bildschirm für addition
Else....
End Function


was genau soll denn der user mit der Maus machen können?


Hier noch einen Tipp zu deinen 5 Funktionen. Im Grunde steht ja 5x das gleiche da. Wieso nicht 1 Funktion, die alle 5 Eventualitäten abdeckt und dabei auch noch völlig losgelöst ist von der Eingabe der beiden Zahlen:
BlitzBasic: [AUSKLAPPEN]
Function Berechne()
Select Auswahl
Case 1
Zahl3=Zahl1 - Zahl2
Case 2
Zahl3=Zahl1 - Zahl2
...
End Function


Und hier eine Routine, um jeweils abhängig von Nr% eine der beiden Zahlen vom User zu erhalten.

BlitzBasic: [AUSKLAPPEN]
Function ZahlEingeben(Nr%)
Local Z#=Input("Zahl" + Nr)
If Nr=1
Zahl1=Z
Else
Zahl2=Z
EndIf
End Function


Das ist schon die Voraussetzung, um das ganze später viel lockerer durch Maus oder Buttons umzusetzen.
  • Zuletzt bearbeitet von Midimaster am Do, Feb 04, 2010 21:01, insgesamt einmal bearbeitet

jokerman29

BeitragDo, Feb 04, 2010 21:01
Antworten mit Zitat
Benutzer-Profile anzeigen
hier ist was zu deinem input problem:
https://www.blitzforum.de/foru...hp?p=10337
eine sehr gute inputroutine von Triton, die hält dein programm nicht an und erfüllt den gleichen zweck Wink
mfg
jokerman29
WhY sO sErIoUs? LeT´s PuT a SmIlE oN tHaT fAcE!

Rechtschreibfehler sind special-effekts meiner Tastatur Wink

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group