Text vollständig löschen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

NoName23

Betreff: Text vollständig löschen

BeitragFr, Aug 17, 2007 13:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe da ein Problem. Wenn ich zb.:

Print "Beispieltext"
Cls
Print "Beispieltext 2"

schreibe, dann wird "Beispieltext2" unter "Beispieltext1" ausgeben obwohl ich ja "Beispieltext1" gelöscht habe. Schreibe grade ein Textadventure.

Ich könnte logischerweise auch:

Print "Beispieltext"
Cls
Text 0,0, "Beispieltext 2"

schreiben aber das ist in dem Fall eines Textadventures ziemlich umständlich. Gibs da eine andere Möglichkeit?

Abrexxes

BeitragFr, Aug 17, 2007 14:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, eine Konsole ist keine Grafikausgabe. Mach ein "echtes" Fenster auf und arbeite mit "Text", dann geht alles.

cu
 

Schnuff

BeitragFr, Aug 17, 2007 14:09
Antworten mit Zitat
Benutzer-Profile anzeigen
lol, bitte nicht schlagen, aber was ist mit locate 0,0 ?
das müsste das nächste print wieder noch ganz oben setzen oder?
Programmers dont die. They gosub without return...

Abrexxes

BeitragFr, Aug 17, 2007 14:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Sollte, aber ich versuche ja nur irgendwie die Leute dazu zu kriegen nicht wirklich den allerletzten Blödsinn zusammen zu schreiben. Ein Textadventure mit einem Konsolenbefehl gemischt mit Locate und im schlimmsten Fall auch noch Text das ist einfach nur Scheisse. Wieso sollte man das also fördern?

Xeres

Moderator

BeitragFr, Aug 17, 2007 14:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Textadventures würde ich gleich mit TAG schreiben oder - sofern es nur Multiple Choice werden soll - mit HTML. Wenn es nur zum üben ist, darf es schon ein wenig mehr als nur Textausgabe sein...
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)
 

NoName23

BeitragFr, Aug 17, 2007 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wenn ich jetzt Graphics 800, 600, 32, 2 eingebe hab ich das Problem immernoch. Ich mach euch nochmal ein Beispiel:

Print "yxyxyxyyxyxyxyxyx"
Print "yxyxyxyxyxyxyxyxy" <--hier steht die Story drin.Da es ja keinen Zeilenumbruch gibt muss ich es so schreiben.
Print "yxyxyxyxyxyxyxyxy"

cls

Print "Jetzt komt die Frage"
Print "Die kann auch zwei Zeilen lang sein"
Print "Antwortmöglichkeit1"
Print "Antwortmöglichkeit2"
Print "Antwortmöglichkeit3"

Dieser ganze untere Teil wird so circa im zweiten Viertel des Bildschirms ausgegeben. Also unter dem anderen den man ja nicht mehr sieht. Gibs da eine Möglichkeit das dieser Text mit den Fragen und Antworten ganz oben links ausgegeben wird?

Logisch könnt ich beim ersten Satz Locate 0, 0 schreiben aber was soll ich bei der 2. Zeile in Locate hineinschreiben damit der Satz genau darunter ausgegeben wird? Und überhaupt wäre das ziemlich umständlich.


Ich mach das nur aus Spaß und auch Übung. Hab erst vorgestern angefangen mit Blitz.
 

Rocys

BeitragFr, Aug 17, 2007 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ver such dich doch gleich daran, mit den 'richtigen' Text Befehlen zu arbeiten, die kannst du dann auch spaeter noch benutzen. Print ist viel zu unflexibel.
Code: [AUSKLAPPEN]

text 0,0,"yxyxyxyyxyxyxyxyx"
text 0,20,"yxyxyxyxyxyxyxyxy"
text 0,40, "yxyxyxyxyxyxyxyxy"
flip
repeat
until getkey()<>0
cls

