now, no invalid move

dev_views_Game
Rémi REGNAULT 10 months ago
parent 67b86d0085
commit e5b2109b23

@ -6,15 +6,18 @@
//
import SwiftUI
import DouShouQiModel
struct TopGameBoard: View {
@ObservedObject var gameVM: PlayingGameVM
var body: some View {
VStack {
HStack {
Circle()
.fill(Color.white)
.frame(width: 40, height: 40)
Text("Player 1 Turn")
Text("\(gameVM.currentPlayerName)'s Turn")
.font(.title)
.foregroundColor(.white)
}
@ -37,14 +40,14 @@ struct TopGameBoard: View {
Spacer()
HStack {
Text("Last moove :")
Text("Last move :")
.font(.title2)
.foregroundColor(.black)
/*Image(systemName: "cheetah")
.resizable()
.frame(width: 30, height: 30)*/
Text("🦁")
Text("2.3")
Text(gameVM.lastPieceMoved)
Text(gameVM.lastMove)
.font(.title2)
.foregroundColor(.black)
}
@ -60,8 +63,8 @@ struct TopGameBoard: View {
}
}
struct TopGameBoard_Previews: PreviewProvider {
static var previews: some View {
TopGameBoard()
}
}
//struct TopGameBoard_Previews: PreviewProvider {
// static var previews: some View {
// TopGameBoard(gameVM: vm)
// }
//}

@ -6,15 +6,16 @@
//
import Foundation
import SwiftUI
import SpriteKit
import DouShouQiModel
class GameScene : SKScene {
var player1: HumanPlayer = HumanPlayer(withName: "Rémi", andId: .player1)!
var player2: HumanPlayer = HumanPlayer(withName: "Rayhan", andId: .player2)!
var player1: DouShouQiModel.Player?
var player2: DouShouQiModel.Player?
var game: Game
var game: Game?
let pieces: [Owner : [Animal:SpriteMeeple]] = [
.player1: [
@ -42,7 +43,6 @@ class GameScene : SKScene {
let imageBoard: SKSpriteNode = SKSpriteNode(imageNamed: AppImages.boardGame)
override init(size: CGSize) {
game = try! Game(withRules: ClassicRules(), andPlayer1: player1, andPlayer2: player2)
super.init(size: size)
imageBoard.size = size
//self.scaleMode = .aspectFit
@ -50,15 +50,22 @@ class GameScene : SKScene {
self.backgroundColor = .white
self.addChild(imageBoard)
}
convenience init(size: CGSize, gameVM: PlayingGameVM) {
self.init(size: size)
self.game = gameVM.game
self.player1 = self.game?.players[.player1]
self.player2 = self.game?.players[.player2]
for piece in pieces.flatMap({owner, pieces in pieces.values}) {
self.addChild(piece)
piece.setOnMove(onMove: onMeepleMove)
}
initializeBoard(game.board)
initializeBoard(game!.board)
game.addInvalidMoveCallbacksListener { _, move, player, result in
game?.addInvalidMoveCallbacksListener { _, move, player, result in
if result {
return
}
@ -69,42 +76,44 @@ class GameScene : SKScene {
}
Task {
try await game.start()
try await game?.start()
}
}
func initializeBoard(_ board: Board) {
for (lineIndex, currentLine) in game.board.grid.enumerated() {
for (lineIndex, currentLine) in game!.board.grid.enumerated() {
for (cellIndex, currentCell) in currentLine.enumerated() {
if let piece = currentCell.piece {
pieces[piece.owner]?[piece.animal]?.cellPosition = CGPoint(x: cellIndex-3, y: lineIndex-4)
pieces[piece.owner]?[piece.animal]?.cellPosition = CGPoint(x: cellIndex, y: lineIndex)
pieces[piece.owner]?[piece.animal]?.cellPosition = CGPoint(x: 0, y: 0)
print("line :", lineIndex, " cologne: ", cellIndex)
print("line :", lineIndex, " column: ", cellIndex)
}
}
}
}
required init?(coder aDecoder: NSCoder) {
game = try! Game(withRules: ClassicRules(), andPlayer1: player1, andPlayer2: player2)
game = try! Game(withRules: ClassicRules(), andPlayer1: DouShouQiModel.Player(withName: "P1", andId: .player1)!, andPlayer2: DouShouQiModel.Player(withName: "P2", andId: .player2)!)
super.init(coder: aDecoder);
}
func onMeepleMove(_ start: CGPoint, _ end: CGPoint) {
let owner = game.rules.getNextPlayer()
let player = game.players[owner]
if let game: Game = self.game {
let owner = game.rules.getNextPlayer()
let player: DouShouQiModel.Player = game.players[owner]!
let move = Move(of: owner, fromRow: Int(start.x), andFromColumn: Int(start.y), toRow: Int(end.x), andToColumn: Int(end.y))
let move = Move(of: owner, fromRow: Int(start.y), andFromColumn: Int(start.x), toRow: Int(end.y), andToColumn: Int(end.x))
print("Meeple moved = ", start, " -> ", end)
print("Meeple moved = ", start, " -> ", end)
Task {
try! await (player as! HumanPlayer).chooseMove(move)
Task {
try! await (player as! HumanPlayer).chooseMove(move)
}
}
}
public func start() async throws {
try await game.start()
try await game?.start()
}
}

@ -10,8 +10,8 @@ import SpriteKit
class SpriteMeeple : SKNode {
static let offset = CGPoint(x: 0, y: 0)
static let direction = CGVector(dx: 100, dy: 100)
static let offset = CGPoint(x: -300, y: 400)
static let direction = CGVector(dx: 100, dy: -100)
let imageNode : SKSpriteNode
var ellipseNode : SKShapeNode
@ -24,7 +24,7 @@ class SpriteMeeple : SKNode {
var cellPosition: CGPoint{
didSet(cellPosition){
self.position.x = SpriteMeeple.offset.x + SpriteMeeple.direction.dx*cellPosition.x
self.position.y = SpriteMeeple.offset.y + SpriteMeeple.direction.dx*cellPosition.y
self.position.y = SpriteMeeple.offset.y + SpriteMeeple.direction.dy*cellPosition.y
}
}

@ -14,7 +14,18 @@ class PlayingGameVM: ObservableObject {
@Published var game: Game
// Computed properties
public var currentPlayerName: String { game.players[game.rules.getNextPlayer()]?.name ?? (game.rules.getNextPlayer() == .player1 : "p1" ?? "p2") }
public var currentPlayerName: String { game.players[game.rules.getNextPlayer()]?.name ?? (game.rules.getNextPlayer() == .player1 ? "P1" : "P2") }
public var lastMove: String {
if let move: Move = game.rules.historic.last {
return "\(move.rowDestination).\(move.columnDestination)"
}
else {
return ""
}
}
public var lastPieceMoved: String { "oui" }
// Inits
init(withGame game: Game) {
@ -26,6 +37,7 @@ class PlayingGameVM: ObservableObject {
self.game = try Game(withRules: rules, andPlayer1: p1, andPlayer2: p2)
} catch {
print("Error")
return nil
}
}

@ -7,14 +7,15 @@
import SwiftUI
import SpriteKit
import DouShouQiModel
struct GameView: View {
var gameScene : GameScene = GameScene(size: CGSize(width: 700, height: 900))
@StateObject var gameVM: PlayingGameVM = PlayingGameVM(withRules: ClassicRules(), andPlayer1: DouShouQiModel.HumanPlayer(withName: "Rémi", andId: .player1)!, andPlayer2: DouShouQiModel.HumanPlayer(withName: "Nathan", andId: .player2)!)!
var body: some View {
VStack {
TopGameBoard().frame(maxHeight: 200)
SpriteView(scene: gameScene)
TopGameBoard(gameVM: gameVM).frame(maxHeight: 200)
SpriteView(scene: GameScene(size: CGSize(width: 700, height: 900), gameVM: gameVM))
}
.onAppear {
MusicPlayer.shared.playBackgroundMusic(music: "GameMusic")

Loading…
Cancel
Save