Zeichen Zählen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Deforation

Betreff: Zeichen Zählen

BeitragMi, März 21, 2007 11:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Zusammen.

Ersteinmal, möchte ich euch alle begrüssen. Denn ich bin neu hier.
Und habe schon ein bisschen Erfahrungen mit Blitz 3D gesammelt. Und starte mit einem kleineren Projekt: (Ein 3D 4-Gewinnt).

Die Frage hat jedoch nichts mit meinem Projekt zu tun, aber es Interessiert mich sehr.

Gibt es eine Möglichkeit, die Anzahl der Buchstaben eines Wortes, Textes zu ermitteln und allenfalls die Buchstaben in einem Array zu speichern. Pro Variabel 1 Buchstabe.

Und ist es möglich, aus einer Textdatei mit Wörtern zu sagen, es soll das 2 Wort rauslesen.

Dies sind eigentlich fragen, welche für ein Spiel wie Hangman gebraucht werden könnten.

Ich bedanke mich Herzlich für eure Aufmerksamkeit.

Markus2

BeitragMi, März 21, 2007 13:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Sei willkommen Smile
Klar ist das möglich .

Dazu brauchst du das hier
OpenFile
ReadLine
CloseFile
For i=1 To Len(t$)
z$=Mid(t,i)
v=Asc(z$)
Next

zweimal F1 über den Wörtern zeigt dir die Hilfe
mit Beispiel in der BB IDE an .

skey-z

BeitragMi, März 21, 2007 13:26
Antworten mit Zitat
Benutzer-Profile anzeigen
mit len(text$) kannst du die anzahl der Zeichen eines Strings ermitteln und mit

Code: [AUSKLAPPEN]
for i = 0 to len(tex$)
  dim char$(i) = mid$(text$, i, 1)
next


die einzelnen Zeichen in ein Array speichern, natürlich kannst du auch die anzahl der Zeichen vorher in eine variable zwischenspeichern.

Hast du die Wörter in der textdatei nebeneinander oder untereinander stehen, wenn sie untereinander stehen ist es ganz einfach:

Code: [AUSKLAPPEN]
file% = readfile(datei$)

repeat
  index = index + 1
  txt$ = readline(file%)
  if index = 2 then wort2$ = txt
until filepos(file) = filesize(file)

closefile(file)
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
  • Zuletzt bearbeitet von skey-z am Mi, März 21, 2007 13:28, insgesamt 2-mal bearbeitet
 

Deforation

BeitragMi, März 21, 2007 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo.

Ich möchte mich ganz Herrzlich bei euch für eure schnelle und Informative Hilfe bedanken. Exclamation

Smily

BeitragMi, März 21, 2007 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Sry falls ich falsch liege, aber ich habe dir Frage so verstanden, dass der Threatstarter wissen will, wieviel von jedem Zeichen im Text sind.

Das würde ich so regeln:

Code: [AUSKLAPPEN]

s$ = "Hallo du da"
Dim Zeichen(256)
For x = 0 to len(s$)
 a = asc(mid$(s$,x,1))
 zeichen(a) = Zeichen(a) + 1
Next

Print Zeichen(asc("a")) ; gibt z.B. aus wieviel a's vorhanden sind
Print Zeichen(asc("d")) ; gibt z.B. aus wieviel d's vorhanden sind
etc...

Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org
 

Deforation

BeitragFr, März 23, 2007 11:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hätte da nur noch zwei Fragen.
Sie passen nicht ganz in diesen Thread, aber ich schreibe sie trotzdem hier hinein, da ich nicht zu viele Themen eröffnen will.

Meine Problemstellung sieht so aus.

Repeat

Tastanabfrage ; Function

.... ; Hier ist das Hauptprogramm

updateworld
renderworld
flip
until keyhit(1)

Bei der Tastenabfrage-Funktion, steht z.B. grob
if keyhit(22) then xkoordinaten +50 endif.

Drücke ich im Hauptprogramm nun die Taste (22) veränden sich die Koordinaten Problemlos. Drücke ich jedoch nochmals auf die Taste, scheint sie gesperrt zu sein.

Also habe ich nach diesem Misserfolg das ganze mit einem keydown probiert. Aber da ist einfach das ganze zu schnell und man kann das ganze nicht richtig steuern.

Nun sind meine Fragen.
Kann ich den Keyhit irgendwie so einstellen, dass ich ihn immer wieder brauchen kann?

Kann ich der Schleife die Funktion mit den Tastenbefehlen (keydown) irgendwie abbremsen, dass diese funktion erst nach 1 sekunde wieder aufgeruffen werden kann. Ohne dass die Ganze Schleife unterbrochen wird.

SpionAtom

BeitragFr, März 23, 2007 11:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Dafür gibts FlushKeys()
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
 

Deforation

