BPS #9: Input-Funktion - Auswertung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Xeres

Moderator

Betreff: BPS #9: Input-Funktion - Auswertung

BeitragSo, Jun 26, 2011 14:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Alle sind gespannt auf die Auswertung - also warten wir nicht bis zum Abend.

Das war die Aufgabe

Postet hier eure Ergebnisse, Codes, Gedanken. Lernt von den anderen, seht euch deren Quelltext an und versucht euren eigenen zu verbessern.

Diskussion
Postet zu euren Codes stets eine kurze Erklärung mit euren Gedanken in denen ihr simpel gesagt die Frage "Wieso habe ich XY auf diese Art gelöst?" beantwortet. Beiträge, die nur den Code enthalten werden wir aus dem Thread entfernen.

Nächste Aufgabe
In zwei Wochen, wird die Musterlösung nach editiert und die nächste Aufgabe eingestellt.

Viel Spaß & viel Erfolg!

Musterlösung:
BlitzBasic: [AUSKLAPPEN]
AppTitle "Input" ;Fenstertitel erstellen
Graphics 300,300,32,2 ;Fenstergröße und Modus festlegen
SetBuffer BackBuffer() ;einstellen, dass immer auf den BackBuffer gezeichnet wird

;Deklaration der Eingabevariable. Hier Lokal, da durch die Übergabe
;der Variable als Funktionsparameter keine Globale gebraucht wird.
Local Eingabe$, i

Repeat ;Haupt-Schleife
Cls ;Löschen des Bufferinhalts
Eingabe$ = NewInput$(Eingabe$) ;Aufruf der eigenen Input-Funktion
Text 0, 10, Eingabe + "|" ;Ausgabe inklusive Cursor-Symbol

;*** Code ab hier dient nur zum Beweis, dass das Programm weiterläuft...
For i=0 To 5
Color(128,32*i,0)
Rect(150-16+Cos(((MilliSecs()/10)+10*i) Mod 360)*50,100+32*i,32,32)
Next
Color(255,255,255)
;***

Flip ;Tausch der Buffer
Until KeyDown(1) ;Beenden mit ESCAPE
End

;Funktionsteil
Function NewInput$(currentText$) ;Übergabe des Parameters.
; Es ist notwendig die bereits erfolgte Eingabe zu übergeben, damit
; sie ergänzt oder gelöscht werden kann.
Local localChar = GetKey() ;Deklaration und gleichzeitiger Abruf der Tasteneingabe
Local length ;Deklaration deer Variable fur die Zeichenanzahl
If localChar >= 32 Then ;Überprüft ob es sich um eine gültige Eingabe handelt
currentText$ = currentText + Chr$(localChar) ;fügt die Eingabe dem Text hinzu
ElseIf localChar = 8 Then ;bei Eingabe von BackSpace
length = Len(currentText) ;wird die Zeichenanzahl ermittelt
If length > 0 Then ;und wenn etwas eingegeben worden ist
currentText = Left(currentText, length - 1) ;wird das letzte Zeichen entfernt.
EndIf
EndIf
Return currentText$ ;Schließlich wird der Text zurück gegeben.
End Function
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
  • Zuletzt bearbeitet von Xeres am Mi, Mai 30, 2012 11:49, insgesamt 2-mal bearbeitet
 

Sterbendes Lüftlein

BeitragSo, Jun 26, 2011 15:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt

hazumu-kun

BeitragSo, Jun 26, 2011 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
ACHTUNG: Aktuelle Version weiter unten!

Hier der Code.
BlitzBasic: [AUSKLAPPEN]

; ###### BPS #9: Input Routine
; ### Autor: Viken Emesh
; ### Datum: 14.06.2011
; ******
AppTitle "BPS #9: Input Routine"

;[Block] #### Konstanten
Const GK_LEFT= $F702
Const GK_RIGHT= $F703
Const GK_DEL= $F728

Const FPS= 20
Const CURSPEED= 4

Const BALL_R= 15
;[End] ****

;[Block] #### Globale
Global fps_tim
Global cur_tim
Global cur_last
Global cur_act=1

Global focus

Global ball_x#=200, ball_y#=150
Global ball_v#=6

