AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 06.07.2007, 14:07 Titel: Zahlen Raten für Computer |
|
|
Es ist ja bekannt, das Benutzer eine Zahl Raten muss oder?
naja es geht auch umgekehrt..
Ein kleiner Cheat ist auch drinn
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  |
|