Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Ein kleines Spiel
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
qbay



Anmeldungsdatum: 08.06.2008
Beiträge: 84

BeitragVerfasst am: 03.06.2009, 19:34    Titel: Ein kleines Spiel Antworten mit Zitat

Hey Leute
ich wollte ein kleines Spiel schreiben
indm immer in einem Kreis die Farbe erscheint
und man sie schreiben muss
usw.

also aber irgentwas stimmt nich am besten ihr macht euch selbst ein Bild

Code:

DIM AS SINGLE farbe(1 TO 15)
DIM AS STRING eingabe, taste
DIM AS INTEGER zufallsfarbe

farbe(1)  = "Dunkelblau"
farbe(2)  = "Dunkelgrün"
farbe(3)  = "Türkis"
farbe(4)  = "Dunkelrot"
farbe(5)  = "Dunkelviolett"
farbe(6)  = "Dunkelbraun"
farbe(7)  = "Hellgrau"
farbe(8)  = "Grau"
farbe(9)  = "Hellblau"
farbe(10) = "Hellgrün"
farbe(11) = "Hell-Türkis"
farbe(12) = "Hellrot"
farbe(13) = "Rosa"
farbe(14) = "Gelb"
farbe(15) = "Weiß"

SCREEN 18

Do
    zufallsfarbe = INT(15 * RND)
    CIRCLE (320, 240), 200, zufallsfarbe, , , , F
    INPUT "Welche Farbe?", eingabe
    DO
        taste=INKEY$
    LOOP UNTIL taste<>""
    IF eingabe = LCASE(farbe(1 TO 15)) TO UCASE(farbe(1 TO 15)) THEN PRINT "Richtig!": EXIT DO ELSE PRINT "Falsch!"
LOOP

END


ich würde es schon bevorzugen wen ihr mein programm verbessert
aber ich würde natürlich auch gern eure ideen dazu sehen wollen
gruss happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 03.06.2009, 19:56    Titel: Antworten mit Zitat

ich weiß nicht, wo du "IF LCASE TO UCASE" kennengelernt hast, aber das ist klasse lachen

Anfängerfehler 1: INT rundet ab. zufallsfarbe nimmt Werte zwischen 0 und 14 an, nicht 1 bis 15. wie du das beheben kannst, verrate ich aber nicht, denn sowas müsstest du wirklich selbst wissen.

Fehler 2: Offensichtlich das IF-Statement.
Am einfachsten ist es, die farben im array alle in kleinschreibung zu speichern und dann die varible "eingabe" nach der Eingabe in LCASE umzuwandeln. Danach noch...
Code:

for i as integer = 1 to 15
  if farbe(i) = eingabe then Print "Richtig!": Exit Do
next
print "Falsch!"


Beachte aber, dass LCASE/UCASE keine Umlaute konvertieren können. Hier ist ein wenig Kreativität gefragt.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4701
Wohnort: ~/

BeitragVerfasst am: 03.06.2009, 20:11    Titel: Antworten mit Zitat

Nebenbei würde ich es in der ersten Zeile mit
Code:
DIM AS STRING farbe(1 TO 15)

probieren.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
qbay



Anmeldungsdatum: 08.06.2008
Beiträge: 84

BeitragVerfasst am: 07.06.2009, 19:54    Titel: Antworten mit Zitat

ok leute
die erste wand ist überwunden mit dem Kopf durch die Mauer wollen

hier mein kleines spiel
Code:

DIM AS STRING farbe(1 TO 15)
DIM AS STRING eingabe, taste
DIM AS INTEGER zufallsfarbe, I

farbe(1)  = "dunkelblau"
farbe(2)  = "dunkelgrün"
farbe(3)  = "türkis"
farbe(4)  = "dunkelrot"
farbe(5)  = "dunkelviolett"
farbe(6)  = "dunkelbraun"
farbe(7)  = "hellgrau"
farbe(8)  = "grau"
farbe(9)  = "hellblau"
farbe(10) = "hellgrün"
farbe(11) = "hell-Türkis"
farbe(12) = "hellrot"
farbe(13) = "rosa"
farbe(14) = "gelb"
farbe(15) = "weiß"

SCREEN 18
RANDOMIZE TIMER
Do

    zufallsfarbe = INT(15 * RND)+1
    CIRCLE (320, 240), 200, zufallsfarbe, , , , F
    INPUT "Welche Farbe?", eingabe
   
    FOR I AS INTEGER = 1 TO 15
        IF farbe(I) = eingabe THEN PRINT "Richtig!": EXIT DO
    NEXT
        PRINT "Falsch!"