Global ball_ang#
Global ball_vx#
Global ball_vy#
;[End] ****

;[Block] #### Inputbox-Type
Type Inputbox
Field x, y, w, h
Field txt$
Field cpos
End Type

;[End] ****

;[Block] #### Initialisierung
Graphics 400,300,0,2
SetBuffer BackBuffer ()
fps_tim= CreateTimer (FPS)

cur_tim= CreateTimer (CURSPEED)
Local in1= CreateInputbox (55,5,340,20,"Box1")
Local in2= CreateInputbox (55,35,340,20,"Box2")

SeedRnd MilliSecs()

ball_ang#= Rand (0,359)
ball_vx#= Cos(ball_ang#)*ball_v#
ball_vy#= Sin(ball_ang#)*ball_v#
;[End] ****

;[Block] #### Hauptschleife
While Not KeyHit(1)
;Noch eine kleine Grafikdemo für Nebenbei
DoDemo()

Color 255,255,255
Text 5,15,"Box 1:",0,1
Text 5,45,"Box 2:",0,1

DrawInputbox (in1,(focus=0))
DrawInputbox (in2,(focus=1))

Color 64,64,64
Text 5,65,"Fokus mit [TAB] wechseln.",0,1

If focus=0 Then
UpdateInputbox (in1)
Else
UpdateInputbox (in2)
EndIf

;Fokus umschalten ([TAB])
If KeyHit(15) Then focus= 1-focus

Flip 0
WaitTimer (fps_tim)
Cls
Wend
;[End] ****


; #### Funktionen
Function CreateInputbox% (x, y, w, h, txt$="")
;Erstellt ein Inputbox-Objekt zur späteren Verwendung.
; Parameter: x,y Position
; w,h Größe
; txt$ Standardtext

; Rückgabe: int Handle der Inputbox
Local in.Inputbox= New Inputbox

in\x= x
in\y= y
in\w= w
in\h= h
in\txt$= txt$
in\cpos= Len(txt$)

Return Handle (in)
End Function

Function DrawInputbox (h_in, focus=False)
;Zeichnet eine vorhandene Inputbox an seiner Position ein
;und setzt den Cursor, wenn die Box fokusiert ist, an die
;richtige Stelle.
; Parameter: h_in Handle einer Inputbox
; focus Box fokusiert zeichnen ja/nein?
Local in.Inputbox= Object.Inputbox (h_in)

;Umrandung
Color 255,255,255
Rect in\x,in\y,in\w,in\h,1

;Text
If focus Then Color 0,0,0 Else Color 128,128,128
Text in\x+5, in\y+0.5*in\h, in\txt$, 0, 1

;Cursor
If (cur_act And focus) Then
Local txta$= Left$(in\txt$,in\cpos)
Local txt_w= StringWidth (txta$)
Local txt_h= StringHeight ("M")
Line in\x+5+txt_w+1, in\y+0.5*(in\h-txt_h), in\x+5+txt_w+1, in\y+0.5*(in\h+txt_h)
EndIf
End Function

Function UpdateInputbox (h_in)
;Fragt die Tastatureingabe für eine Inputbox ab und übersetzt diese.
;Unterstützt ASCII 32-255, Pfeil L/R, Backspace und Entf.
Local in.Inputbox= Object.Inputbox (h_in)

;Werte zwischenspeichern
Local key= GetKey()
Local txt$= in\txt$
Local cpos= in\cpos

Local txta$= Left$(txt$,cpos)
Local txtb$= Right$(txt$,Len(txt$)-cpos)

;Taste auswerten
If key Then
If key= 8 ;[BKSP]
txta$= Left$(txta$,Len(txta$)-1)
cpos= cpos-1

ElseIf (32<=key) And (key<=255) ;ASCII
txta$= txta$+Chr$(key)
cpos= cpos+1

ElseIf key= GK_DEL ;[ENTF]
txtb$= Right$(txtb$,Len(txtb$)-1)

ElseIf key= GK_LEFT ;[<-]
cpos= cpos-1

ElseIf key= GK_RIGHT ;[->]
cpos= cpos+1

EndIf
EndIf

txt$= txta$+txtb$

If cpos<0 Then cpos=0
If cpos>Len(txt$) Then cpos=Len(txt$)