text 0,0,"Jetzt komt die Frage"
text 0,20,"Die kann auch zwei Zeilen lang sein"
text 0,40,"Antwortmöglichkeit1"
text 0,60,"Antwortmöglichkeit2"
text 0,80,"Antwortmöglichkeit3"
flip


so sollte es funktionieren, und du lernst gleich ein bisschen mehr.
 

NoName23

BeitragFr, Aug 17, 2007 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Rocys. Ich hab halt nicht gewusst welche Zahlen ich nach "Text" schreiben soll. Nun hab ich noch ein Problemchen:

Da es bei dem "Spiel"(wenn man das so nenne darf Laughing ) ja Auswahlmöglichkeiten gibt brauche ich If und Else. Ich nehme aber Select und Case, ist weniger Code zu schrieben. Beispiel:


Auswahl = Input ("Gib 1, 2 oder 3 ein")

Select Auswahl
Case "1" Text 0,40, "yxyxyxyxyxyxyxyxyxyxyx(und dieser Text wird jetzt so lang das es über den Bildschirm hinaus geht)"
Case "2" Text 0,60, "yxyxyxyxyxy"
Case "3" Text 0,80, "yxyxyxyxyxy"
End Select

Jetzt kann ich nicht den ganzen Text von der Auswahlmöglichkeit 1 anzeigen denn ich kann ja den Text nicht aufteilen. Denn das:

Case "1" Text 0,40, "Der Anfänger fragt im Forum nach(hier ist jetzt der Bildschirmrand)"
Case "1" Text 0,60, "und bekommt viele Antworten"
.....

geht ja nicht. Lösung?[/code]

aMul

Sieger des Minimalist Compo 01/13

BeitragFr, Aug 17, 2007 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Select lol
    Case 1
        Text 0, 0, "Zeile 1"
        Text 0, 15, "Zeile 2"
    Case 2
        Text 0, 0, "Zeile 1"
        Text 0, 15, "Zeile 2"
End Select


Außerdem ist es schwachsinnig einen Integer('Auswahl') mit einem String(' "1" ') zu vergleichen, da solltest du dich für eins entscheiden.
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver
 

NoName23

BeitragFr, Aug 17, 2007 16:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Das wäre auch gelöst. Aber da kommt gleich das nächste Rolling Eyes . Glaube aber das wird das letzte sein bei dem Spiel. Also, wie kann ich Input positionieren? Denn ich kann nicht Auswahl = Input (Text 0, 90, "yxyxyxy") schreiben. Auch wenn ich es so mache:

Text 0,20, " Gib deine Auswahl ein"
Auswahl = Input ()

kommt dieses blinkende Kästchen wo man reinschreibt auf Position 0,0, und nicht auf 0,2. Mit dem Print hatte ich das Problem nicht da das ja alles ohne Positionsangabe ausgegeben wurde. Lösung?

Abrexxes

