Skip to content

Commit f90458b

Browse files
committed
Fix logic for Medium player
1 parent 238d928 commit f90458b

1 file changed

Lines changed: 27 additions & 14 deletions

File tree

TurnBase.KaNoBu/KaNoBuPlayerMedium.cs

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ public async Task<InitResponseModel<KaNoBuInitResponseModel>> Init(InitModel<KaN
4747
public async Task<MakeTurnResponseModel<KaNoBuMoveResponseModel>> MakeTurn(MakeTurnModel<KaNoBuMoveModel> model)
4848
{
4949
this.memorizedField.SynchronizeField((Field2D)model.Request.Field);
50-
var from = this.findAllMovement(this.memorizedField.Field).OrderByDescending(a => EvaluateMove(this.memorizedField.Field, a)).ToList();
51-
50+
var from = this.findAllMovement(this.memorizedField.Field)
51+
.Select(move => (move, EvaluateMove(this.memorizedField.Field, move))).OrderByDescending(a => a.Item2).ToList();
5252
if (from.Count == 0)
5353
{
5454
return new MakeTurnResponseModel<KaNoBuMoveResponseModel>
@@ -57,9 +57,12 @@ public async Task<MakeTurnResponseModel<KaNoBuMoveResponseModel>> MakeTurn(MakeT
5757
};
5858
}
5959

60+
from = from.Where(a => a.Item2 == from[0].Item2).ToList();
61+
var result = from[r.Next(from.Count)];
62+
6063
return new MakeTurnResponseModel<KaNoBuMoveResponseModel>
6164
{
62-
Response = from[0]
65+
Response = result.move
6366
};
6467
}
6568
private int EvaluateMove(IField mainField, KaNoBuMoveResponseModel a)
@@ -73,12 +76,13 @@ private int EvaluateMove(IField mainField, KaNoBuMoveResponseModel a)
7376
{
7477
return 8; // Attack unknown enemy
7578
}
76-
if (shipTo.FigureType == KaNoBuRules.Looser[shipFrom.FigureType])
79+
if (shipFrom.FigureType == KaNoBuFigure.FigureTypes.ShipUniversal || shipTo.FigureType == KaNoBuRules.Looser[shipFrom.FigureType])
7780
{
7881
return 10; // Attack loosing enemy
7982
}
8083
return -10; // Do not attack winning enemy
8184
}
85+
8286
var enemyNearby = false;
8387
foreach (var dir in directions)
8488
{
@@ -93,33 +97,42 @@ private int EvaluateMove(IField mainField, KaNoBuMoveResponseModel a)
9397
enemyNearby = true;
9498
}
9599
}
100+
96101
if (enemyNearby)
97102
{
98103
return 5; // Prioritize moving from enemy
99104
}
100105

101-
Point? myFlag = null;
106+
Point? closestEnemy = null;
102107
for (int x = 0; x < field.Width; x++)
103108
{
104109
for (int y = 0; y < field.Height; y++)
105110
{
106111
var p = new Point { X = x, Y = y };
107112
var ship = field[p] as KaNoBuFigure;
108-
if (ship != null && ship.PlayerId == this.myNumber && ship.FigureType == KaNoBuFigure.FigureTypes.ShipFlag)
113+
if (ship != null && ship.PlayerId != this.myNumber && ship.FigureType == KaNoBuFigure.FigureTypes.Unknown)
109114
{
110-
myFlag = p;
115+
if (closestEnemy == null)
116+
{
117+
closestEnemy = p;
118+
}
119+
else
120+
{
121+
var dst = Math.Abs(closestEnemy.Value.X - a.From.X) + Math.Abs(closestEnemy.Value.Y - a.From.Y);
122+
var newDst = Math.Abs(p.X - a.From.X) + Math.Abs(p.Y - a.From.Y);
123+
if (newDst < dst)
124+
{
125+
closestEnemy = p;
126+
}
127+
}
111128
}
112129
}
113130
}
114-
115-
if (myFlag.HasValue)
116131
{
117-
var distBefore = Math.Abs(a.From.X - myFlag.Value.X) + Math.Abs(a.From.Y - myFlag.Value.Y);
118-
var distAfter = Math.Abs(a.To.X - myFlag.Value.X) + Math.Abs(a.To.Y - myFlag.Value.Y);
119-
return distBefore > distAfter ? -3 : 3; // Prioritize moving from flag
132+
var dst = Math.Abs(closestEnemy.Value.X - a.From.X) + Math.Abs(closestEnemy.Value.Y - a.From.Y);
133+
var newDst = Math.Abs(closestEnemy.Value.X - a.To.X) + Math.Abs(closestEnemy.Value.Y - a.To.Y);
134+
return dst > newDst ? 6 : -6; // Prioritize moving to closest Unknown enemy
120135
}
121-
122-
return 0;
123136
}
124137

125138
private IEnumerable<KaNoBuMoveResponseModel> findAllMovement(IField mainField)

0 commit comments

Comments
 (0)