;Rückschreiben
in\txt$= txt$
in\cpos= cpos

;Bringt den Cursor zum Blinken
If TimerTicks (cur_tim)>cur_last Then
cur_last= TimerTicks (cur_tim)
cur_act= 1- cur_act
EndIf
End Function

Function DoDemo()
;Bewegt einen Ball in seiner Kiste hin und her

;Ball zeichnen
Color 200,0,0
Oval ball_x-BALL_R, ball_y-BALL_R, BALL_R*2, BALL_R*2, 1

;Update
ball_x#= ball_x#+ball_vx#
ball_y#= ball_y#+ball_vy#

If ball_x#+BALL_R>=400 Then
ball_x#= 400-BALL_R
ball_vx#= ball_vx#*(-1)
ElseIf ball_x#-BALL_R<0 Then
ball_x#= 0+BALL_R
ball_vx#= ball_vx#*(-1)
EndIf

If ball_y#+BALL_R>=300 Then
ball_y#= 300-BALL_R
ball_vy#= ball_vy#*(-1)
ElseIf ball_y#-BALL_R<0 Then
ball_y#= 0+BALL_R
ball_vy#= ball_vy#*(-1)
EndIf

If Rand(1,100)=1 Then
ball_ang#= Rand (0,89)
ball_vx#= Cos(ball_ang#)*ball_v#*Sgn(ball_vx#)
ball_vy#= Sin(ball_ang#)*ball_v#*Sgn(ball_vy#)
EndIf
End Function
; ****



Ich verwalte die Inputbox(en) in einem Type.
Vom jeweiligem Objekt behalte ich stets das Handle bereit, ähnlich wie bei allen anderen Objekten von BlitzPlus. Mit diesem Handle wird dann weiterhin gearbeitet, z.B. beim Zeichnen oder Abfragen der Tastatur.

Wann eine der Boxen den Tastaturfokus hat bestimmt das Hauptprogramm und ruft von einer Box nur dann die Update Funktion auf wenn diese den Fokus hat.
  • Zuletzt bearbeitet von hazumu-kun am Do, Jun 30, 2011 0:45, insgesamt einmal bearbeitet

ToeB

BeitragSo, Jun 26, 2011 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Wo ist denn die Funktion "TimerTicks" ? Wink

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

mpmxyz

BeitragSo, Jun 26, 2011 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Dort: TimerTicks Wink
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

hazumu-kun

BeitragSo, Jun 26, 2011 20:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Leute ohne BlitzPlus müssten das dann anders lösen Smile
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

ToeB

BeitragSo, Jun 26, 2011 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Einfach den Rückgabe-Wert von Waittimer speichern Wink



mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

hazumu-kun

BeitragSo, Jun 26, 2011 22:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Zusammen mit Toebs Info sollte nun jeder den Code benutzen können, das ist gut.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Xeres

Moderator

BeitragDi, Jun 28, 2011 15:21
Antworten mit Zitat
Benutzer-Profile anzeigen
@Totensturm: Ich sehe nur einen leeren, blinkenden Kasten und jede menge Schwarz. Woran sieht man, das gleichzeitig noch etwas außer der Eingabe passiert?

@hazumu-kun: Fehlt eine Absicherung von Backspace gegen zu wenig Zeichen.
Auf Objekt/Handle könnte man auch verzichten und die Types direkt verwenden. Ansonsten hübsch Strukturiert & Deklariert - nur die Fenstergröße ist keine Konstante/Globale.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

hazumu-kun

BeitragDi, Jun 28, 2011 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie meinst du das Xeres?
Wenn ich bei mir ein leeres Feld backspace passiert nichts.
Das mit der Fenstergröße ist allerdings ein wenig inkonsequent.

Ich arbeite übrigens sehr gerne mit Handles, das fühlt sich mehr nach BlitzBasic an als nach eigens definierten Objekten.

@Totensturm:
Mit dem BlitzPlus Compiler kommt bei der Zeile mit dem cls ein Fehler, wegen dem nicht explizit geöffnetem Grafikfenster. Unter B3D nur ein blinkender Kasten der größer wird wenn man tippt. Schriftfarbe nicht gesetzt?
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Xeres

