poursuite de la liaisona vec le jeu, coomment recup le status des meeples pour le readmove avec cette archi ? 🍻

gameBranch
Pierre FERREIRA 10 months ago
parent 81be263b3a
commit 78c8260d91

@ -12,16 +12,14 @@ import SwiftUI
class GameScene : SKScene{ class GameScene : SKScene{
@ObservedObject var gameVm : GameVM = GameVM(andPlayer1: Player(withName: "Meruemu", andId: .player1)!, @ObservedObject var gameVm : GameVM
andPlayer2: Player(withName: "Kumogi", andId: .player2)!)
let imgBoard : SKSpriteNode = SKSpriteNode(imageNamed: "BoardImg") let imgBoard : SKSpriteNode = SKSpriteNode(imageNamed: "BoardImg")
let defaultSize : CGSize = CGSize(width: 120, height: 120) let defaultSize : CGSize = CGSize(width: 120, height: 120)
var game : Game = try! Game(withRules: ClassicRules(), // var game : Game = try! Game(withRules: ClassicRules(),
andPlayer1: Player(withName: "Meruemu", andId: .player1)!, // andPlayer1: Player(withName: "Meruemu", andId: .player1)!,
andPlayer2: Player(withName: "Kumogi", andId: .player2)!) // andPlayer2: Player(withName: "Kumogi", andId: .player2)!)
// let pieces : [ Owner : [Animal : SpriteMeeple]] = // let pieces : [ Owner : [Animal : SpriteMeeple]] =
// [ // [
@ -48,11 +46,11 @@ class GameScene : SKScene{
// ] // ]
// ] // ]
override init(size s: CGSize){ init(size s: CGSize, andVM gameVM : GameVM){
self.gameVm = gameVM
super.init(size: s) super.init(size: s)
self.addChild(imgBoard) self.addChild(imgBoard)
self.displayBoard(gameVm.game.board)
self.displayBoard(game.board)
self.scaleMode = .aspectFit self.scaleMode = .aspectFit
self.anchorPoint = CGPoint(x: 0.5, y:0.5) self.anchorPoint = CGPoint(x: 0.5, y:0.5)
@ -71,6 +69,9 @@ class GameScene : SKScene{
} }
required init?(coder aDecoder: NSCoder) { required init?(coder aDecoder: NSCoder) {
self.gameVm = GameVM(andPlayer1: Player(withName: "Meruemu", andId: .player1)!,
andPlayer2: Player(withName: "Kumogi", andId: .player2)!)
super.init(coder: aDecoder) super.init(coder: aDecoder)
fatalError("init(coder:) has not been implemented") fatalError("init(coder:) has not been implemented")
} }

@ -16,6 +16,7 @@ import SwiftUI
class GameVM : ObservableObject, Identifiable { class GameVM : ObservableObject, Identifiable {
///Players ///Players
let player1 : Player let player1 : Player
let player2 : Player let player2 : Player
@ -29,6 +30,8 @@ class GameVM : ObservableObject, Identifiable {
//Message //Message
@Published var displayMessage : String = "" @Published var displayMessage : String = ""
var game : Game
public init(withRules rules : Rules = ClassicRules(), andPlayer1 p1: Player, andPlayer2 p2 : Player?) { public init(withRules rules : Rules = ClassicRules(), andPlayer1 p1: Player, andPlayer2 p2 : Player?) {
self.player1 = p1 self.player1 = p1
@ -40,6 +43,10 @@ class GameVM : ObservableObject, Identifiable {
} }
self.actualRules = rules self.actualRules = rules
self.game = try! Game(withRules: actualRules, andPlayer1: player1, andPlayer2: player2)
//TODO recup les pieces de la game ?
self.pieces = self.pieces =
[ .player1 : [ [ .player1 : [
.rat : SpriteMeeple(imageName: "RatMeeple", size: CGSize(width: 120, height: 120), color: Color.player1), .rat : SpriteMeeple(imageName: "RatMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
@ -85,6 +92,8 @@ class GameVM : ObservableObject, Identifiable {
destRow = readInt(withMessage: "\(player.name) please enter the destination row in which you want to move your piece)") destRow = readInt(withMessage: "\(player.name) please enter the destination row in which you want to move your piece)")
destCol = readInt(withMessage: "\(player.name) please enter the destination column in which you want to move your piece)") destCol = readInt(withMessage: "\(player.name) please enter the destination column in which you want to move your piece)")
self.pieces[player.id][Animal.cat]?
return Move(of: player.id, fromRow: originRow!, andFromColumn: originCol!, toRow: destRow!, andToColumn: destCol!) return Move(of: player.id, fromRow: originRow!, andFromColumn: originCol!, toRow: destRow!, andToColumn: destCol!)
} }
@ -97,8 +106,6 @@ class GameVM : ObservableObject, Identifiable {
// return 1 // return 1
// } // }
var game: Game = try Game(withRules: actualRules, andPlayer1: player1, andPlayer2: player2)
for player in game.players { for player in game.players {
if player.value is HumanPlayer { if player.value is HumanPlayer {
let hp = player.value as! HumanPlayer let hp = player.value as! HumanPlayer
@ -118,10 +125,10 @@ class GameVM : ObservableObject, Identifiable {
_ = readLine() _ = readLine()
if player is HumanPlayer { if player is HumanPlayer {
var move = self.readMove(from: player as! HumanPlayer) let move = self.readMove(from: player as! HumanPlayer)
try! await (player as! HumanPlayer).chooseMove(move) try! await (player as! HumanPlayer).chooseMove(move)
} else { } else {
_ = try! await player.chooseMove(in: board, with: game.rules) _ = try! await player.chooseMove(in: board, with: self.game.rules)
} }
}) })

@ -7,6 +7,7 @@
import SwiftUI import SwiftUI
import SpriteKit import SpriteKit
import DouShouQiModel
struct GameView: View { struct GameView: View {
@ -14,24 +15,35 @@ struct GameView: View {
@State private var turnNumber = 1 @State private var turnNumber = 1
@State private var gameTime = 0.0 // Temps en secondes @State private var gameTime = 0.0 // Temps en secondes
@State private var statusMessage = "C'est votre tour" //@State private var statusMessage = "C'est votre tour !"
@State private var player1Pieces = 8 @State private var player1Pieces = 8
@State private var player2Pieces = 8 @State private var player2Pieces = 8
// On donne les deux player à la vue ?
var timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect() var timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
let gridItems = Array(repeating: GridItem(.flexible()), count: 8) let gridItems = Array(repeating: GridItem(.flexible()), count: 8)
///VM
var gameVM : GameVM
///SK ///SK
var gs : GameScene = GameScene(size: CGSizeMake(940,740)) var gs : GameScene
init (){
self.gameVM = GameVM(andPlayer1: Player(withName: "Meruemu", andId: .player1)!, andPlayer2: Player(withName: "Kumogi", andId: .player2)!)
self.gs = GameScene(size: CGSizeMake(940,740), andVM: gameVM)
}
var body: some View { var body: some View {
ZStack{ ZStack{
Rectangle().fill(Color.bgColor).edgesIgnoringSafeArea(.all) Rectangle().fill(Color.bgColor).edgesIgnoringSafeArea(.all)
VStack { VStack {
VStack { VStack {
Text(statusMessage) Text(gameVM.displayMessage)
.font(.title) .font(.title)
.padding(.top, 20) .padding(.top, 20)

@ -10,12 +10,12 @@ import SpriteKit
struct SpriteKitView: View { struct SpriteKitView: View {
///Sprite Kit ///Sprite Kit
var gs : GameScene = GameScene(size: CGSizeMake(940,740)) //var gs : GameScene = GameScene(size: CGSizeMake(940,740))
var body: some View { var body: some View {
VStack{ VStack{
SpriteView(scene: gs) //SpriteView(scene: gs)
} }
} }
} }

Loading…
Cancel
Save