BeitragFr, Aug 17, 2007 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Function GetInput$(x,y,sPrompt$,sFilter$,sDefault$,iMaxLength)
   ; x = x location of the prompt, if any, or text input
   ; y = y location ...
   ; sPrompt$ is the prompt, such as "Please enter your name:"
   ; sFilter$ is very useful. It ONLY allows the user to enter certain characters. For example, "ync" would only allow "y","n" or "c"
   ;          There are also a few special 'codes':
   ;            "/all" or "" means allow anything to be entered
   ;             "/123" allows only 0 through 9 to be entered
   ;            "/abc" allows only letters of the alphabet to be entered
   
   FlushKeys
   iFlashInterval = 300      ; The blinking cursor speed
   sTotal$ = sDefault$
   iNumDigits = Len(sDefault$)
   
   If Lower$(sFilter$) = "/123" Then sFilter$ = "0123456789"               ; All the numbers
   If Lower$(sFilter$) = "/abc" Then sFilter$ = "abcdefghijklmnopqrstuvwxyz"   ; All the letters
   
   iTotalWidth = StringWidth(sPrompt$) + (iMaxLength * FontWidth())
   iTotalHeight = FontHeight()
   
   hTextBuffer = CreateImage(iTotalWidth,iTotalHeight)   ; Where the text will be drawn before blitting to the backbuffer()
   hCleanCopy = CreateImage(iTotalWidth,iTotalHeight)   ; Will hold a clean copy of the backbuffer (not the whole thing)
   MaskImage hTextBuffer,255,0,255                  ; Make the text background transparent so we can show text with BG showing
   SetBuffer ImageBuffer(hTextBuffer)               ; We're going to draw to the text buffer
   ClsColor 255,0,255                           ; Temporarily make the cls color the transparent color (magenta)
   Cls                                       ; Now clear to magenta
   ; Foreground (text) will be drawn in the current color
   
   CopyRect x,y,iTotalWidth,iTotalHeight,0,0,BackBuffer(),ImageBuffer(hCleanCopy)   ; Save a clean copy of the back buffer where the
                                                               ;    text is going to be

   SetBuffer BackBuffer()
   Repeat
      ; Blinking cursor code *******************************************************************************************************
      iCurrentTime = MilliSecs()
      If bFlash = True Then
         If (iCurrentTime - iOldFlashTime) >= iFlashInterval Then
            bFlash = False
            iOldFlashTime = MilliSecs()
         EndIf
      Else
         If (iCurrentTime - iOldFlashTime) >= iFlashInterval Then
            bFlash = True
            iOldFlashTime = MilliSecs()
         EndIf
      EndIf
      
      ; Input starts here **********************************************************************************************************
      iKeyPressed = GetKey()
      If iKeyPressed = 13 Then
         sKeyPressed$ = ""
      Else
         sKeyPressed$ = Chr$(iKeyPressed)
      EndIf
      
      ; If the key passes, add it to the total *************************************************************************************
      If iKeyPressed Then
         If (sFilter$ = "/all") Or (sFilter$ = "") Or (Instr(sFilter$,sKeyPressed$) > 0) Then ; "all" does not filter any keys out
            If Len(sTotal$) < iMaxLength Then
               sTotal$ = sTotal$ + sKeyPressed$                        ; Add it to the total string if it passes
               iNumDigits = iNumDigits + 1
            EndIf
         EndIf
      EndIf
      
      ; If backspace was pressed, delete the last character from the total and update the number of digits *************************
      If KeyDown(14) And iNumDigits > 0 Then
         sTotal$ = Left$(sTotal$,iNumDigits - 1)
         iNumDigits = iNumDigits - 1
         Delay 50
      EndIf
      
      ; Draw the clean background and then the text on the backbuffer() ************************************************************
      DrawBlock hCleanCopy,x,y

      ; Draw the cursor if enough time has passed (change iFlashInterval for different speeds) *************************************
      If Len(sTotal$) = iMaxLength Then
         rx = StringWidth(sPrompt$ + sTotal$) - StringWidth(Right$(sTotal$,1))
         rw = StringWidth(Right$(sTotal$,1))
      Else
         rx = StringWidth(sPrompt$) + (Len(sTotal$) * FontWidth())
         rw = FontWidth()
      EndIf
 
      If bFlash = True Then
         Text x,y,sPrompt$ + sTotal$
         Rect x + rx,y,rw,FontHeight(),True
      Else
         Text x,y,sPrompt$ + sTotal$
      EndIf

      Flip
   Until iKeyPressed = 13 ; This is the 'return/enter' key
   
   ClsColor 0,0,0   ; Reset back to black
   Return sTotal$
End Function
 

NoName23

BeitragFr, Aug 17, 2007 18:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ähhhm....ok ich muss also eine eigene Funktion erstellen um das Problem zu lösen. Aber wie würde diese Funktion ausschauen?

Abrexxes

BeitragFr, Aug 17, 2007 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Sieht das da oben aus wie ein Poster von Bridney Spears? Das IST eine komplette Funktion, lies die Kommentare und benutze sie. Du brauchts sie nur in deinen Code zu pasten und aufzurufen. Smile