BeitragFr, März 23, 2007 11:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für den Tipp.

Werde ich gleich mal ausprobieren sobald ich kann.

Markus2

BeitragFr, März 23, 2007 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
ich denke eher du meintest das so

TasteX= keyhit(22)

if so then
if TasteX then
else if was anderes then
if TasteX then
endif
 

Deforation

BeitragMi, März 28, 2007 7:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo ich bin wieder hier und melde mich mit einer Antwort zurück.

Eigentlich bräuchte ich genau so etwas wie der FlushKeys. Der ja alle Tasten zurücksetzt.

Der haken ist jedoch, dass er bei mir überhaupt nicht funktioniert. Egal wo ich ihn hinstelle, anfangs der Schleife, am Ende oder nachdem er gebraucht wurde,...

Wenn ich ihn setze, funktioniert gar keine Keyhit Taste mehr. Oder gibt es da irgendwas, was ich nicht berücksichtigt habe? Oder was man beachten sollte.

SpionAtom

BeitragMi, März 28, 2007 9:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Folgender Code Funktionierte bei mir. (Pfeil hoch/runter)
Code: [AUSKLAPPEN]
Graphics 320, 480, 0, 2: SetBuffer BackBuffer(): AppTitle("Tastenabfrage")
Global x, y: x = 160: y = 240

Repeat

   Tastenabfrage   
   Cls
   drawBubble x, y
   Flip
   
Until KeyHit(1)
End

Function Tastenabfrage()
   If KeyHit(200) Then y = y - 10: If y < 50 Then y = 450
   If KeyHit(208) Then y = y + 10: If y > 450 Then y = 50
   FlushKeys()
End Function

Function drawBubble (x, y)
   r = 20
   Color 100, 100, 100
   Oval x - r, y - r, 2 * r, 2 * r, 1
   Color 200, 200, 200
   Oval x, y - r + 5, 0.66 *r, 0.66 * r, 1
End Function



Du kannst aber auch mit KeyDown() KeyHit nachbauen. In diesem Beispiel geben die Variablen KEY_UP und KEY_DOWN den Status der Tasten an. (0 - nicht gedrückt, 1 - Drückstart, 2 - Gedrückt, 3 - Losgelassen)

Code: [AUSKLAPPEN]
Graphics 320, 480, 0, 2: SetBuffer BackBuffer(): AppTitle("Tastenabfrage 2")
Global x, y: x = 160: y = 240

Global KEY_UP, KEY_DOWN ;0 - nicht gedrückt, 1 - Drückstart, 2 - Gedrückt, 3 - Losgelassen

Repeat

   UpdateKeys
   Tastenabfrage   
   Cls
   drawBubble x, y
   Flip
   
Until KeyHit(1)
End

Function updateKeys()
   If KeyDown(200) Then
      If KEY_DOWN = 0 Then KEY_DOWN = 1 Else KEY_DOWN = 2
   Else
      If KEY_DOWN = 3 Then KEY_DOWN = 0 Else If KEY_DOWN <> 0 Then KEY_DOWN = 3
   End If
   
   If KeyDown(208) Then
      If KEY_UP = 0 Then KEY_UP = 1 Else KEY_UP = 2
   Else
      If KEY_UP = 3 Then KEY_UP = 0 Else If KEY_UP <> 0 Then KEY_UP = 3
   End If
End Function

Function Tastenabfrage()
   If KEY_DOWN = 1 Then y = y - 10: If y < 50 Then y = 450
   If KEY_UP = 1 Then y = y + 10: If y > 450 Then y = 50
   FlushKeys()
End Function

Function drawBubble (x, y)
   r = 20
   Color 100, 100, 100
   Oval x - r, y - r, 2 * r, 2 * r, 1
   Color 200, 200, 200
   Oval x, y - r + 5, 0.66 *r, 0.66 * r, 1
End Function
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
 

Deforation

BeitragMi, März 28, 2007 12:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für eure Hilfe.

Jetzt ist jedoch etwas komisches passiert. Ich habe es nochmals probiert, das mit dem Keyhit und jetzt funktioniert es problemlos.

Ich habe keine Ahnung, woran das liegt.

Aber denn noch, danke ich euch, dass ihr mir so fest geholfen habt. Zusätzlich, habe ich dank euch auch noch etwas dazugelernt.

Markus2

BeitragMi, März 28, 2007 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Sowas solltest du vermeiden

if irgendwann then
if keyhit(22)>0 then mach was
endif

weil der Puffer so nicht gelerrt wird und Keyhit ja
alle Anschläge zählt seit dem man die Taste mit Keyhit() abgefragt hat .
 

Deforation

BeitragMi, März 28, 2007 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Also jetzt habe ich es so gemacht.

if keyhit(22) then x=x+1
if keyhit(23) then Y=Y+1

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group