konsolenproblem... (neu) - erledigt...

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

darth

Betreff: konsolenproblem... (neu) - erledigt...

BeitragSo, Sep 25, 2005 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
(neues prob ganz unten... letzter beitrag)
hi,
ich hab n kleines problem mit meiner konsole (text eigeben - auf bildschirm anzeigen...)
das ganze läuft so:
Code: [AUSKLAPPEN]
 key=GetKey() ;gedrückte taste erhalten
If key>=32 And key<=255 Then ;ascii von buchstaben
 If x<360 Then ;nur wenn zeile nicht voll
  cline$=cline$+Chr(key) ;zeichen speichern
 EndIf
EndIf

If key=13 ;enter = abschicken - zeile speichern
 showmess=1
 anz=anz+1

 Dim message$(anz)

 message$(anz)=cline$

  If cline$="exit" Then
   Cls
   showmess=0
   show_con=0
  EndIf
  If cline$="quit" Then
   End
  EndIf

 cline$=""
End If

Text 75,580,cline$

If showmess=1 Then ;text anzeigen
 For show=1 To anz
  Color 255,0,0
  Text 10,zeile*15,nic$+":"
  Text 100,zeile*15,message$(show)
  zeile=zeile+1
 Next
     WriteLine aufnahme,message$(anz)
     zeile=0
     showmess=0
EndIf

 Flip

=> natürlich noch in einer hauptschleife...

so... jetzt zu meinem problem:
1. scheinbar schreibt er nur immer die neuste message$ auf den schirm (sieht man wenn man vorher ein cls zwischenschaltet) - wieso??? (er sollte doch immer message$(show) also von message von 1 bis anzahl anzeigen?!?)

2. wenn 15 zeilen da sind (also anz>=15) soll er die alte immer eins raufrutschen... ich habs mit
Code: [AUSKLAPPEN]
if anz>=15 then zeile=zeile-1

versucht... ging aber nicht (da ja nur die letzte zeile immer neu angezeigt wird...)
wie kann ich das realisieren?
Diese Signatur ist leer.
  • Zuletzt bearbeitet von darth am Do, Sep 29, 2005 20:49, insgesamt 2-mal bearbeitet

Klip

BeitragMo, Sep 26, 2005 6:45
Antworten mit Zitat
Benutzer-Profile anzeigen
So hab ich es bei meinem Spiel gemacht. Sorry, wegen Umformatierung ist der Code unten was durcheinander. Hoffe, es hilft dir trotzdem. Sind zwar nur 7 Zeilen und vielleicht etwas umständlich, aber es geht.

BlitzBasic: [AUSKLAPPEN]
Function console_system()		; cursor, settings, commands, [...]

Color 200,200,200
SetFont console_font
Text 65,400,row1$,0,0
Text 65,385,row2$,0,0
Text 65,370,row3$,0,0
Text 65,355,row4$,0,0
Text 65,340,row5$,0,0
Text 65,325,row6$,0,0
Text 65,310,row7$,0,0

If console_active = True ; draw cursor.

Local x = 65 + StringWidth(cline$)
Color 200,200,200
Rect x,427,5,12,1

; -----------------------------------------------------------------------
key = GetKey()
If key>=32 And key<=255 Then cline$=cline$+Chr(key) ; watch ASCII
If key=8 And (Len(cline$)-1)>=0 cline$=Left(cline$,Len(cline$)-1) ; Backspace
Text 65,424,cline$,0,0
If key=13
; search for \"=\" in the string.
eq=Instr(cline$,\"=\")
If eq
; cut string at \"=\".
cmd$=Lower(Trim(Left(cline$,eq-1)))
par$=Trim(Right(cline$,Len(cline$)-eq))
Select cmd$
Case \"console active\" : console_active = Int(par$):process$=\"Console activated/deactivated\"
End Select
Else
; if string does not contain a \"=\"
Select Lower(cline$)
Case \"quit\" :program=False
Default process$=\"Error. Unknown command '\"+cline$+\"'.\"
End Select
End If
row7$ = row6$
row6$ = row5$
row5$ = row4$
row4$ = row3$
row3$ = row2$
row2$ = row1$
row1$ = cline$
cline$ = \"\"
End If
EndIf

Color 200,200,200
SetFont console_font
Text 10,462,process$

End Function
 

David

BeitragMo, Sep 26, 2005 7:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Ich könnt wetten das es an dieser Zeile liegt:

BlitzBasic: [AUSKLAPPEN]

Dim message$(anz)


grüße
 

Ava

Gast

BeitragMo, Sep 26, 2005 11:13
Antworten mit Zitat
Beim redimensionieren wird jedenfalls der Inhalt des Dimensionsfeldes komplett gelöscht.. Das könntest Du verhindern, wenn Du Dir ein zweites temporäres Dimensinsfeld anlegst, die Daten zwischenspeicherst und dann nach der Redimensionierung überträgst.

Aber ganz ehrlich, sowas würd ich doch lieber gleich mit Types lösen. Smile

Rolling Eyes

darth

Betreff: ..

BeitragMo, Sep 26, 2005 15:48
Antworten mit Zitat
Benutzer-Profile anzeigen
hi
so, erstmal danke für die antworten ^^

@klip: thx =) muss den code erstmal durcharbeiten, hab ihn erst überflogen...
[edit] so... jetzt hab ich ihn durch ^^ du machst es mit 7 variabeln, und nicht mit einem arrey, dann überspeicherst du eifach von hinten nach vorne, auch ne möglichkeit =)