Moderator

BeitragDi, Jun 28, 2011 21:47
Antworten mit Zitat
Benutzer-Profile anzeigen
RuntimeError: parameter must be positive
Code: [AUSKLAPPEN]
txta$= Left$(txta$,Len(txta$)-1)


Kann an B+ und/oder Debugmodus liegen - B3D ergibt obigen Fehler.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

pinochino

Betreff: Mein Beitrag

BeitragDo, Jun 30, 2011 0:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier noch mein Beitrag zum BPS#9.

Hoffentlich ausreichend Kommentiert ....

BlitzBasic: [AUSKLAPPEN]
; BB BPS#9: Input-Funktion
; Pino's Beitrag


;Aufgabenstellung:
;Schreibe ein Programm, das es ermöglicht einen kurzen Text einzugeben und auch wieder zu löschen, OHNE dass das Programm angehalten wird.
;Erstelle dabei mindestens die sichtbare Ausgabe. Unverständlich? Gemeint ist eine Eingabefunktion, die das Eingegebene auch anzeigt.
;Wer mag und kann, darf die Ausgabe auch mit grafischen oder technischen Finessen ausstatten (z.B. blinkender Cursor).


;Tipps:
;GetKey() ist der entscheidende Befehl.
;Bei Unklarheiten: Schau in die ASCII Tabelle
;Eine Auslagerung in eine Funktion ist zur Wiederverwendung sinnvoll, vermeide jedoch Globals.
;Die Befehle zur Stringbearbeitung wie Len() und Left() helfen bei der Ausgabe.

Graphics 800,600,32,2
SetBuffer BackBuffer()

Global ausgabe$, ausgabeanzeige$ ; Globale für die Anzeige der Eingabe

Type ball


Field gr ; größe
Field sp ; speed
Field cl ; color
Field bx ; ball_x
Field by ; ball_y


End Type




Repeat
Cls

ball_erstellen() ; Möööp
ball_bewegen() ; Bällchen!

eingabe_ausgabe$() ; Läd Die Funktion im Hauptprogramm





Flip

Until KeyHit(1)
End


Function eingabe_ausgabe$()

eingabe=GetKey() ; In Die Variable wird die Gedrückte Taste Gespeichert
If eingabe>0 And eingabe >31 And eingabe<127 Then ; Wenn die Eingabe ein Standardzeichen ist (s. ASC-II Tabelle)
ausgabe$=ausgabe$ +Chr(eingabe) ; Wird in die Variable "ausgabe$" der Eingegebene Buchstabe gespeichert und um die nächste Eingabe erweitert
EndIf

If eingabe=8 Then ; Wenn "eingabe$" =ASC-II 8 (Backspace?(löschen/zurück)-Taste - Jene Welche 2 Tasten über Shift-Rechts :)
If Len(ausgabe$)>0 Then ;Abfragen ob "ausgabe$" mindestens 1 Zeichen enthält - wenn ja DANN

ausgabe$=Left(ausgabe$,Len(ausgabe$)-1) ; Von "ausgabe$" immer ein Zeichen abziehen
EndIf
EndIf


If eingabe =13 Then ; Wenn "eingabe$" =ASC-II 13 (Enter?-Taste - Jene Welche über Shift-Rechts) DANN


ausgabeanzeige$=ausgabe$ ; Wird "ausgabe$" an "ausgabeanzeige$" übergeben UND

ausgabe$=leer$ ; "ausgabe$" wird "leer$" übergeben ("leer$" wurde nirgendwo etwas zugewiesen, also wird alles was in "ausgabe$" gespeichert war gelöscht

EndIf

Color 255,255,255
Text 100,100, "Ihre Eingabe: "+ausgabe$ ; Die Eingabe anzeige

Color 255,0,0
Text 100,300, "Ausgabe: " +ausgabeanzeige$ ; Die Ausgabe Anzeige ....


End Function


; Funktionen für Die Bällchen im Hintergrund :)

Function ball_erstellen()

tp.ball = New ball

tp\gr = Rnd(3,9)
tp\sp = Rnd(1,4)
tp\cl = Rnd(0,255)
tp\bx = Rnd(0,800)
tp\by = -5