LOOP
SLEEP
END


für denn anfang gefällt es mir schon aber ich wil dieses thema noch nicht beenden denn aus dem spiel kann man noch mehr machen
das versuche ich noch hinzukriegen^^
wenn ich es geschafft habe dann schreibe ich wieder

in der zwieschenzeit würde ich euch gerne fragen ob ihr mir arrays mit eigenen worten beschreiben könnt denn da harpert es noch bei mir gewaltig Kopf schütteln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4701
Wohnort: ~/

BeitragVerfasst am: 07.06.2009, 20:27    Titel: Antworten mit Zitat

Ich würde es mal so sagen: Ein Array ist so was wie eine (nummerierte) Gruppe von Variablen. In deinem Programm hast du 15 Farbnamen gespeichert. Jetzt hättest du natürlich auch 15 Variablen verwenden können:
Code:
farbeA  = "dunkelblau"
farbeB  = "dunkelgrün"
farbeC  = "türkis"

usw.
Damit wird allerdings die Überprüfung wesentlich umständlicher, weil du jede Variable einzeln prüfen musst:
Code:
IF zufallsfarbe = 1 AND farbeA = eingabe THEN PRINT "Richtig!": EXIT DO
IF zufallsfarbe = 2 AND farbeB = eingabe THEN PRINT "Richtig!": EXIT DO
IF zufallsfarbe = 3 AND farbeC = eingabe THEN PRINT "Richtig!": EXIT DO

usw.
Mit den Arrays wird es ein gutes Stück einfacher, weil du problemlos auf "die 5. Farbe" oder "die 8. Farbe" oder eben in der FOR-Schleife auf "die i-te Farbe" zugreifen kannst. Die Schleife macht eigentlich genau das, was bei meinem obigen Code passiert, nur dass du wesentlich weniger Zeilen brauchst (außerdem wäre das Programm prinzipiell erweiterbar, indem nur das Array erweitert wird - ist bzgl. der Farben natürlich schwierig).


edit: das musst du noch ändern - dein Programm liefert immer "Richtig!", sofern eine existierende Farbe eingegeben wird (also z. B. "gelb" bei einem roten Kreis). Einen Lösungshinweis findest du in meinem zweiten Codeschnipsel. Du kannst das aber auch sehr elegant in einer Zeile und ohne Schleife lösen.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
qbay



Anmeldungsdatum: 08.06.2008
Beiträge: 84

BeitragVerfasst am: 07.06.2009, 21:11    Titel: Antworten mit Zitat

hab eine lösung gefunden grinsen

wenn man in der FOR-NEXT-Schleif einfach das I durch die Variabel "zufalssfarbe" ersätzt dann wird immer die richtige Farbe ausgewählt weil man ja dann denn Farbcode direkt angiebt

also nicht so
Code:

    FOR I AS INTEGER = 1 TO 15
        IF farbe(I) = eingabe THEN PRINT "Richtig!": EXIT DO
    NEXT
        PRINT "Falsch!"


sondern so...

Code:

 
        IF farbe(zufalssfarbe) = eingabe THEN PRINT "Richtig!": EXIT DO
        PRINT "Falsch!"



die variabel I kann man dann ganz weglassen
Danke nochmal für eure hilfe happy

Ach und nur so aus neugier nemored wie würde das andere beispiel aussehen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4701
Wohnort: ~/

BeitragVerfasst am: 07.06.2009, 21:21    Titel: Antworten mit Zitat

Welches andere Beispiel meinst du? Wenn du dich auf
Zitat:
Du kannst das aber auch sehr elegant in einer Zeile und ohne Schleife lösen.

beziehst, das hast du, so wie ich das sehe, bereits gemacht. happy
(Das PRINT "Falsch!" habe ich bei den Zeilen nicht mitgerechnet)
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
qbay



Anmeldungsdatum: 08.06.2008
Beiträge: 84

BeitragVerfasst am: 07.06.2009, 21:25    Titel: Antworten mit Zitat

DANKE grinsen

ich meine
Zitat:

edit: das musst du noch ändern - dein Programm liefert immer "Richtig!", sofern eine existierende Farbe eingegeben wird (also z. B. "gelb" bei einem roten Kreis). Einen Lösungshinweis findest du in meinem zweiten Codeschnipsel. Du kannst das aber auch sehr elegant in einer Zeile und ohne Schleife lösen.


