merge louis

pull/25/head
Johan LACHENAL 10 months ago
commit 79ed823763

BIN
.DS_Store vendored

Binary file not shown.

@ -8,76 +8,100 @@
import Foundation import Foundation
import SpriteKit import SpriteKit
import DouShouQiModel import DouShouQiModel
class GameScene: SKScene {
var isGameOver = false
let imageBoard: SKSpriteNode = SKSpriteNode(imageNamed: "board")
var game: Game = try! Game(withRules: ClassicRules(), andPlayer1: HumanPlayer(withName: "Bot1", andId: .player1)!, andPlayer2: RandomPlayer(withName: "Bot2", andId: .player2)!)
class GameScene: SKScene { var player1Name: String
var isGameOver = false var player1Image: UIImage
let imageBoard: SKSpriteNode = SKSpriteNode(imageNamed: "board") var player2Name: String
var game: Game = try! Game(withRules: ClassicRules(), andPlayer1: HumanPlayer(withName: "Bot1", andId: .player1)!, andPlayer2: RandomPlayer(withName: "Bot2", andId: .player2)!) var player2Image: UIImage
var player1Name: String var pieces: [Owner: [Animal: SpriteMoople]] = [
var player1Image: UIImage .player1: [.cat: SpriteMoople(nameImage: "catMeeple", couleur: .red),
var player2Name: String .dog: SpriteMoople(nameImage: "dogMeeple", couleur: .red),
var player2Image: UIImage .leopard: SpriteMoople(nameImage: "leopardMeeple", couleur: .red),
.lion: SpriteMoople(nameImage: "lionMeeple", couleur: .red),
var pieces: [Owner: [Animal: SpriteMoople]] = [ .rat: SpriteMoople(nameImage: "ratMeeple", couleur: .red),
.player1: [.cat: SpriteMoople(nameImage: "catMeeple", couleur: .red), .wolf: SpriteMoople(nameImage: "wolfMeeple", couleur: .red),
.dog: SpriteMoople(nameImage: "dogMeeple", couleur: .red), .elephant: SpriteMoople(nameImage: "elephantMeeple", couleur: .red),
.leopard: SpriteMoople(nameImage: "leopardMeeple", couleur: .red), .tiger: SpriteMoople(nameImage: "tigerMeeple", couleur: .red)],
.lion: SpriteMoople(nameImage: "lionMeeple", couleur: .red), .player2: [.cat: SpriteMoople(nameImage: "catMeeple", couleur: .blue),
.rat: SpriteMoople(nameImage: "ratMeeple", couleur: .red), .dog: SpriteMoople(nameImage: "dogMeeple", couleur: .blue),
.wolf: SpriteMoople(nameImage: "wolfMeeple", couleur: .red), .leopard: SpriteMoople(nameImage: "leopardMeeple", couleur: .blue),
.elephant: SpriteMoople(nameImage: "elephantMeeple", couleur: .red), .lion: SpriteMoople(nameImage: "lionMeeple", couleur: .blue),
.tiger: SpriteMoople(nameImage: "tigerMeeple", couleur: .red)], .rat: SpriteMoople(nameImage: "ratMeeple", couleur: .blue),
.player2: [.cat: SpriteMoople(nameImage: "catMeeple", couleur: .blue), .wolf: SpriteMoople(nameImage: "wolfMeeple", couleur: .blue),
.dog: SpriteMoople(nameImage: "dogMeeple", couleur: .blue), .elephant: SpriteMoople(nameImage: "elephantMeeple", couleur: .blue),
.leopard: SpriteMoople(nameImage: "leopardMeeple", couleur: .blue), .tiger: SpriteMoople(nameImage: "tigerMeeple", couleur: .blue)]
.lion: SpriteMoople(nameImage: "lionMeeple", couleur: .blue), ]
.rat: SpriteMoople(nameImage: "ratMeeple", couleur: .blue),
.wolf: SpriteMoople(nameImage: "wolfMeeple", couleur: .blue), var deplacementPossible: [SKShapeNode] = []
.elephant: SpriteMoople(nameImage: "elephantMeeple", couleur: .blue),
.tiger: SpriteMoople(nameImage: "tigerMeeple", couleur: .blue)] required init?(coder aDecoder: NSCoder) {
] self.player1Name = ""
self.player1Image = UIImage()
var deplacementPossible: [SKShapeNode] = [] self.player2Name = ""
self.player2Image = UIImage()
super.init(coder: aDecoder)
}
override init(size: CGSize) {
self.player1Name = ""
self.player1Image = UIImage()
self.player2Name = ""
self.player2Image = UIImage()
super.init(size: size)
// -- -- //
scaleMode = .aspectFit
anchorPoint = CGPoint(x: 0.5, y: 0.5)
imageBoard.zPosition = 0
self.addChild(imageBoard)
// -- -- //
init(size: CGSize, player1Name: String, player1Image: UIImage, player2Name: String, player2Image: UIImage) { for c in pieces.flatMap({ _,values in return values })
self.player1Name = player1Name {
self.player1Image = player1Image c.self.value.refGameScene = self
self.player2Name = player2Name c.self.value.zPosition = 2
self.player2Image = player2Image self.addChild(c.self.value)
super.init(size: size)
scaleMode = .aspectFit
anchorPoint = CGPoint(x: 0.5, y: 0.5)
imageBoard.zPosition = 0
self.addChild(imageBoard)
for c in pieces.flatMap({ $0.value }) {
c.value.refGameScene = self
c.value.zPosition = 2
self.addChild(c.value)
}
displayBoard(board: game.board)
} }
required init?(coder aDecoder: NSCoder) { displayBoard(board: game.board)
self.player1Name = ""
self.player1Image = UIImage()
self.player2Name = ""
self.player2Image = UIImage()
super.init(coder: aDecoder)
}
func displayBoard(board: Board) { }
for ligne in 0..<board.grid.count {
for col in 0..<board.grid[ligne].count { init(size: CGSize, player1Name: String, player1Image: UIImage, player2Name: String, player2Image: UIImage) {
if let piece = board.grid[ligne][col].piece { self.player1Name = player1Name
if let element = pieces[piece.owner]?[piece.animal] { self.player1Image = player1Image
element.cellPosition = CGPoint(x: ligne, y: col) self.player2Name = player2Name
} self.player2Image = player2Image
super.init(size: size)
scaleMode = .aspectFit
anchorPoint = CGPoint(x: 0.5, y: 0.5)
imageBoard.zPosition = 0
self.addChild(imageBoard)
for c in pieces.flatMap({ $0.value }) {
c.value.refGameScene = self
c.value.zPosition = 2
self.addChild(c.value)
}
displayBoard(board: game.board)
}
func displayBoard(board: Board) {
for ligne in 0..<board.grid.count {
for col in 0..<board.grid[ligne].count {
if let piece = board.grid[ligne][col].piece {
if let element = pieces[piece.owner]?[piece.animal] {
element.cellPosition = CGPoint(x: ligne, y: col)
} }
} }
} }
} }
} }
}

