Skip to content

Commit 563d718

Browse files
committed
Unify delay player
1 parent b9dd596 commit 563d718

5 files changed

Lines changed: 35 additions & 85 deletions

File tree

TurnBase.KaNoBu.Console/Program.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ public static async Task Main(string[] args)
88
{
99
var rules = new KaNoBuRules(8);
1010
var game = new Game<KaNoBuInitModel, KaNoBuInitResponseModel, KaNoBuMoveModel, KaNoBuMoveResponseModel, KaNoBuMoveNotificationModel>(rules, "test");
11-
game.AddPlayer(new DelayedPlayer<KaNoBuInitModel, KaNoBuInitResponseModel, KaNoBuMoveModel, KaNoBuMoveResponseModel, KaNoBuMoveNotificationModel>(new KaNoBuPlayerEasy(), 1, 500));
12-
game.AddPlayer(new DelayedPlayer<KaNoBuInitModel, KaNoBuInitResponseModel, KaNoBuMoveModel, KaNoBuMoveResponseModel, KaNoBuMoveNotificationModel>(new KaNoBuPlayerEasy(), 1, 500));
13-
game.AddPlayer(new DelayedPlayer<KaNoBuInitModel, KaNoBuInitResponseModel, KaNoBuMoveModel, KaNoBuMoveResponseModel, KaNoBuMoveNotificationModel>(new KaNoBuPlayerEasy(), 1, 500));
14-
15-
game.AddPlayer(new DelayedPlayer<KaNoBuInitModel, KaNoBuInitResponseModel, KaNoBuMoveModel, KaNoBuMoveResponseModel, KaNoBuMoveNotificationModel>(new KaNoBuPlayerEasy(), 1, 500));
11+
game.AddPlayer(new DelayedPlayer<KaNoBuInitModel, KaNoBuInitResponseModel, KaNoBuMoveModel, KaNoBuMoveResponseModel, KaNoBuMoveNotificationModel>(new KaNoBuPlayerEasy(), async (delay) => await Task.Delay(delay), 1, 500));
12+
game.AddPlayer(new DelayedPlayer<KaNoBuInitModel, KaNoBuInitResponseModel, KaNoBuMoveModel, KaNoBuMoveResponseModel, KaNoBuMoveNotificationModel>(new KaNoBuPlayerEasy(), async (delay) => await Task.Delay(delay), 1, 500));
13+
game.AddPlayer(new DelayedPlayer<KaNoBuInitModel, KaNoBuInitResponseModel, KaNoBuMoveModel, KaNoBuMoveResponseModel, KaNoBuMoveNotificationModel>(new KaNoBuPlayerEasy(), async (delay) => await Task.Delay(delay), 1, 500));
14+
15+
game.AddPlayer(new DelayedPlayer<KaNoBuInitModel, KaNoBuInitResponseModel, KaNoBuMoveModel, KaNoBuMoveResponseModel, KaNoBuMoveNotificationModel>(new KaNoBuPlayerEasy(), async (delay) => await Task.Delay(delay), 1, 500));
1616

1717
// game.AddPlayer(new KaNoBuPlayerConsole());
1818
game.AddGameLogListener(new ReadableLogger<KaNoBuMoveNotificationModel>(new ConsoleLogger()));
19-
19+
2020
await game.Play();
2121
}
2222
}

TurnBase.KaNoBu.Godot/Presentation/DelayedPlayer.cs

Lines changed: 0 additions & 72 deletions
This file was deleted.

TurnBase.KaNoBu.Godot/Presentation/UI.cs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.CodeDom;
33
using System.Collections.Generic;
44
using System.Linq;
5+
using System.Threading.Tasks;
56
using Godot;
67
using TurnBase;
78
using TurnBase.KaNoBu;
@@ -129,10 +130,10 @@ public IGame BuildGame(GameField field)
129130
default:
130131
throw new InvalidOperationException("Unknown game type");
131132
}
132-
133+
133134
kanobu.AddGameLogListener(new ReadableLogger<KaNoBuMoveNotificationModel>(new GDLogger()));
134135