also die Lösung die nach deinem 2. Beispiel
wie wüde die aussehen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4701
Wohnort: ~/

BeitragVerfasst am: 07.06.2009, 23:12    Titel: Antworten mit Zitat

Code:
FOR I AS INTEGER = 1 TO 15
  IF I = zufallsfarbe AND farbe(I) = eingabe THEN PRINT "Richtig!": EXIT DO
NEXT

Ist allerdings ziemlich unsinnig.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 08.06.2009, 08:19    Titel: Re: Ein kleines Spiel Antworten mit Zitat

qbay hat Folgendes geschrieben:
Code:
    IF eingabe = LCASE(farbe(1 TO 15)) TO UCASE(farbe(1 TO 15)) THEN PRINT "Richtig!": EXIT DO ELSE PRINT "Falsch!"

Offensichtlich willst Du case-insensitiv vergleichen, so dass also "dunkelgrün", "DUNKELGRÜN", "Dunkelgrün", "duNKelGrÜn" usw. alle gleichwertig akzeptiert werden: Dazu musst Du schon
Code:
If Ucase(eingabe) = Ucase(farbe(zufallsfarbe)) Then ...

oder
Code:
If Lcase(eingabe) = Lcase(farbe(zufallsfarbe)) Then ...

verwenden, also Eingabe selber zuerst umwandeln und erst dann vergleichen. Und wie zum Glück von Dir selber bemerkt gibt es überhaupt keinen Grund für diese innere FOR-Schleife.

Somit schaut ein korrigierter Code grob wie folgt aus (nur Ausschnitt):
Code:
Do
    zufallsfarbe = INT(15 * RND)+1
    CIRCLE (320, 240), 200, zufallsfarbe, , , , F
    inSchl = -1   ' Sollte TRUE sein
    Do While inSchl
      INPUT "Welche Farbe (Leereingabe=Spielende)?", eingabe
      If eingabe <> "" Then
        IF Ucase(eingabe) = UCase(farbe(zufallsfarbe)) Then
            PRINT "Richtig!"
            inSchl = 0  ' FALSE
        Else
            PRINT "Falsch!"
        End If
      Else
        inSchl = 0
      End If
    Loop
LOOP Until eingabe = ""

Gemachte Verbesserungen: Jederzeit dieses Ratespiel beenden zu können + zum nächsten Farbraterätsel geht es erst bei richtiger Antwort.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
qbay



Anmeldungsdatum: 08.06.2008
Beiträge: 84

BeitragVerfasst am: 08.06.2009, 23:17    Titel: Antworten mit Zitat

Ich wüsste nicht wie man das noch verbessern soll neutral
Aber ich werde es natürlich weiter versuchen
über Aufgaben (kleine) wäre ich sehr dankbar zwinkern

Code:

DIM AS STRING farbe(1 TO 15)
DIM AS STRING eingabe, taste
DIM AS INTEGER zufallsfarbe, inSchl

farbe(1)  = "dunkelblau"
farbe(2)  = "dunkelgrün"
farbe(3)  = "türkis"
farbe(4)  = "dunkelrot"
farbe(5)  = "dunkelviolett"
farbe(6)  = "dunkelbraun"
farbe(7)  = "hellgrau"
farbe(8)  = "grau"
farbe(9)  = "hellblau"
farbe(10) = "hellgrün"
farbe(11) = "hell-Türkis"
farbe(12) = "hellrot"
farbe(13) = "rosa"
farbe(14) = "gelb"
farbe(15) = "weiß"

SCREEN 18
RANDOMIZE TIMER
DO
    zufallsfarbe = INT(15 * RND)+1
    CIRCLE (320, 240), 200, zufallsfarbe, , , , F
    inSchl = -1   ' Sollte TRUE sein
    DO WHILE inSchl
      INPUT "Welche Farbe (Leereingabe=Spielende)?", eingabe
      IF eingabe <> "" THEN
        IF UCASE(eingabe) = UCASE(farbe(zufallsfarbe)) THEN
            PRINT "Richtig!"
            inSchl = 0  ' FALSE
        ELSE
            PRINT "Falsch!"
        END IF
      ELSE
        inSchl = 0
      END IF
    LOOP
LOOP UNTIL eingabe = ""
SLEEP
END



