summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2013-battlecity/.gitignore4
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge.sln20
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/AiAgent.cs196
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/App.config21
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/BoardCell.cs16
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/Entelect.BattleCity.Challenge.csproj109
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/GameInProgress.cs157
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/Move.cs24
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/Program.cs27
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/Properties/AssemblyInfo.cs36
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/ChallengeService.wsdl294
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.delta.datasource10
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.game.datasource10
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse.datasource10
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.loginResponse.datasource10
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.setActionResponse.datasource10
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse.datasource10
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.state.datasource10
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Reference.cs1104
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Reference.svcmap31
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/configuration.svcinfo10
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/configuration91.svcinfo201
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/compile.bat1
-rw-r--r--2013-battlecity/Entelect.BattleCity.Challenge/start.bat1
-rw-r--r--2013-battlecity/README.md12
25 files changed, 2334 insertions, 0 deletions
diff --git a/2013-battlecity/.gitignore b/2013-battlecity/.gitignore
new file mode 100644
index 0000000..ef293be
--- /dev/null
+++ b/2013-battlecity/.gitignore
@@ -0,0 +1,4 @@
+Entelect.BattleCity.Challenge/obj
+Entelect.BattleCity.Challenge/bin
+*.suo
+*.csproj.user
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge.sln b/2013-battlecity/Entelect.BattleCity.Challenge.sln
new file mode 100644
index 0000000..2b5f5ea
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Entelect.BattleCity.Challenge", "Entelect.BattleCity.Challenge\Entelect.BattleCity.Challenge.csproj", "{B9BDD8BB-6AB8-47A9-810C-F689C5CE3259}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {B9BDD8BB-6AB8-47A9-810C-F689C5CE3259}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B9BDD8BB-6AB8-47A9-810C-F689C5CE3259}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B9BDD8BB-6AB8-47A9-810C-F689C5CE3259}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B9BDD8BB-6AB8-47A9-810C-F689C5CE3259}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/AiAgent.cs b/2013-battlecity/Entelect.BattleCity.Challenge/AiAgent.cs
new file mode 100644
index 0000000..a1ca0e5
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/AiAgent.cs
@@ -0,0 +1,196 @@
+using System;
+using System.Collections.Generic;
+
+namespace Entelect.BattleCity.Challenge
+{
+ class AiAgent
+ {
+ private int? _lastX;
+ private int? _lastY;
+ private ChallengeService.action _lastAction;
+ private bool _hasShotFromLastPosition;
+
+ private int _tankId;
+
+ private int? _targetX;
+
+ private bool _checkForOpenPathToMiddle;
+ private bool _headingToMiddle;
+
+ public AiAgent(int tankId, bool checkForOpenPathToMiddle)
+ {
+ _tankId = tankId;
+ _checkForOpenPathToMiddle = checkForOpenPathToMiddle;
+ _lastAction = ChallengeService.action.NONE;
+ _hasShotFromLastPosition = false;
+ _headingToMiddle = false;
+ }
+
+ public Move GetBestMove(ChallengeService.game game, BoardCell[][] board, ChallengeService.player me, ChallengeService.player enemy)
+ {
+ Move move = null;
+ ChallengeService.unit tank = findTankInPlayer(_tankId, me);
+
+ if (tank == null)
+ {
+ return null;
+ }
+
+ if (tank.x != _lastX || tank.y != _lastY)
+ {
+ _hasShotFromLastPosition = false;
+ }
+
+ var bulletInAir = checkIsBulletInAir(board, me, tank);
+ var stuckLastTurn = checkStuckLastTurn(tank);
+
+ var enemyBase = enemy.@base;
+
+ var pastMidpoint = (Math.Abs(enemyBase.y-tank.y) < (board[0].Length / 2));
+
+ if (stuckLastTurn && (tank.direction == ChallengeService.direction.UP || tank.direction == ChallengeService.direction.DOWN) && enemyBase.x != tank.x)
+ {
+ _targetX = tank.x + (pastMidpoint!=(tank.x > enemyBase.x) ? +1 : -1);
+ }
+
+ if (_checkForOpenPathToMiddle && !_headingToMiddle && tank.x != enemyBase.x)
+ {
+ _headingToMiddle = testPathToMiddleIsOpen(board, tank, enemyBase);
+ }
+ else if (_checkForOpenPathToMiddle && _headingToMiddle && tank.x == enemyBase.x)
+ {
+ _headingToMiddle = false;
+ }
+
+
+ ChallengeService.direction chosenDirection =
+ _headingToMiddle ?
+ (
+ tank.x > enemyBase.x ?
+ ChallengeService.direction.LEFT :
+ ChallengeService.direction.RIGHT
+ ) :
+ (
+ tank.y != enemyBase.y ?
+ (
+ _targetX.HasValue && _targetX != tank.x ?
+ (
+ tank.x > _targetX ?
+ ChallengeService.direction.LEFT :
+ ChallengeService.direction.RIGHT
+ ) :
+ (
+ 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 || _headingToMiddle)
+ {
+ move = MoveInDirection(tank.id, chosenDirection);
+ }
+ else
+ {
+ move = new Move(tank.id, ChallengeService.action.FIRE);
+ _hasShotFromLastPosition = true;
+ }
+
+ _lastX = tank.x;
+ _lastY = tank.y;
+ _lastAction = move.Action;
+
+ return move;
+ }
+
+ private bool testPathToMiddleIsOpen(BoardCell[][] board, ChallengeService.unit tank, ChallengeService.@base enemyBase)
+ {
+ var minY = tank.y - 2;
+ var maxY = tank.y + 2;
+ var minX = Math.Min(tank.x, enemyBase.x)-2;
+ var maxX = Math.Max(tank.x, enemyBase.x)+2;
+
+ bool insideRange = board.Length > maxX && board[maxX].Length > maxY && 0 <= minX && 0 <= minY;
+ if (!insideRange)
+ {
+ return false;
+ }
+
+ for (int x = minX; x <= maxX; ++x)
+ {
+ for (int y = minY; y <= maxY; ++y)
+ {
+ if (board[x][y] != BoardCell.EMPTY)
+ {
+ return false;
+ }
+
+ }
+ }
+
+ return true;
+ }
+
+ private ChallengeService.unit findTankInPlayer(int tankId, ChallengeService.player me)
+ {
+ if (me != null && me.units != null)
+ {
+ foreach (var unit in me.units)
+ {
+ if (unit.id == _tankId)
+ {
+ return unit;
+ }
+ }
+ }
+ return null;
+ }
+
+ 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);
+ }
+ }
+
+ private bool checkIsBulletInAir(BoardCell[][] board, ChallengeService.player me, ChallengeService.unit tank)
+ {
+ var bulletInAir = false;
+ if (me.bullets != null)
+ {
+ foreach (var bullet in me.bullets)
+ {
+ if (Math.Abs(bullet.x - tank.x) < board.Length / 6)
+ {
+ bulletInAir = true;
+ }
+ }
+ }
+
+ return bulletInAir;
+ }
+
+ private bool checkStuckLastTurn(ChallengeService.unit tank)
+ {
+ return !(_lastAction == ChallengeService.action.FIRE || _lastAction == ChallengeService.action.NONE)
+ && tank.x == _lastX && tank.y == _lastY
+ && _hasShotFromLastPosition;
+ }
+ }
+}
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/App.config b/2013-battlecity/Entelect.BattleCity.Challenge/App.config
new file mode 100644
index 0000000..ef162fd
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/App.config
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+ <startup>
+ <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
+ </startup>
+ <system.serviceModel>
+ <bindings>
+ <basicHttpBinding>
+ <binding name="ChallengeServiceSoapBinding" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647">
+ <readerQuotas maxDepth="32" maxStringContentLength="2147483647"
+ maxArrayLength="16348" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
+ </binding>
+ </basicHttpBinding>
+ </bindings>
+ <client>
+ <endpoint address="http://localhost:9090/ChallengePort" binding="basicHttpBinding"
+ bindingConfiguration="ChallengeServiceSoapBinding" contract="ChallengeService.Challenge"
+ name="ChallengePort" />
+ </client>
+ </system.serviceModel>
+</configuration> \ No newline at end of file
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/BoardCell.cs b/2013-battlecity/Entelect.BattleCity.Challenge/BoardCell.cs
new file mode 100644
index 0000000..bd7063e
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/BoardCell.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Entelect.BattleCity.Challenge
+{
+ public enum BoardCell
+ {
+ EMPTY,
+ WALL,
+ BASE,
+ OUT_OF_BOUNDS
+ }
+}
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/Entelect.BattleCity.Challenge.csproj b/2013-battlecity/Entelect.BattleCity.Challenge/Entelect.BattleCity.Challenge.csproj
new file mode 100644
index 0000000..0a8cb97
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/Entelect.BattleCity.Challenge.csproj
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{B9BDD8BB-6AB8-47A9-810C-F689C5CE3259}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>Entelect.BattleCity.Challenge</RootNamespace>
+ <AssemblyName>Entelect.BattleCity.Challenge</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <PlatformTarget>AnyCPU</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Runtime.Serialization" />
+ <Reference Include="System.ServiceModel" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="AiAgent.cs" />
+ <Compile Include="BoardCell.cs" />
+ <Compile Include="GameInProgress.cs" />
+ <Compile Include="Move.cs" />
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Service References\ChallengeService\Reference.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>Reference.svcmap</DependentUpon>
+ </Compile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="App.config" />
+ <None Include="Service References\ChallengeService\ChallengeService.wsdl" />
+ <None Include="Service References\ChallengeService\Entelect.BattleCity.Challenge.ChallengeService.delta.datasource">
+ <DependentUpon>Reference.svcmap</DependentUpon>
+ </None>
+ <None Include="Service References\ChallengeService\Entelect.BattleCity.Challenge.ChallengeService.game.datasource">
+ <DependentUpon>Reference.svcmap</DependentUpon>
+ </None>
+ <None Include="Service References\ChallengeService\Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse.datasource">
+ <DependentUpon>Reference.svcmap</DependentUpon>
+ </None>
+ <None Include="Service References\ChallengeService\Entelect.BattleCity.Challenge.ChallengeService.loginResponse.datasource">
+ <DependentUpon>Reference.svcmap</DependentUpon>
+ </None>
+ <None Include="Service References\ChallengeService\Entelect.BattleCity.Challenge.ChallengeService.setActionResponse.datasource">
+ <DependentUpon>Reference.svcmap</DependentUpon>
+ </None>
+ <None Include="Service References\ChallengeService\Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse.datasource">
+ <DependentUpon>Reference.svcmap</DependentUpon>
+ </None>
+ <None Include="Service References\ChallengeService\Entelect.BattleCity.Challenge.ChallengeService.state.datasource">
+ <DependentUpon>Reference.svcmap</DependentUpon>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <WCFMetadata Include="Service References\" />
+ </ItemGroup>
+ <ItemGroup>
+ <WCFMetadataStorage Include="Service References\ChallengeService\" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Service References\ChallengeService\configuration91.svcinfo" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Service References\ChallengeService\configuration.svcinfo" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="Service References\ChallengeService\Reference.svcmap">
+ <Generator>WCF Proxy Generator</Generator>
+ <LastGenOutput>Reference.cs</LastGenOutput>
+ </None>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/GameInProgress.cs b/2013-battlecity/Entelect.BattleCity.Challenge/GameInProgress.cs
new file mode 100644
index 0000000..23a6550
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/GameInProgress.cs
@@ -0,0 +1,157 @@
+using System;
+using System.Windows;
+using System.Collections.Generic;
+using System.Threading;
+using System.Diagnostics;
+using System.Text;
+
+namespace Entelect.BattleCity.Challenge
+{
+ public class GameInProgress
+ {
+ private static ChallengeService.action _nullAction = ChallengeService.action.NONE;
+
+ private ChallengeService.ChallengeClient _service;
+ private ChallengeService.game _currentState;
+ private ChallengeService.player _me;
+ private ChallengeService.player _enemy;
+
+ private BoardCell[][] _board;
+
+ private AiAgent _tank1Ai;
+ private AiAgent _tank2Ai;
+
+ private Stopwatch _stepTimer;
+
+ public GameInProgress(ChallengeService.ChallengeClient service, ChallengeService.state?[][] board)
+ {
+ _service = service;
+ _board = getBoardCellArrayFromServiceStates(board);
+
+ updateGameStatus(true);
+ _board[_me.@base.x][_me.@base.y] = BoardCell.BASE;
+ _board[_enemy.@base.x][_enemy.@base.y] = BoardCell.BASE;
+
+ _tank1Ai = new AiAgent(_me.units[0].id, false);
+ _tank2Ai = new AiAgent(_me.units[1].id, true);
+ }
+
+
+
+ public void run()
+ {
+ while (true)
+ {
+ if (_currentState.millisecondsToNextTick-_stepTimer.ElapsedMilliseconds < 0)
+ {
+ updateGameStatus();
+ continue;
+ }
+ makeNextMove();
+ waitForNextTick();
+
+ updateGameStatus();
+ }
+ }
+
+ private void makeNextMove()
+ {
+ Move tank1Move = _tank1Ai.GetBestMove(_currentState, _board, _me, _enemy);
+ Move tank2Move = _tank2Ai.GetBestMove(_currentState, _board, _me, _enemy);
+
+ sendMovesToService(tank1Move, tank2Move);
+ }
+
+ private void sendMovesToService(Move tank1Move, Move tank2Move)
+ {
+ if (tank1Move != null && tank2Move != null)
+ {
+ _service.setActions(tank1Move.Action, tank2Move.Action);
+ }
+ else if (tank1Move != null)
+ {
+ _service.setAction(tank1Move.Tank, tank1Move.Action);
+ }
+ else if (tank2Move != null)
+ {
+ _service.setAction(tank2Move.Tank, tank2Move.Action);
+ }
+ }
+
+ private void waitForNextTick()
+ {
+ var sleepTime = TimeSpan.FromMilliseconds(_currentState.millisecondsToNextTick-_stepTimer.ElapsedMilliseconds+500);
+ if (sleepTime.Ticks > 0L)
+ {
+ try
+ {
+ Thread.Sleep(sleepTime);
+ }
+ catch (Exception ex)
+ {
+ }
+ }
+ }
+
+ private void updateGameStatus(bool firstTime = false)
+ {
+ if (firstTime)
+ {
+ _currentState = _service.getStatus();
+ }
+ else
+ {
+ var previousTick = _currentState.currentTick;
+ while (previousTick == _currentState.currentTick)
+ {
+ _currentState = _service.getStatus();
+ }
+ }
+ _stepTimer = Stopwatch.StartNew();
+
+ foreach (ChallengeService.player player in _currentState.players)
+ {
+ if (player.name.Equals(_currentState.playerName))
+ {
+ _me = player;
+ }
+ else
+ {
+ _enemy = player;
+ }
+ }
+ }
+
+ private BoardCell[][] getBoardCellArrayFromServiceStates(ChallengeService.state?[][] stateBoard)
+ {
+ BoardCell[][] newBoard = new BoardCell[stateBoard.Length][];
+ for (int x = 0; x < stateBoard.Length; ++x)
+ {
+ newBoard[x] = new BoardCell[stateBoard[x].Length];
+ for (int y = 0; y < stateBoard[x].Length; ++y)
+ {
+ switch (stateBoard[x][y])
+ {
+ case null:
+ case ChallengeService.state.NONE:
+ case ChallengeService.state.EMPTY:
+ newBoard[x][y] = BoardCell.EMPTY;
+ break;
+ case ChallengeService.state.FULL:
+ newBoard[x][y] = BoardCell.WALL;
+ break;
+ case ChallengeService.state.OUT_OF_BOUNDS:
+ newBoard[x][y] = BoardCell.OUT_OF_BOUNDS;
+ break;
+ default:
+ newBoard[x][y] = BoardCell.OUT_OF_BOUNDS;
+ break;
+ }
+
+ }
+ }
+
+ return newBoard;
+ }
+ }
+}
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/Move.cs b/2013-battlecity/Entelect.BattleCity.Challenge/Move.cs
new file mode 100644
index 0000000..7fba664
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/Move.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace Entelect.BattleCity.Challenge
+{
+ class Move
+ {
+ public int Tank { get; private set; }
+ public ChallengeService.action Action { get; private set; }
+
+ public Move(int tank, ChallengeService.action action)
+ {
+ Tank = tank;
+ Action = action;
+ }
+
+ public override string ToString()
+ {
+ return string.Format("Tank {0}: {1}", Tank, Action.ToString());
+ }
+ }
+}
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/Program.cs b/2013-battlecity/Entelect.BattleCity.Challenge/Program.cs
new file mode 100644
index 0000000..376807a
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/Program.cs
@@ -0,0 +1,27 @@
+using System;
+using System.ServiceModel;
+
+namespace Entelect.BattleCity.Challenge
+{
+ class Program
+ {
+ static void Main(string[] args)
+ {
+ try
+ {
+ var endpointConfigurationName = "ChallengePort";
+ var address = new EndpointAddress(args[0]);
+ var service = new ChallengeService.ChallengeClient(endpointConfigurationName, address);
+ var board = service.login();
+
+ var game = new GameInProgress(service, board);
+ game.run();
+ }
+ catch (Exception ex)
+ {
+ Console.Error.WriteLine("Uncaught exception thrown. Exiting.");
+ Console.Error.WriteLine(ex.StackTrace.ToString());
+ }
+ }
+ }
+}
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/Properties/AssemblyInfo.cs b/2013-battlecity/Entelect.BattleCity.Challenge/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..97397b4
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Entelect.BattleCity.Challenge")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("Entelect.BattleCity.Challenge")]
+[assembly: AssemblyCopyright("Copyright © Microsoft 2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("8e9e513d-3232-4b92-83dd-13ec54131857")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/ChallengeService.wsdl b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/ChallengeService.wsdl
new file mode 100644
index 0000000..0d7d4a9
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/ChallengeService.wsdl
@@ -0,0 +1,294 @@
+<?xml version="1.0" encoding="utf-8"?>
+<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://challenge.entelect.co.za/" name="ChallengeService" targetNamespace="http://challenge.entelect.co.za/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+ <wsdl:types>
+ <xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://challenge.entelect.co.za/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+ <xs:element name="getStatus" type="tns:getStatus" />
+ <xs:element name="getStatusResponse" type="tns:getStatusResponse" />
+ <xs:element name="login" type="tns:login" />
+ <xs:element name="loginResponse" type="tns:loginResponse" />
+ <xs:element name="setAction" type="tns:setAction" />
+ <xs:element name="setActionResponse" type="tns:setActionResponse" />
+ <xs:element name="setActions" type="tns:setActions" />
+ <xs:element name="setActionsResponse" type="tns:setActionsResponse" />
+ <xs:complexType name="getStatus">
+ <xs:sequence />
+ </xs:complexType>
+ <xs:complexType name="getStatusResponse">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="return" type="tns:game" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="game">
+ <xs:sequence>
+ <xs:element name="currentTick" type="xs:int" />
+ <xs:element minOccurs="0" name="events" type="tns:events" />
+ <xs:element name="millisecondsToNextTick" type="xs:long" />
+ <xs:element minOccurs="0" name="nextTickTime" type="xs:dateTime" />
+ <xs:element minOccurs="0" name="playerName" type="xs:string" />
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="players" nillable="true" type="tns:player" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="events">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="blockEvents" nillable="true" type="tns:blockEvent" />
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="unitEvents" nillable="true" type="tns:unitEvent" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="blockEvent">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="newState" type="tns:state" />
+ <xs:element minOccurs="0" name="point" type="tns:point" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="point">
+ <xs:sequence>
+ <xs:element name="x" type="xs:int" />
+ <xs:element name="y" type="xs:int" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="unitEvent">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="bullet" type="tns:bullet" />
+ <xs:element name="tickTime" type="xs:int" />
+ <xs:element minOccurs="0" name="unit" type="tns:unit" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="bullet">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="direction" type="tns:direction" />
+ <xs:element name="id" type="xs:int" />
+ <xs:element name="x" type="xs:int" />
+ <xs:element name="y" type="xs:int" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="unit">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="action" type="tns:action" />
+ <xs:element minOccurs="0" name="direction" type="tns:direction" />
+ <xs:element name="id" type="xs:int" />
+ <xs:element name="x" type="xs:int" />
+ <xs:element name="y" type="xs:int" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="player">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="base" type="tns:base" />
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="bullets" nillable="true" type="tns:bullet" />
+ <xs:element minOccurs="0" name="name" type="xs:string" />
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="units" nillable="true" type="tns:unit" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="base">
+ <xs:sequence>
+ <xs:element name="x" type="xs:int" />
+ <xs:element name="y" type="xs:int" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="abstractCollection" abstract="true">
+ <xs:sequence />
+ </xs:complexType>
+ <xs:complexType name="abstractList" abstract="true">
+ <xs:complexContent mixed="false">
+ <xs:extension base="tns:abstractCollection">
+ <xs:sequence />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="arrayList">
+ <xs:complexContent mixed="false">
+ <xs:extension base="tns:abstractList">
+ <xs:sequence />
+ </xs:extension>
+ </xs:complexContent>
+ </xs:complexType>
+ <xs:complexType name="setAction">
+ <xs:sequence>
+ <xs:element name="arg0" type="xs:int" />
+ <xs:element minOccurs="0" name="arg1" type="tns:action" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="setActionResponse">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="return" type="tns:delta" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="delta">
+ <xs:sequence>
+ <xs:element name="millisecondsToNextTick" type="xs:long" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="login">
+ <xs:sequence />
+ </xs:complexType>
+ <xs:complexType name="loginResponse">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="return" type="tns:board" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="board">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="states" nillable="true" type="tns:stateArray" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="setActions">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="arg0" type="tns:action" />
+ <xs:element minOccurs="0" name="arg1" type="tns:action" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType name="setActionsResponse">
+ <xs:sequence>
+ <xs:element minOccurs="0" name="return" type="tns:delta" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="state">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="FULL" />
+ <xs:enumeration value="EMPTY" />
+ <xs:enumeration value="OUT_OF_BOUNDS" />
+ <xs:enumeration value="NONE" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="direction">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="NONE" />
+ <xs:enumeration value="UP" />
+ <xs:enumeration value="DOWN" />
+ <xs:enumeration value="LEFT" />
+ <xs:enumeration value="RIGHT" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="action">
+ <xs:restriction base="xs:string">
+ <xs:enumeration value="NONE" />
+ <xs:enumeration value="UP" />
+ <xs:enumeration value="DOWN" />
+ <xs:enumeration value="LEFT" />
+ <xs:enumeration value="RIGHT" />
+ <xs:enumeration value="FIRE" />
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="stateArray" final="#all">
+ <xs:sequence>
+ <xs:element minOccurs="0" maxOccurs="unbounded" name="item" nillable="true" type="tns:state" />
+ </xs:sequence>
+ </xs:complexType>
+ <xs:element name="EndOfGameException" type="tns:EndOfGameException" />
+ <xs:complexType name="EndOfGameException">
+ <xs:sequence />
+ </xs:complexType>
+ <xs:element name="NoBlameException" type="tns:NoBlameException" />
+ <xs:complexType name="NoBlameException">
+ <xs:sequence />
+ </xs:complexType>
+ </xs:schema>
+ </wsdl:types>
+ <wsdl:message name="setAction">
+ <wsdl:part name="parameters" element="tns:setAction" />
+ </wsdl:message>
+ <wsdl:message name="EndOfGameException">
+ <wsdl:part name="EndOfGameException" element="tns:EndOfGameException" />
+ </wsdl:message>
+ <wsdl:message name="setActions">
+ <wsdl:part name="parameters" element="tns:setActions" />
+ </wsdl:message>
+ <wsdl:message name="login">
+ <wsdl:part name="parameters" element="tns:login" />
+ </wsdl:message>
+ <wsdl:message name="setActionsResponse">
+ <wsdl:part name="parameters" element="tns:setActionsResponse" />
+ </wsdl:message>
+ <wsdl:message name="setActionResponse">
+ <wsdl:part name="parameters" element="tns:setActionResponse" />
+ </wsdl:message>
+ <wsdl:message name="loginResponse">
+ <wsdl:part name="parameters" element="tns:loginResponse" />
+ </wsdl:message>
+ <wsdl:message name="NoBlameException">
+ <wsdl:part name="NoBlameException" element="tns:NoBlameException" />
+ </wsdl:message>
+ <wsdl:message name="getStatus">
+ <wsdl:part name="parameters" element="tns:getStatus" />
+ </wsdl:message>
+ <wsdl:message name="getStatusResponse">
+ <wsdl:part name="parameters" element="tns:getStatusResponse" />
+ </wsdl:message>
+ <wsdl:portType name="Challenge">
+ <wsdl:operation name="getStatus">
+ <wsdl:input name="getStatus" message="tns:getStatus" />
+ <wsdl:output name="getStatusResponse" message="tns:getStatusResponse" />
+ </wsdl:operation>
+ <wsdl:operation name="setAction">
+ <wsdl:input name="setAction" message="tns:setAction" />
+ <wsdl:output name="setActionResponse" message="tns:setActionResponse" />
+ <wsdl:fault name="EndOfGameException" message="tns:EndOfGameException" />
+ </wsdl:operation>
+ <wsdl:operation name="login">
+ <wsdl:input name="login" message="tns:login" />
+ <wsdl:output name="loginResponse" message="tns:loginResponse" />
+ <wsdl:fault name="NoBlameException" message="tns:NoBlameException" />
+ <wsdl:fault name="EndOfGameException" message="tns:EndOfGameException" />
+ </wsdl:operation>
+ <wsdl:operation name="setActions">
+ <wsdl:input name="setActions" message="tns:setActions" />
+ <wsdl:output name="setActionsResponse" message="tns:setActionsResponse" />
+ <wsdl:fault name="EndOfGameException" message="tns:EndOfGameException" />
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="ChallengeServiceSoapBinding" type="tns:Challenge">
+ <soap:binding transport="http://schemas.xmlsoap.org/soap/http" />
+ <wsdl:operation name="getStatus">
+ <soap:operation soapAction="" style="document" />
+ <wsdl:input name="getStatus">
+ <soap:body use="literal" />
+ </wsdl:input>
+ <wsdl:output name="getStatusResponse">
+ <soap:body use="literal" />
+ </wsdl:output>
+ </wsdl:operation>
+ <wsdl:operation name="setAction">
+ <soap:operation soapAction="" style="document" />
+ <wsdl:input name="setAction">
+ <soap:body use="literal" />
+ </wsdl:input>
+ <wsdl:output name="setActionResponse">
+ <soap:body use="literal" />
+ </wsdl:output>
+ <wsdl:fault name="EndOfGameException">
+ <soap:fault use="literal" name="EndOfGameException" namespace="" />
+ </wsdl:fault>
+ </wsdl:operation>
+ <wsdl:operation name="login">
+ <soap:operation soapAction="" style="document" />
+ <wsdl:input name="login">
+ <soap:body use="literal" />
+ </wsdl:input>
+ <wsdl:output name="loginResponse">
+ <soap:body use="literal" />
+ </wsdl:output>
+ <wsdl:fault name="NoBlameException">
+ <soap:fault use="literal" name="NoBlameException" namespace="" />
+ </wsdl:fault>
+ <wsdl:fault name="EndOfGameException">
+ <soap:fault use="literal" name="EndOfGameException" namespace="" />
+ </wsdl:fault>
+ </wsdl:operation>
+ <wsdl:operation name="setActions">
+ <soap:operation soapAction="" style="document" />
+ <wsdl:input name="setActions">
+ <soap:body use="literal" />
+ </wsdl:input>
+ <wsdl:output name="setActionsResponse">
+ <soap:body use="literal" />
+ </wsdl:output>
+ <wsdl:fault name="EndOfGameException">
+ <soap:fault use="literal" name="EndOfGameException" namespace="" />
+ </wsdl:fault>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="ChallengeService">
+ <wsdl:port name="ChallengePort" binding="tns:ChallengeServiceSoapBinding">
+ <soap:address location="http://localhost:9090/ChallengePort" />
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions> \ No newline at end of file
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.delta.datasource b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.delta.datasource
new file mode 100644
index 0000000..ba30593
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.delta.datasource
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is automatically generated by Visual Studio .Net. It is
+ used to store generic object data source configuration information.
+ Renaming the file extension or editing the content of this file may
+ cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="delta" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+ <TypeInfo>Entelect.BattleCity.Challenge.ChallengeService.delta, Service References.ChallengeService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource> \ No newline at end of file
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.game.datasource b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.game.datasource
new file mode 100644
index 0000000..295ea08
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.game.datasource
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is automatically generated by Visual Studio .Net. It is
+ used to store generic object data source configuration information.
+ Renaming the file extension or editing the content of this file may
+ cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="game" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+ <TypeInfo>Entelect.BattleCity.Challenge.ChallengeService.game, Service References.ChallengeService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource> \ No newline at end of file
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse.datasource b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse.datasource
new file mode 100644
index 0000000..6701b3e
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse.datasource
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is automatically generated by Visual Studio .Net. It is
+ used to store generic object data source configuration information.
+ Renaming the file extension or editing the content of this file may
+ cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="getStatusResponse" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+ <TypeInfo>Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse, Service References.ChallengeService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource> \ No newline at end of file
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.loginResponse.datasource b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.loginResponse.datasource
new file mode 100644
index 0000000..edbecd4
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.loginResponse.datasource
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is automatically generated by Visual Studio .Net. It is
+ used to store generic object data source configuration information.
+ Renaming the file extension or editing the content of this file may
+ cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="loginResponse" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+ <TypeInfo>Entelect.BattleCity.Challenge.ChallengeService.loginResponse, Service References.ChallengeService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource> \ No newline at end of file
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.setActionResponse.datasource b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.setActionResponse.datasource
new file mode 100644
index 0000000..4992e1b
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.setActionResponse.datasource
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is automatically generated by Visual Studio .Net. It is
+ used to store generic object data source configuration information.
+ Renaming the file extension or editing the content of this file may
+ cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="setActionResponse" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+ <TypeInfo>Entelect.BattleCity.Challenge.ChallengeService.setActionResponse, Service References.ChallengeService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource> \ No newline at end of file
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse.datasource b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse.datasource
new file mode 100644
index 0000000..4ea2b14
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse.datasource
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is automatically generated by Visual Studio .Net. It is
+ used to store generic object data source configuration information.
+ Renaming the file extension or editing the content of this file may
+ cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="setActionsResponse" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+ <TypeInfo>Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse, Service References.ChallengeService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource> \ No newline at end of file
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.state.datasource b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.state.datasource
new file mode 100644
index 0000000..caa94f3
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Entelect.BattleCity.Challenge.ChallengeService.state.datasource
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ This file is automatically generated by Visual Studio .Net. It is
+ used to store generic object data source configuration information.
+ Renaming the file extension or editing the content of this file may
+ cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="state" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+ <TypeInfo>Entelect.BattleCity.Challenge.ChallengeService.state, Service References.ChallengeService.Reference.cs, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource> \ No newline at end of file
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Reference.cs b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Reference.cs
new file mode 100644
index 0000000..f7fda50
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Reference.cs
@@ -0,0 +1,1104 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.18051
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Entelect.BattleCity.Challenge.ChallengeService {
+
+
+ /// <remarks/>
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+ [System.SerializableAttribute()]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+ public partial class EndOfGameException : object, System.ComponentModel.INotifyPropertyChanged {
+
+ public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+ protected void RaisePropertyChanged(string propertyName) {
+ System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+ if ((propertyChanged != null)) {
+ propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+ }
+ }
+ }
+
+ /// <remarks/>
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+ [System.SerializableAttribute()]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+ public partial class delta : object, System.ComponentModel.INotifyPropertyChanged {
+
+ private long millisecondsToNextTickField;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
+ public long millisecondsToNextTick {
+ get {
+ return this.millisecondsToNextTickField;
+ }
+ set {
+ this.millisecondsToNextTickField = value;
+ this.RaisePropertyChanged("millisecondsToNextTick");
+ }
+ }
+
+ public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+ protected void RaisePropertyChanged(string propertyName) {
+ System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+ if ((propertyChanged != null)) {
+ propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+ }
+ }
+ }
+
+ /// <remarks/>
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+ [System.SerializableAttribute()]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+ public partial class @base : object, System.ComponentModel.INotifyPropertyChanged {
+
+ private int xField;
+
+ private int yField;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
+ public int x {
+ get {
+ return this.xField;
+ }
+ set {
+ this.xField = value;
+ this.RaisePropertyChanged("x");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
+ public int y {
+ get {
+ return this.yField;
+ }
+ set {
+ this.yField = value;
+ this.RaisePropertyChanged("y");
+ }
+ }
+
+ public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+ protected void RaisePropertyChanged(string propertyName) {
+ System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+ if ((propertyChanged != null)) {
+ propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+ }
+ }
+ }
+
+ /// <remarks/>
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+ [System.SerializableAttribute()]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+ public partial class player : object, System.ComponentModel.INotifyPropertyChanged {
+
+ private @base baseField;
+
+ private bullet[] bulletsField;
+
+ private string nameField;
+
+ private unit[] unitsField;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
+ public @base @base {
+ get {
+ return this.baseField;
+ }
+ set {
+ this.baseField = value;
+ this.RaisePropertyChanged("base");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("bullets", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true, Order=1)]
+ public bullet[] bullets {
+ get {
+ return this.bulletsField;
+ }
+ set {
+ this.bulletsField = value;
+ this.RaisePropertyChanged("bullets");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=2)]
+ public string name {
+ get {
+ return this.nameField;
+ }
+ set {
+ this.nameField = value;
+ this.RaisePropertyChanged("name");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("units", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true, Order=3)]
+ public unit[] units {
+ get {
+ return this.unitsField;
+ }
+ set {
+ this.unitsField = value;
+ this.RaisePropertyChanged("units");
+ }
+ }
+
+ public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+ protected void RaisePropertyChanged(string propertyName) {
+ System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+ if ((propertyChanged != null)) {
+ propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+ }
+ }
+ }
+
+ /// <remarks/>
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+ [System.SerializableAttribute()]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+ public partial class bullet : object, System.ComponentModel.INotifyPropertyChanged {
+
+ private direction directionField;
+
+ private bool directionFieldSpecified;
+
+ private int idField;
+
+ private int xField;
+
+ private int yField;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
+ public direction direction {
+ get {
+ return this.directionField;
+ }
+ set {
+ this.directionField = value;
+ this.RaisePropertyChanged("direction");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ public bool directionSpecified {
+ get {
+ return this.directionFieldSpecified;
+ }
+ set {
+ this.directionFieldSpecified = value;
+ this.RaisePropertyChanged("directionSpecified");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
+ public int id {
+ get {
+ return this.idField;
+ }
+ set {
+ this.idField = value;
+ this.RaisePropertyChanged("id");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=2)]
+ public int x {
+ get {
+ return this.xField;
+ }
+ set {
+ this.xField = value;
+ this.RaisePropertyChanged("x");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=3)]
+ public int y {
+ get {
+ return this.yField;
+ }
+ set {
+ this.yField = value;
+ this.RaisePropertyChanged("y");
+ }
+ }
+
+ public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+ protected void RaisePropertyChanged(string propertyName) {
+ System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+ if ((propertyChanged != null)) {
+ propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+ }
+ }
+ }
+
+ /// <remarks/>
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+ [System.SerializableAttribute()]
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+ public enum direction {
+
+ /// <remarks/>
+ NONE,
+
+ /// <remarks/>
+ UP,
+
+ /// <remarks/>
+ DOWN,
+
+ /// <remarks/>
+ LEFT,
+
+ /// <remarks/>
+ RIGHT,
+ }
+
+ /// <remarks/>
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+ [System.SerializableAttribute()]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+ public partial class unit : object, System.ComponentModel.INotifyPropertyChanged {
+
+ private action actionField;
+
+ private bool actionFieldSpecified;
+
+ private direction directionField;
+
+ private bool directionFieldSpecified;
+
+ private int idField;
+
+ private int xField;
+
+ private int yField;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
+ public action action {
+ get {
+ return this.actionField;
+ }
+ set {
+ this.actionField = value;
+ this.RaisePropertyChanged("action");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ public bool actionSpecified {
+ get {
+ return this.actionFieldSpecified;
+ }
+ set {
+ this.actionFieldSpecified = value;
+ this.RaisePropertyChanged("actionSpecified");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
+ public direction direction {
+ get {
+ return this.directionField;
+ }
+ set {
+ this.directionField = value;
+ this.RaisePropertyChanged("direction");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ public bool directionSpecified {
+ get {
+ return this.directionFieldSpecified;
+ }
+ set {
+ this.directionFieldSpecified = value;
+ this.RaisePropertyChanged("directionSpecified");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=2)]
+ public int id {
+ get {
+ return this.idField;
+ }
+ set {
+ this.idField = value;
+ this.RaisePropertyChanged("id");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=3)]
+ public int x {
+ get {
+ return this.xField;
+ }
+ set {
+ this.xField = value;
+ this.RaisePropertyChanged("x");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=4)]
+ public int y {
+ get {
+ return this.yField;
+ }
+ set {
+ this.yField = value;
+ this.RaisePropertyChanged("y");
+ }
+ }
+
+ public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+ protected void RaisePropertyChanged(string propertyName) {
+ System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+ if ((propertyChanged != null)) {
+ propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+ }
+ }
+ }
+
+ /// <remarks/>
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+ [System.SerializableAttribute()]
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+ public enum action {
+
+ /// <remarks/>
+ NONE,
+
+ /// <remarks/>
+ UP,
+
+ /// <remarks/>
+ DOWN,
+
+ /// <remarks/>
+ LEFT,
+
+ /// <remarks/>
+ RIGHT,
+
+ /// <remarks/>
+ FIRE,
+ }
+
+ /// <remarks/>
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+ [System.SerializableAttribute()]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+ public partial class unitEvent : object, System.ComponentModel.INotifyPropertyChanged {
+
+ private bullet bulletField;
+
+ private int tickTimeField;
+
+ private unit unitField;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
+ public bullet bullet {
+ get {
+ return this.bulletField;
+ }
+ set {
+ this.bulletField = value;
+ this.RaisePropertyChanged("bullet");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
+ public int tickTime {
+ get {
+ return this.tickTimeField;
+ }
+ set {
+ this.tickTimeField = value;
+ this.RaisePropertyChanged("tickTime");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=2)]
+ public unit unit {
+ get {
+ return this.unitField;
+ }
+ set {
+ this.unitField = value;
+ this.RaisePropertyChanged("unit");
+ }
+ }
+
+ public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+ protected void RaisePropertyChanged(string propertyName) {
+ System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+ if ((propertyChanged != null)) {
+ propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+ }
+ }
+ }
+
+ /// <remarks/>
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+ [System.SerializableAttribute()]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+ public partial class point : object, System.ComponentModel.INotifyPropertyChanged {
+
+ private int xField;
+
+ private int yField;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
+ public int x {
+ get {
+ return this.xField;
+ }
+ set {
+ this.xField = value;
+ this.RaisePropertyChanged("x");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
+ public int y {
+ get {
+ return this.yField;
+ }
+ set {
+ this.yField = value;
+ this.RaisePropertyChanged("y");
+ }
+ }
+
+ public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+ protected void RaisePropertyChanged(string propertyName) {
+ System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+ if ((propertyChanged != null)) {
+ propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+ }
+ }
+ }
+
+ /// <remarks/>
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+ [System.SerializableAttribute()]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+ public partial class blockEvent : object, System.ComponentModel.INotifyPropertyChanged {
+
+ private state newStateField;
+
+ private bool newStateFieldSpecified;
+
+ private point pointField;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
+ public state newState {
+ get {
+ return this.newStateField;
+ }
+ set {
+ this.newStateField = value;
+ this.RaisePropertyChanged("newState");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ public bool newStateSpecified {
+ get {
+ return this.newStateFieldSpecified;
+ }
+ set {
+ this.newStateFieldSpecified = value;
+ this.RaisePropertyChanged("newStateSpecified");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
+ public point point {
+ get {
+ return this.pointField;
+ }
+ set {
+ this.pointField = value;
+ this.RaisePropertyChanged("point");
+ }
+ }
+
+ public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+ protected void RaisePropertyChanged(string propertyName) {
+ System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+ if ((propertyChanged != null)) {
+ propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+ }
+ }
+ }
+
+ /// <remarks/>
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+ [System.SerializableAttribute()]
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+ public enum state {
+
+ /// <remarks/>
+ FULL,
+
+ /// <remarks/>
+ EMPTY,
+
+ /// <remarks/>
+ OUT_OF_BOUNDS,
+
+ /// <remarks/>
+ NONE,
+ }
+
+ /// <remarks/>
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+ [System.SerializableAttribute()]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+ public partial class events : object, System.ComponentModel.INotifyPropertyChanged {
+
+ private blockEvent[] blockEventsField;
+
+ private unitEvent[] unitEventsField;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("blockEvents", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true, Order=0)]
+ public blockEvent[] blockEvents {
+ get {
+ return this.blockEventsField;
+ }
+ set {
+ this.blockEventsField = value;
+ this.RaisePropertyChanged("blockEvents");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("unitEvents", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true, Order=1)]
+ public unitEvent[] unitEvents {
+ get {
+ return this.unitEventsField;
+ }
+ set {
+ this.unitEventsField = value;
+ this.RaisePropertyChanged("unitEvents");
+ }
+ }
+
+ public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+ protected void RaisePropertyChanged(string propertyName) {
+ System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+ if ((propertyChanged != null)) {
+ propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+ }
+ }
+ }
+
+ /// <remarks/>
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+ [System.SerializableAttribute()]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+ public partial class game : object, System.ComponentModel.INotifyPropertyChanged {
+
+ private int currentTickField;
+
+ private events eventsField;
+
+ private long millisecondsToNextTickField;
+
+ private System.DateTime nextTickTimeField;
+
+ private bool nextTickTimeFieldSpecified;
+
+ private string playerNameField;
+
+ private player[] playersField;
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=0)]
+ public int currentTick {
+ get {
+ return this.currentTickField;
+ }
+ set {
+ this.currentTickField = value;
+ this.RaisePropertyChanged("currentTick");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=1)]
+ public events events {
+ get {
+ return this.eventsField;
+ }
+ set {
+ this.eventsField = value;
+ this.RaisePropertyChanged("events");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=2)]
+ public long millisecondsToNextTick {
+ get {
+ return this.millisecondsToNextTickField;
+ }
+ set {
+ this.millisecondsToNextTickField = value;
+ this.RaisePropertyChanged("millisecondsToNextTick");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=3)]
+ public System.DateTime nextTickTime {
+ get {
+ return this.nextTickTimeField;
+ }
+ set {
+ this.nextTickTimeField = value;
+ this.RaisePropertyChanged("nextTickTime");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlIgnoreAttribute()]
+ public bool nextTickTimeSpecified {
+ get {
+ return this.nextTickTimeFieldSpecified;
+ }
+ set {
+ this.nextTickTimeFieldSpecified = value;
+ this.RaisePropertyChanged("nextTickTimeSpecified");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, Order=4)]
+ public string playerName {
+ get {
+ return this.playerNameField;
+ }
+ set {
+ this.playerNameField = value;
+ this.RaisePropertyChanged("playerName");
+ }
+ }
+
+ /// <remarks/>
+ [System.Xml.Serialization.XmlElementAttribute("players", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, IsNullable=true, Order=5)]
+ public player[] players {
+ get {
+ return this.playersField;
+ }
+ set {
+ this.playersField = value;
+ this.RaisePropertyChanged("players");
+ }
+ }
+
+ public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+ protected void RaisePropertyChanged(string propertyName) {
+ System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+ if ((propertyChanged != null)) {
+ propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+ }
+ }
+ }
+
+ /// <remarks/>
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.18053")]
+ [System.SerializableAttribute()]
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.ComponentModel.DesignerCategoryAttribute("code")]
+ [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://challenge.entelect.co.za/")]
+ public partial class NoBlameException : object, System.ComponentModel.INotifyPropertyChanged {
+
+ public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
+
+ protected void RaisePropertyChanged(string propertyName) {
+ System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
+ if ((propertyChanged != null)) {
+ propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
+ }
+ }
+ }
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+ [System.ServiceModel.ServiceContractAttribute(Namespace="http://challenge.entelect.co.za/", ConfigurationName="ChallengeService.Challenge")]
+ public interface Challenge {
+
+ // CODEGEN: Parameter 'return' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'.
+ [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ [return: System.ServiceModel.MessageParameterAttribute(Name="return")]
+ Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse getStatus(Entelect.BattleCity.Challenge.ChallengeService.getStatus request);
+
+ [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
+ System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse> getStatusAsync(Entelect.BattleCity.Challenge.ChallengeService.getStatus request);
+
+ // CODEGEN: Parameter 'return' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'.
+ [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
+ [System.ServiceModel.FaultContractAttribute(typeof(Entelect.BattleCity.Challenge.ChallengeService.EndOfGameException), Action="", Name="EndOfGameException")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ [return: System.ServiceModel.MessageParameterAttribute(Name="return")]
+ Entelect.BattleCity.Challenge.ChallengeService.setActionResponse setAction(Entelect.BattleCity.Challenge.ChallengeService.setAction request);
+
+ [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
+ System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.setActionResponse> setActionAsync(Entelect.BattleCity.Challenge.ChallengeService.setAction request);
+
+ // CODEGEN: Parameter 'return' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlArrayAttribute'.
+ [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
+ [System.ServiceModel.FaultContractAttribute(typeof(Entelect.BattleCity.Challenge.ChallengeService.NoBlameException), Action="", Name="NoBlameException")]
+ [System.ServiceModel.FaultContractAttribute(typeof(Entelect.BattleCity.Challenge.ChallengeService.EndOfGameException), Action="", Name="EndOfGameException")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ [return: System.ServiceModel.MessageParameterAttribute(Name="return")]
+ Entelect.BattleCity.Challenge.ChallengeService.loginResponse login(Entelect.BattleCity.Challenge.ChallengeService.login request);
+
+ [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
+ System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.loginResponse> loginAsync(Entelect.BattleCity.Challenge.ChallengeService.login request);
+
+ // CODEGEN: Parameter 'return' requires additional schema information that cannot be captured using the parameter mode. The specific attribute is 'System.Xml.Serialization.XmlElementAttribute'.
+ [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
+ [System.ServiceModel.FaultContractAttribute(typeof(Entelect.BattleCity.Challenge.ChallengeService.EndOfGameException), Action="", Name="EndOfGameException")]
+ [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
+ [return: System.ServiceModel.MessageParameterAttribute(Name="return")]
+ Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse setActions(Entelect.BattleCity.Challenge.ChallengeService.setActions request);
+
+ [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]
+ System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse> setActionsAsync(Entelect.BattleCity.Challenge.ChallengeService.setActions request);
+ }
+
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+ [System.ServiceModel.MessageContractAttribute(WrapperName="getStatus", WrapperNamespace="http://challenge.entelect.co.za/", IsWrapped=true)]
+ public partial class getStatus {
+
+ public getStatus() {
+ }
+ }
+
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+ [System.ServiceModel.MessageContractAttribute(WrapperName="getStatusResponse", WrapperNamespace="http://challenge.entelect.co.za/", IsWrapped=true)]
+ public partial class getStatusResponse {
+
+ [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://challenge.entelect.co.za/", Order=0)]
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
+ public Entelect.BattleCity.Challenge.ChallengeService.game @return;
+
+ public getStatusResponse() {
+ }
+
+ public getStatusResponse(Entelect.BattleCity.Challenge.ChallengeService.game @return) {
+ this.@return = @return;
+ }
+ }
+
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+ [System.ServiceModel.MessageContractAttribute(WrapperName="setAction", WrapperNamespace="http://challenge.entelect.co.za/", IsWrapped=true)]
+ public partial class setAction {
+
+ [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://challenge.entelect.co.za/", Order=0)]
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
+ public int arg0;
+
+ [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://challenge.entelect.co.za/", Order=1)]
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
+ public Entelect.BattleCity.Challenge.ChallengeService.action arg1;
+
+ public setAction() {
+ }
+
+ public setAction(int arg0, Entelect.BattleCity.Challenge.ChallengeService.action arg1) {
+ this.arg0 = arg0;
+ this.arg1 = arg1;
+ }
+ }
+
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+ [System.ServiceModel.MessageContractAttribute(WrapperName="setActionResponse", WrapperNamespace="http://challenge.entelect.co.za/", IsWrapped=true)]
+ public partial class setActionResponse {
+
+ [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://challenge.entelect.co.za/", Order=0)]
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
+ public Entelect.BattleCity.Challenge.ChallengeService.delta @return;
+
+ public setActionResponse() {
+ }
+
+ public setActionResponse(Entelect.BattleCity.Challenge.ChallengeService.delta @return) {
+ this.@return = @return;
+ }
+ }
+
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+ [System.ServiceModel.MessageContractAttribute(WrapperName="login", WrapperNamespace="http://challenge.entelect.co.za/", IsWrapped=true)]
+ public partial class login {
+
+ public login() {
+ }
+ }
+
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+ [System.ServiceModel.MessageContractAttribute(WrapperName="loginResponse", WrapperNamespace="http://challenge.entelect.co.za/", IsWrapped=true)]
+ public partial class loginResponse {
+
+ [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://challenge.entelect.co.za/", Order=0)]
+ [System.Xml.Serialization.XmlArrayAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
+ [System.Xml.Serialization.XmlArrayItemAttribute("states", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
+ [System.Xml.Serialization.XmlArrayItemAttribute("item", Form=System.Xml.Schema.XmlSchemaForm.Unqualified, NestingLevel=1)]
+ public System.Nullable<state>[][] @return;
+
+ public loginResponse() {
+ }
+
+ public loginResponse(System.Nullable<state>[][] @return) {
+ this.@return = @return;
+ }
+ }
+
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+ [System.ServiceModel.MessageContractAttribute(WrapperName="setActions", WrapperNamespace="http://challenge.entelect.co.za/", IsWrapped=true)]
+ public partial class setActions {
+
+ [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://challenge.entelect.co.za/", Order=0)]
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
+ public Entelect.BattleCity.Challenge.ChallengeService.action arg0;
+
+ [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://challenge.entelect.co.za/", Order=1)]
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
+ public Entelect.BattleCity.Challenge.ChallengeService.action arg1;
+
+ public setActions() {
+ }
+
+ public setActions(Entelect.BattleCity.Challenge.ChallengeService.action arg0, Entelect.BattleCity.Challenge.ChallengeService.action arg1) {
+ this.arg0 = arg0;
+ this.arg1 = arg1;
+ }
+ }
+
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+ [System.ServiceModel.MessageContractAttribute(WrapperName="setActionsResponse", WrapperNamespace="http://challenge.entelect.co.za/", IsWrapped=true)]
+ public partial class setActionsResponse {
+
+ [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://challenge.entelect.co.za/", Order=0)]
+ [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
+ public Entelect.BattleCity.Challenge.ChallengeService.delta @return;
+
+ public setActionsResponse() {
+ }
+
+ public setActionsResponse(Entelect.BattleCity.Challenge.ChallengeService.delta @return) {
+ this.@return = @return;
+ }
+ }
+
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+ public interface ChallengeChannel : Entelect.BattleCity.Challenge.ChallengeService.Challenge, System.ServiceModel.IClientChannel {
+ }
+
+ [System.Diagnostics.DebuggerStepThroughAttribute()]
+ [System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
+ public partial class ChallengeClient : System.ServiceModel.ClientBase<Entelect.BattleCity.Challenge.ChallengeService.Challenge>, Entelect.BattleCity.Challenge.ChallengeService.Challenge {
+
+ public ChallengeClient() {
+ }
+
+ public ChallengeClient(string endpointConfigurationName) :
+ base(endpointConfigurationName) {
+ }
+
+ public ChallengeClient(string endpointConfigurationName, string remoteAddress) :
+ base(endpointConfigurationName, remoteAddress) {
+ }
+
+ public ChallengeClient(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) :
+ base(endpointConfigurationName, remoteAddress) {
+ }
+
+ public ChallengeClient(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) :
+ base(binding, remoteAddress) {
+ }
+
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+ Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse Entelect.BattleCity.Challenge.ChallengeService.Challenge.getStatus(Entelect.BattleCity.Challenge.ChallengeService.getStatus request) {
+ return base.Channel.getStatus(request);
+ }
+
+ public Entelect.BattleCity.Challenge.ChallengeService.game getStatus() {
+ Entelect.BattleCity.Challenge.ChallengeService.getStatus inValue = new Entelect.BattleCity.Challenge.ChallengeService.getStatus();
+ Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse retVal = ((Entelect.BattleCity.Challenge.ChallengeService.Challenge)(this)).getStatus(inValue);
+ return retVal.@return;
+ }
+
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+ System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse> Entelect.BattleCity.Challenge.ChallengeService.Challenge.getStatusAsync(Entelect.BattleCity.Challenge.ChallengeService.getStatus request) {
+ return base.Channel.getStatusAsync(request);
+ }
+
+ public System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.getStatusResponse> getStatusAsync() {
+ Entelect.BattleCity.Challenge.ChallengeService.getStatus inValue = new Entelect.BattleCity.Challenge.ChallengeService.getStatus();
+ return ((Entelect.BattleCity.Challenge.ChallengeService.Challenge)(this)).getStatusAsync(inValue);
+ }
+
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+ Entelect.BattleCity.Challenge.ChallengeService.setActionResponse Entelect.BattleCity.Challenge.ChallengeService.Challenge.setAction(Entelect.BattleCity.Challenge.ChallengeService.setAction request) {
+ return base.Channel.setAction(request);
+ }
+
+ public Entelect.BattleCity.Challenge.ChallengeService.delta setAction(int arg0, Entelect.BattleCity.Challenge.ChallengeService.action arg1) {
+ Entelect.BattleCity.Challenge.ChallengeService.setAction inValue = new Entelect.BattleCity.Challenge.ChallengeService.setAction();
+ inValue.arg0 = arg0;
+ inValue.arg1 = arg1;
+ Entelect.BattleCity.Challenge.ChallengeService.setActionResponse retVal = ((Entelect.BattleCity.Challenge.ChallengeService.Challenge)(this)).setAction(inValue);
+ return retVal.@return;
+ }
+
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+ System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.setActionResponse> Entelect.BattleCity.Challenge.ChallengeService.Challenge.setActionAsync(Entelect.BattleCity.Challenge.ChallengeService.setAction request) {
+ return base.Channel.setActionAsync(request);
+ }
+
+ public System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.setActionResponse> setActionAsync(int arg0, Entelect.BattleCity.Challenge.ChallengeService.action arg1) {
+ Entelect.BattleCity.Challenge.ChallengeService.setAction inValue = new Entelect.BattleCity.Challenge.ChallengeService.setAction();
+ inValue.arg0 = arg0;
+ inValue.arg1 = arg1;
+ return ((Entelect.BattleCity.Challenge.ChallengeService.Challenge)(this)).setActionAsync(inValue);
+ }
+
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+ Entelect.BattleCity.Challenge.ChallengeService.loginResponse Entelect.BattleCity.Challenge.ChallengeService.Challenge.login(Entelect.BattleCity.Challenge.ChallengeService.login request) {
+ return base.Channel.login(request);
+ }
+
+ public System.Nullable<state>[][] login() {
+ Entelect.BattleCity.Challenge.ChallengeService.login inValue = new Entelect.BattleCity.Challenge.ChallengeService.login();
+ Entelect.BattleCity.Challenge.ChallengeService.loginResponse retVal = ((Entelect.BattleCity.Challenge.ChallengeService.Challenge)(this)).login(inValue);
+ return retVal.@return;
+ }
+
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+ System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.loginResponse> Entelect.BattleCity.Challenge.ChallengeService.Challenge.loginAsync(Entelect.BattleCity.Challenge.ChallengeService.login request) {
+ return base.Channel.loginAsync(request);
+ }
+
+ public System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.loginResponse> loginAsync() {
+ Entelect.BattleCity.Challenge.ChallengeService.login inValue = new Entelect.BattleCity.Challenge.ChallengeService.login();
+ return ((Entelect.BattleCity.Challenge.ChallengeService.Challenge)(this)).loginAsync(inValue);
+ }
+
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+ Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse Entelect.BattleCity.Challenge.ChallengeService.Challenge.setActions(Entelect.BattleCity.Challenge.ChallengeService.setActions request) {
+ return base.Channel.setActions(request);
+ }
+
+ public Entelect.BattleCity.Challenge.ChallengeService.delta setActions(Entelect.BattleCity.Challenge.ChallengeService.action arg0, Entelect.BattleCity.Challenge.ChallengeService.action arg1) {
+ Entelect.BattleCity.Challenge.ChallengeService.setActions inValue = new Entelect.BattleCity.Challenge.ChallengeService.setActions();
+ inValue.arg0 = arg0;
+ inValue.arg1 = arg1;
+ Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse retVal = ((Entelect.BattleCity.Challenge.ChallengeService.Challenge)(this)).setActions(inValue);
+ return retVal.@return;
+ }
+
+ [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)]
+ System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse> Entelect.BattleCity.Challenge.ChallengeService.Challenge.setActionsAsync(Entelect.BattleCity.Challenge.ChallengeService.setActions request) {
+ return base.Channel.setActionsAsync(request);
+ }
+
+ public System.Threading.Tasks.Task<Entelect.BattleCity.Challenge.ChallengeService.setActionsResponse> setActionsAsync(Entelect.BattleCity.Challenge.ChallengeService.action arg0, Entelect.BattleCity.Challenge.ChallengeService.action arg1) {
+ Entelect.BattleCity.Challenge.ChallengeService.setActions inValue = new Entelect.BattleCity.Challenge.ChallengeService.setActions();
+ inValue.arg0 = arg0;
+ inValue.arg1 = arg1;
+ return ((Entelect.BattleCity.Challenge.ChallengeService.Challenge)(this)).setActionsAsync(inValue);
+ }
+ }
+}
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Reference.svcmap b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Reference.svcmap
new file mode 100644
index 0000000..8cd1468
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/Reference.svcmap
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ReferenceGroup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ID="e8b44f4a-1597-4192-bc17-217131128c7c" xmlns="urn:schemas-microsoft-com:xml-wcfservicemap">
+ <ClientOptions>
+ <GenerateAsynchronousMethods>false</GenerateAsynchronousMethods>
+ <GenerateTaskBasedAsynchronousMethod>true</GenerateTaskBasedAsynchronousMethod>
+ <EnableDataBinding>true</EnableDataBinding>
+ <ExcludedTypes />
+ <ImportXmlTypes>false</ImportXmlTypes>
+ <GenerateInternalTypes>false</GenerateInternalTypes>
+ <GenerateMessageContracts>false</GenerateMessageContracts>
+ <NamespaceMappings />
+ <CollectionMappings />
+ <GenerateSerializableTypes>true</GenerateSerializableTypes>
+ <Serializer>Auto</Serializer>
+ <UseSerializerForFaults>true</UseSerializerForFaults>
+ <ReferenceAllAssemblies>true</ReferenceAllAssemblies>
+ <ReferencedAssemblies />
+ <ReferencedDataContractTypes />
+ <ServiceContractMappings />
+ </ClientOptions>
+ <MetadataSources>
+ <MetadataSource Address="C:\Workspace\Development\Entelect\C#.bot - starter pack\Entelect.BattleCity.Challenge\ChallengeService.wsdl" Protocol="file" SourceId="1" />
+ </MetadataSources>
+ <Metadata>
+ <MetadataFile FileName="ChallengeService.wsdl" MetadataType="Wsdl" ID="8f3e4ac3-8695-416b-ac20-ca2048dd4ef5" SourceId="1" SourceUrl="file:///C:/Workspace/Development/Entelect/C%23.bot - starter pack/Entelect.BattleCity.Challenge/ChallengeService.wsdl" />
+ </Metadata>
+ <Extensions>
+ <ExtensionFile FileName="configuration91.svcinfo" Name="configuration91.svcinfo" />
+ <ExtensionFile FileName="configuration.svcinfo" Name="configuration.svcinfo" />
+ </Extensions>
+</ReferenceGroup> \ No newline at end of file
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/configuration.svcinfo b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/configuration.svcinfo
new file mode 100644
index 0000000..6bbf9a9
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/configuration.svcinfo
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configurationSnapshot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="urn:schemas-microsoft-com:xml-wcfconfigurationsnapshot">
+ <behaviors />
+ <bindings>
+ <binding digest="System.ServiceModel.Configuration.BasicHttpBindingElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data name=&quot;ChallengeServiceSoapBinding&quot; /&gt;" bindingType="basicHttpBinding" name="ChallengeServiceSoapBinding" />
+ </bindings>
+ <endpoints>
+ <endpoint normalizedDigest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;http://localhost:9090/ChallengePort&quot; binding=&quot;basicHttpBinding&quot; bindingConfiguration=&quot;ChallengeServiceSoapBinding&quot; contract=&quot;ChallengeService.Challenge&quot; name=&quot;ChallengePort&quot; /&gt;" digest="&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-16&quot;?&gt;&lt;Data address=&quot;http://localhost:9090/ChallengePort&quot; binding=&quot;basicHttpBinding&quot; bindingConfiguration=&quot;ChallengeServiceSoapBinding&quot; contract=&quot;ChallengeService.Challenge&quot; name=&quot;ChallengePort&quot; /&gt;" contractName="ChallengeService.Challenge" name="ChallengePort" />
+ </endpoints>
+</configurationSnapshot> \ No newline at end of file
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/configuration91.svcinfo b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/configuration91.svcinfo
new file mode 100644
index 0000000..fea37b0
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/Service References/ChallengeService/configuration91.svcinfo
@@ -0,0 +1,201 @@
+<?xml version="1.0" encoding="utf-8"?>
+<SavedWcfConfigurationInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="9.1" CheckSum="ClmKNZHJo7S7Ca55qfTBnf2SHrs=">
+ <bindingConfigurations>
+ <bindingConfiguration bindingType="basicHttpBinding" name="ChallengeServiceSoapBinding">
+ <properties>
+ <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>ChallengeServiceSoapBinding</serializedValue>
+ </property>
+ <property path="/closeTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ <property path="/openTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ <property path="/receiveTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ <property path="/sendTimeout" isComplexType="false" isExplicitlyDefined="true" clrType="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ <property path="/allowCookies" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ <property path="/bypassProxyOnLocal" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ <property path="/hostNameComparisonMode" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.HostNameComparisonMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>StrongWildcard</serializedValue>
+ </property>
+ <property path="/maxBufferPoolSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ <property path="/maxBufferSize" isComplexType="false" isExplicitlyDefined="false" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>65536</serializedValue>
+ </property>
+ <property path="/maxReceivedMessageSize" isComplexType="false" isExplicitlyDefined="true" clrType="System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ <property path="/proxyAddress" isComplexType="false" isExplicitlyDefined="false" clrType="System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ <property path="/readerQuotas" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement</serializedValue>
+ </property>
+ <property path="/readerQuotas/maxDepth" isComplexType="false" isExplicitlyDefined="false" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>0</serializedValue>
+ </property>
+ <property path="/readerQuotas/maxStringContentLength" isComplexType="false" isExplicitlyDefined="false" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>0</serializedValue>
+ </property>
+ <property path="/readerQuotas/maxArrayLength" isComplexType="false" isExplicitlyDefined="false" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>0</serializedValue>
+ </property>
+ <property path="/readerQuotas/maxBytesPerRead" isComplexType="false" isExplicitlyDefined="false" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>0</serializedValue>
+ </property>
+ <property path="/readerQuotas/maxNameTableCharCount" isComplexType="false" isExplicitlyDefined="false" clrType="System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>0</serializedValue>
+ </property>
+ <property path="/textEncoding" isComplexType="false" isExplicitlyDefined="false" clrType="System.Text.Encoding, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>System.Text.UTF8Encoding</serializedValue>
+ </property>
+ <property path="/transferMode" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.TransferMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>Buffered</serializedValue>
+ </property>
+ <property path="/useDefaultWebProxy" isComplexType="false" isExplicitlyDefined="true" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ <property path="/messageEncoding" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.WSMessageEncoding, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>Text</serializedValue>
+ </property>
+ <property path="/security" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.BasicHttpSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>System.ServiceModel.Configuration.BasicHttpSecurityElement</serializedValue>
+ </property>
+ <property path="/security/mode" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.BasicHttpSecurityMode, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>None</serializedValue>
+ </property>
+ <property path="/security/transport" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.HttpTransportSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>System.ServiceModel.Configuration.HttpTransportSecurityElement</serializedValue>
+ </property>
+ <property path="/security/transport/clientCredentialType" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.HttpClientCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>None</serializedValue>
+ </property>
+ <property path="/security/transport/proxyCredentialType" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.HttpProxyCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>None</serializedValue>
+ </property>
+ <property path="/security/transport/extendedProtectionPolicy" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement</serializedValue>
+ </property>
+ <property path="/security/transport/extendedProtectionPolicy/policyEnforcement" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.PolicyEnforcement, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>Never</serializedValue>
+ </property>
+ <property path="/security/transport/extendedProtectionPolicy/protectionScenario" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.ProtectionScenario, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>TransportSelected</serializedValue>
+ </property>
+ <property path="/security/transport/extendedProtectionPolicy/customServiceNames" isComplexType="true" isExplicitlyDefined="false" clrType="System.Security.Authentication.ExtendedProtection.Configuration.ServiceNameElementCollection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>(Collection)</serializedValue>
+ </property>
+ <property path="/security/transport/realm" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ <property path="/security/message" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.BasicHttpMessageSecurityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>System.ServiceModel.Configuration.BasicHttpMessageSecurityElement</serializedValue>
+ </property>
+ <property path="/security/message/clientCredentialType" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.BasicHttpMessageCredentialType, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>UserName</serializedValue>
+ </property>
+ <property path="/security/message/algorithmSuite" isComplexType="false" isExplicitlyDefined="false" clrType="System.ServiceModel.Security.SecurityAlgorithmSuite, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>Default</serializedValue>
+ </property>
+ </properties>
+ </bindingConfiguration>
+ </bindingConfigurations>
+ <endpoints>
+ <endpoint name="ChallengePort" contract="ChallengeService.Challenge" bindingType="basicHttpBinding" address="http://localhost:9090/ChallengePort" bindingConfiguration="ChallengeServiceSoapBinding">
+ <properties>
+ <property path="/address" isComplexType="false" isExplicitlyDefined="true" clrType="System.Uri, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>http://localhost:9090/ChallengePort</serializedValue>
+ </property>
+ <property path="/behaviorConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ <property path="/binding" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>basicHttpBinding</serializedValue>
+ </property>
+ <property path="/bindingConfiguration" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>ChallengeServiceSoapBinding</serializedValue>
+ </property>
+ <property path="/contract" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>ChallengeService.Challenge</serializedValue>
+ </property>
+ <property path="/headers" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.AddressHeaderCollectionElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>System.ServiceModel.Configuration.AddressHeaderCollectionElement</serializedValue>
+ </property>
+ <property path="/headers/headers" isComplexType="false" isExplicitlyDefined="true" clrType="System.ServiceModel.Channels.AddressHeaderCollection, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>&lt;Header /&gt;</serializedValue>
+ </property>
+ <property path="/identity" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.IdentityElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>System.ServiceModel.Configuration.IdentityElement</serializedValue>
+ </property>
+ <property path="/identity/userPrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.UserPrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>System.ServiceModel.Configuration.UserPrincipalNameElement</serializedValue>
+ </property>
+ <property path="/identity/userPrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ <property path="/identity/servicePrincipalName" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.ServicePrincipalNameElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>System.ServiceModel.Configuration.ServicePrincipalNameElement</serializedValue>
+ </property>
+ <property path="/identity/servicePrincipalName/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ <property path="/identity/dns" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.DnsElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>System.ServiceModel.Configuration.DnsElement</serializedValue>
+ </property>
+ <property path="/identity/dns/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ <property path="/identity/rsa" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.RsaElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>System.ServiceModel.Configuration.RsaElement</serializedValue>
+ </property>
+ <property path="/identity/rsa/value" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ <property path="/identity/certificate" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>System.ServiceModel.Configuration.CertificateElement</serializedValue>
+ </property>
+ <property path="/identity/certificate/encodedValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ <property path="/identity/certificateReference" isComplexType="true" isExplicitlyDefined="false" clrType="System.ServiceModel.Configuration.CertificateReferenceElement, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>System.ServiceModel.Configuration.CertificateReferenceElement</serializedValue>
+ </property>
+ <property path="/identity/certificateReference/storeName" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreName, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>My</serializedValue>
+ </property>
+ <property path="/identity/certificateReference/storeLocation" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.StoreLocation, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>LocalMachine</serializedValue>
+ </property>
+ <property path="/identity/certificateReference/x509FindType" isComplexType="false" isExplicitlyDefined="false" clrType="System.Security.Cryptography.X509Certificates.X509FindType, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>FindBySubjectDistinguishedName</serializedValue>
+ </property>
+ <property path="/identity/certificateReference/findValue" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ <property path="/identity/certificateReference/isChainIncluded" isComplexType="false" isExplicitlyDefined="false" clrType="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>False</serializedValue>
+ </property>
+ <property path="/name" isComplexType="false" isExplicitlyDefined="true" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue>ChallengePort</serializedValue>
+ </property>
+ <property path="/kind" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ <property path="/endpointConfiguration" isComplexType="false" isExplicitlyDefined="false" clrType="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+ <serializedValue />
+ </property>
+ </properties>
+ </endpoint>
+ </endpoints>
+</SavedWcfConfigurationInformation> \ No newline at end of file
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/compile.bat b/2013-battlecity/Entelect.BattleCity.Challenge/compile.bat
new file mode 100644
index 0000000..4f3d152
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/compile.bat
@@ -0,0 +1 @@
+MSBuild.exe /property:Configuration=Release Entelect.BattleCity.Challenge.csproj \ No newline at end of file
diff --git a/2013-battlecity/Entelect.BattleCity.Challenge/start.bat b/2013-battlecity/Entelect.BattleCity.Challenge/start.bat
new file mode 100644
index 0000000..521c376
--- /dev/null
+++ b/2013-battlecity/Entelect.BattleCity.Challenge/start.bat
@@ -0,0 +1 @@
+"bin/Release/Entelect.BattleCity.Challenge.exe" %1 \ No newline at end of file
diff --git a/2013-battlecity/README.md b/2013-battlecity/README.md
new file mode 100644
index 0000000..e868ec0
--- /dev/null
+++ b/2013-battlecity/README.md
@@ -0,0 +1,12 @@
+Botinator
+=========
+
+My entry for the Entelect 100k Challenge 2013.
+
+The task for the 2013 100k challenge was to write a program which connects to a SOAP web service and controls the tanks in a game of Battle City. Each player has two tanks and a base on a two dimensional board. The player who manages to destroy their opponent's base first wins.
+
+I'm currently employed by Entelect, so I could not enter the 100k challenge, but we did have an internal version of the challenge. This bot came second in the internal challenge.
+
+This is an intentionally 'stupid' bot. It doesn't use any fancy AI algorithms, and doesn't really even look at what is happening. Despite being pretty stupid, it actually works fairly well.
+
+The core of the algorithm is that each tank compares its position to that of the enemy base. If it is in line with the base horizontally, it faces the base. If it is not in line with the base, it faces in the direction it would need to head to be in line with the base. If the tank can shoot, it shoots. If it can't shoot, it moves forward. I find it easiest to visualise this as an 'L' pattern.