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:

Zahlen Raten für Computer

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
AndT



Anmeldungsdatum: 02.04.2007
Beiträge: 481

BeitragVerfasst am: 06.07.2007, 14:07    Titel: Zahlen Raten für Computer Antworten mit Zitat

Es ist ja bekannt, das Benutzer eine Zahl Raten muss oder?
naja es geht auch umgekehrt..
Ein kleiner Cheat ist auch drinn zwinkern
Nur etwas versteckt..
Natürlich wieder Open Source..

Code:
' Erratet eine ausgedachte Zahl aber komplett ohne RND und das Effektiv genug..
dim as single min_zahl, max_zahl,startzahl,versuche, start_zahl,runs,FailAnz,Maximale_Fehler
dim as string erg,Version
dim as single RateZahl, g1, g2,maxsteps,adder
dim as single kpress, gpress, addzahl
dim as single taste_ok, Debugmode
dim as single mstrg,Finde_Zahl,rtr,rtradd,smk
dim as single alte_startzahl,helfer1,hanging
const true=1, false = -1
' Einstellungen
min_zahl=0
max_zahl=1000
start_zahl=1
adder=start_zahl
maxsteps=2  ' Wie viele Schritte Maximal hoch und runter??
mstrg=true  ' true = manuell spielen , false = automatisches erraten
Debugmode=false       ' Debugger auf true stellen für erweiterte Informationen
Maximale_Fehler=100000
Version = "Zahlenraten feur Computer ;)"
width 87,25 ' erweitert das consolenfenster etwas nach rechts (nicht nötig aber mein meinen text schon.)
cls
Print Version
Print "Denk dir eine Zahl aus... Anhand deiner Angaben finde ich sie... garantiert.."
Taste_OK=1
do
if mstrg=true then
    ' Programm für manuelle Eingabe
    Locate 4,1:Print "Die Zahl ist "+str(CINT(start_zahl))+" oder??? Ist die Zahl (k)leiner , (g)roeser, oder (i)st sie richtig???"
    bck:
    erg=lcase (input(1)) ' Simple eingabe Engine (abfrage der Tastatur)
if erg="" then goto bck
else
    ' Programm für automatische Eingabe (Minimale KI xD)
    runs+=1
    If Runs > Maximale_Fehler THEN IF Debugmode=true then Print "Fehler in der Zahlfindung!!!":Finde_Zahl=0:Runs=0:addzahl=0:start_zahl = 0:maxsteps=1:g1=1:g2=1:adder=0:Versuche=0 else Print "Automatisches finden der Zahl fehlgeschlagen. Beenden mit Taste..":sleep : exit do
    IF Finde_Zahl=0 then Print "Die Zufindende Zahl eingeben...":input finde_zahl
    If Finde_Zahl < 0 Then Print "Die Zahl darf weder uebertrieben noch im negativen bereich sein!!":Finde_Zahl=0
    If Finde_Zahl<CINT(start_zahl) then erg="k"
    If Finde_Zahl>CINT(start_zahl) then erg="g"
    If Finde_Zahl=CINT(start_zahl) then erg="i"
        IF Debugmode=true then
        locate 20,1
        Print "Debug:"
        Print "Erg=";erg
        end if
    end if
If Debugmode=true then
  locate 7,1:
    Print "Finde_Zahl=";Finde_Zahl
    Print "g1=";g1;" "
    print "g2=";g2;" "
    print "addzahl";addzahl;" "
    print "adder=";adder;" "
    print "start_zahl=";start_zahl;" " ' sehr nützlicher Debugger
    ' sleep
    end if

' Wenn k gedrückt wird:

if erg="k"  Then
   
    if addzahl > 0 then addzahl=0
   
    g1=start_zahl/2
   
    kpress+=1
   
    if g1<0 then g1=start_Zahl
   
    if kpress > maxsteps then kpress = 1
   
    addzahl=addzahl-kpress

end if

' Wenn g gedrückt wird:
if erg="g" Then
   
    if addzahl < 0 then addzahl=0
   
    g2=adder + g1*2
   
    gpress+=1
   
    if g1<start_zahl  then g1=start_zahl+ 2
    if gpress > maxsteps then gpress = 1

    addzahl=addzahl+gpress

end if
G1=INT(G1)
G2=INT(G2)

   
 
Versuche=Versuche+1

' Die einzigsten Wege die Schleife zu verlassen, wenn eine Taste gedrückt wird...
if erg="i" then exit do
if erg=chr(27) then exit do

if erg="*" then mstrg=false : Versuche-=1
' Rateengine ("IF RULEZ" :D )
FOR SMK=1 to 2
IF erg ="g" THEN RTR+=1
IF erg ="k" then RTR-=1
IF RTR = 1 THEN maxsteps += 1+gpress-1: RTR=0   
IF RTR =-1 THEN maxsteps -=1+kpress+1 : RTR=0
NEXT
DO
 HANGING+=1
IF HANGING > Maximale_Fehler THEN FailAnz+= 1 : COLOR 15:Print "Fehler... ":Print "Der Fehler trat bereits "+STR(FailAnz)+ " mal auf!!!":COLOR 7: EXIT DO
IF FAILAnz> 10 then debugmode=true
 ADDER+=addzahl
    if g2 < g1 then g2=g1 + 2
    if start_zahl < -20 then adder=0:start_zahl=0
    IF ADDER < -10 then adder = start_zahl-maxsteps
    IF ADDER > g2 then rtr=0:exit do
    IF ADDER < g2 then adder+=addzahl:g2=g1+maxsteps:exit do
    If G2=0 Then G2=G1+1
      LOOP
HANGING = 0
IF TASTE_OK = 1 then start_zahl=ADDER
alte_startzahl=start_zahl
if CINT(start_zahl) < 0 Then start_zahl=0
if inkey=chr(27) then exit do
loop
IF ERG="i" then Print "Ich habe die Zahl in";Versuche;" Versuch(en) gefunden.":sleep else IF erg=CHR(27) THEN Print "Das Programm wurde manuell beendet.":sleep  ELSE Print "Das Programm wurde automatisch beendet.":sleep

Übrigens ein Remake von http://forum.qbasic.at/viewtopic.php?t=4382 grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
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