End Function



Function ball_bewegen()


For tp.ball = Each ball

tp\by = tp\by + tp\sp

Color tp\cl, 100, 50
Oval tp\bx, tp\by, tp\gr, tp\gr

If tp\by > 600 Then Delete tp.ball

Next

End Function


lg

hazumu-kun

BeitragDo, Jun 30, 2011 0:37
Antworten mit Zitat
Benutzer-Profile anzeigen
@Xeres:
Hab mein Programm kurz auf B3D angepasst, und siehe da, dein genannter Fehler tritt auf. Ich werde mich nun drum kümmern meinen Code etwas zu sichern.

Edit:
So, der aktualisierte und (hoffentlich) fehlerfreie Code.
Fenstergröße kann man per Konstante regeln. Und es läuft nun in B+ und B3D
BlitzBasic: [AUSKLAPPEN]
; ###### BPS #9: Input Routine
; ### Autor: Viken Emesh
; ### Datum: 14.06.2011
; ### Kommentar:
; ### Fehler behoben und variable Fenstergröße ermöglicht
; ******
AppTitle "BPS #9: Input Routine"

;[Block] #### Konstanten
Const GK_LEFT= $F702
Const GK_RIGHT= $F703
Const GK_DEL= $F728

Const FPS= 20
Const CURSPEED= 4

Const BALL_R= 15

Const WIN_W= 600
Const WIN_H= 300
;[End] ****

;[Block] #### Globale
Global fps_tim
Global cur_tim
Global cur_tim_ticks
Global cur_last
Global cur_act=1

Global focus

Global ball_x#=200, ball_y#=150
Global ball_v#=6

Global ball_ang#
Global ball_vx#
Global ball_vy#
;[End] ****

;[Block] #### Inputbox-Type
Type Inputbox
Field x, y, w, h
Field txt$
Field cpos
End Type

;[End] ****

;[Block] #### Initialisierung
SetGfxDriver 1
Graphics WIN_W,WIN_H,0,2
SetBuffer BackBuffer ()
fps_tim= CreateTimer (FPS)

cur_tim= CreateTimer (CURSPEED)
Local in1= CreateInputbox (55,5,WIN_W-60,20,"Box1")
Local in2= CreateInputbox (55,35,WIN_W-60,20,"Box2")

SeedRnd MilliSecs()

ball_ang#= Rand (0,359)
ball_vx#= Cos(ball_ang#)*ball_v#
ball_vy#= Sin(ball_ang#)*ball_v#
;[End] ****

;[Block] #### Hauptschleife
While Not KeyHit(1)
;Noch eine kleine Grafikdemo für Nebenbei
DoDemo()

Color 255,255,255
Text 5,15,"Box 1:",0,1
Text 5,45,"Box 2:",0,1

DrawInputbox (in1,(focus=0))
DrawInputbox (in2,(focus=1))

Color 64,64,64
Text 5,65,"Fokus mit [TAB] wechseln.",0,1

If focus=0 Then
UpdateInputbox (in1)
Else
UpdateInputbox (in2)
EndIf

;Fokus umschalten ([TAB])
If KeyHit(15) Then focus= 1-focus

Flip 0
cur_tim_ticks= cur_tim_ticks+WaitTimer (fps_tim)
Cls
Wend
;[End] ****


; #### Funktionen
Function CreateInputbox% (x, y, w, h, txt$="")
;Erstellt ein Inputbox-Objekt zur späteren Verwendung.
; Parameter: x,y Position
; w,h Größe
; txt$ Standardtext

; Rückgabe: int Handle der Inputbox
Local in.Inputbox= New Inputbox

in\x= x
in\y= y
in\w= w
in\h= h
in\txt$= txt$
in\cpos= Len(txt$)

Return Handle (in)
End Function

Function DrawInputbox (h_in, focus=False)
;Zeichnet eine vorhandene Inputbox an seiner Position ein
;und setzt den Cursor, wenn die Box fokusiert ist, an die
;richtige Stelle.
; Parameter: h_in Handle einer Inputbox
; focus Box fokusiert zeichnen ja/nein?
Local in.Inputbox= Object.Inputbox (h_in)

