From b494c21a198908593d950a4a28c12d1002b513d8 Mon Sep 17 00:00:00 2001
From: Pierre Ferreira
Date: Mon, 24 Jun 2024 21:51:07 +0200
Subject: [PATCH] clean code : suppression de magic number, ajout de
commentaire et relecture des codes morts :fire:
---
.../DouShouQiIOS/Class/GameScene.swift | 70 ++++++++++---------
DouShouQiIOS/DouShouQiIOS/Class/GameVM.swift | 69 +++++-------------
.../DouShouQiIOS/Class/ImagePicker.swift | 2 +
DouShouQiIOS/DouShouQiIOS/Class/Player.swift | 1 +
.../DouShouQiIOS/Class/PlayerVM.swift | 4 ++
.../DouShouQiIOS/Class/SpriteMeeple.swift | 51 +++++++++-----
.../ContentView/ClassicTextDisplay.swift | 2 +
.../ContentView/DoubleTextDisplay.swift | 1 +
.../DouShouQiIOS/ContentView/NavButton.swift | 1 +
.../DouShouQiIOS/Extension/Color.swift | 2 +
.../Extension/PlayerExtension.swift | 2 +
.../DouShouQiIOS/Struct/FullButtonStyle.swift | 2 +
.../DouShouQiIOS/Stub/StubbedPlayers.swift | 2 +
.../DouShouQiIOS/View/EditModalView.swift | 2 +
DouShouQiIOS/DouShouQiIOS/View/GameView.swift | 34 ++-------
.../DouShouQiIOS/View/HistoryView.swift | 3 +-
.../DouShouQiIOS/View/MainMenuView.swift | 4 +-
.../DouShouQiIOS/View/PlayerListView.swift | 37 ++--------
.../DouShouQiIOS/View/PlayerSelect.swift | 26 +++++--
.../DouShouQiIOS/View/PlayerView.swift | 11 +--
.../DouShouQiIOS/View/SpriteKitView.swift | 5 +-
21 files changed, 142 insertions(+), 189 deletions(-)
diff --git a/DouShouQiIOS/DouShouQiIOS/Class/GameScene.swift b/DouShouQiIOS/DouShouQiIOS/Class/GameScene.swift
index f630146..a0247fa 100644
--- a/DouShouQiIOS/DouShouQiIOS/Class/GameScene.swift
+++ b/DouShouQiIOS/DouShouQiIOS/Class/GameScene.swift
@@ -10,53 +10,56 @@ import DouShouQiModel
import SpriteKit
import SwiftUI
+
+// Class GameScene
+// This class is used to display the game board and the pieces on it
class GameScene : SKScene{
- // @ObservedObject var gameVm : GameVM
-
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),
- ],
+ // Define constants
+ let meepleSizeWidth: CGFloat = 120
+ let meepleSizeHeight: CGFloat = 120
- .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),
+ // Players pieces
+ let pieces: [Owner: [Animal: SpriteMeeple]] =
+ [
+ .player1: [
+ .rat: SpriteMeeple(imageName: "RatMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player1),
+ .cat: SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player1),
+ .dog: SpriteMeeple(imageName: "DogoMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player1),
+ .wolf: SpriteMeeple(imageName: "WolfMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player1),
+ .leopard: SpriteMeeple(imageName: "LeoMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player1),
+ .tiger: SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player1),
+ .lion: SpriteMeeple(imageName: "LionMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player1),
+ .elephant: SpriteMeeple(imageName: "ElphMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player1),
+ ],
+
+ .player2: [
+ .rat: SpriteMeeple(imageName: "RatMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player2),
+ .cat: SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player2),
+ .dog: SpriteMeeple(imageName: "DogoMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player2),
+ .wolf: SpriteMeeple(imageName: "WolfMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player2),
+ .leopard: SpriteMeeple(imageName: "LeoMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player2),
+ .tiger: SpriteMeeple(imageName: "CatMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player2),
+ .lion: SpriteMeeple(imageName: "LionMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player2),
+ .elephant: SpriteMeeple(imageName: "ElphMeeple", size: CGSize(width: meepleSizeWidth, height: meepleSizeHeight), color: Color.player2),
+ ]
]
- ]
- override init(size s: CGSize){ //, andVM gameVM : GameVM
- //self.gameVm = gameVM
+ override init(size s: CGSize){
super.init(size: s)
self.addChild(imgBoard)
- //self.displayBoard(gameVm.game.board)
-
self.scaleMode = .aspectFit
self.anchorPoint = CGPoint(x: 0.5, y:0.5)
}
+ /**
+ * Display the board
+ * @param board : DouShouQiModel.Board - The board to display
+ */
func displayBoard(_ board : DouShouQiModel.Board){
//Nettoyage des fils
@@ -67,7 +70,7 @@ class GameScene : SKScene{
for col in 0.. todelete)
-// 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 = ""
- //On donne directement la scene et la game à la vm
public init(withGame _game : Game, andScene _gameScene : GameScene) {
self.game = _game
@@ -52,23 +43,22 @@ class GameVM : ObservableObject, Identifiable {
self.subscribesToMeeple()
+ ///Lancement du jeu
Task{
try! await self.game.start()
}
}
-
+ /// Début du jeu
func onGameStart(board : Board){
- displayMessage = " ==>> 🎉 GAME STARTS! 🎉 <<== "
+ displayMessage = "==>> 🎉 GAME STARTS! 🎉 <<=="
self.gameScene.displayBoard(board)
- print("GAME STARTS")
}
+ /// Notification du joueur
func onPlayerNotified(board : Board, player : Player) async{
- print("PLAYER NOTIFIED")
if player is HumanPlayer {
displayMessage = "Player \(player.id == .player1 ? "🟡 1" : "🔴 2") - \(player.name), it's your turn!"
- //try! await (player as! HumanPlayer).chooseMove(move)
}
else {
do{
@@ -80,6 +70,7 @@ class GameVM : ObservableObject, Identifiable {
}
}
+ /// Mouvement choisi
func onMoveChosen(board : Board, move : Move, player : Player){
///Récupération du Meeple :
let movedPiece = board.grid[move.rowOrigin][move.columnOrigin]
@@ -98,16 +89,16 @@ class GameVM : ObservableObject, Identifiable {
if result { ///* invalidité terminante
if let piece = board.grid[move.rowDestination][move.columnDestination].piece{
- // Delete le meeple
let meeples = gameScene.pieces[player.id == .player1 ? .player2 : .player1]
let meeple = meeples?.first(where: {
$0.key == piece.animal
})
meeple?.value.parent?.removeChildren(in: [meeple!.value])
-
}
return
}
+
+ ///* invalidité non terminante
let piece = board.grid[move.rowOrigin][move.columnOrigin]
let meeples = gameScene.pieces[move.owner]
let meeple = meeples?.first(where: {
@@ -115,45 +106,21 @@ class GameVM : ObservableObject, Identifiable {
})
meeple?.value.cellPosition = CGPoint(x: move.rowOrigin, y: move.columnOrigin);
-
- print("INVALID")
}
-
- func invalideMoveChosen(board: Board, move: Move, player: Player, result: Bool) {
- if result {
- if let piece = board.grid[move.rowDestination][move.columnDestination].piece{
- // Delete le meeple
- let meeples = gameScene.pieces[player.id == .player1 ? .player2 : .player1]
- let meeple = meeples?.first(where: {
- $0.key == piece.animal
- })
- meeple?.value.parent?.removeChildren(in: [meeple!.value])
-
- }
- return
- }
- let piece = board.grid[move.rowOrigin][move.columnOrigin]
- let meeples = gameScene.pieces[move.owner]
- let meeple = meeples?.first(where: {
- $0.key == piece.piece?.animal
- })
-
- meeple?.value.cellPosition = CGPoint(x: move.rowOrigin, y: move.columnOrigin);
- }
-
+ ///Changement de plateau
func onBoardChanged(board : Board){
/// Bruit d'un placement de pion ?
}
+ ///Fin du jeu
func onGameOver(board : Board, result : Result, winner : Player?){
displayMessage = "Game Over!!!"
isGameOver = true ///Gestion par l'appelant
}
-
- ///Meeples
-
+ ///*Meeples
+ ///Abonnement aux mouvements des Meeples
func subscribesToMeeple(){
for meeple in gameScene.pieces[.player1]!{
meeple.value.observers.append(meepleMoved)
@@ -163,13 +130,13 @@ class GameVM : ObservableObject, Identifiable {
}
}
+ ///*Mouvement d'un Meeple
func meepleMoved(spriteMeeple: SpriteMeeple, startX: Int, startY: Int, endX: Int, endY: Int) async{
let owner : Owner = game.board.grid[startX][startY].piece!.owner
let otherPlayer : Owner = self.game.rules.getNextPlayer()
let move: Move = Move(of: owner, fromRow: startX, andFromColumn: startY, toRow: endX, andToColumn: endY)
if(otherPlayer != owner){ ///Mauvais Joueur pour ce jeton
- print("invalide de la part de meepleMoved")
onInvalidMove(board: game.board, move: move, player: game.players[otherPlayer]!, result: false)
return
}
@@ -177,12 +144,10 @@ class GameVM : ObservableObject, Identifiable {
if let player: HumanPlayer = game.players[owner] as? HumanPlayer{
try! await player.chooseMove(move)
}
-// else { ///IMPOSSIBLE DE CAST LE JOUEUR HUMAIN
+// else { ///! IMPOSSIBLE DE CAST LE JOUEUR HUMAIN ==> SIGABRT
// let player: HumanPlayer = game.players[.player1] as! HumanPlayer
// try! await player.chooseMove(move)
// }
-
- print("il a bougé")
}
}
diff --git a/DouShouQiIOS/DouShouQiIOS/Class/ImagePicker.swift b/DouShouQiIOS/DouShouQiIOS/Class/ImagePicker.swift
index fbb0b5c..97542d2 100644
--- a/DouShouQiIOS/DouShouQiIOS/Class/ImagePicker.swift
+++ b/DouShouQiIOS/DouShouQiIOS/Class/ImagePicker.swift
@@ -7,6 +7,8 @@
import SwiftUI
+/// ImagePicker
+/// Classe récupéré d'internet pour permettre de choisir une image dans la galerie
struct ImagePicker: UIViewControllerRepresentable {
@Environment(\.presentationMode) private var presentationMode
var sourceType: UIImagePickerController.SourceType = .photoLibrary
diff --git a/DouShouQiIOS/DouShouQiIOS/Class/Player.swift b/DouShouQiIOS/DouShouQiIOS/Class/Player.swift
index 62a2f6a..ffbf86e 100644
--- a/DouShouQiIOS/DouShouQiIOS/Class/Player.swift
+++ b/DouShouQiIOS/DouShouQiIOS/Class/Player.swift
@@ -7,6 +7,7 @@
import Foundation
+///! Ancienne classe, supprimée suite à la mise en place de la librairie DouShouQiModel
/// Représente un joueur
/*
diff --git a/DouShouQiIOS/DouShouQiIOS/Class/PlayerVM.swift b/DouShouQiIOS/DouShouQiIOS/Class/PlayerVM.swift
index 3e534d9..f069ecc 100644
--- a/DouShouQiIOS/DouShouQiIOS/Class/PlayerVM.swift
+++ b/DouShouQiIOS/DouShouQiIOS/Class/PlayerVM.swift
@@ -8,6 +8,8 @@
import Foundation
import DouShouQiModel
+/// PlayerVM
+/// Cette classe est utilisée pour gérer la logique du joueur
class PlayerVM : ObservableObject, Identifiable {
@Published var player : Player
@Published var data : Player.Data
@@ -19,11 +21,13 @@ class PlayerVM : ObservableObject, Identifiable {
self.isEditing = false
}
+ /// Début de l'édition
func onEditing(){
self.data = player.data
self.isEditing = true
}
+ /// Fin de l'édition
func onEdited(isCanceled cancel : Bool = false){
if !cancel {
//save
diff --git a/DouShouQiIOS/DouShouQiIOS/Class/SpriteMeeple.swift b/DouShouQiIOS/DouShouQiIOS/Class/SpriteMeeple.swift
index 899b034..b6906a1 100644
--- a/DouShouQiIOS/DouShouQiIOS/Class/SpriteMeeple.swift
+++ b/DouShouQiIOS/DouShouQiIOS/Class/SpriteMeeple.swift
@@ -9,7 +9,11 @@ import Foundation
import SpriteKit
import SwiftUI
+/// SpriteMeeple
+/// Cette classe est utilisée pour gérer les pièces des joueurs
class SpriteMeeple : SKNode, ObservableObject{
+
+
let imageNode : SKSpriteNode
let ellipseNode : SKShapeNode
@@ -37,7 +41,6 @@ class SpriteMeeple : SKNode, ObservableObject{
ellipseNode = SKShapeNode(ellipseOf: CGSize(width: 100, height: 100))
ellipseNode.fillColor = UIColor(meepleColor);
-
self.cellPosition = CGPoint(x: 0, y: 0)
@@ -54,46 +57,58 @@ class SpriteMeeple : SKNode, ObservableObject{
get {true}
}
+ ///TouchesBegan
+ /// Cette fonction est appelée lorsque l'utilisateur commence à toucher l'écran
override func touchesMoved(_ touches: Set, with event: UIEvent?) {
self.position = touches.first?.location(in: parent!) ?? CGPoint(x: 0, y: 0)
}
+ ///TouchesEnded
+ /// Cette fonction est appelée lorsque l'utilisateur a terminé de toucher l'écran
override func touchesEnded(_ touches: Set, with event: UIEvent?) {
-
+
+ //* Contantes
+ ///Limites du board
+ static let rightLimit: CGFloat = 400
+ static let leftLimit: CGFloat = -400
+ static let topLimit: CGFloat = 300
+ static let bottomLimit: CGFloat = -300
+ static let gridSize: CGFloat = 100
+
/// Bordures du board
///Right
- if (self.position.x < -400){
- self.position.x = -400;
+ if (self.position.x < leftLimit){
+ self.position.x = leftLimit;
}
///Left
- if (self.position.x > 400){
- self.position.x = 400;
+ if (self.position.x > rightLimit){
+ self.position.x = rightLimit;
}
///Bottom
- if (self.position.y < -300){
- self.position.y = -300;
+ if (self.position.y < bottomLimit){
+ self.position.y = bottomLimit;
}
///Top
- if (self.position.y > 300){
- self.position.y = 300;
+ if (self.position.y > topLimit){
+ self.position.y = topLimit;
}
- if (!Int(self.position.x).isMultiple(of: 100)){
- let calcx = self.position.x/100.0;
- self.position.x = (calcx.rounded(.toNearestOrAwayFromZero))*100;
+ if (!Int(self.position.x).isMultiple(of: gridSize)){
+ let calcx = self.position.x/gridSize;
+ self.position.x = (calcx.rounded(.toNearestOrAwayFromZero))*gridSize;
}
- if (!Int(self.position.y).isMultiple(of: 100)){
- let calcy = self.position.y/100.0;
- self.position.y = (calcy.rounded(.toNearestOrAwayFromZero))*100;
+ if (!Int(self.position.y).isMultiple(of: gridSize)){
+ let calcy = self.position.y/gridSize;
+ self.position.y = (calcy.rounded(.toNearestOrAwayFromZero))*gridSize;
}
- ///Envoi au observers d'une notif
+ ///Envoi aux observers d'une notif
- ///* Exectution des Observeurs
+ ///* Execution des Observeurs
Task {
for observer in observers {
await observer(self, Int(cellPosition.x), Int(cellPosition.y), Int(position.x), Int(position.y))
diff --git a/DouShouQiIOS/DouShouQiIOS/ContentView/ClassicTextDisplay.swift b/DouShouQiIOS/DouShouQiIOS/ContentView/ClassicTextDisplay.swift
index ddc0bb9..f8bb523 100644
--- a/DouShouQiIOS/DouShouQiIOS/ContentView/ClassicTextDisplay.swift
+++ b/DouShouQiIOS/DouShouQiIOS/ContentView/ClassicTextDisplay.swift
@@ -7,6 +7,8 @@
import SwiftUI
+/// ClassicTextDisplay
+/// Affichage classique d'un texte récurrent
struct ClassicTextDisplay: View {
let text : String
diff --git a/DouShouQiIOS/DouShouQiIOS/ContentView/DoubleTextDisplay.swift b/DouShouQiIOS/DouShouQiIOS/ContentView/DoubleTextDisplay.swift
index 481df04..5d9185f 100644
--- a/DouShouQiIOS/DouShouQiIOS/ContentView/DoubleTextDisplay.swift
+++ b/DouShouQiIOS/DouShouQiIOS/ContentView/DoubleTextDisplay.swift
@@ -7,6 +7,7 @@
import SwiftUI
+/// Affichage d'une texte en deux parties
struct DoubleTextDisplay: View {
let textL : String
let textR : String
diff --git a/DouShouQiIOS/DouShouQiIOS/ContentView/NavButton.swift b/DouShouQiIOS/DouShouQiIOS/ContentView/NavButton.swift
index 13fb5ff..1c7c59f 100644
--- a/DouShouQiIOS/DouShouQiIOS/ContentView/NavButton.swift
+++ b/DouShouQiIOS/DouShouQiIOS/ContentView/NavButton.swift
@@ -7,6 +7,7 @@
import SwiftUI
+/// Bouton de navigation récurrent
struct NavButton: View {
let text : String
diff --git a/DouShouQiIOS/DouShouQiIOS/Extension/Color.swift b/DouShouQiIOS/DouShouQiIOS/Extension/Color.swift
index e884c78..90811a8 100644
--- a/DouShouQiIOS/DouShouQiIOS/Extension/Color.swift
+++ b/DouShouQiIOS/DouShouQiIOS/Extension/Color.swift
@@ -8,6 +8,8 @@
import Foundation
import SwiftUI
+/// Extension de la classe Color pour ajouter des couleurs personnalisées
+//! classe DEPRECATED : utilisée avant la mise en place des thèmes via XCode
public extension Color {
init(hex: String) {
let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
diff --git a/DouShouQiIOS/DouShouQiIOS/Extension/PlayerExtension.swift b/DouShouQiIOS/DouShouQiIOS/Extension/PlayerExtension.swift
index d6c2523..8d4d56a 100644
--- a/DouShouQiIOS/DouShouQiIOS/Extension/PlayerExtension.swift
+++ b/DouShouQiIOS/DouShouQiIOS/Extension/PlayerExtension.swift
@@ -8,6 +8,8 @@
import Foundation
import DouShouQiModel
+/// Extension de Player
+//! DEPRECIATED : Créé pour la modification de la classe Player, abandonné car nécéssite l'abandon de la librairie DouShouQiModel
extension Player {
//var age : Int{get{return 0} set{age = newValue}}
diff --git a/DouShouQiIOS/DouShouQiIOS/Struct/FullButtonStyle.swift b/DouShouQiIOS/DouShouQiIOS/Struct/FullButtonStyle.swift
index 44a3d3c..57a5a73 100644
--- a/DouShouQiIOS/DouShouQiIOS/Struct/FullButtonStyle.swift
+++ b/DouShouQiIOS/DouShouQiIOS/Struct/FullButtonStyle.swift
@@ -8,6 +8,8 @@
import Foundation
import SwiftUI
+/// FullButtonStyle
+/// Utilisé pour définir le style d'un bouton
struct FullButtonStyle: ButtonStyle {
func makeBody(configuration: Configuration) -> some View {
configuration.label
diff --git a/DouShouQiIOS/DouShouQiIOS/Stub/StubbedPlayers.swift b/DouShouQiIOS/DouShouQiIOS/Stub/StubbedPlayers.swift
index 3bd77e2..a4daf44 100644
--- a/DouShouQiIOS/DouShouQiIOS/Stub/StubbedPlayers.swift
+++ b/DouShouQiIOS/DouShouQiIOS/Stub/StubbedPlayers.swift
@@ -8,8 +8,10 @@
import Foundation
import DouShouQiModel
+// Liste de joueurs fictifs afin de tester l'application.
struct StubbedPlayers{
+ //(Joueurs populaires de Gun-gi)//
let meruem : PlayerVM = PlayerVM(with: Player(withName: "Meruemu", andId: .player1)!)
let kumogi : PlayerVM = PlayerVM(with: Player(withName: "Kumogi", andId: .player2)!)
diff --git a/DouShouQiIOS/DouShouQiIOS/View/EditModalView.swift b/DouShouQiIOS/DouShouQiIOS/View/EditModalView.swift
index 88e947e..2ce27bc 100644
--- a/DouShouQiIOS/DouShouQiIOS/View/EditModalView.swift
+++ b/DouShouQiIOS/DouShouQiIOS/View/EditModalView.swift
@@ -8,6 +8,8 @@
import SwiftUI
import DouShouQiModel
+/// EditModalView
+/// Cette vue modale est utilisée pour éditer un joueur
struct EditModalView: View {
var playerVM : PlayerVM
diff --git a/DouShouQiIOS/DouShouQiIOS/View/GameView.swift b/DouShouQiIOS/DouShouQiIOS/View/GameView.swift
index 6073646..5efbe7b 100644
--- a/DouShouQiIOS/DouShouQiIOS/View/GameView.swift
+++ b/DouShouQiIOS/DouShouQiIOS/View/GameView.swift
@@ -9,13 +9,15 @@ import SwiftUI
import SpriteKit
import DouShouQiModel
+/// Vue principale du jeu
struct GameView: View {
@Environment(\.colorScheme) var colorScheme
@State private var turnNumber = 1
@State private var gameTime = 0.0 // Temps en secondes
- //@State private var statusMessage = "C'est votre tour !"
+
+ //Nombre de pièces des joueurs
@State private var player1Pieces = 8
@State private var player2Pieces = 8
@@ -25,20 +27,10 @@ struct GameView: View {
///VM
var gameVM : GameVM
-
- ///SK
- //var gs : GameScene
init (gameVM : GameVM){
- //self.gameVM = GameVM(andPlayer1: Player(withName: "Meruemu", andId: .player1)!, andPlayer2: Player(withName: "Kumogi", andId: .player2)!)
self.gameVM = gameVM
- // self.gs = GameScene(size: CGSizeMake(940,740), andVM: gameVM)
- //self.gs = GameScene(size: CGSizeMake(940,740))
-
-
-
-
}
var body: some View {
@@ -61,25 +53,7 @@ struct GameView: View {
}
.padding([.leading, .trailing], 20)
}
-
- /*
-
- ///Old Grid Support
-
- LazyVGrid(columns: gridItems, spacing: 5) {
- ForEach(0..<64) { index in
- Rectangle()
- .foregroundColor((index / 8 + index % 8) % 2 == 0 ? .orange : .gray.opacity(0.2))
- .frame(height: 35)
- .cornerRadius(10)
- }
- }
- .padding(10)
- .background(Color.yellow)
- .cornerRadius(15)
- .padding(20)
-
- */
+
SpriteView(scene: gameVM.gameScene)
.frame(width: 350, height: 275)
.padding(10)
diff --git a/DouShouQiIOS/DouShouQiIOS/View/HistoryView.swift b/DouShouQiIOS/DouShouQiIOS/View/HistoryView.swift
index 64dd38e..2f0c987 100644
--- a/DouShouQiIOS/DouShouQiIOS/View/HistoryView.swift
+++ b/DouShouQiIOS/DouShouQiIOS/View/HistoryView.swift
@@ -7,7 +7,7 @@
import SwiftUI
-
+/// Vue de l'historique d'un joueur
struct HistoryView: View {
var playerName: String
var matches: [Match] // Modèle des parties du joueur
@@ -68,7 +68,6 @@ struct Match: Identifiable {
var opponent: String
var selfScore: Int
var opScore: Int
- //var result: String
}
struct HistoryView_Previews: PreviewProvider {
diff --git a/DouShouQiIOS/DouShouQiIOS/View/MainMenuView.swift b/DouShouQiIOS/DouShouQiIOS/View/MainMenuView.swift
index b005511..7636d7d 100644
--- a/DouShouQiIOS/DouShouQiIOS/View/MainMenuView.swift
+++ b/DouShouQiIOS/DouShouQiIOS/View/MainMenuView.swift
@@ -8,14 +8,14 @@
import SwiftUI
import DouShouQiModel
-
+/// Vue principale de l'application
struct MainMenuView: View {
@Environment(\.colorScheme) var colorScheme
var gamevm : GameVM = GameVM(withGame: try! Game(withRules: ClassicRules(),
andPlayer1: Player(withName: "Meruemu", andId: .player1)!,
andPlayer2: Player(withName: "Kumogi", andId: .player2)!),
- andScene: GameScene(size: CGSize(width: 940, height: 740)))
+ andScene: GameScene(size: CGSize(width: 940, height: 740)))
var body: some View {
diff --git a/DouShouQiIOS/DouShouQiIOS/View/PlayerListView.swift b/DouShouQiIOS/DouShouQiIOS/View/PlayerListView.swift
index 3201609..d3cc5b0 100644
--- a/DouShouQiIOS/DouShouQiIOS/View/PlayerListView.swift
+++ b/DouShouQiIOS/DouShouQiIOS/View/PlayerListView.swift
@@ -8,16 +8,14 @@
import SwiftUI
import DouShouQiModel
+/// Liste des joueurs
struct PlayerListView: View {
var playerStub : StubbedPlayers = StubbedPlayers()
+
var body: some View {
- //NavigationStack {
ZStack {
Rectangle().fill(Color.bgColor).ignoresSafeArea()
VStack {
- /*Text("Classement des joueurs")
- .scaleEffect(1.75)*/
-
List(playerStub.getStubbedPlayer()) { player in
NavigationLink {
PlayerView(age: 18, winLossRatio: 1.0, gamesPlayed: 10, wins: 5, losses: 5, histoMatches: [
@@ -25,7 +23,7 @@ struct PlayerListView: View {
Match(gameEndScreen: "opponent2", opponent: "Opponent 2", selfScore: 1, opScore: 3),
Match(gameEndScreen: "opponent3", opponent: "Opponent 3", selfScore: 2, opScore: 2)
],
- playerVm: player) //mettre player plus tard
+ playerVm: player)
} label:{Text("pif")}
}.navigationDestination(for: String.self) { name in
PlayerView(age: 18, winLossRatio: 1.0, gamesPlayed: 10, wins: 5, losses: 5, histoMatches: [
@@ -33,37 +31,10 @@ struct PlayerListView: View {
Match(gameEndScreen: "opponent2", opponent: "Opponent 2", selfScore: 1, opScore: 3),
Match(gameEndScreen: "opponent3", opponent: "Opponent 3", selfScore: 2, opScore: 2)
],
- playerVm: PlayerVM(with: Player(withName: "Toto", andId: .player2)!)) //mettre player plus tard
+ playerVm: PlayerVM(with: Player(withName: "Toto", andId: .player2)!))
}
.navigationTitle("Leaderboard")
-
-
-
- List {
- NavigationLink{
- PlayerView(age: 18, winLossRatio: 1.0, gamesPlayed: 10, wins: 5, losses: 5, histoMatches: [
- Match(gameEndScreen: "opponent1", opponent: "Opponent 1", selfScore: 3, opScore: 2),
- Match(gameEndScreen: "opponent2", opponent: "Opponent 2", selfScore: 1, opScore: 3),
- Match(gameEndScreen: "opponent3", opponent: "Opponent 3", selfScore: 2, opScore: 2)
- ],
- playerVm: PlayerVM(with: Player(withName: "Billy", andId: .player2)!)) //mettre player plus tard
-
- } label:{Text("pif")}
-
- NavigationLink("Billy", value: "Billyname")
- NavigationLink("Bob", value: "Bob")
- NavigationLink("Bromingo", value: "Bromingo")
- }
- .navigationDestination(for: String.self) { name in
- PlayerView(age: 18, winLossRatio: 1.0, gamesPlayed: 10, wins: 5, losses: 5, histoMatches: [
- Match(gameEndScreen: "opponent1", opponent: "Opponent 1", selfScore: 3, opScore: 2),
- Match(gameEndScreen: "opponent2", opponent: "Opponent 2", selfScore: 1, opScore: 3),
- Match(gameEndScreen: "opponent3", opponent: "Opponent 3", selfScore: 2, opScore: 2)
- ],
- playerVm: PlayerVM(with: Player(withName: "Toto", andId: .player2)!)) //mettre player plus tard
- }
- .navigationTitle("Leaderboard")
}
VStack {
diff --git a/DouShouQiIOS/DouShouQiIOS/View/PlayerSelect.swift b/DouShouQiIOS/DouShouQiIOS/View/PlayerSelect.swift
index e539dd2..3c1c4ff 100644
--- a/DouShouQiIOS/DouShouQiIOS/View/PlayerSelect.swift
+++ b/DouShouQiIOS/DouShouQiIOS/View/PlayerSelect.swift
@@ -7,6 +7,8 @@
import SwiftUI
+/// PlayerSelect
+/// Cette vue est utilisée pour sélectionner un joueur
struct PlayerSelect: View {
@State private var image = UIImage()
@State private var showSheet = false
@@ -19,6 +21,26 @@ struct PlayerSelect: View {
VStack {
VStack{
Text("Joueur 1")
+
+ HStack {
+ Image(uiImage: self.image)
+ .resizable()
+ .cornerRadius(50)
+ .frame(width: 100, height: 100)
+ .background(Color.black.opacity(0.2))
+ .aspectRatio(contentMode: .fill)
+ .clipShape(Circle())
+
+ ClassicTextDisplay(text: "Change photo")
+ .onTapGesture {
+ showSheet = true
+ }
+ }
+ .padding(.horizontal, 20)
+ .sheet(isPresented: $showSheet) {
+ ImagePicker(sourceType: .photoLibrary, selectedImage: self.$image)
+ }
+
TextField("Entrez un nom ici",text: .constant(""))
}.foregroundStyle(.primary)
.padding(20)
@@ -49,11 +71,7 @@ struct PlayerSelect: View {
}
.padding(.horizontal, 20)
.sheet(isPresented: $showSheet) {
- // Pick an image from the photo library:
ImagePicker(sourceType: .photoLibrary, selectedImage: self.$image)
-
- // If you wish to take a photo from camera instead:
- // ImagePicker(sourceType: .camera, selectedImage: self.$image)
}
TextField("Entrez un nom ici",text: .constant(""))
diff --git a/DouShouQiIOS/DouShouQiIOS/View/PlayerView.swift b/DouShouQiIOS/DouShouQiIOS/View/PlayerView.swift
index a2c4043..ad30657 100644
--- a/DouShouQiIOS/DouShouQiIOS/View/PlayerView.swift
+++ b/DouShouQiIOS/DouShouQiIOS/View/PlayerView.swift
@@ -8,10 +8,8 @@
import SwiftUI
import DouShouQiModel
-
+/// Affiche les statistiques d'un joueur
struct PlayerView: View {
- //var Player : Player;
- //var name : String
var age: Int
var winLossRatio: Double
var gamesPlayed: Int
@@ -21,11 +19,8 @@ struct PlayerView: View {
@State var isEdited : Bool = false
@ObservedObject var playerVm : PlayerVM //TODO
- //@Published var data : Data
var body: some View {
- //ZStack{
- //Rectangle().fill(Color.bgColor).ignoresSafeArea()
VStack{
VStack{
Image("Blob")
@@ -98,21 +93,17 @@ struct PlayerView: View {
.padding(.top, 20)
}
.toolbar {
- //ToolbarItemGroup(placement: .bottomBar) {
Button(action: {isEdited.toggle()}, label: {Text("Edit")})
- //}
}
.sheet(isPresented: $isEdited, content: {
EditModalView(playerVM: playerVm, isEdited: $isEdited)
})
- //}//Zstack
}
}
struct PlayerView_Previews: PreviewProvider {
static var previews: some View {
- /*var player1 = new Player(Player(withName: "Meruemu", andSName: "Roi", andId: 2, andAge: 1)*/
let stubedMatches = [
Match(gameEndScreen: "opponent1", opponent: "Opponent 1", selfScore: 3, opScore: 2),
Match(gameEndScreen: "opponent2", opponent: "Opponent 2", selfScore: 1, opScore: 3),
diff --git a/DouShouQiIOS/DouShouQiIOS/View/SpriteKitView.swift b/DouShouQiIOS/DouShouQiIOS/View/SpriteKitView.swift
index ec54b56..894caf2 100644
--- a/DouShouQiIOS/DouShouQiIOS/View/SpriteKitView.swift
+++ b/DouShouQiIOS/DouShouQiIOS/View/SpriteKitView.swift
@@ -8,14 +8,11 @@
import SwiftUI
import SpriteKit
+///! TODELETE
struct SpriteKitView: View {
- ///Sprite Kit
- //var gs : GameScene = GameScene(size: CGSizeMake(940,740))
-
var body: some View {
VStack{
- //SpriteView(scene: gs)
}
}
}