Farkına varmak
Bu zorluk sona erdi ve yeniden değerlendirilmeyecek, ancak Kontrol Programı ile cevaplar yayınlayıp programınızı diğerlerine karşı test etmekten çekinmeyin!
Bu zorluğun amacı, rakibi engellemek için 25x25 ızgaraya stratejik bir duvar çizerek başka bir AI'ye karşı bir savaş kazanmak için bir AI yapmaktır.
Giriş
;
Komut satırı bağımsız değişkeni olarak ayrılmış ve biten 25 satır . Bu şunları içerecektir:
- Boş alanlar
.
- Duvarlar
#
- Oyuncular
1
ve2
(Rakip her zaman2
)
Misal
###############..........;..............#..........;..............#..........;..............#..........;..............#..........;...........1###..........;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;...................###...;...................#.##..;2..................#..#..;#..................##.#..;#...................#.###;....................#####;
Aşağıdaki haritayı temsil eder:
###############..........
..............#..........
..............#..........
..............#..........
..............#..........
...........1###..........
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
...................###...
...................#.##..
2..................#..#..
#..................##.#..
#...................#.###
....................#####
Çıktı
AI'ya dönmek istediği yönü temsil eden karakterle başlayan konsola yazılan bir dize. Bu büyük / küçük harfe duyarlıdır!
- Kuzeyinde
N
- Doğu
E
- güney
S
- Batı
W
- Vazgeç (Başka bir şey)
Misal
W
Oyun kuralları
- Yapay zeka hareket ettikçe, arkasında sağlam bir duvar izi bırakacaklar.
- Oyuncular sol üst ve sağ alt köşelerde başlar
- Oyun, herhangi bir AI duvara çarpıncaya veya AI'lar birbirine çarpana kadar sürer.
- Rakipleri önce çökerse bir AI kazanır
- Orada hiçbir Al'lerin eğer her ikisi kaybetmek aynı anda kazanan veya kaybeden.
- Bir yapay zeka ızgaranın bir kenarından çıkarsa, diğer taraftan aynı yönde devam eder.
sıralamalar
Birincilik - FloodBot (Java, 12 galibiyet)
İkincilik - FluidBot (Python, 9 kazanç)
3.lük - FillUpBot (C ++, 8 kazanç)
4.lük - AwayBot (Ruby, 5 galibiyet)
5. Sıra - ArcBot (Python, 4 galibiyet)
6. Sıra - BlindSnake (Parti, 2 galibiyet)
6. Sıra - RandomBot (C #, 2 kazanç)
Kontrol Programı (Python 3.3.3 için test edilmiştir)
Program iki komutun argümanları ""
ve AI'lar için tek bir argüman ( gerekli değilse) ile çalıştırılır. Control.py "ruby" "AwayBot.rb" "FillUpBot.exe" ""
. Bu indirilebilir burada .
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