135-
if(!humanFound)
136+
if (!humanFound)
136137
{
137138
kanobu.AddGameLogListener(field);
138139
}
@@ -153,15 +154,23 @@ public IPlayer<KaNoBuInitModel, KaNoBuInitResponseModel, KaNoBuMoveModel, KaNoBu
153154
case 2:
154155
// Computer Easy
155156
var playerEasy = new KaNoBuPlayerEasy();
156-
return new DelayedPlayer<KaNoBuInitModel, KaNoBuInitResponseModel, KaNoBuMoveModel, KaNoBuMoveResponseModel, KaNoBuMoveNotificationModel>(playerEasy, 1, 300, this);
157+
return new DelayedPlayer<KaNoBuInitModel, KaNoBuInitResponseModel, KaNoBuMoveModel, KaNoBuMoveResponseModel, KaNoBuMoveNotificationModel>(
158+
playerEasy,
159+
async (delay) => await this.ToSignal(this.GetTree().CreateTimer(delay / 1000f), "timeout"),
160+
1,
161+
300);
157162
case 3:
158163
// Remote
159164
this.server.StartServer();
160165
return new ServerPlayer<KaNoBuInitModel, KaNoBuInitResponseModel, KaNoBuMoveModel, KaNoBuMoveResponseModel, KaNoBuMoveNotificationModel>(server, gameId);
161166
case 4:
162167
// Computer Medium
163168
var playerMedium = new KaNoBuPlayerMedium();
164-
return new DelayedPlayer<KaNoBuInitModel, KaNoBuInitResponseModel, KaNoBuMoveModel, KaNoBuMoveResponseModel, KaNoBuMoveNotificationModel>(playerMedium, 1, 300, this);
169+
return new DelayedPlayer<KaNoBuInitModel, KaNoBuInitResponseModel, KaNoBuMoveModel, KaNoBuMoveResponseModel, KaNoBuMoveNotificationModel>(
170+
playerMedium,
171+
async (delay) => await this.ToSignal(this.GetTree().CreateTimer(delay / 1000f), "timeout"),
172+
1,
173+
300);
165174
default:
166175
throw new InvalidOperationException("Unknown Player Type");
167176
}

TurnBase.KaNoBu/KaNoBuPlayerEasy.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@ public async Task<InitResponseModel<KaNoBuInitResponseModel>> Init(InitModel<KaN
6767

6868
public async Task<MakeTurnResponseModel<KaNoBuMoveResponseModel>> MakeTurn(MakeTurnModel<KaNoBuMoveModel> model)
6969
{
70+
// if (r.Next(100) < 20)
71+
// {
72+
// return null;
73+
// }
74+
7075
var from = this.findAllMovement(model.Request.Field);
7176

7277
if (from == null || from.Count == 0)
Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
using System;
2+
using System.Collections.Generic;
13
using System.Threading.Tasks;
24

35
namespace TurnBase.KaNoBu
@@ -6,25 +8,31 @@ public class DelayedPlayer<TInitModel, TInitResponseModel, TMoveModel, TMoveResp
68
IPlayer<TInitModel, TInitResponseModel, TMoveModel, TMoveResponseModel, TMoveNotificationModel>
79
{
810
private IPlayer<TInitModel, TInitResponseModel, TMoveModel, TMoveResponseModel, TMoveNotificationModel> player;
11+
private readonly Func<int, Task> delayAction;
912
private readonly int initDelay;
1013
private readonly int turnDelay;
1114

12-
public DelayedPlayer(IPlayer<TInitModel, TInitResponseModel, TMoveModel, TMoveResponseModel, TMoveNotificationModel> originalPlayer, int initDelay, int turnDelay)
15+
public DelayedPlayer(
16+
IPlayer<TInitModel, TInitResponseModel, TMoveModel, TMoveResponseModel, TMoveNotificationModel> originalPlayer,
17+
Func<int, Task> delayAction,
18+
int initDelay,
19+
int turnDelay)
1320
{
1421
this.player = originalPlayer;
22+
this.delayAction = delayAction;
1523
this.initDelay = initDelay;
1624
this.turnDelay = turnDelay;
1725
}
1826

1927
public async Task<InitResponseModel<TInitResponseModel>> Init(InitModel<TInitModel> model)
2028
{
21-
await Task.Delay(this.initDelay);
29+
await delayAction(this.initDelay);
2230
return await this.player.Init(model);
2331
}
2432

2533
public async Task<MakeTurnResponseModel<TMoveResponseModel>> MakeTurn(MakeTurnModel<TMoveModel> model)
2634
{
27-
await Task.Delay(this.turnDelay);
35+
await delayAction(this.turnDelay);
2836
return await this.player.MakeTurn(model);
2937
}
3038

0 commit comments

Comments
 (0)