@david/ava: hmm... mist =S hab ich gar nicht gewusst... dachte der würde einfach am ende eins anhängen... aber wenn das so ist muss ichs wohl ändern...

@ava: types sind mir n rätsel... ^^ bin zu faul irgend n tut darüber zu machen... mit arreys gings bisher recht gut...

so... ich hab mir jetzt am anfang einen 1000 arrey angelegt, und eine neue variabel, die aktiv wird, wenn die anzahl grösser als 10 ist, die wird dann immer eins kleiner, deshalb werden immer mehr zeilen ausserhalb des schirms gezeigt...
ist nicht perfekt =) wenn man mehr als 1000 sachen geschrieben hat wird ne fehlermeldung kommen...
naja, n anfang ist es schonmal...
sobald ich mehr lust dazu hab als jetzt, werd ichs mit klips methoder versuchen... aufwändiger aber einfacher zu verstehen ^^

thx an alle
Diese Signatur ist leer.
 

Ava

Gast

BeitragDi, Sep 27, 2005 3:04
Antworten mit Zitat
BlitzBasic: [AUSKLAPPEN]
Graphics	640, 480



FlushKeys()



Global consoleInput$
Global consoleEntries
Global consoleMaxEntries = 3
Global consoleMaxChars = 360



Type t_consoleEntrie
Field txt$
End Type



Repeat

Cls
updateConsole(GetKey())
displayConsole(20, 20)
Flip

Until KeyDown(1) : End



Function updateConsole(key)

If key >= 32 And key <= 255
If Len(consoleInput) < consoleMaxChars

consoleInput = consoleInput + Chr(key)

EndIf
EndIf



If key = 8
If Len(consoleInput) > 0

consoleInput = Left(consoleInput, Len(consoleInput) - 1)

EndIf
EndIf



If key = 13

n.t_consoleEntrie = New t_consoleEntrie
n\txt = consoleInput
consoleInput = \"\"
consoleEntries = consoleEntries + 1

EndIf



While consoleEntries >= consoleMaxEntries

Delete First t_consoleEntrie
consoleEntries = consoleEntries - 1

Wend

End Function



Function displayConsole(x, y)

For n.t_consoleEntrie = Each t_consoleEntrie

Text x, y, n\txt
y = y + StringHeight(\"\")

Next



Text x, y, \">> \" + consoleInput

End Function



LaLaLa, höre auf Tante Ava, tu Dir selbst einen Gefallen und lerne Types -
die sind doch nun wirklich nicht soo kompliziert! Exclamation Rolling Eyes
Oder bleibe bei Deinen Arrays, wenn es denn sein muss.. aber Klips
Lösung ist schrecklich unelegant, daran solltest Du Dich nicht orientieren.

darth

Betreff: ..

BeitragDo, Sep 29, 2005 20:26
Antworten mit Zitat
Benutzer-Profile anzeigen
falls es noch jemanden interessiert, ich habe das ganze jetzt mit 2 sich austauschenden arreys gemacht, dann gibt es keine arrey-überlastung...
code:
Code: [AUSKLAPPEN]
If key=13
 showmess=1
 anz=anz+1

 Dim messagesave$(anz)
 For writedown=1 To (anz-1)
  messagesave$(writedown)=message$(writedown)
 Next
 Dim message$(anz)
 For writein=1 To (anz-1)
  message$(writein)=messagesave$(writein)
 Next

 message$(anz)=cline$

  If cline$="exit" Then
   key=10
  EndIf
  If cline$="quit" Then
   End
  EndIf

 cline$=""
End If


@ava: ^^ ich werd mal versuchen types zu lernen...

neues prob:
ich möchte das ganze jetzt speichern lassen, in einem textfile... geht eigentlich alles, nur macht er jedesmal ein neues ^^ ... ich möchte dass er einfach unten anhängt...
habs gelöst... so:
Code: [AUSKLAPPEN]
 aufnahme=ReadFile("text.txt")
  If aufnahme=False Then
   aufnahme=WriteFile("text.txt") ;sicherung... sonst mav
  Else
    Dim messageread$(1000) ;dim erstellen... grösse?!?
   While Not Eof(aufnahme)
    readout=readout+1
    messageread$(readout)=ReadLine(aufnahme) ;text von altem file speichern...
   Wend
    aufnahme=WriteFile("text.txt") ;altes file überschreiben
     For readin=1 To readout
      WriteLine aufnahme,messageread$(readin) ;text aus altem ins neue schreiben
     Next
   EndIf


alles was ich jetzt noch bräuchte, wäre vllt. die grösse des messageread$() dim... sonst gibts dort noch n arrey überlastung... aber das ist halb so wild... werd ich schon noch irgendwie lösen...
Diese Signatur ist leer.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group