@ -24,31 +24,36 @@ struct GameView: View {
return scene return scene
} }
@State var msg: String = "Msg" @State var msg: String = ""
var body: some View { var body: some View {
ZStack { ZStack {
Text(msg)
SpriteView(scene: gameScene) SpriteView(scene: gameScene)
.edgesIgnoringSafeArea(.all) .edgesIgnoringSafeArea(.all)
.task { .task {
gameScene.game.addGameStartedListener { board in startGame() } gameScene.game.addGameStartedListener { board in startGame() }
gameScene.game.addGameOverListener { board, result, player in gameOver(result: result) } gameScene.game.addGameOverListener { board, result, player in gameOver(result : result) }
gameScene.game.addGameChangedListener { game in gameChange() } gameScene.game.addGameChangedListener { game in gameChange() }
gameScene.game.addBoardChangedListener { board in boardChange() } gameScene.game.addBoardChangedListener { board in boardChange() }
gameScene.game.addMoveChosenCallbacksListener { board, move, player in moveChose(board: board, move: move, player: player) } gameScene.game.addMoveChosenCallbacksListener { board, move, player in moveChose(board: board, move: move, player: player) }
gameScene.game.addInvalidMoveCallbacksListener { board, move, player, bool in invalidMove(board: board, move: move, player: player, bool: bool) } gameScene.game.addInvalidMoveCallbacksListener { board, move, player, bool in invalidMove(board: board, move: move, player: player, bool: bool) }
gameScene.game.addPieceRemovedListener { _, _, piece in removePiece(piece: piece) } gameScene.game.addPieceRemovedListener { _, _, piece in removePiece(piece: piece) }
gameScene.game.addPlayerNotifiedListener { board, player in gameScene.game.addPlayerNotifiedListener { board, player in
print("Player notif : \(player.id) à toi de jouer ") print("Player notif : \(player.id) à toi de jouer ")
msg = "Player notif : \(player.id) à toi de jouer !" msg = "Player notif : \(player.id) à toi de jouer !"
if player is IAPlayer { if player is IAPlayer {
try! await player.chooseMove(in: board, with: gameScene.game.rules) try! await player.chooseMove(in: board, with: gameScene.game.rules)
} }
} }
try! await gameScene.game.start() try! await gameScene.game.start()
} }
VStack { VStack {
HStack { HStack {
VStack { VStack {
@ -58,7 +63,7 @@ struct GameView: View {
.frame(width: 125, height: 125) .frame(width: 125, height: 125)
.clipShape(Circle()) .clipShape(Circle())
.overlay(Circle().stroke(Color.red, lineWidth: 2)) .overlay(Circle().stroke(Color.red, lineWidth: 2))
Text(player1Name) Text(player1Name)
.font(.headline) .font(.headline)
.foregroundColor(.white) .foregroundColor(.white)
@ -71,7 +76,7 @@ struct GameView: View {
.frame(width: 125, height: 125) .frame(width: 125, height: 125)
.clipShape(Circle()) .clipShape(Circle())
.overlay(Circle().stroke(Color.blue, lineWidth: 2)) .overlay(Circle().stroke(Color.blue, lineWidth: 2))
Text(player2Name) Text(player2Name)
.font(.headline) .font(.headline)
.foregroundColor(.white) .foregroundColor(.white)
@ -86,46 +91,47 @@ struct GameView: View {
} }
} }
} }
// ------ Listener Methods -------- // // ------ Listener -------- //
func startGame() { func startGame() {
print("Start game !") print("Start game !")
msg = "Start !!" msg = "Start !!"
} }
func gameOver(result: Result) { func gameOver(result : Result) { print("Game over !")
print("Game over !")
msg = "Game over ! " msg = "Game over ! "
switch result { switch result
{
case .winner(let winner, _): case .winner(let winner, _):
switch winner { switch winner {
case .player1: case .player1:
msg += "player 1 wins !" msg = msg + "player 1 wins !"
case .player2: case .player2:
msg += "player 2 wins !" msg = msg + "player 2 wins !"
default: default:
msg += "equality !" msg = msg + "equality !"
} }
default: default:
msg = "Game over !" msg="Game over !"
} }
gameScene.isGameOver = true gameScene.isGameOver = true
actionEndGame(scene: gameScene, message: msg) actionEndGame(scene: gameScene,message: msg)
} }
func gameChange() { func gameChange() {
print("Game change !") print("Game change !")
} }
func boardChange() { func boardChange() {
print("Board change !") print("Board change !")
gameScene.displayBoard(board: gameScene.game.board) gameScene.displayBoard(board: gameScene.game.board)
} }
func moveChose(board: Board, move: Move, player: Player) {} func moveChose(board: Board, move: Move, player: Player) {
}
func invalidMove(board: Board, move: Move, player: Player, bool: Bool) { func invalidMove(board: Board, move: Move, player: Player, bool: Bool) {
if bool { if bool {
print("Move valid de \(player.id)") print("Move valid de \(player.id)")
@ -137,16 +143,16 @@ struct GameView: View {
} }
print("------------") print("------------")
} }
func removePiece(piece: Piece) { func removePiece(piece:Piece){
print("Remove piece") print("Remove piece")
if let node = gameScene.pieces[piece.owner]?[piece.animal] { if let node = gameScene.pieces[piece.owner]![piece.animal] {
actionRemove(size: gameScene.size, node: node, scene: gameScene) actionRemove(size: gameScene.size, node: node, scene: gameScene)
if let node = gameScene.pieces[piece.owner]?[piece.animal] { print("Remove piece from parent")
print("Remove piece from parent")
}
} }
} }
// ------------------------- //
} }
struct GameView_Previews: PreviewProvider { struct GameView_Previews: PreviewProvider {

Loading…
Cancel
Save