Skip to content

Commit c5dd5ff

Browse files
author
Hamza MADAD
committed
[ADD] Help User
1 parent 11f62d0 commit c5dd5ff

File tree

16 files changed

+313
-521
lines changed

16 files changed

+313
-521
lines changed

back/game/game.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,16 @@ func (game *Game) ProccessRules(initialStone *inter.Node) (*pb.CheckRulesRespons
9696
return res, nil
9797
}
9898

99-
func (game *Game) PlayIA(in *inter.Node) *inter.Node {
99+
func (game *Game) PlayIA(in *inter.Node, isHelp bool) *inter.Node {
100+
if isHelp == true {
101+
depth := game.IA.Depth
102+
game.IA.PlayerIndex = player.GetOpposentPlayer(game.IA.PlayerIndex)
103+
game.IA.Depth = 3
104+
defer func() {
105+
game.IA.PlayerIndex = player.GetOpposentPlayer(game.IA.PlayerIndex)
106+
game.IA.Depth = depth
107+
}()
108+
}
100109
fmt.Println("LEN => ", len(game.IA.SearchZone))
101110
return game.IA.Play(game.board, game.players)
102111
}

back/manegeGame/manegeGame.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,11 @@ func (CurrentGames *Games) ProccessRules(in *pb.StonePlayed) (*pb.CheckRulesResp
6060
}
6161

6262
// PlayedAI choose the best move for win
63-
func (CurrentGames *Games) PlayedIA(in *pb.StonePlayed) (*pb.StonePlayed, error) {
63+
func (CurrentGames *Games) PlayedIA(in *pb.StonePlayed, isHelp bool) (*pb.StonePlayed, error) {
6464
CurrentGames.rwmux.Lock()
6565
defer CurrentGames.rwmux.Unlock()
6666
if game, ok := CurrentGames.game[in.GameID]; ok == true {
67-
return &pb.StonePlayed{CurrentPlayerMove: game.PlayIA(inter.NewNode(in.CurrentPlayerMove)).Convert()}, nil
67+
return &pb.StonePlayed{CurrentPlayerMove: game.PlayIA(inter.NewNode(in.CurrentPlayerMove), isHelp).Convert()}, nil
6868
}
6969
return nil, errors.New("Partie not found")
7070
}

back/server/pb/buffer.pb.go

Lines changed: 71 additions & 37 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

back/server/server.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,19 @@ func (s *Server) CDGame(ctx context.Context, in *pb.CDGameRequest) (res *pb.CDGa
4646
// Played ...
4747
func (s *Server) Played(ctx context.Context, in *pb.StonePlayed) (res *pb.StonePlayed, err error) {
4848
fmt.Println("END +> ", res)
49-
res, err = manegeGame.CurrentGames.PlayedIA(in)
49+
res, err = manegeGame.CurrentGames.PlayedIA(in, false)
50+
select {
51+
case <-ctx.Done():
52+
return nil, nil
53+
default:
54+
return res, err
55+
}
56+
}
57+
58+
// Played ...
59+
func (s *Server) PlayedHelp(ctx context.Context, in *pb.StonePlayed) (res *pb.StonePlayed, err error) {
60+
fmt.Println("END +> ", res)
61+
res, err = manegeGame.CurrentGames.PlayedIA(in, true)
5062
select {
5163
case <-ctx.Done():
5264
return nil, nil

back/solver/algorithm.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,16 @@ func (ia *IA) Play(board *board.Board, players player.Players) *inter.Node {
4848
createListMoves(&listMoves, ia.ListMoves)
4949
if len(ia.SearchZone) != 0 {
5050
start := time.Now()
51-
_, best = ia.MinMax(*board, listMoves, inter.Node{Player: player.GetOpposentPlayer(ia.playerIndex)}, ia.depth, -100000, 1000000, len(ia.ListMoves), true)
51+
_, best = ia.MinMax(*board, listMoves, inter.Node{Player: player.GetOpposentPlayer(ia.PlayerIndex)}, ia.Depth, -100000, 1000000, len(ia.ListMoves), true)
5252
t := time.Now()
5353
fmt.Println(t.Sub(start))
5454
} else {
5555
r := rand.New(rand.NewSource(time.Now().UnixNano()))
5656
best.X = r.Intn(13) + 3
5757
best.Y = r.Intn(13) + 3
58-
best.Player = ia.playerIndex
58+
best.Player = ia.PlayerIndex
5959
}
60-
best.Player = ia.playerIndex
60+
best.Player = ia.PlayerIndex
6161
return &best
6262
}
6363

@@ -72,8 +72,8 @@ func (ia *IA) MinMax(board board.Board, list [sizeListMoves]inter.Node, move int
7272
for _, move = range ia.SearchZone {
7373
if board[move.X][move.Y] == 0 {
7474

75-
board[move.X][move.Y] = ia.playerIndex
76-
move.Player = ia.playerIndex
75+
board[move.X][move.Y] = ia.PlayerIndex
76+
move.Player = ia.PlayerIndex
7777
list[index] = move
7878
score, _ := ia.MinMax(board, list, move, depth-1, alpha, beta, index+1, false)
7979
board[move.X][move.Y] = 0
@@ -92,7 +92,7 @@ func (ia *IA) MinMax(board board.Board, list [sizeListMoves]inter.Node, move int
9292
}
9393
} else {
9494
current = math.MaxInt64
95-
playerIndex := player.GetOpposentPlayer(ia.playerIndex)
95+
playerIndex := player.GetOpposentPlayer(ia.PlayerIndex)
9696
for _, move = range ia.SearchZone {
9797
if board[move.X][move.Y] == 0 {
9898
board[move.X][move.Y] = playerIndex

back/solver/heuristic.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ func (ia *IA) HeuristicScore(board board.Board, list [sizeListMoves]inter.Node,
3232
return 0
3333
}
3434
switch node.Player {
35-
case ia.playerIndex:
35+
case ia.PlayerIndex:
3636
value += tmp
3737
default:
3838
value -= tmp
@@ -53,15 +53,15 @@ func (ia *IA) isWin(board board.Board, depth int, move inter.Node) int {
5353
if report.Report.PartyFinish == true {
5454
if len(report.Report.WinOrLose[0]) == 0 {
5555
switch move.Player {
56-
case ia.playerIndex:
56+
case ia.PlayerIndex:
5757
return 10000 + depth
5858
default:
5959
return -10000 - depth
6060
}
6161
}
6262
} else if ia.playersScore[move.Player-1] == 8 && len(report.Report.ListCapturedStone) != 0 {
6363
switch move.Player {
64-
case ia.playerIndex:
64+
case ia.PlayerIndex:
6565
return 10000 + depth
6666
default:
6767
return -10000 - depth

back/solver/ia.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ type IA struct {
3232
reportWin map[int]rules.Schema
3333
reportEval map[int]rules.Schema
3434
playersScore [2]int
35-
playerIndex, depth int
35+
PlayerIndex, Depth int
3636
}
3737

3838
// New ...
@@ -41,7 +41,7 @@ func New(config pb.ConfigRules, playerIndex int) *IA {
4141
reportWin: make(map[int]rules.Schema),
4242
reportEval: make(map[int]rules.Schema),
4343
}
44-
regis.playerIndex = playerIndex
44+
regis.PlayerIndex = playerIndex
4545
config.IsActiveRuleAlignment = true
4646
config.IsActiveRuleBlock = true
4747
if config.IsActiveRuleCapture == true {
@@ -52,8 +52,8 @@ func New(config pb.ConfigRules, playerIndex int) *IA {
5252
IsActiveRuleWin: config.IsActiveRuleWin,
5353
IsActiveRuleCapture: config.IsActiveRuleCapture,
5454
}
55-
regis.depth = int(config.DepthIA)
56-
regis.playerIndex = int(config.PlayerIndexIA)
55+
regis.Depth = int(config.DepthIA)
56+
regis.PlayerIndex = int(config.PlayerIndexIA)
5757
regis.reportWin[1] = rules.New(1, 2, configWin)
5858
regis.reportWin[2] = rules.New(2, 1, configWin)
5959
regis.reportEval[1] = rules.New(1, 2, config)

0 commit comments

Comments
 (0)