Beachten
Diese Herausforderung ist beendet und wird nicht neu bewertet. Sie können jedoch gerne Antworten posten und Ihr Programm mit dem Kontrollprogramm gegen die anderen testen!
Das Ziel dieser Herausforderung ist es, eine KI dazu zu bringen, einen Kampf gegen eine andere KI zu gewinnen, indem strategisch eine Wand auf einem 25x25-Gitter gezogen wird, um den Gegner zu blockieren.
Eingang
25 Zeilen, die durch ;
ein Befehlszeilenargument getrennt sind und mit enden . Dies beinhaltet:
- Leere Räume
.
- Wände
#
- Spieler
1
und2
(Der Gegner ist immer2
)
Beispiel
###############..........;..............#..........;..............#..........;..............#..........;..............#..........;...........1###..........;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;...................###...;...................#.##..;2..................#..#..;#..................##.#..;#...................#.###;....................#####;
welches die folgende Karte darstellt:
###############..........
..............#..........
..............#..........
..............#..........
..............#..........
...........1###..........
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
...................###...
...................#.##..
2..................#..#..
#..................##.#..
#...................#.###
....................#####
Ausgabe
Eine Zeichenfolge, die in die Konsole geschrieben wird und mit dem Zeichen beginnt, das die Richtung darstellt, in die sich die KI drehen möchte. Dies ist Groß- und Kleinschreibung!
- Norden
N
- Osten
E
- Süd
S
- Westen
W
- Gib auf (alles andere)
Beispiel
W
Spielregeln
- Wenn sich die AIs bewegen, hinterlassen sie eine feste Spur von Mauern.
- Die Spieler beginnen in der oberen linken und unteren rechten Ecke
- Das Spiel dauert so lange, bis eine KI gegen eine Wand stößt oder die KIs ineinander stoßen.
- Eine KI gewinnt, wenn ihr Gegner zuerst abstürzt
- Es gibt keinen Gewinner oder Verlierer, wenn beide AIs gleichzeitig verlieren.
- Wenn eine KI eine Kante des Gitters verlässt, geht sie von der anderen Seite in dieselbe Richtung weiter.
Ranglisten
1. Platz - FloodBot (Java, 12 Siege)
2. Platz - FluidBot (Python, 9 Siege)
3. Platz - FillUpBot (C ++, 8 Siege)
4. Platz - AwayBot (Ruby, 5 Siege)
5. Platz - ArcBot (Python, 4 Siege)
6. Platz - BlindSnake (Batch, 2 Siege)
6. Platz - RandomBot (C #, 2 Siege)
Steuerungsprogramm (getestet für Python 3.3.3)
Das Programm wird mit Argumenten der beiden Befehle und einem einzelnen Argument ( ""
falls nicht erforderlich) für die AIs ausgeführt, z. Control.py "ruby" "AwayBot.rb" "FillUpBot.exe" ""
. Es kann hier heruntergeladen werden .
import sys, subprocess
Program1, Argument1, Program2, Argument2, Player1, Player2, Grid = sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], [0, 0], [24, 24], [['.' for y in range(25)] for x in range(25)]
while True:
Str = ''
for x in range(25):
for y in range(25):
if Grid[x][y] == '1' or Grid[x][y] == '2':
Grid[x][y] = '#'
Grid[Player1[0]][Player1[1]] = '1'
Grid[Player2[0]][Player2[1]] = '2'
for y in range(25):
for x in range(25):
Str += Grid[x][y]
Str += ';'
if Argument1 == '':
move = subprocess.Popen([Program1, Str], stdout=subprocess.PIPE).stdout.read().decode('ASCII')[0]
else:
move = subprocess.Popen([Program1, Argument1, Str], stdout=subprocess.PIPE).stdout.read().decode('ASCII')[0]
Lose1 = False
if move == 'N':
if Player1[1] > 0:
Player1[1] -= 1
else:
Player1[1] = 24
elif move == 'E':
if Player1[0] < 24:
Player1[0] += 1
else:
Player1[0] = 0
elif move == 'S':
if Player1[1] < 24:
Player1[1] += 1
else:
Player1[1] = 0
elif move == 'W':
if Player1[0] > 0:
Player1[0] -= 1
else:
Player1[0] = 24
else:
Lose1 = True
if Grid[Player1[0]][Player1[1]] == '#' or Grid[Player1[0]][Player1[1]] == '2':
Lose1 = True
print('Player 1:', move)
if Argument2 == '':
move = subprocess.Popen([Program2, Str.replace('2','3').replace('1','2').replace('3','1')], stdout=subprocess.PIPE).stdout.read().decode('ASCII')[0]
else:
move = subprocess.Popen([Program2, Argument2, Str.replace('2','3').replace('1','2').replace('3','1')], stdout=subprocess.PIPE).stdout.read().decode('ASCII')[0]
Lose2 = False
if move == 'N':
if Player2[1] > 0:
Player2[1] -= 1
else:
Player2[1] = 24
elif move == 'E':
if Player2[0] < 24:
Player2[0] += 1
else:
Player2[0] = 0
elif move == 'S':
if Player2[1] < 24:
Player2[1] += 1
else:
Player2[1] = 0
elif move == 'W':
if Player2[0] > 0:
Player2[0] -= 1
else:
Player2[0] = 24
elif Lose1:
Lose2 = True
else:
Lose2 = True
print('Player 2:', move)
print(Str.replace(';', '\n'))
if Grid[Player2[0]][Player2[1]] == '#':
Lose2 = True
if Lose1 and Lose2:
print('Draw!')
break
elif Lose1:
print('Player 2 wins!')
break
elif Lose2:
print('Player 1 wins!')
break