通知
この課題は終了しました。再審査は行われませんが、回答を投稿し、コントロールプログラムを使用して他のプログラムとテストしてみてください。
この課題の目的は、25x25のグリッドに戦略的に壁を描いて対戦相手をブロックすることで、AIが別のAIとの戦いに勝つようにすることです。
入力
;
コマンドライン引数として区切られ、末尾が25の行。これには以下が含まれます:
- 空のスペース
.
- 壁
#
- プレイヤー
1
と2
(対戦相手は常に2
)
例
###############..........;..............#..........;..............#..........;..............#..........;..............#..........;...........1###..........;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;.........................;...................###...;...................#.##..;2..................#..#..;#..................##.#..;#...................#.###;....................#####;
次のマップを表します:
###############..........
..............#..........
..............#..........
..............#..........
..............#..........
...........1###..........
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
.........................
...................###...
...................#.##..
2..................#..#..
#..................##.#..
#...................#.###
....................#####
出力
AIが向けたい方向を表す文字で始まる、コンソールに書き込まれる文字列。これは大文字と小文字が区別されます。
- 北
N
- 東
E
- 南
S
- 西
W
- あきらめる(その他すべて)
例
W
ゲームのルール
- AIが移動すると、背後に壁のしっかりとした跡が残ります。
- プレーヤーは左上隅と右下隅から始まります
- ゲームは、AIが壁にぶつかるか、AIが互いに衝突するまで続きます。
- 相手が最初にクラッシュした場合、AIが勝つ
- AIが同時に負けた場合、勝者も敗者もありません。
- AIがグリッドの1つのエッジから外れると、反対側から同じ方向に進みます。
ランキング
1位-FloodBot(Java、12勝)
2位-FluidBot(Python、9勝)
3位-FillUpBot(C ++、8勝)
4位-AwayBot(Ruby、5勝)
5位-ArcBot(Python、4勝)
6位-BlindSnake(バッチ、2勝)
6位-RandomBot(C#、2勝)
制御プログラム(Python 3.3.3でテスト済み)
プログラムは、2つのコマンドの引数と""
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