주의
이 도전은 끝났고 재 심판되지는 않지만, 제어 프로그램으로 다른 사람들에 대한 답변을 게시하고 프로그램을 자유롭게 테스트하십시오!
이 도전의 목표는 25x25 격자에 전략적으로 벽을 그려 상대를 막아 AI를 다른 AI와의 싸움에서이기도록 만드는 것입니다.
입력
;
명령 줄 인수로 25 줄로 구분됩니다 . 여기에는 다음이 포함됩니다.
- 빈 공간
.
- 벽
#
- 선수
1
와2
(상대는 항상2
)
예
###############..........;..............#..........;..............#..........;..............#..........;..............#..........;...........1###..........;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;...................###...;...................#.##..;2..................#..#..;#..................##.#..;#...................#.###;....................#####;
다음지도를 나타냅니다.
###############..........
..............#..........
..............#..........
..............#..........
..............#..........
...........1###..........
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
...................###...
...................#.##..
2..................#..#..
#..................##.#..
#...................#.###
....................#####
산출
AI가 돌리고 자하는 방향을 나타내는 문자로 콘솔에 쓰여진 문자열. 이것은 이다 대소 문자를 구분합니다!
- 북쪽
N
- 동쪽
E
- 남쪽
S
- 서쪽
W
- 포기 (다른 것)
예
W
게임 규칙
- AI가 움직일 때 벽 뒤에 단단한 흔적이 남게됩니다.
- 플레이어는 왼쪽 상단과 오른쪽 하단에서 시작합니다
- AI가 벽에 부딪 치거나 AI가 서로 충돌 할 때까지 게임이 지속됩니다.
- 상대가 먼저 추락하면 AI가 승리합니다.
- AI가 동시에지면 승자와 패자 가 없습니다 .
- AI가 그리드의 한쪽 가장자리에서 벗어나면 다른 쪽에서 같은 방향으로 계속됩니다.
랭킹
1 위-FloodBot (자바, 12 승)
2 위-FluidBot (파이썬, 9 승)
3 위-FillUpBot (C ++, 8 승)
4 위-어웨이 봇 (루비, 5 승)
5 위-ArcBot (파이썬, 4 승)
6 위-블라인드 스네이크 (배치, 2 승)
6 위-랜덤 봇 (C #, 2 승)
제어 프로그램 (Python 3.3.3에서 테스트)
프로그램은 ""
AI 에 대한 두 명령의 인수와 단일 인수 ( 필요하지 않은 경우)로 실행됩니다. Control.py "ruby" "AwayBot.rb" "FillUpBot.exe" ""
. 여기에서 다운로드 할 수 있습니다 .
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