Memperhatikan
Tantangan ini telah berakhir dan tidak akan dinilai kembali, tetapi jangan ragu untuk mengirim jawaban dan menguji program Anda terhadap yang lain dengan Program Kontrol!
Tujuan dari tantangan ini adalah untuk membuat AI memenangkan pertarungan melawan AI lain dengan secara strategis menggambar dinding pada kisi 25x25 untuk memblokir lawan.
Memasukkan
25 baris dipisahkan oleh dan diakhiri dengan ;sebagai argumen baris perintah. Ini akan mencakup:
- Ruang kosong
. - Dinding
# - Pemain
1dan2(Lawan selalu2)
Contoh
###############..........;..............#..........;..............#..........;..............#..........;..............#..........;...........1###..........;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;...................###...;...................#.##..;2..................#..#..;#..................##.#..;#...................#.###;....................#####;
yang mewakili peta berikut:
###############..........
..............#..........
..............#..........
..............#..........
..............#..........
...........1###..........
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
...................###...
...................#.##..
2..................#..#..
#..................##.#..
#...................#.###
....................#####
Keluaran
Sebuah string ditulis ke konsol dimulai dengan karakter yang mewakili arah yang ingin diubah AI. Ini adalah kasus sensitif!
- Utara
N - Timur
E - Selatan
S - Barat
W - Menyerah (Ada lagi)
Contoh
W
Aturan Game
- Saat AI bergerak, mereka akan meninggalkan jejak dinding yang kokoh di belakang mereka.
- Para pemain mulai di sudut kiri atas dan kanan bawah
- Permainan ini berlangsung sampai AI apa pun menabrak dinding atau AI menabrak satu sama lain.
- AI menang jika lawannya jatuh terlebih dahulu
- Tidak ada pemenang atau pecundang jika kedua AI kalah secara bersamaan.
- Jika AI keluar dari satu sisi grid, mereka melanjutkan ke arah yang sama dari sisi lain.
Peringkat
Juara 1 - FloodBot (Jawa, 12 menang)
Posisi Kedua - FluidBot (Python, 9 menang)
Posisi Ketiga - FillUpBot (C ++, 8 menang)
Posisi Keempat - AwayBot (Ruby, 5 kemenangan)
Posisi 5 - ArcBot (Python, 4 menang)
6th Place - BlindSnake (Batch, 2 menang)
6th Place - RandomBot (C #, 2 menang)
Program Kontrol (Diuji untuk Python 3.3.3)
Program ini dijalankan dengan argumen dari dua perintah dan satu argumen ( ""jika tidak diperlukan) untuk AI misalnya. Control.py "ruby" "AwayBot.rb" "FillUpBot.exe" "". Itu bisa diunduh di sini .
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