Để ý
Thử thách này đã kết thúc và sẽ không được đánh giá lại, nhưng hãy đăng câu trả lời và kiểm tra chương trình của bạn với những người khác bằng Chương trình Kiểm soát!
Mục đích của thử thách này là tạo ra một AI để giành chiến thắng trong cuộc chiến chống lại một AI khác bằng cách chiến lược vẽ một bức tường trên lưới 25x25 để chặn đối thủ.
Đầu vào
25 dòng được phân tách bằng và kết thúc bằng ;
một đối số dòng lệnh. Điều này sẽ bao gồm:
- Những khoảng trống
.
- Tường
#
- Người chơi
1
và2
(Đối thủ luôn luôn2
)
Thí dụ
###############..........;..............#..........;..............#..........;..............#..........;..............#..........;...........1###..........;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;...................###...;...................#.##..;2..................#..#..;#..................##.#..;#...................#.###;....................#####;
đại diện cho bản đồ sau:
###############..........
..............#..........
..............#..........
..............#..........
..............#..........
...........1###..........
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
...................###...
...................#.##..
2..................#..#..
#..................##.#..
#...................#.###
....................#####
Đầu ra
Một chuỗi được ghi vào bảng điều khiển bắt đầu bằng ký tự đại diện cho hướng mà AI muốn rẽ. Đây là trường hợp nhạy cảm!
- Bắc
N
- phía đông
E
- miền Nam
S
- hướng Tây
W
- Từ bỏ (Bất cứ điều gì khác)
Thí dụ
W
Luật chơi
- Khi các AI di chuyển, chúng sẽ để lại một vệt tường vững chắc phía sau chúng.
- Người chơi bắt đầu ở góc trên bên trái và dưới cùng bên phải
- Trò chơi kéo dài cho đến khi bất kỳ AI nào va vào tường hoặc các AI đâm vào nhau.
- Một AI chiến thắng nếu đối thủ của họ gặp sự cố trước
- Không có người chiến thắng hay kẻ thua cuộc nếu cả hai AI đều thua cùng một lúc.
- Nếu một AI đi ra khỏi một cạnh của lưới, chúng sẽ tiếp tục đi theo hướng tương tự từ phía bên kia.
Xếp hạng
Vị trí số 1 - FloodBot (Java, 12 trận thắng)
Vị trí thứ 2 - FluidBot (Python, 9 trận thắng)
Vị trí thứ 3 - FillUpBot (C ++, 8 trận thắng)
Vị trí thứ 4 - AwayBot (Ruby, 5 trận thắng)
Vị trí thứ 5 - ArcBot (Python, 4 chiến thắng)
Vị trí thứ 6 - BlindSnake (Batch, 2 trận thắng)
Vị trí thứ 6 - RandomBot (C #, 2 trận thắng)
Chương trình điều khiển (Đã kiểm tra Python 3.3.3)
Chương trình được chạy với các đối số của hai lệnh và một đối số duy nhất ( ""
nếu không bắt buộc) cho các AI, ví dụ. Control.py "ruby" "AwayBot.rb" "FillUpBot.exe" ""
. Nó có thể được tải xuống ở đây .
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