debut de l'assimilation au jeu :wheel_chair:

gameBranch
Pierre FERREIRA 10 months ago
parent 3f1b5618ba
commit 81be263b3a

@ -11,80 +11,49 @@ import SpriteKit
import SwiftUI
class GameScene : SKScene{
@ObservedObject var gameVm : GameVM = GameVM(andPlayer1: Player(withName: "Meruemu", andId: .player1)!,
andPlayer2: Player(withName: "Kumogi", andId: .player2)!)
let imgBoard : SKSpriteNode = SKSpriteNode(imageNamed: "BoardImg")
let defaultSize : CGSize = CGSize(width: 120, height: 120)
var game : Game = try! Game(withRules: ClassicRules(),
andPlayer1: Player(withName: "Meruemu", andId: .player1)!,
andPlayer2: Player(withName: "Kumogi", andId: .player2)!)
let pieces : [ Owner : [Animal : SpriteMeeple]] =
[ .player1 : [
.rat : SpriteMeeple(imageName: "RatMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
.cat : SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
.dog : SpriteMeeple(imageName: "DogoMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
.wolf : SpriteMeeple(imageName: "WolfMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
.leopard : SpriteMeeple(imageName: "LeoMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
.tiger : SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
.lion : SpriteMeeple(imageName: "LionMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
.elephant : SpriteMeeple(imageName: "ElphMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
],
.player2: [
.rat : SpriteMeeple(imageName: "RatMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
.cat : SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
.dog : SpriteMeeple(imageName: "DogoMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
.wolf : SpriteMeeple(imageName: "WolfMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
.leopard : SpriteMeeple(imageName: "LeoMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
.tiger : SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
.lion : SpriteMeeple(imageName: "LionMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
.elephant : SpriteMeeple(imageName: "ElphMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
]
]
// let pieces : [ Owner : [Animal : SpriteMeeple]] =
// [
// .player1 : [
// .rat : SpriteMeeple(imageName: "RatMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
// .cat : SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
// .dog : SpriteMeeple(imageName: "DogoMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
// .wolf : SpriteMeeple(imageName: "WolfMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
// .leopard : SpriteMeeple(imageName: "LeoMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
// .tiger : SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
// .lion : SpriteMeeple(imageName: "LionMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
// .elephant : SpriteMeeple(imageName: "ElphMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
// ],
//
// .player2: [
// .rat : SpriteMeeple(imageName: "RatMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
// .cat : SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
// .dog : SpriteMeeple(imageName: "DogoMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
// .wolf : SpriteMeeple(imageName: "WolfMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
// .leopard : SpriteMeeple(imageName: "LeoMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
// .tiger : SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
// .lion : SpriteMeeple(imageName: "LionMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
// .elephant : SpriteMeeple(imageName: "ElphMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
// ]
// ]
override init(size s: CGSize){
super.init(size: s)
self.addChild(imgBoard)
self.displayBoard(game.board)
/*
let cat = SpriteMeeple(imageName: "CatMeeple")
cat.position = CGPoint(x: 300, y: 200)
cat.imageNode.size = CGSize(width: 120, height: 120)
self.addChild(cat)
let rat = SpriteMeeple(imageName: "RatMeeple")
rat.position = CGPoint(x: 200, y: 100)
rat.imageNode.size = CGSize(width: 120, height: 120)
self.addChild(rat)
let dog = SpriteMeeple(imageName: "DogoMeeple")
dog.position = CGPoint(x: 200, y: 300)
dog.imageNode.size = CGSize(width: 120, height: 120)
self.addChild(dog)
let cat2 = SpriteMeeple(imageName: "CatMeeple")
cat2.position = CGPoint(x: 300, y: -200)
cat2.imageNode.size = CGSize(width: 120, height: 120)
self.addChild(cat2)
let rat2 = SpriteMeeple(imageName: "RatMeeple")
rat2.position = CGPoint(x: 200, y: -100)
rat2.imageNode.size = CGSize(width: 120, height: 120)
self.addChild(rat2)
let dog2 = SpriteMeeple(imageName: "DogoMeeple")
dog2.position = CGPoint(x: 200, y: -300)
dog2.imageNode.size = CGSize(width: 120, height: 120)
self.addChild(dog2)
let wolf = SpriteMeeple(imageName: "WolfMeeple")
wolf.position = CGPoint(x: 300, y: 0)
wolf.imageNode.size = CGSize(width: 120, height: 120)
self.addChild(wolf)
*/
self.scaleMode = .aspectFit
self.anchorPoint = CGPoint(x: 0.5, y:0.5)
}
@ -93,9 +62,9 @@ class GameScene : SKScene{
for row in 0..<board.nbRows{
for col in 0..<board.nbColumns{
if let p = board.grid[row][col].piece{
pieces[p.owner]?[p.animal]?.cellPosition = CGPoint(x: row, y: col);
pieces[p.owner]?[p.animal]?.imageNode.size = CGSize(width: 120, height: 120)
self.addChild(pieces[p.owner]![p.animal]!);
gameVm.pieces[p.owner]?[p.animal]?.cellPosition = CGPoint(x: row, y: col);
gameVm.pieces[p.owner]?[p.animal]?.imageNode.size = CGSize(width: 120, height: 120)
self.addChild(gameVm.pieces[p.owner]![p.animal]!);
}
}
}

@ -6,7 +6,125 @@
//
import Foundation
//Gestion de la boucle de jeu par la création d'une tache async
//on s'abonne aux événements, notament game.addPlayerNotifiedListeneren.
import DouShouQiModel
import SpriteKit
import SwiftUI
// Gestion de la boucle de jeu par la création d'une tache async<
// On s'abonne aux événements, notament game.addPlayerNotifiedListeneren.
// Les joueurs n'ont besoin que de nom
class GameVM : ObservableObject, Identifiable {
///Players
let player1 : Player
let player2 : Player
var pieces : [ Owner : [Animal : SpriteMeeple]]
let actualRules : Rules
///Error
@Published var hasError : Bool = false
//Message
@Published var displayMessage : String = ""
public init(withRules rules : Rules = ClassicRules(), andPlayer1 p1: Player, andPlayer2 p2 : Player?) {
self.player1 = p1
if let p2 {
self.player2 = p2
}
else {
self.player2 = RandomPlayer(withName: "Bobot", andId: .player2)!
}
self.actualRules = rules
self.pieces =
[ .player1 : [
.rat : SpriteMeeple(imageName: "RatMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
.cat : SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
.dog : SpriteMeeple(imageName: "DogoMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
.wolf : SpriteMeeple(imageName: "WolfMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
.leopard : SpriteMeeple(imageName: "LeoMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
.tiger : SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
.lion : SpriteMeeple(imageName: "LionMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
.elephant : SpriteMeeple(imageName: "ElphMeeple", size: CGSize(width: 120, height: 120), color: Color.player1),
],
.player2: [
.rat : SpriteMeeple(imageName: "RatMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
.cat : SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
.dog : SpriteMeeple(imageName: "DogoMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
.wolf : SpriteMeeple(imageName: "WolfMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
.leopard : SpriteMeeple(imageName: "LeoMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
.tiger : SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
.lion : SpriteMeeple(imageName: "LionMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
.elephant : SpriteMeeple(imageName: "ElphMeeple", size: CGSize(width: 120, height: 120), color: Color.player2),
]
]
}
func readInt(withMessage message: String) -> Int {
var temp: Int?
while temp == nil {
print(message)
let result = readLine()
temp = Int(result ?? "")
}
return temp!
}
func readMove(from player: HumanPlayer) -> Move? {
var originRow, originCol, destRow, destCol : Int?
originRow = readInt(withMessage: "\(player.name) please enter the origin row in which your piece is)")
originCol = readInt(withMessage: "\(player.name) please enter the origin column in which your piece is)")
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)")
return Move(of: player.id, fromRow: originRow!, andFromColumn: originCol!, toRow: destRow!, andToColumn: destCol!)
}
func startGame() async throws -> Int
{
// if (player1 == nil || player2 == nil){
// //Affichage de l'erreur
// return 1
// }
var game: Game = try Game(withRules: actualRules, andPlayer1: player1, andPlayer2: player2)
for player in game.players {
if player.value is HumanPlayer {
let hp = player.value as! HumanPlayer
hp.changeInput(input: readMove)
}
}
game.addGameStartedListener {_ in
self.displayMessage = "🎉 GAME STARTS! 🎉"
}
game.addPlayerNotifiedListener({ board, player in
self.displayMessage = "Player \(player.id == .player1 ? "🟡 1" : "🔴 2") - \(player.name), it's your turn!"
//try! await Persistance.saveGame(withName: "game", andGame: game2)
_ = readLine()
if player is HumanPlayer {
var move = self.readMove(from: player as! HumanPlayer)
try! await (player as! HumanPlayer).chooseMove(move)
} else {
_ = try! await player.chooseMove(in: board, with: game.rules)
}
})
return 0
}
}

@ -86,6 +86,7 @@ class SpriteMeeple : SKNode{
self.position.y = (calcy.rounded(.toNearestOrAwayFromZero))*100;
}
}
required init?(coder aDecoder: NSCoder) {

Loading…
Cancel
Save