BCC 25 - Abstimmung
Übersicht Sonstiges ProjekteWer hat die beste KI erstellt? | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||||||||||||||||||
Insgesamt 37 Stimmen |
BlitzMoritzBetreff: BCC 25 - Abstimmung |
So, Apr 19, 2009 11:54 Antworten mit Zitat |
|
---|---|---|
So - die Zeit ist um - hiermit erkläre ich den BCC 25 für beendet und eröffne die Abstimmung, die von jetzt an drei Tage dauern soll. Die Abstimmung endet also am Mittwoch, den 22.April, um 12.00 Uhr mittags.
Zunächst einmal möchte ich ein großes Lob und Anerkennung an alle Teilnehmer aussprechen. Der ein oder andere gewöhnte sich zwar an, ständig tiefzustapeln nach dem Motto "meine KI ist eh' die schlechteste" usw..., was aber gar nicht angebracht erscheint, denn ich weiß von mehreren anderen Usern, dass sie durchaus Interesse hatten, teilzunehmen und auch entsprechende Projekte gestartet hatten, letztlich jedoch nichts Erfolgreiches zuwege brachten bzw. vor dem hohen Anspruch der Aufgabe kapitulieren mussten. Insofern ist jeder der Beiträge ein großer Erfolg, denn mit jeder KI kann man tatsächlich spielen! Und zwar so, dass man eben nicht sofort merkt, dass auf der anderen Seite nur eine (dumme) Maschine entscheidet. Ich habe alle Beiträge als Exe's kompiliert (und UPX-komprimiert), damit Ihr sofort mit dem Testen loslegen könnt, und in folgendem Download-Päckchen zusammengefasst: https://www.blitzforum.de/upload/file.php?id=5340 Im "Programme"-Ordner könnt ihr selbst mit den KI's spielen und im "Netzwerk-Turnier"-Ordner könnt ihr die KIs jeweils 40 Partien gegeneinander spielen lassen. Ich habe für TimBo zwei Netzwerk-Programme mit unterschiedlichen Stärken kompiliert. Dabei habe ich TimBo's höchste Suchtiefe 8 vermieden, denn sie benötigt für jeden Zug ungefähr eine halbe Minute. Bei je 40 Partien gegen fünf andere KI's und mindestens zehn Zügen pro Spiel wären das nämlich in der Summe über 16 Stunden Rechenzeit. Zur Abstimmung sind die folgenden fünf Teilnehmer zugelassen: AnniXa ComNik Firstdeathmaker Rallimen TimBo Bewertung: Der wichtigste Entscheidungsparameter für die Abstimmung ist selbstverständlich zuallererst, wie gut eine KI spielt. Dies möge man evtl. nicht ausschließlich in den Ergebnissen des Netzwerk-Turniers ablesen. Man sollte auch selbst einmal gegen die KI spielen. Zweiter Entscheidungsparameter ist die Abwechslung: Reagiert die KI ständig mit denselben Spielzügen, oder wechselt sie ab, so dass der Unterhaltungswert für den Spieler wesentlich steigt? Dritter Entscheidungsparameter ist die Schnelligkeit, mit der ein Zug berechnet wird. Haben beispielsweise zwei KI's ein ausgeglichenes Sieg-Niederlage-Verhältnis, so sollte diejenige besser beurteilt werden, die dafür weniger Zeit benötigt. Und natürlich sollte man auch die Quantität und Qualität des Codes beurteilen. Ich wünsche viel Spaß beim Testen - möge sich ein verdienter Sieger herauskristallisieren |
||
- Zuletzt bearbeitet von BlitzMoritz am Do, Apr 23, 2009 7:36, insgesamt 4-mal bearbeitet
BtbN |
So, Apr 19, 2009 12:57 Antworten mit Zitat |
|
---|---|---|
Hast du nicht was wichtiges vergessen für diese Abstimmung? So die Abstimmung vllt.? | ||
TimBo |
So, Apr 19, 2009 13:39 Antworten mit Zitat |
|
---|---|---|
Suchtiefe 8 ist nur zum entscheiden, was der beste Zug ist. Diese Funktion gibt es bei diversen Schachcomputern, dabei kann es vorkommen das er 2 Stunden rechnet. Also das mit der 8 war nie zum Duell 2er KI's vorgesehen.
Viele Grüße TimBo Bei mir funktionieren die Exen nicht, Illegal Memory was weiß ich. |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
ComNik |
So, Apr 19, 2009 14:26 Antworten mit Zitat |
|
---|---|---|
ähmmm mir fällt gerade dass auf was auch ralliman aufgefallen ist.
Spiele Ich: Rallimen:ComNIk: 24:15 (1 Remis) ComNik:Rallimen: 10:30 und das IMMER! Na ja ich bi sowieso für die bewertung Mensch:Ki Viel Glück noch allen. |
||
WIP: Vorx.Engine |
BlitzMoritz |
So, Apr 19, 2009 16:02 Antworten mit Zitat |
|
---|---|---|
BtbN hat Folgendes geschrieben: Hast du nicht was wichtiges vergessen für diese Abstimmung? So die Abstimmung vllt.?
Hä? Ich dachte, dass müsste ein Administrator machen. Falls nicht - sagt mir bitte, wo 'man 'ne Abstimmung eingeben kann, ich hab's noch nie gemacht und auch nix gefunden in der Auswahl "Quote", "Code" usw. TimBo hat Folgendes geschrieben: Bei mir funktionieren die Exen nicht, Illegal Memory was weiß ich. Wieso denn das schon wieder? Das einzige, was ich gemacht habe, ist, alle Exes mit UPX zu komprimieren, damit das Paket nicht zu groß wird. Wenn das (evtl. für Vista) ein Problem sein sollte, kann ich natürlich alles unkomprimiert machen.
|
||
- Zuletzt bearbeitet von BlitzMoritz am So, Apr 19, 2009 16:31, insgesamt einmal bearbeitet
BtbN |
So, Apr 19, 2009 16:03 Antworten mit Zitat |
|
---|---|---|
Rate mal, wozu fett untendrunter bei der Themen-Erstellung das "Umfrage Erstellen" gut ist. | ||
TimBo |
So, Apr 19, 2009 16:12 Antworten mit Zitat |
|
---|---|---|
Ich habe es versucht im kompatiblität modus und es geht immer noch nicht, ich habe vista. | ||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
kriD |
So, Apr 19, 2009 16:23 Antworten mit Zitat |
|
---|---|---|
kann man nih einfach die KIs gegeneinander antreten lassen und so den sieger ermitteln?
lg kriD |
||
Wenn ich du wäre, wäre ich lieber ich! |
BlitzMoritz |
So, Apr 19, 2009 16:28 Antworten mit Zitat |
|
---|---|---|
Sooooo, die Abstimmung ist jetzt wirklich eröffnet
Für TimBo u.a. habe ich jetzt ganz schnell noch ein Paket mit nicht komprimierten Exen hochgeladen, ich hoffe, es klappt jetzt. (Man muss die Programm-Exen natürlich in einem Ordner starten, in dem auch der "media"-Ordner steckt.). EDIT: Download wieder entfernt, da nicht mehr notwendig |
||
- Zuletzt bearbeitet von BlitzMoritz am Do, Apr 23, 2009 7:37, insgesamt einmal bearbeitet
ComNik |
So, Apr 19, 2009 16:48 Antworten mit Zitat |
|
---|---|---|
äh, kann man bei der abstimmung nicht einfach immer wieder auf den gewünschten namen klicken??
[edit]Ahhh kann man nicht...[edit ende] und die teilnehmer dürfen nicht mit abstimmen, oder? lg ComNik |
||
WIP: Vorx.Engine |
TimBo |
So, Apr 19, 2009 20:53 Antworten mit Zitat |
|
---|---|---|
Danke das du für uns Vista konsorten extra das neue Package gemacht hast nur,
ein Bild sagt mehr als 1000 Worte: ich bin am verzweifeln nur das bMax Programm funktioniert, vll. bin ich aber nur zu dumm um ne exe zu starten Viele Grüße TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
BtbN |
So, Apr 19, 2009 20:54 Antworten mit Zitat |
|
---|---|---|
Funktioniert hier auf Vista problemlos. | ||
SpionAtom |
So, Apr 19, 2009 21:34 Antworten mit Zitat |
|
---|---|---|
AnniXa: hab ich besiegt, nachdem nur noch 2 Spalten übrig waren, gabs Zugzwang
BlitzMoritz: Remis ComNik: Schnell besiegt FirstdeathMaker: hab ich besiegt Rallimen: verloren nach blöder Zwickmühle xD, und dann nochmal nach Zungzwang bei zwei übrig gebliebenen Spalten TimBo: hab ich besiegt, nach Zugzwang bei zwei übrig gebliebenen Spalten Und bis auf bei TimBo gabs eigentlich keine Zeitverzögerung.. |
||
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080 |
Xaymarehemals "Cgamer" |
So, Apr 19, 2009 23:04 Antworten mit Zitat |
|
---|---|---|
Firstdeathmakers netzwerk dingends da verbraucht nach der zeit immer mehr speicher. (~1gb nach 30min)
iwie beendet es sich nicht |
||
Warbseite |
TimBo |
Mo, Apr 20, 2009 1:05 Antworten mit Zitat |
|
---|---|---|
warum darf ich denn eigentlich mitstimmen , ich dachte die Teilnehmer dürfen nicht abstimmen ...
und funken tut es bei mir leider immer noch nicht , egal kann man wohl nichts ändern. Viele Grüße TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
BladeRunnerModerator |
Mo, Apr 20, 2009 2:10 Antworten mit Zitat |
|
---|---|---|
Es wäre mir neu dass bei Abstimmungen die Teilnahmer ausgeschlossen wären. Weshalb auch. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
BlitzMoritz |
Mo, Apr 20, 2009 7:35 Antworten mit Zitat |
|
---|---|---|
@TimBo: Tut mir echt leid, aber ich weiß jetzt auch nich' mehr, was ich dir raten soll...
Doch! Eines schon: im Code-Ordner findest du alle BesteSpalte()-Funktionen. Dann kompilier dir die Exen auf deinem Rechner doch einfach neu (Edit: Hattest du die zip-Ordner vorher auch wirklich entpackt?) @Cgamer: Firstdeathmaker deutete einmal an, dass sich seine KI sämtliche Spiele in Datenbanken speichert, um aus einer Niederlage zu "lernen" - ob's funktioniert, ist die Frage - ich hab' mal die gleiche Partie, die sie verloren hatte, immer wieder gespielt. |
||
- Zuletzt bearbeitet von BlitzMoritz am Mo, Apr 20, 2009 9:59, insgesamt einmal bearbeitet
ComNik |
Mo, Apr 20, 2009 8:01 Antworten mit Zitat |
|
---|---|---|
also gegen annixas ki gewinn ich immer, weil sie nicht beachtet ob 3 schräg in einer reihe sind und unten ein stein hinkann.
Gegen rallimens ki gewinn ich auch immer, da sie nicht beachtet ob zwei in einer reihe sind und ich somit eine zwickmühle aufbauen kann. Lg |
||
WIP: Vorx.Engine |
RallimenSieger des 30-EUR-Wettbewerbs |
Mo, Apr 20, 2009 20:08 Antworten mit Zitat |
|
---|---|---|
Zitat: Gegen rallimens ki gewinn ich auch immer
liegt daran das noch ein kleiner Bug drinn ist, der aber starke Auswirkungen hat! ändern kann ich es nicht mehr da der Abgabetermin schon in der Vergangenheit liegt! Wenn es interessiert hier die beste Spalte() ohne Bug! Code: [AUSKLAPPEN] ;-Bitte ergänze im Folgenden "Nickname?" durch deinen eigenen, damit man später beim
;Gegeneinanderspielen mehrerer Gegner die Fenster anhand der Titelleisten unterscheiden kann: AppTitle("Rallimen V2009_04_20") ;-------------------------------------- Dim SpFe%(6,5) Dim Slot% (6) Global Maxtiefe% =4 Function BesteSpalte%() Dim Slot% (6) Local x%,y%,Tiefe%,Spalte% For x% = 0 To 6 For y% = 0 To 5 SpFe (x%,y%) = Feld (x%,y%) zz=zz+Feld (x%,y%) Next Next For Spalte = 0 To 6 For Reihe% = 0 To 5 If SpFe (Spalte%,Reihe%) = 0 Then SpFe (Spalte%,Reihe%) = Farbe% :Steingesetzt = True ;Stein sezten ;ShowFieldPrint():Stop If CheckGewinn%(Spalte%,Reihe%,farbe%) SpFe (Spalte%,Reihe%) = 0 Slot(Spalte) = (10000 + maxtiefe) Else Slot(Spalte) = GetMinimierung(Maxtiefe, -1999990, +1999990) SpFe (Spalte%,Reihe%) = 0 :Steingesetzt = False ;Stein rausnehmen End If ;ShowFieldPrint():Stop Exit End If Next Next ;ShowFieldPrint() Return Slotauswaehlen%() End Function Function getMaximierung(tiefe%,alpha%,beta%) If tiefe = 0 Then Return CheckGewinnNote% (Farbe%) For Nr = 0 To 6 Select Nr Case 0 Spalte = 3 Case 1 Spalte = 2 Case 2 Spalte = 4 Case 3 Spalte = 1 Case 4 Spalte = 5 Case 5 Spalte = 0 Case 6 Spalte = 6 End Select For Reihe% = 0 To 5 If SpFe (Spalte%,Reihe%) = 0 Then SpFe (Spalte%,Reihe%) = Farbe% ;::::ShowFieldPrint() If CheckGewinn%(Spalte%,Reihe%,farbe%) Then SpFe (Spalte%,Reihe%) = 0 wert = (10000 +tiefe) ;:Stop Else wert = GetMinimierung(tiefe-1, alpha, beta) SpFe (Spalte%,Reihe%) = 0 End If If (wert => beta) Then Return beta If (wert > alpha) Then alpha = wert Exit End If Next Next Return alpha End Function Function getMinimierung (tiefe%,alpha%,beta%) If Tiefe = 0 Then Return CheckGewinnNote% (Farbe%) For Nr = 0 To 6 Select Nr Case 0 Spalte = 3 Case 1 Spalte = 2 Case 2 Spalte = 4 Case 3 Spalte = 1 Case 4 Spalte = 5 Case 5 Spalte = 0 Case 6 Spalte = 6 End Select For Reihe% = 0 To 5 If SpFe (Spalte%,Reihe%) = 0 Then SpFe (Spalte%,Reihe%) = Farbe Xor 3 ;ShowFieldPrint() If CheckGewinn%(Spalte%,Reihe%,farbe% Xor 3) Then SpFe (Spalte%,Reihe%) = 0 wert = -(10000+tiefe) Else wert = Getmaximierung(tiefe-1, alpha, beta) SpFe (Spalte%,Reihe%) = 0 End If If (wert <= alpha) Then Return alpha If (wert < beta) Then beta = wert Exit End If Next Next Return beta End Function Function Slotauswaehlen%() ;Stop ;höchsten Wert emitteln For x% = 0 To 6 ;Slot ermitteln If Feld (x%,5) = 0 Then ; der Slot ist oben frei maxwert% = Slot(x%) maxindex% = x% For x1% = x%+1 To 6 If Feld (x1%,5) = 0 Then ; der Slot ist oben frei If maxwert% < Slot(x1%) Then maxindex% = x1% maxwert% = Slot(x1%) End If End If Next Exit End If Next ;ShowFieldprint() Return maxindex% End Function Function CheckGewinnNote% (Player%) AnzNote =anznote +1 Return GewinnNote% (Player%) -GewinnNote% (Player%Xor 3) End Function Function GewinnNote% (Player%) ;anznote=anznote+1 gegner = Player% Xor 3 ;Waagerecht Wert=1 For x% = 0 To 3 For y% = 0 To 5 If SpFe (x,y) <> gegner% Then If SpFe (x+1,y%) <> gegner% Then If SpFe (x%+2,y%) <> gegner% Then If SpFe (x%+3,y%) <> gegner% Then If SpFe (x,y%) = Player Then Wert= Wert *2 If SpFe (x+1,y%) = Player Then Wert= Wert *2 If SpFe (x+2,y%) = Player Then Wert= Wert *2 If SpFe (x+3,y%) = Player Then Wert= Wert *2 If wert = 16 Then Wert= Wert *2:RuntimeError "1" Point = Point + Wert Wert=1 End If End If End If End If Next Next ;senkrecht Point = Point+Wert Wert=1 For x% = 0 To 6 For y% = 0 To 2 If SpFe (x,y) <> gegner% Then If SpFe (x,y%+1) <> gegner% Then If SpFe (x%,y%+2) <> gegner% Then If SpFe (x%,y%+3) <> gegner% Then If SpFe (x,y%) = Player Then Wert= Wert *2 If SpFe (x,y%+1) = Player Then Wert= Wert *2 If SpFe (x,y%+2) = Player Then Wert= Wert *2 If SpFe (x,y%+3) = Player Then Wert= Wert *2 If wert = 16 Then Wert= Wert *2:RuntimeError "2" Point = Point + Wert Wert=1 End If End If End If End If Next Next For x% = 0 To 3 For y% = 0 To 2 If SpFe (x,y) <> gegner% Then If SpFe (x+1,y%+1) <> gegner% Then If SpFe (x%+2,y%+2) <> gegner% Then If SpFe (x%+3,y%+2) <> gegner% Then If SpFe (x,y%) = Player Then Wert= Wert *2 If SpFe (x+1,y%+1) = Player Then Wert= Wert *2 If SpFe (x+2,y%+2) = Player Then Wert= Wert *2 If SpFe (x+3,y%+3) = Player Then Wert= Wert *2 If wert = 16 Then Wert= Wert *2:RuntimeError "3" Point = Point + Wert Wert=1 End If End If End If End If Next Next For x% = 0 To 3 For y% = 0 To 2 If SpFe(x%, y%+3) <> gegner% If SpFe(x%+1, y%+2) <> gegner% If SpFe(x%+2, y%+1) <> gegner% If SpFe(x%+3, y%) <> gegner% If SpFe(x%, y%+3) = Player Then Wert= Wert *2 If SpFe(x%+1, y%+2) = Player Then Wert= Wert *2 If SpFe(x%+2, y%+1) = Player Then Wert= Wert *2 If SpFe(x%+3, y% ) = Player Then Wert= Wert *2 If wert = 16 Then Wert= Wert *2:RuntimeError "4" Point = Point + Wert Wert=1 End If End If End If End If Next Next Return Point End Function Function CheckGewinn%(SteinSpalte%,SteinReihe%,Player%) Spalte =SteinSpalte% Reihe% =SteinReihe% ;Waagerecht For Spalte% = 0 To 3 If SpFe (Spalte%,Reihe%) = Player% Then If SpFe (Spalte%+1,Reihe%) = Player% Then If SpFe (Spalte%+2,Reihe%) = Player% Then If SpFe (Spalte%+3,Reihe%) = Player% Then Return 1 End If End If End If Next Spalte =SteinSpalte% Reihe% =SteinReihe% ;senkrecht For Reihe% = 0 To 2 If SpFe (Spalte%,Reihe%) = Player% Then If SpFe (Spalte%,Reihe%+1) = Player% Then If SpFe (Spalte%,Reihe%+2) = Player% Then If SpFe (Spalte%,Reihe%+3) = Player% Then Return 1 End If End If End If Next Spalte =SteinSpalte% Reihe% =SteinReihe% x=Spalte% : y=Reihe : If x < y Then y=y-x :x=0 ElseIf y < x x=x-y :y=0 Else x=0 :y=0 For x = x To 3 If x+3 >6 Or y+3 >5 Then Exit If SpFe(x , y)=Player% If SpFe(x +1, y+1)=Player% If SpFe(x +2, y+2)=Player% If SpFe(x +3, y+3)=Player% Return 1 EndIf EndIf EndIf y=y+1 Next Spalte =SteinSpalte% Reihe% =SteinReihe% y1%=Spalte + Reihe If y1 < 3 Then Return If y1 > 5 Then x1 = y1-5 : y1=5 For x1 = x1 To x1+2 ;If x1+3>6 Or y1-3<0 Then Exit If x1>3 Or y1<3 Then Exit If SpFe(x1,y1) =Player% If SpFe(x1+1, y1-1) =Player% If SpFe(x1+2, y1-2) =Player% If SpFe(x1+3, y1-3) =Player% Then Return 1 End If End If End If y1=y1-1 Next End Function Function ShowFieldPrint() Print"ShowField" For y = 5 To 0 Step -1 For x = 0 To 6 Write SpFe (x%,y%) Next Print "" Next Print"" For t= 0 To 6 Print Slot(t) Next Print"" End Function ;-Bitte ergänze im Folgenden "Nickname?" durch deinen eigenen, damit man später beim ;Gegeneinanderspielen mehrerer Gegner die Fenster anhand der Titelleisten unterscheiden kann: AppTitle("Rallimen V2009_04_20") ;-------------------------------------- Dim SpFe%(6,5) Dim Slot% (6) Global Maxtiefe% =4 Function BesteSpalte%() Dim Slot% (6) Local x%,y%,Tiefe%,Spalte% For x% = 0 To 6 For y% = 0 To 5 SpFe (x%,y%) = Feld (x%,y%) zz=zz+Feld (x%,y%) Next Next For Spalte = 0 To 6 For Reihe% = 0 To 5 If SpFe (Spalte%,Reihe%) = 0 Then SpFe (Spalte%,Reihe%) = Farbe% :Steingesetzt = True ;Stein sezten ;ShowFieldPrint():Stop If CheckGewinn%(Spalte%,Reihe%,farbe%) SpFe (Spalte%,Reihe%) = 0 Slot(Spalte) = (10000 + maxtiefe) Else Slot(Spalte) = GetMinimierung(Maxtiefe, -1999990, +1999990) SpFe (Spalte%,Reihe%) = 0 :Steingesetzt = False ;Stein rausnehmen End If ;ShowFieldPrint():Stop Exit End If Next Next ;ShowFieldPrint() Return Slotauswaehlen%() End Function Function getMaximierung(tiefe%,alpha%,beta%) If tiefe = 0 Then Return CheckGewinnNote% (Farbe%) For Nr = 0 To 6 Select Nr Case 0 Spalte = 3 Case 1 Spalte = 2 Case 2 Spalte = 4 Case 3 Spalte = 1 Case 4 Spalte = 5 Case 5 Spalte = 0 Case 6 Spalte = 6 End Select For Reihe% = 0 To 5 If SpFe (Spalte%,Reihe%) = 0 Then SpFe (Spalte%,Reihe%) = Farbe% ;::::ShowFieldPrint() If CheckGewinn%(Spalte%,Reihe%,farbe%) Then SpFe (Spalte%,Reihe%) = 0 wert = (10000 +tiefe) ;:Stop Else wert = GetMinimierung(tiefe-1, alpha, beta) SpFe (Spalte%,Reihe%) = 0 End If If (wert => beta) Then Return beta If (wert > alpha) Then alpha = wert Exit End If Next Next Return alpha End Function Function getMinimierung (tiefe%,alpha%,beta%) If Tiefe = 0 Then Return CheckGewinnNote% (Farbe%) For Nr = 0 To 6 Select Nr Case 0 Spalte = 3 Case 1 Spalte = 2 Case 2 Spalte = 4 Case 3 Spalte = 1 Case 4 Spalte = 5 Case 5 Spalte = 0 Case 6 Spalte = 6 End Select For Reihe% = 0 To 5 If SpFe (Spalte%,Reihe%) = 0 Then SpFe (Spalte%,Reihe%) = Farbe Xor 3 ;ShowFieldPrint() If CheckGewinn%(Spalte%,Reihe%,farbe% Xor 3) Then SpFe (Spalte%,Reihe%) = 0 wert = -(10000+tiefe) Else wert = Getmaximierung(tiefe-1, alpha, beta) SpFe (Spalte%,Reihe%) = 0 End If If (wert <= alpha) Then Return alpha If (wert < beta) Then beta = wert Exit End If Next Next Return beta End Function Function Slotauswaehlen%() ;Stop ;höchsten Wert emitteln For x% = 0 To 6 ;Slot ermitteln If Feld (x%,5) = 0 Then ; der Slot ist oben frei maxwert% = Slot(x%) maxindex% = x% For x1% = x%+1 To 6 If Feld (x1%,5) = 0 Then ; der Slot ist oben frei If maxwert% < Slot(x1%) Then maxindex% = x1% maxwert% = Slot(x1%) End If End If Next Exit End If Next ;ShowFieldprint() Return maxindex% End Function Function CheckGewinnNote% (Player%) AnzNote =anznote +1 Return GewinnNote% (Player%) -GewinnNote% (Player%Xor 3) End Function Function GewinnNote% (Player%) ;anznote=anznote+1 gegner = Player% Xor 3 ;Waagerecht Wert=1 For x% = 0 To 3 For y% = 0 To 5 If SpFe (x,y) <> gegner% Then If SpFe (x+1,y%) <> gegner% Then If SpFe (x%+2,y%) <> gegner% Then If SpFe (x%+3,y%) <> gegner% Then If SpFe (x,y%) = Player Then Wert= Wert *2 If SpFe (x+1,y%) = Player Then Wert= Wert *2 If SpFe (x+2,y%) = Player Then Wert= Wert *2 If SpFe (x+3,y%) = Player Then Wert= Wert *2 If wert = 16 Then Wert= Wert *2:RuntimeError "1" Point = Point + Wert Wert=1 End If End If End If End If Next Next ;senkrecht Point = Point+Wert Wert=1 For x% = 0 To 6 For y% = 0 To 2 If SpFe (x,y) <> gegner% Then If SpFe (x,y%+1) <> gegner% Then If SpFe (x%,y%+2) <> gegner% Then If SpFe (x%,y%+3) <> gegner% Then If SpFe (x,y%) = Player Then Wert= Wert *2 If SpFe (x,y%+1) = Player Then Wert= Wert *2 If SpFe (x,y%+2) = Player Then Wert= Wert *2 If SpFe (x,y%+3) = Player Then Wert= Wert *2 If wert = 16 Then Wert= Wert *2:RuntimeError "2" Point = Point + Wert Wert=1 End If End If End If End If Next Next For x% = 0 To 3 For y% = 0 To 2 If SpFe (x,y) <> gegner% Then If SpFe (x+1,y%+1) <> gegner% Then If SpFe (x%+2,y%+2) <> gegner% Then If SpFe (x%+3,y%+2) <> gegner% Then If SpFe (x,y%) = Player Then Wert= Wert *2 If SpFe (x+1,y%+1) = Player Then Wert= Wert *2 If SpFe (x+2,y%+2) = Player Then Wert= Wert *2 If SpFe (x+3,y%+3) = Player Then Wert= Wert *2 If wert = 16 Then Wert= Wert *2:RuntimeError "3" Point = Point + Wert Wert=1 End If End If End If End If Next Next For x% = 0 To 3 For y% = 0 To 2 If SpFe(x%, y%+3) <> gegner% If SpFe(x%+1, y%+2) <> gegner% If SpFe(x%+2, y%+1) <> gegner% If SpFe(x%+3, y%) <> gegner% If SpFe(x%, y%+3) = Player Then Wert= Wert *2 If SpFe(x%+1, y%+2) = Player Then Wert= Wert *2 If SpFe(x%+2, y%+1) = Player Then Wert= Wert *2 If SpFe(x%+3, y% ) = Player Then Wert= Wert *2 If wert = 16 Then Wert= Wert *2:RuntimeError "4" Point = Point + Wert Wert=1 End If End If End If End If Next Next Return Point End Function Function CheckGewinn%(SteinSpalte%,SteinReihe%,Player%) Spalte =SteinSpalte% Reihe% =SteinReihe% ;Waagerecht For Spalte% = 0 To 3 If SpFe (Spalte%,Reihe%) = Player% Then If SpFe (Spalte%+1,Reihe%) = Player% Then If SpFe (Spalte%+2,Reihe%) = Player% Then If SpFe (Spalte%+3,Reihe%) = Player% Then Return 1 End If End If End If Next Spalte =SteinSpalte% Reihe% =SteinReihe% ;senkrecht For Reihe% = 0 To 2 If SpFe (Spalte%,Reihe%) = Player% Then If SpFe (Spalte%,Reihe%+1) = Player% Then If SpFe (Spalte%,Reihe%+2) = Player% Then If SpFe (Spalte%,Reihe%+3) = Player% Then Return 1 End If End If End If Next Spalte =SteinSpalte% Reihe% =SteinReihe% x=Spalte% : y=Reihe : If x < y Then y=y-x :x=0 ElseIf y < x x=x-y :y=0 Else x=0 :y=0 For x = x To 3 If x+3 >6 Or y+3 >5 Then Exit If SpFe(x , y)=Player% If SpFe(x +1, y+1)=Player% If SpFe(x +2, y+2)=Player% If SpFe(x +3, y+3)=Player% Return 1 EndIf EndIf EndIf y=y+1 Next Spalte =SteinSpalte% Reihe% =SteinReihe% y1%=Spalte + Reihe If y1 < 3 Then Return If y1 > 5 Then x1 = y1-5 : y1=5 For x1 = x1 To x1+2 ;If x1+3>6 Or y1-3<0 Then Exit If x1>3 Or y1<3 Then Exit If SpFe(x1,y1) =Player% If SpFe(x1+1, y1-1) =Player% If SpFe(x1+2, y1-2) =Player% If SpFe(x1+3, y1-3) =Player% Then Return 1 End If End If End If y1=y1-1 Next End Function Function ShowFieldPrint() Print"ShowField" For y = 5 To 0 Step -1 For x = 0 To 6 Write SpFe (x%,y%) Next Print "" Next Print"" For t= 0 To 6 Print Slot(t) Next Print"" End Function |
||
[BB2D | BB3D | BB+]
|
ComNik |
Mo, Apr 20, 2009 20:27 Antworten mit Zitat |
|
---|---|---|
Schön! | ||
WIP: Vorx.Engine |
Übersicht Sonstiges Projekte
Powered by phpBB © 2001 - 2006, phpBB Group