blob: e577bcbe4edb6d7a6a1a89b50ab718cce1e58c0d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
using System;
using System.Collections.Generic;
namespace Entelect.BattleCity.Challenge
{
class AiAgent
{
private int _tankId;
public AiAgent()
{
}
public AiAgent(int tankId)
{
_tankId = tankId;
}
public Move GetBestMove(ChallengeService.state?[][] state, ChallengeService.game game, int tankIndex)
{
ChallengeService.player me = null;
ChallengeService.player enemy = null;
ChallengeService.unit tank = null;
bool bulletInAir = false;
string playerName = game.playerName;
foreach (ChallengeService.player player in game.players)
{
if (player.name.Equals(playerName))
{
me = player;
}
else
{
enemy = player;
}
}
if (me.units.Length <= tankIndex)
{
return null;
}
tank = me.units[tankIndex];
if (me.bullets != null)
{
foreach (var bullet in me.bullets)
{
if (Math.Abs(bullet.x - tank.x) < state.Length / 4)
{
bulletInAir = true;
}
}
}
var enemyBase = enemy.@base;
ChallengeService.direction chosenDirection =
tank.y != enemyBase.y ?
(
tank.y > enemyBase.y ?
ChallengeService.direction.UP :
ChallengeService.direction.DOWN
) :
(
tank.x > enemyBase.x ?
ChallengeService.direction.LEFT :
ChallengeService.direction.RIGHT
);
if (chosenDirection != tank.direction || bulletInAir)
{
return MoveInDirection(tank.id, chosenDirection);
}
else
{
return new Move(tank.id, ChallengeService.action.FIRE);
}
}
public Move MoveInDirection(int tankId, ChallengeService.direction direction)
{
switch (direction)
{
case ChallengeService.direction.UP:
return new Move(tankId, ChallengeService.action.UP);
case ChallengeService.direction.DOWN:
return new Move(tankId, ChallengeService.action.DOWN);
case ChallengeService.direction.LEFT:
return new Move(tankId, ChallengeService.action.LEFT);
case ChallengeService.direction.RIGHT:
return new Move(tankId, ChallengeService.action.RIGHT);
default:
return new Move(tankId, ChallengeService.action.NONE);
}
}
}
}
|