hey dreal was soll "inSchl" eigentlich bedeuten?
In Schleife oder?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 09.06.2009, 00:04    Titel: Antworten mit Zitat

WHILE ist eine Schleife... inSchl[...] könnte dann was bedeuten?
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 09.06.2009, 19:45    Titel: Antworten mit Zitat

qbay hat Folgendes geschrieben:
hey dreal was soll "inSchl" eigentlich bedeuten?

Ist eine Variable. Semantisch müsste sie vom Typ Boolean sein. Allerdings scheint übrigens FreeBasic wie schon sein Vorläufer QB diesen Datentyp nicht zu kennen. In Pascal und Modula-2 würde ich für diesen Fall etwas in dieser Art schreiben
Code:
VAR inSchl : BOOLEAN;
...
inSchl := TRUE;
While inSchl
  ..
   WriteLn("Richtig");
   inSchl := FALSE;
   ..
Wend

Übrigens VBScript unterstützt Boolean dagegen vollständig. In FB kommt derselbe Kniff mit Zahlen wie in QB zum Zug, also Werte <>0 (bevorzugt -1) stellen TRUE dar, 0 selber FALSE.

Semantisch kennen jedoch QB und FB zahlreiche Befehle und Funktionen, die eigentlich Boolean-Werte zurückgeben, z.B. EOF() bei Dateien. Sämtliche Vergleichsoperatoren liefern im Prinzip immer Boolean zurück, weshalb in Pascal
Code:
VAR bTest : BOOLEAN;
bTest := a > 4;

völlig korrekt und sinnvoll ist (Resultat des Vergleichs wird der Boolean-Variable zugewiesen). In QB und FB kannst Du dies genauso handhaben, ausser dass der Rückgabewert eine Integerzahl mit -1 oder 0 ist, d.h. dort bewirkt
Code:
Dim bTest As Integer
bTest = a > 4

dasselbe.

Wäre übrigens aus meiner Sicht für FB sogar eine sinnvolle Spracherweiterung, einen echten Boolean (darf _nicht_ mit Zahlen kompatibel sein, d.h. soll "Type Mismatch" ergeben) bereitzustellen, so dass auf das 0/-1-Rückwärtskompatibilitätsverhalten nur bei "-lang QB" zurückgegangen werden soll.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
qbay



Anmeldungsdatum: 08.06.2008
Beiträge: 84

BeitragVerfasst am: 23.07.2009, 14:27    Titel: Antworten mit Zitat

hey leute
also ich hab mir richtig den kopf zerbrochen
und mir fällt keine lösung ein

Code:

DIM AS STRING farbe(1 TO 15)
DIM AS STRING eingabe
DIM AS INTEGER zufallsfarbe, inSchleife

farbe(1)  = "dunkelblau"
farbe(2)  = "dunkelgrün"
farbe(3)  = "türkis"
farbe(4)  = "dunkelrot"
farbe(5)  = "dunkelviolett"
farbe(6)  = "dunkelbraun"
farbe(7)  = "hellgrau"
farbe(8)  = "grau"
farbe(9)  = "hellblau"
farbe(10) = "hellgrün"
farbe(11) = "helltürkis"
farbe(12) = "hellrot"
farbe(13) = "rosa"
farbe(14) = "gelb"
farbe(15) = "weiß"

SCREEN 18
CLS
RANDOMIZE TIMER
DO       
    zufallsfarbe = INT(15 * RND)+1
    CIRCLE (320, 240), 200, zufallsfarbe, , , , F
    inSchleife = -1
    DO WHILE inSchleife = -1
        INPUT "Welche Farbe?", eingabe
       
        IF UCASE(farbe(zufallsfarbe)) =  UCASE(eingabe) THEN
            PRINT "Richtig!"
            inSchleife = 0
        ELSE
            PRINT "Falsch!"
        END IF 
   
    LOOP
LOOP UNTIL eingabe = ""
SLEEP
END


dieser code funktioniert 2 oder 3 mal richtig
und dann garnich mehr
bei mir zeigt er dann nur noch "Falsch!" an
is das bei euch auch so
weis einer wieso??
ich weis is schon alt das thema aber
ich habs halt sehr oft probiert grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 23.07.2009, 15:32    Titel: Antworten mit Zitat