;Umrandung
Color 255,255,255
Rect in\x,in\y,in\w,in\h,1

;Text
If focus Then Color 0,0,0 Else Color 128,128,128
Text in\x+5, in\y+0.5*in\h, in\txt$, 0, 1

;Cursor
If (cur_act And focus) Then
Local txta$= Left$(in\txt$,in\cpos)
Local txt_w= StringWidth (txta$)
Local txt_h= StringHeight ("M")
Line in\x+5+txt_w+1, in\y+0.5*(in\h-txt_h), in\x+5+txt_w+1, in\y+0.5*(in\h+txt_h)
EndIf
End Function

Function UpdateInputbox (h_in)
;Fragt die Tastatureingabe für eine Inputbox ab und übersetzt diese.
;Unterstützt ASCII 32-255, Pfeil L/R, Backspace und Entf.
Local in.Inputbox= Object.Inputbox (h_in)

;Werte zwischenspeichern
Local key= GetKey()
Local txt$= in\txt$
Local cpos= in\cpos

Local txta$= Left$(txt$,cpos)
Local txtb$= Right$(txt$,Len(txt$)-cpos)

;Taste auswerten
If key Then
If key= 8 ;[BKSP]
If cpos>0 Then
txta$= Left$(txta$,Len(txta$)-1)
cpos= cpos-1
EndIf

ElseIf (32<=key) And (key<=255) ;ASCII
txta$= txta$+Chr$(key)
cpos= cpos+1

ElseIf key= GK_DEL ;[ENTF]
txtb$= Right$(txtb$,Len(txtb$)-1)

ElseIf key= GK_LEFT ;[<-]
cpos= cpos-1

ElseIf key= GK_RIGHT ;[->]
cpos= cpos+1

EndIf
EndIf

txt$= txta$+txtb$

If cpos<0 Then cpos=0
If cpos>Len(txt$) Then cpos=Len(txt$)

;Rückschreiben
in\txt$= txt$
in\cpos= cpos

;Bringt den Cursor zum Blinken
If cur_tim_ticks>cur_last+CURSPEED Then
cur_last= cur_tim_ticks
cur_act= 1- cur_act
EndIf
End Function

Function DoDemo()
;Bewegt einen Ball in seiner Kiste hin und her

;Ball zeichnen
Color 200,0,0
Oval ball_x-BALL_R, ball_y-BALL_R, BALL_R*2, BALL_R*2, 1

;Update
ball_x#= ball_x#+ball_vx#
ball_y#= ball_y#+ball_vy#

If ball_x#+BALL_R>=Win_w Then
ball_x#= WIN_W-BALL_R
ball_vx#= ball_vx#*(-1)
ElseIf ball_x#-BALL_R<0 Then
ball_x#= 0+BALL_R
ball_vx#= ball_vx#*(-1)
EndIf

If ball_y#+BALL_R>=WIN_H Then
ball_y#= WIN_H-BALL_R
ball_vy#= ball_vy#*(-1)
ElseIf ball_y#-BALL_R<0 Then
ball_y#= 0+BALL_R
ball_vy#= ball_vy#*(-1)
EndIf

If Rand(1,100)=1 Then
ball_ang#= Rand (0,89)
ball_vx#= Cos(ball_ang#)*ball_v#*Sgn(ball_vx#)
ball_vy#= Sin(ball_ang#)*ball_v#*Sgn(ball_vy#)
EndIf
End Function
; ****
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Xeres

Moderator

BeitragDo, Jun 30, 2011 8:21
Antworten mit Zitat
Benutzer-Profile anzeigen
@pinochino: Ausgezeichnet - bei dir sieht man auch, wie die Eingabe weiterverarbeitet wird.

@hazumu-kun: Gute Arbeit!
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Sterbendes Lüftlein

BeitragDo, Jun 30, 2011 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt

Nova

BeitragMi, Mai 30, 2012 4:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Xeres, liegt es an meinem B3D, oder warum kann man bei deiner Version keine Leerzeichen nutzen?
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit

BladeRunner

Moderator

BeitragMi, Mai 30, 2012 7:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Einfach aus if localchar >32 ein >=32 machen, das ist wohl nur ein kleiner Tippfehler.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group