summaryrefslogtreecommitdiff
path: root/Entelect.BattleCity.Challenge
diff options
context:
space:
mode:
authorJustin Worthe <justin.worthe@entelect.co.za>2013-11-03 18:44:13 +0200
committerJustin Worthe <justin.worthe@entelect.co.za>2013-11-03 18:44:13 +0200
commitcaed4974a949c43b7dbcc8dbc545189aab710919 (patch)
tree092b08fb05cf9bfb87f88dc9116cb027026c5fa5 /Entelect.BattleCity.Challenge
parente7d34b5c57540efc1411be3fdeb9477373f12c9e (diff)
Updated timing to use relative time rather than absolute time for sleeping
Diffstat (limited to 'Entelect.BattleCity.Challenge')
-rw-r--r--Entelect.BattleCity.Challenge/AiAgent.cs7
-rw-r--r--Entelect.BattleCity.Challenge/GameInProgress.cs45
2 files changed, 31 insertions, 21 deletions
diff --git a/Entelect.BattleCity.Challenge/AiAgent.cs b/Entelect.BattleCity.Challenge/AiAgent.cs
index b5118be..06e6fcc 100644
--- a/Entelect.BattleCity.Challenge/AiAgent.cs
+++ b/Entelect.BattleCity.Challenge/AiAgent.cs
@@ -53,22 +53,19 @@ namespace Entelect.BattleCity.Challenge
var stuckLastTurn = checkStuckLastTurn(tank);
var enemyBase = enemy.@base;
-
- var pastMidpoint = (Math.Abs(enemyBase.y-tank.y) < board[0].Length / 2);
+
+ var pastMidpoint = (Math.Abs(enemyBase.y-tank.y) < (board[0].Length / 2));
if (stuckLastTurn && (tank.direction == ChallengeService.direction.UP || tank.direction == ChallengeService.direction.DOWN))
{
_targetX = tank.x + (pastMidpoint!=(tank.x > enemyBase.x) ? +1 : -1);
}
-
-
ChallengeService.direction chosenDirection =
tank.y != enemyBase.y ?
(
_targetX.HasValue && _targetX != tank.x ?
(
-
tank.x > _targetX ?
ChallengeService.direction.LEFT :
ChallengeService.direction.RIGHT
diff --git a/Entelect.BattleCity.Challenge/GameInProgress.cs b/Entelect.BattleCity.Challenge/GameInProgress.cs
index 27c7b64..549df5f 100644
--- a/Entelect.BattleCity.Challenge/GameInProgress.cs
+++ b/Entelect.BattleCity.Challenge/GameInProgress.cs
@@ -2,6 +2,7 @@
using System.Windows;
using System.Collections.Generic;
using System.Threading;
+using System.Diagnostics;
namespace Entelect.BattleCity.Challenge
{
@@ -19,29 +20,26 @@ namespace Entelect.BattleCity.Challenge
private AiAgent _tank1Ai;
private AiAgent _tank2Ai;
+ private Stopwatch _stepTimer;
+
public GameInProgress(ChallengeService.ChallengeClient service, ChallengeService.state?[][] board)
{
_service = service;
_board = board;
- updateGameStatus();
+ updateGameStatus(true);
_tank1Ai = new AiAgent(_me.units[0].id);
_tank2Ai = new AiAgent(_me.units[1].id);
}
-
-
public void run()
{
while (true)
{
- long nextTick = _currentState.nextTickTime.Ticks;
- long currentTick = DateTime.Now.Ticks;
-
- if (currentTick > nextTick)
+ if (_currentState.millisecondsToNextTick-_stepTimer.ElapsedMilliseconds < 0)
{
- Console.Error.WriteLine("Waiting for next tick. Current time: {0}, next game tick at: {1}", currentTick, nextTick);
+ Console.Error.WriteLine("Waiting for next tick. Milliseconds to next tick on last update: {0}. Elapsed milliseconds since then: {1}.", _currentState.millisecondsToNextTick, _stepTimer.ElapsedMilliseconds);
updateGameStatus();
continue;
}
@@ -89,17 +87,14 @@ namespace Entelect.BattleCity.Challenge
private void waitForNextTick()
{
- var nextTick = _currentState.nextTickTime.Ticks;
- var currentTick = DateTime.Now.Ticks;
-
- var sleepTime = TimeSpan.FromTicks(nextTick - currentTick)+TimeSpan.FromMilliseconds(500);
+ var sleepTime = TimeSpan.FromMilliseconds(_currentState.millisecondsToNextTick-_stepTimer.ElapsedMilliseconds+500);
if (sleepTime.Ticks < 0L)
{
Console.Error.WriteLine("ERROR: Gone passed the next tick time");
}
else
{
- Console.WriteLine("Sleeping until {1} for {0} processor ticks", sleepTime.Ticks, nextTick);
+ Console.WriteLine("Sleeping for {0}ms", sleepTime.Milliseconds);
try
{
Thread.Sleep(sleepTime);
@@ -110,13 +105,31 @@ namespace Entelect.BattleCity.Challenge
Console.Error.WriteLine("Exception message: "+ ex.Message);
}
- Console.WriteLine("Time after sleep: {0}", DateTime.Now.Ticks);
+ Console.WriteLine("Time since last update after sleep: {0}ms", _stepTimer.ElapsedMilliseconds);
}
}
- private void updateGameStatus()
+ private void updateGameStatus(bool firstTime = false)
{
- _currentState = _service.getStatus();
+ if (firstTime)
+ {
+ _currentState = _service.getStatus();
+ }
+ else
+ {
+ var previousTick = _currentState.currentTick;
+ Console.WriteLine("Updating game status. Current tick is {0}", previousTick);
+ while (previousTick == _currentState.currentTick)
+ {
+ _currentState = _service.getStatus();
+
+ if (previousTick == _currentState.currentTick)
+ {
+ Console.WriteLine("Tried to retrieve new status before next tick. Current tick is {0}. Last tick is {1}.", _currentState.currentTick, previousTick);
+ }
+ }
+ }
+ _stepTimer = Stopwatch.StartNew();
bool meFound = false;
bool enemyFound = false;