Ein kleiner, jedoch nicht unwichtiger "Glatteis"-Fall gibt es noch bei UCASE() und LCASE(): Diese Funktionen waren zumindest früher in QB und deren damals verwandten Dialekten nicht international kompatibel, d.h. sie wandeln nur den Zeichenbereich A-Z (CHR$(65)-CHR$(90)) korrekt um! => Es könnte daher nun möglich sein, dass Du beispielsweise <CAPS LOCK> drin hast, der "Würfel" hat z.B. "hellgrün" gewürfelt, Du gibst logischerweise "HELLGRÜN" ein, aber UCASE$() macht aus "hellgrün" halt eben nur "HELLGRüN", womit der Vergleich natürlich fehlschlägt, denn "HELLGRüN" und "HELLGRÜN" sind sind für FB zwei unterschiedliche Strings!
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 565
Wohnort: Jüterbog

BeitragVerfasst am: 23.07.2009, 22:31    Titel: Antworten mit Zitat

Das ist ein Teil des Problems....
Ich glaube die Umlaute in Stringvariablen(also im SourceCode definiert) haben nicht den gleichen ASCII Code wie
die Umlaute die Stringvariablen per INPUT oder INKEY zugewiesen werden

Hatte mir da mal kleine KonvertierungsKrücken(für meine GUI) gebaut:
Code:

'UmlautKonvertierung***********************************************************

declare function UImport(s as string) as string
declare function UExport(s as string) as string

'Umlaute die in importierten Texten stehen, werden
'oft von FB nicht richtig dargestellt.
'Ebenfalls gibt es Probleme bei
'Umlautzuweisungen direkt im Code:
'zB. a="äöüÄÖÜß"
'Da hilft UImport()

'Umlaute die über Inkey oder Input
'in Strings gelangt sind werden in FB richtig
'dargestellt.
'Wenn diese Strings jedoch in eine Text-Datei geschrieben
'werden, sind diese Umlaute für andere Programme (zB.Editoren)
'nicht lesbar
'Da hilft UExport()

'In beiden Fällen bleibt der Original-String erhalten

function UImport(s as string) as string
  function=""
  dim as string tmps
  dim as integer i,tmpasc
  if len(s) then
    tmps=s
    for i=1 to len(s)
      tmpasc=asc(mid(tmps,i,1))
      if tmpasc=228 then tmpasc=132 'ae
      if tmpasc=246 then tmpasc=148 'oe
      if tmpasc=252 then tmpasc=129 'ue

      if tmpasc=196 then tmpasc=142 'AE
      if tmpasc=214 then tmpasc=153 'OE
      if tmpasc=220 then tmpasc=154 'UE

      if tmpasc=223 then tmpasc=225 '"Eszett" zu "Beta"???

      mid(tmps,i,1)=chr$(tmpasc)
    next i
    function=tmps
  end if
end function



function UExport(s as string) as string
  function=""
  dim as string tmps
  dim as integer i,tmpasc
  if len(s) then
    tmps=s
    for i=1 to len(tmps)
      tmpasc=asc(mid(tmps,i,1))
      if tmpasc=132 then tmpasc=228 'ae
      if tmpasc=148 then tmpasc=246 'oe
      if tmpasc=129 then tmpasc=252 'ue

      if tmpasc=142 then tmpasc=196 'AE
      if tmpasc=153 then tmpasc=214 'OE
      if tmpasc=154 then tmpasc=220 'UE

      if tmpasc=225 then tmpasc=223 '"Beta" zu "Eszett"???

      mid(tmps,i,1)=chr$(tmpasc)
    next i
    function=tmps
  end if
end function



Damit und mit Dreaels Hinweis (UCASE zu LCASE) hab ich dann mal deinen Code etwas verändert:

Code:

DIM AS STRING farbe(1 TO 15)
DIM AS STRING eingabe
DIM AS INTEGER zufallsfarbe, inSchleife

declare function UImport(s as string) as string

'nur strings mit Umlauten werden konvertiert
farbe(1)  = "dunkelblau"
farbe(2)  = UImport("dunkelgrün")
farbe(3)  = UImport("türkis")
farbe(4)  = "dunkelrot"
farbe(5)  = "dunkelviolett"
farbe(6)  = "dunkelbraun"
farbe(7)  = "hellgrau"
farbe(8)  = "grau"
farbe(9)  = "hellblau"
farbe(10) = UImport("hellgrün")
farbe(11) = UImport("helltürkis")
farbe(12) = "hellrot"
farbe(13) = "rosa"
farbe(14) = "gelb"
farbe(15) = UImport("weiß")

