darse cuenta
Este desafío ha finalizado y no se volverá a juzgar, ¡pero siéntase libre de publicar respuestas y probar su programa contra los demás con el Programa de Control!
El objetivo de este desafío es hacer que una IA gane una pelea contra otra IA dibujando estratégicamente un muro en una cuadrícula de 25x25 para bloquear al oponente.
Entrada
25 líneas separadas por y terminando con ;un argumento de línea de comando. Esto incluirá:
- Espacios vacíos
. - Paredes
# - Jugadores
1y2(El oponente es siempre2)
Ejemplo
###############..........;..............#..........;..............#..........;..............#..........;..............#..........;...........1###..........;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;...................###...;...................#.##..;2..................#..#..;#..................##.#..;#...................#.###;....................#####;
que representa el siguiente mapa:
###############..........
..............#..........
..............#..........
..............#..........
..............#..........
...........1###..........
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
...................###...
...................#.##..
2..................#..#..
#..................##.#..
#...................#.###
....................#####
Salida
Una cadena escrita en la consola que comienza con el personaje que representa la dirección en la que la IA desea girar. ¡Esto es sensible a mayúsculas y minúsculas!
- norte
N - Este
E - Sur
S - Oeste
W - Renunciar (cualquier otra cosa)
Ejemplo
W
Reglas del juego
- A medida que las IA se mueven, dejarán un rastro sólido de paredes detrás de ellas.
- Los jugadores comienzan en las esquinas superior izquierda e inferior derecha
- El juego dura hasta que cualquier IA golpea una pared o las IA chocan entre sí.
- Una IA gana si su oponente se estrella primero
- No hay ganador ni perdedor si las IA pierden al mismo tiempo.
- Si una IA se sale de un borde de la cuadrícula, continúan en la misma dirección desde el otro lado.
Rankings
1er lugar - FloodBot (Java, 12 victorias)
2do lugar - FluidBot (Python, 9 victorias)
3er lugar - FillUpBot (C ++, 8 victorias)
4to lugar - AwayBot (Ruby, 5 victorias)
5to lugar - ArcBot (Python, 4 victorias)
6to lugar - BlindSnake (Lote, 2 victorias)
6to lugar - RandomBot (C #, 2 victorias)
Programa de control (probado para Python 3.3.3)
El programa se ejecuta con argumentos de los dos comandos y un único argumento ( ""si no es necesario) para los AI, por ejemplo. Control.py "ruby" "AwayBot.rb" "FillUpBot.exe" "". Se puede descargar aquí .
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