Code: [AUSKLAPPEN]
jawatdenn = GetInput$(0,0,"Gib was ein :","/all","Nichts",28)


Wenn das schon zu viel ist dann fehlen dir die Basics was Functionen angeht, dann überlege was anderes bist du an dem Punkt bist.

cu

aMul

Sieger des Minimalist Compo 01/13

BeitragFr, Aug 17, 2007 21:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Und was bringt ihm diese Funktion, wenn er sie nicht versteht?
Du solltest Anfänger nicht durch vorkauen 'helfen'. Dabei lernt man nämlich nichts und übermorgen haben wir den nächsten Thread, weil der Anfänger immer noch genauso viel Ahnung hat wie vorher.

@NoName:
Das sollte helfen:
Code: [AUSKLAPPEN]
Locate X, Y

Im übrigen solltest du ab und zu mal die Suchfunktion benutzen(wenn du nichts findest machst du was falsch). Außerdem empfehle ich dir, dass du dir die(leicht veraltete) deutsche BB-Hilfe von www.blitzbase.de runterlädst, falls du das noch nicht getan hast.

Am besten lernt man übrigens durch selber machen. Mir kommt es so vor, als ob du nur fünf Minuten rumprobierst und dann einfach mal ins Forum schreibst. Du kannst es dir vielleicht nicht vorstellen, aber es gibt Leute, die ganz ohne Forum, nur mit Hilfe der BB-Hilfe BB gelernt haben... Das Stichwort lautet Eigeninitiative.
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver
 

NoName23

BeitragFr, Aug 17, 2007 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
@aMul
Embarassed Ihr antwortet zu schnell Wink Wollte halt das Game schnell fertigstellen.

Habe schon meine eigene Lösung gefunden:

Print ""
Print ""
Print ""
Print ""
...

Bis Input in der richtigen Position ist. Nicht sehr elegant aber das Ergebnis ist das richtige Very Happy

Weis schon das ausprobieren das beste ist. Hab das Tutorial http://de.wikibooks.org/wiki/B...y-Tutorial in einem Zug bis Types durchgelesen habe aber fast garnichts behalten. Erst bis ich alles durchprobiert habe hab ichs gespeichert. Wink
Nochmals Dnake für eure Hilfe.

Abrexxes

BeitragFr, Aug 17, 2007 23:14
Antworten mit Zitat
Benutzer-Profile anzeigen
aMul hat Folgendes geschrieben:
Und was bringt ihm diese Funktion, wenn er sie nicht versteht?


Sie ist ja gut dokumentiert, ich verlange ja nicht das er "erraten" soll was er tun muss. Aber er hat ja schon einen Weg gefunden für den Moment.

cu
 

Tombi

BeitragSa, Aug 18, 2007 12:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber du solltest trotzdem mit Text X,Y,"Text" anfangen.
Wenn du z.b. auch einen Hintergrund machen willst, da reicht schon ein

Clscolor 200,200,200 aus, wird der mit Print wieder gelöscht.
Mit Text wird er beibehalten Wink
 

NoName23

BeitragSa, Aug 18, 2007 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
@Tombi
Klar, ist ja viel praktischer.


Wenn ich fertig bin kann ich ja den Code posten. Schauen was ihr dazu sagt Very Happy
 

Tombi

BeitragSa, Aug 18, 2007 14:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Na` vielleicht gibt es ja einige Leute die dir dann das gante in den Befehl Text umschreiben. Ich z.b. würde das schnell dann für dich machen Wink
 

Rocys

BeitragSa, Aug 18, 2007 15:28
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn das ganze nur multiple-choice fragen sind, koenntest du dir schnell eine Abfrage fuer einzelne Tasten programmieren. Dafuer brauchst du glaub ich nur:
Code: [AUSKLAPPEN]

text 0,200,"Gib eine Zahl von 1-3 ein!"
repeat
    a$=chr$(getkey())
until a$="1" or a$="2" or a$="3"
text 0,220,"Deine Eingabe: "+a$


so koennte mans denke ich machen.

[/code]

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group