SCREEN 18
CLS
RANDOMIZE TIMER
DO
    zufallsfarbe = INT(15 * RND)+1
    CIRCLE (320, 240), 200, zufallsfarbe, , , , F
    inSchleife = -1
    DO WHILE inSchleife = -1

        print zufallsfarbe'<----Diese Zeile bitte löschen, nur zu Testzwecken eingefügt!!!!!!!!!!!!!
        INPUT "Welche Farbe?", eingabe

        IF LCASE(farbe(zufallsfarbe)) =  LCASE(eingabe) THEN
            PRINT "Richtig!"
            inSchleife = 0
        ELSE
            PRINT "Falsch!"
        END IF

    LOOP
LOOP UNTIL eingabe = ""
SLEEP
END



'Umlaute die in importierten Texten stehen, werden
'oft von FB nicht richtig dargestellt.
'Ebenfalls gibt es Probleme bei
'Umlautzuweisungen direkt im Code:
'zB. a="äöüÄÖÜß"
'Da hilft UImport()
function UImport(s as string) as string
  function=""
  dim as string tmps
  dim as integer i,tmpasc
  if len(s) then
    tmps=s
    for i=1 to len(s)
      tmpasc=asc(mid(tmps,i,1))
      if tmpasc=228 then tmpasc=132 'ae
      if tmpasc=246 then tmpasc=148 'oe
      if tmpasc=252 then tmpasc=129 'ue

      if tmpasc=196 then tmpasc=142 'AE
      if tmpasc=214 then tmpasc=153 'OE
      if tmpasc=220 then tmpasc=154 'UE

      if tmpasc=223 then tmpasc=225 '"Eszett" zu "Beta"???

      mid(tmps,i,1)=chr$(tmpasc)
    next i
    function=tmps
  end if
end function


es gibt hier bestimmt einige Beiträge die das Problem mit den Umlauten nochmal näher beleuchten und im Portal auch andere Lösungsvorschläge...


Gruss Mutton
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
qbay



Anmeldungsdatum: 08.06.2008
Beiträge: 84

BeitragVerfasst am: 23.07.2009, 23:29    Titel: Antworten mit Zitat

ok also im grunde liegt das problem jetzt nicht bei mir
sondern bei den umlauten
grinsen

einen vorschlag hätte ich allerdings schon
Code:
IF LCASE(farbe(1 TO 15)) TO UCASE(farbe(1 TO 15)) = LCASE(eingabe)TO UCASE(eingabe) THEN...

was haltet ihr davon?

aber erstmal vielen dank und ich werde eure Lösungsvorschlage natürlich studieren bis ich sie selber verstehen kann


obwohl ich von FUNCTIONEN absolut keine ahnung habe zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 24.07.2009, 00:02    Titel: Antworten mit Zitat

du hast schonmal sowas gepostet... was verstehst du bitte unter LCASE(Array) TO UCASE(Array)?
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The_Muh
aka Mark Aroni


Anmeldungsdatum: 11.09.2006
Beiträge: 718

BeitragVerfasst am: 24.07.2009, 00:15    Titel: Antworten mit Zitat

vielleicht meint er lbound() und ubound() *mutmaß*
_________________
// nicht mehr aktiv //
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 24.07.2009, 21:01    Titel: Antworten mit Zitat

Muttonhead hat Folgendes geschrieben:
Code:
      if tmpasc=228 then tmpasc=132 'ae
      if tmpasc=246 then tmpasc=148 'oe
      if tmpasc=252 then tmpasc=129 'ue

      if tmpasc=196 then tmpasc=142 'AE
      if tmpasc=214 then tmpasc=153 'OE
      if tmpasc=220 then tmpasc=154 'UE

      if tmpasc=223 then tmpasc=225 '"Eszett" zu "Beta"???

Da lese ich übrigens etwas ganz Interessantes heraus: Anscheinend liefert FB bei INPUT internationale Zeichen als ISO 8859-1 (Latin 1), möchte aber für PRINT MS-DOS-Zeichensatz (Codepage 437 oder 850).

Übrigens hätte ich aus eigenen Projekten Codebeispiele für derartige Funktionen, die so ziemlich den kompletten Zeichensatz im Bereich CHR$(128)-CHR$(255) abdecken, so dass die Umwandlung für praktisch alle westeuropäischen Sprachen klappt.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz