commit
27aaa6eedc
Binary file not shown.
Binary file not shown.
@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "background_dark.svg",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 21 KiB |
@ -0,0 +1,21 @@
|
||||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "background_light.svg",
|
||||
"idiom" : "universal",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
After Width: | Height: | Size: 21 KiB |
@ -1,20 +0,0 @@
|
||||
//
|
||||
// AvatarView.swift
|
||||
// WtaTennis
|
||||
//
|
||||
// Created by Johan LACHENAL on 14/05/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct AvatarView: View {
|
||||
var body: some View {
|
||||
Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
|
||||
}
|
||||
}
|
||||
|
||||
struct AvatarView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
AvatarView()
|
||||
}
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
//
|
||||
// ContentView.swift
|
||||
// WtaTennis
|
||||
//
|
||||
// Created by Johan LACHENAL on 14/05/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct ContentView: View {
|
||||
var body: some View {
|
||||
VStack {
|
||||
Image(systemName: "globe")
|
||||
.imageScale(.large)
|
||||
.foregroundColor(.accentColor)
|
||||
Text("Hello, world!")
|
||||
}
|
||||
.padding()
|
||||
}
|
||||
}
|
||||
|
||||
struct ContentView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
ContentView()
|
||||
}
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>UTImportedTypeDeclarations</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>UTTypeIconFiles</key>
|
||||
<array/>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict/>
|
||||
</dict>
|
||||
</array>
|
||||
<key>UIAppFonts</key>
|
||||
<array>
|
||||
<string>nuku1.ttf</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
@ -1,42 +0,0 @@
|
||||
//
|
||||
// InfoDetailView.swift
|
||||
// WtaTennis
|
||||
//
|
||||
// Created by Johan LACHENAL on 14/05/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct InfoDetailView: View {
|
||||
var body: some View {
|
||||
ZStack {
|
||||
Color.purple.edgesIgnoringSafeArea(.all)
|
||||
VStack(alignment: .leading, spacing: 20) {
|
||||
Text("Iga Swiatek")
|
||||
.font(.largeTitle)
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(.white)
|
||||
|
||||
HStack {
|
||||
Image(systemName: "flag.fill")
|
||||
.foregroundColor(.white)
|
||||
Text("POLAND")
|
||||
.foregroundColor(.white)
|
||||
}
|
||||
|
||||
InfoTextView(title: "Height", value: "5' 9\"")
|
||||
InfoTextView(title: "Age", value: "22")
|
||||
InfoTextView(title: "Plays", value: "Right-Handed")
|
||||
InfoTextView(title: "Birthplace", value: "Warsaw, Poland")
|
||||
}
|
||||
.padding()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct InfoDetailView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
InfoDetailView()
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,131 @@
|
||||
//
|
||||
// MainMenu.swift
|
||||
// ArkitDoushiQi
|
||||
//
|
||||
// Created by Johan LACHENAL, Louis DUFOUR on 16/05/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct MainMenu: View {
|
||||
@EnvironmentObject var languageSettings: LanguageSettings
|
||||
let playButtonText: LocalizedStringKey
|
||||
let registeredGamesButtonText: LocalizedStringKey
|
||||
@State private var action: Int? = 0
|
||||
@AppStorage("isDarkMode") private var isDarkMode = false
|
||||
@State private var reloadView = false
|
||||
@State private var showLanguagePicker = false
|
||||
@ScaledMetric(relativeTo: .body) var scaledPadding: CGFloat = 10
|
||||
@Environment(\.colorScheme) var colorScheme
|
||||
|
||||
var body: some View {
|
||||
GeometryReader { geometry in
|
||||
let isLandscape = geometry.size.width > geometry.size.height
|
||||
|
||||
NavigationStack {
|
||||
ZStack(alignment: isLandscape ? .leading : .center) {
|
||||
Image(uiImage: UIImage(named: colorScheme == .dark ? "background_dark" : "background_light")!)
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(width: isLandscape ? geometry.size.width / 2 : geometry.size.width)
|
||||
.edgesIgnoringSafeArea(.all)
|
||||
|
||||
VStack {
|
||||
Spacer().frame(height: 50)
|
||||
|
||||
Text("DOUSHIQI")
|
||||
.font(.custom("Nuku Nuku", size: 48, relativeTo: .largeTitle))
|
||||
.padding()
|
||||
.background(colorScheme == .dark ? Color.black.opacity(0.6) : Color.white.opacity(0.6))
|
||||
.cornerRadius(8)
|
||||
.foregroundColor(colorScheme == .dark ? .white : .black)
|
||||
|
||||
Text("GAME")
|
||||
.font(.custom("Nuku Nuku", size: 48, relativeTo: .largeTitle))
|
||||
.padding()
|
||||
.background(colorScheme == .dark ? Color.black.opacity(0.6) : Color.white.opacity(0.6))
|
||||
.cornerRadius(8)
|
||||
.foregroundColor(colorScheme == .dark ? .white : .black)
|
||||
|
||||
Spacer()
|
||||
|
||||
NavigationLink(destination: GameParametersMenuView()) {
|
||||
Text(playButtonText)
|
||||
.font(.custom("Nuku Nuku", size: 32, relativeTo: .title))
|
||||
.bold()
|
||||
.frame(maxWidth: .infinity)
|
||||
.padding()
|
||||
.background(colorScheme == .dark ? Color.black.opacity(0.6) : Color.white.opacity(0.6))
|
||||
.foregroundColor(colorScheme == .dark ? .white : .black)
|
||||
.cornerRadius(8)
|
||||
.overlay(
|
||||
RoundedRectangle(cornerRadius: 8)
|
||||
.stroke(colorScheme == .dark ? Color.white : Color.black, lineWidth: 1)
|
||||
)
|
||||
.shadow(radius: 5)
|
||||
.padding(scaledPadding)
|
||||
}
|
||||
.padding(.horizontal, 50)
|
||||
|
||||
Spacer().frame(height: 40)
|
||||
|
||||
NavigationLink(destination: PartyListView()) {
|
||||
Text(registeredGamesButtonText)
|
||||
.font(.custom("Nuku Nuku", size: 18, relativeTo: .body))
|
||||
.padding()
|
||||
.background(colorScheme == .dark ? Color.black.opacity(0.6) : Color.white.opacity(0.6))
|
||||
.foregroundColor(colorScheme == .dark ? .white : .black)
|
||||
.cornerRadius(8)
|
||||
.shadow(radius: 5)
|
||||
.padding(scaledPadding)
|
||||
}
|
||||
.padding(.horizontal, 50)
|
||||
|
||||
Spacer().frame(height: 20)
|
||||
|
||||
HStack {
|
||||
Button(action: {
|
||||
isDarkMode.toggle()
|
||||
}) {
|
||||
Image(systemName: isDarkMode ? "sun.max.fill" : "moon.fill")
|
||||
.foregroundColor(colorScheme == .dark ? .white : .black)
|
||||
.padding()
|
||||
.scaleEffect(1.2)
|
||||
}
|
||||
|
||||
Button(action: {
|
||||
showLanguagePicker.toggle()
|
||||
}) {
|
||||
Image(systemName: "globe")
|
||||
.foregroundColor(colorScheme == .dark ? .white : .black)
|
||||
.padding()
|
||||
.scaleEffect(1.2)
|
||||
}
|
||||
.sheet(isPresented: $showLanguagePicker) {
|
||||
LanguagePickerView(showLanguagePicker: $showLanguagePicker)
|
||||
.environmentObject(languageSettings)
|
||||
}
|
||||
}
|
||||
.padding(scaledPadding)
|
||||
.background(colorScheme == .dark ? Color.black.opacity(0.6) : Color.white.opacity(0.6))
|
||||
.cornerRadius(8)
|
||||
|
||||
Spacer()
|
||||
}
|
||||
.padding(EdgeInsets(top: 10, leading: isLandscape ? geometry.size.width / 2 + 32 : 32, bottom: 10, trailing: 32))
|
||||
}
|
||||
.environmentObject(languageSettings)
|
||||
.onReceive(NotificationCenter.default.publisher(for: NSNotification.Name("LanguageChanged"))) { _ in
|
||||
self.reloadView.toggle()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct MainMenu_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
MainMenu(playButtonText: "Play", registeredGamesButtonText: "Registered Games")
|
||||
.environmentObject(LanguageSettings(selectedLanguage: .French))
|
||||
}
|
||||
}
|
@ -1 +0,0 @@
|
||||
|
@ -1,29 +0,0 @@
|
||||
//
|
||||
// PlayerListView.swift
|
||||
// WtaTennis
|
||||
//
|
||||
// Created by Johan LACHENAL on 14/05/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct PlayerListView: View {
|
||||
@ObservedObject var viewModel: PlayerViewModel
|
||||
|
||||
var body: some View {
|
||||
NavigationStack {
|
||||
List(viewModel.players, id: \.id) { player in
|
||||
PlayerProfileView(player: player)
|
||||
.padding(.vertical, 5)
|
||||
}
|
||||
.navigationTitle("Top Players")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
struct PlayerListView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
PlayerListView(viewModel: PlayerViewModel())
|
||||
}
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
//
|
||||
// ItemCollectionPlayer.swift
|
||||
// WtaTennis
|
||||
//
|
||||
// Created by Johan LACHENAL on 14/05/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct PlayerProfileView: View {
|
||||
|
||||
var body: some View {
|
||||
HStack(spacing: 15) {
|
||||
Text("1") // \(player.rank)
|
||||
.font(.largeTitle)
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(.purple)
|
||||
|
||||
Image("Image")
|
||||
.resizable()
|
||||
.aspectRatio(contentMode: .fill)
|
||||
.frame(width: 50, height: 50)
|
||||
.clipShape(Circle())
|
||||
|
||||
Text("Iga Swiatek")
|
||||
.font(.title2)
|
||||
.fontWeight(.semibold)
|
||||
|
||||
Spacer()
|
||||
|
||||
Label(" France ", systemImage: "flag.fill")
|
||||
.labelStyle(.titleAndIcon)
|
||||
.foregroundColor(.red)
|
||||
}
|
||||
.padding(.horizontal)
|
||||
}
|
||||
}
|
||||
|
||||
struct PlayerProfileView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
PlayerProfileView()
|
||||
}
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
//
|
||||
// RankingView.swift
|
||||
// WtaTennis
|
||||
//
|
||||
// Created by Johan LACHENAL on 14/05/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct RankingView: View {
|
||||
|
||||
var body : some View {
|
||||
ZStack()
|
||||
{
|
||||
Rectangle()
|
||||
.fill(Color.purple) // Rectangle violet
|
||||
.frame(height: 200) // Ajustez la hauteur du rectangle comme nécessaire
|
||||
|
||||
VStack(alignment: .leading, spacing: 20) {
|
||||
Text("RANKING") // TODO : penser à créer un style pour les textes
|
||||
.font(.title)
|
||||
.foregroundColor(.white)
|
||||
Text("1")
|
||||
.font(.largeTitle)
|
||||
.fontWeight(.bold)
|
||||
.foregroundColor(.white)
|
||||
Text("Singles")
|
||||
.font(.title2)
|
||||
.foregroundColor(.white)
|
||||
}
|
||||
.padding() // Ajoutez un padding pour éloigner le texte des bords du rectangle
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct RankingView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
RankingView()
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
//
|
||||
// FlagManager.swift
|
||||
// ArkitDoushiQi
|
||||
//
|
||||
// Created by Louis DUFOUR on 12/06/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
func flag(country: String) -> String {
|
||||
let base = 127397
|
||||
var usv = String.UnicodeScalarView()
|
||||
for i in country.utf16 {
|
||||
usv.append(UnicodeScalar(base + Int(i))!)
|
||||
}
|
||||
return String(usv)
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
//
|
||||
// FontManager.swift
|
||||
// ArkitDoushiQi
|
||||
//
|
||||
// Created by Louis DUFOUR on 12/06/2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import UIKit
|
||||
|
||||
class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
var window: UIWindow?
|
||||
|
||||
func application(_ application: UIApplication,
|
||||
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||
|
||||
for family in UIFont.familyNames.sorted() {
|
||||
let names = UIFont.fontNames(forFamilyName: family)
|
||||
print("Family: \(family) Font names: \(names)")
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
//
|
||||
// LanguagePickerView.swift
|
||||
// ArkitDoushiQi
|
||||
//
|
||||
// Created by Louis DUFOUR on 14/06/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct LanguagePickerView: View {
|
||||
@Binding var showLanguagePicker: Bool
|
||||
@EnvironmentObject var languageSettings: LanguageSettings
|
||||
@Environment(\.colorScheme) var colorScheme
|
||||
|
||||
var body: some View {
|
||||
VStack(spacing: 30) {
|
||||
Text(LocalizedStringKey("Choose Language"))
|
||||
.font(.custom("Nuku Nuku", size: 38, relativeTo: .headline))
|
||||
.padding()
|
||||
.foregroundColor(colorScheme == .dark ? .white : .black)
|
||||
|
||||
HStack(spacing: 50) {
|
||||
Button(action: {
|
||||
languageSettings.selectedLanguage = .French
|
||||
showLanguagePicker = false
|
||||
}) {
|
||||
VStack {
|
||||
Text(flag(country: "FR"))
|
||||
.font(.system(size: 50))
|
||||
Text(LocalizedStringKey("French"))
|
||||
.font(.custom("Nuku Nuku", size: 28, relativeTo: .title2))
|
||||
.foregroundColor(colorScheme == .dark ? .white : .black)
|
||||
}
|
||||
}
|
||||
|
||||
Button(action: {
|
||||
languageSettings.selectedLanguage = .English
|
||||
showLanguagePicker = false
|
||||
}) {
|
||||
VStack {
|
||||
Text(flag(country: "GB"))
|
||||
.font(.system(size: 50))
|
||||
Text(LocalizedStringKey("English"))
|
||||
.font(.custom("Nuku Nuku", size: 28, relativeTo: .title2))
|
||||
.foregroundColor(colorScheme == .dark ? .white : .black)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Button(action: {
|
||||
showLanguagePicker = false
|
||||
}) {
|
||||
Text(LocalizedStringKey("Cancel"))
|
||||
.font(.custom("Nuku Nuku", size: 28, relativeTo: .title2))
|
||||
.padding()
|
||||
.background(Color.red.opacity(0.7))
|
||||
.foregroundColor(.white)
|
||||
.cornerRadius(10)
|
||||
}
|
||||
.padding(.top, 20)
|
||||
}
|
||||
.padding()
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
//
|
||||
// Stub.swift
|
||||
// ArkitDoushiQi
|
||||
//
|
||||
// Created by Louis DUFOUR on 31/05/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import Foundation
|
||||
|
||||
struct Party: Identifiable {
|
||||
let id = UUID()
|
||||
let player1Name: String
|
||||
let player1Score: String
|
||||
let player1Image: String
|
||||
let player2Name: String
|
||||
let player2Score: String
|
||||
let player2Image: String
|
||||
let date: Date
|
||||
|
||||
var localizedPlayer1Score: LocalizedStringKey {
|
||||
LocalizedStringKey(player1Score)
|
||||
}
|
||||
|
||||
var localizedPlayer2Score: LocalizedStringKey {
|
||||
LocalizedStringKey(player2Score)
|
||||
}
|
||||
|
||||
var formattedDate: String {
|
||||
let dateFormatter = DateFormatter()
|
||||
dateFormatter.dateStyle = .full
|
||||
dateFormatter.timeStyle = .none
|
||||
dateFormatter.locale = Locale.current
|
||||
return dateFormatter.string(from: date)
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
//
|
||||
// GameType.swift
|
||||
// ArkitDoushiQi
|
||||
//
|
||||
// Created by Louis DUFOUR on 14/06/2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
|
||||
enum GameType: String, CaseIterable, Identifiable, Hashable {
|
||||
case PvP = "Joueur contre Joueur"
|
||||
case PvAI = "Joueur contre IA"
|
||||
|
||||
var id: String { self.rawValue }
|
||||
|
||||
var localized: LocalizedStringKey {
|
||||
LocalizedStringKey(self.rawValue)
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
//
|
||||
// Rules.swift
|
||||
// ArkitDoushiQi
|
||||
//
|
||||
// Created by Louis DUFOUR on 14/06/2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
|
||||
enum Rules: String, CaseIterable, Identifiable, Hashable {
|
||||
case Easy = "Simplifié"
|
||||
case Regular = "Normal"
|
||||
|
||||
var id: String { self.rawValue }
|
||||
|
||||
var localized: LocalizedStringKey {
|
||||
LocalizedStringKey(self.rawValue)
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
//
|
||||
// Placeholder.swift
|
||||
// ArkitDoushiQi
|
||||
//
|
||||
// Created by Louis DUFOUR on 14/06/2024.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
|
||||
extension View {
|
||||
func placeholder<Content: View>(
|
||||
when shouldShow: Bool,
|
||||
alignment: Alignment = .leading,
|
||||
@ViewBuilder placeholder: () -> Content) -> some View {
|
||||
|
||||
ZStack(alignment: alignment) {
|
||||
placeholder().opacity(shouldShow ? 1 : 0)
|
||||
self
|
||||
}
|
||||
}
|
||||
}
|
@ -1,61 +0,0 @@
|
||||
//
|
||||
// GameParametersMenuView.swift
|
||||
// ArkitDoushiQi
|
||||
//
|
||||
// Created by Johan LACHENAL on 24/05/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import PhotosUI
|
||||
|
||||
enum AIT: String, CaseIterable, Identifiable, Hashable {
|
||||
case RandomAction = "IA Random"
|
||||
case EasyTrainedAI = "IA Facile"
|
||||
case MediumTrainedAI = "IA Intermédiaire"
|
||||
|
||||
var id: String { self.rawValue }
|
||||
}
|
||||
|
||||
enum Rules: String, CaseIterable, Identifiable, Hashable {
|
||||
case Easy = "Simplifié"
|
||||
case Regular = "Normal"
|
||||
var id: String { self.rawValue }
|
||||
}
|
||||
|
||||
struct GameParametersMenuView: View, KeyboardReadable {
|
||||
@State private var selectedAIOption: AIT = .RandomAction
|
||||
@State private var selectedRulesOption: Rules = .Regular
|
||||
@State private var isKeyboardVisible = false
|
||||
var body: some View {
|
||||
NavigationView {
|
||||
VStack(alignment: .leading) {
|
||||
HStack(alignment: .center) {
|
||||
Text("Paramètres de partie").bold().font(.title)
|
||||
}.frame(maxWidth: .infinity)
|
||||
PickerComponent(title: "Sélectionne les règles :",
|
||||
selectedOption: $selectedRulesOption,
|
||||
options: Rules.allCases)
|
||||
PickerComponent(title: "Sélectionne une IA :",
|
||||
selectedOption: $selectedAIOption,
|
||||
options: AIT.allCases)
|
||||
ProfileEdit(color: Color(.red), profileWidth: 100, profileHeight: 100, defaultImage: Image("profil"), imageTextChange: "changer l'avatar du joueur 1")
|
||||
ProfileEdit(color: Color(.blue), profileWidth: 100, profileHeight: 100, defaultImage: Image("profil"), imageTextChange: "changer l'avatar du joueur 2")
|
||||
if !isKeyboardVisible
|
||||
{
|
||||
ButtonComponent(title: "Lancer la partie") {
|
||||
GameView()
|
||||
}.padding(EdgeInsets(top: 10, leading: 32, bottom: 10, trailing: 32))
|
||||
}
|
||||
}
|
||||
.onReceive(keyboardPublisher) { value in isKeyboardVisible = value }
|
||||
.frame(maxHeight: .infinity, alignment: .top)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
struct GameParametersMenuView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
GameParametersMenuView()
|
||||
}
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
//
|
||||
// GameParametersMenuView.swift
|
||||
// ArkitDoushiQi
|
||||
//
|
||||
// Created by Johan LACHENAL, Louis DUFOUR on 24/05/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct GameParametersMenuView: View, KeyboardReadable {
|
||||
@State private var selectedAIOption: AI = .RandomAction
|
||||
@State private var selectedRulesOption: Rules = .Regular
|
||||
@State private var selectedGameType: GameType = .PvP
|
||||
@State private var isKeyboardVisible = false
|
||||
@State private var playerName1 = NSLocalizedString("Nom du Joueur 1", comment: "")
|
||||
@State private var playerName2 = NSLocalizedString("Nom du Joueur 2", comment: "")
|
||||
@State private var playerImage1: UIImage = UIImage(named: "profil")!
|
||||
@State private var playerImage2: UIImage = UIImage(named: "profil")!
|
||||
@State private var keyboardHeight: CGFloat = 0
|
||||
|
||||
var body: some View {
|
||||
GeometryReader { geometry in
|
||||
ScrollView {
|
||||
VStack(alignment: .leading) {
|
||||
Text("Paramètres de partie")
|
||||
.bold()
|
||||
.font(.title)
|
||||
.padding()
|
||||
|
||||
PickerComponent(title: "Sélectionne le type de partie :", selectedOption: $selectedGameType, options: GameType.allCases)
|
||||
PickerComponent(title: "Sélectionne les règles :", selectedOption: $selectedRulesOption, options: Rules.allCases)
|
||||
|
||||
if selectedGameType == .PvAI {
|
||||
PickerComponent(title: "Sélectionne une IA :", selectedOption: $selectedAIOption, options: AI.allCases)
|
||||
}
|
||||
|
||||
ProfileEdit(color: Color(.red), profileWidth: 100, profileHeight: 100, defaultImage: Image("profil"), imageTextChange: "Changer l'avatar du joueur 1", playerNameKey: "Nom du Joueur 1", playerName: $playerName1, playerImage: $playerImage1)
|
||||
|
||||
if selectedGameType == .PvP {
|
||||
ProfileEdit(color: Color(.blue), profileWidth: 100, profileHeight: 100, defaultImage: Image("profil"), imageTextChange: "Changer l'avatar du joueur 2", playerNameKey: "Nom du Joueur 2", playerName: $playerName2, playerImage: $playerImage2)
|
||||
}
|
||||
|
||||
if !isKeyboardVisible {
|
||||
ButtonComponent(title: "Lancer la partie") {
|
||||
GameView(player1Name: playerName1, player1Image: playerImage1, player2Name: playerName2, player2Image: playerImage2)
|
||||
}
|
||||
.padding(EdgeInsets(top: 10, leading: 32, bottom: 10, trailing: 32))
|
||||
}
|
||||
}
|
||||
.padding(.bottom, isKeyboardVisible ? keyboardHeight : 0)
|
||||
.animation(.easeOut(duration: 0.3), value: keyboardHeight)
|
||||
.onReceive(keyboardPublisher) { height in
|
||||
withAnimation {
|
||||
self.keyboardHeight = height - geometry.safeAreaInsets.bottom
|
||||
self.isKeyboardVisible = height > 0
|
||||
}
|
||||
}
|
||||
.frame(minHeight: geometry.size.height)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct GameParametersMenuView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
GameParametersMenuView()
|
||||
}
|
||||
}
|
@ -1,53 +0,0 @@
|
||||
//
|
||||
// ParametersMenuView.swift
|
||||
// ArkitDoushiQi
|
||||
//
|
||||
// Created by Johan LACHENAL on 21/05/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct GeneralParametersMenuView: View {
|
||||
@EnvironmentObject var languageSettings: LanguageSettings
|
||||
@State private var selectedAIOption: AI
|
||||
@State private var selectedRulesOption: Rules
|
||||
|
||||
let parametersTitle = LocalizedStringKey("ParametersTitle")
|
||||
let darkModeDescription = LocalizedStringKey("DarkModeDescription")
|
||||
let darkModeBooleanName: String = "isDarkMode"
|
||||
let darkModeDefaultValue: Bool = false
|
||||
let languagePickerTitle = LocalizedStringKey("LanguagePickerTitle")
|
||||
|
||||
init(selectedAIOption: AI, selectedRulesOption: Rules) {
|
||||
self._selectedAIOption = State(initialValue: selectedAIOption)
|
||||
self._selectedRulesOption = State(initialValue: selectedRulesOption)
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading) {
|
||||
HStack(alignment: .center) {
|
||||
Text(parametersTitle).bold().font(.title)
|
||||
}.frame(maxWidth: .infinity)
|
||||
Spacer().frame(maxHeight: 30)
|
||||
ToggleComponent(description: darkModeDescription, booleanName: darkModeBooleanName, booleanDefaultValue: darkModeDefaultValue)
|
||||
PickerComponent(title: languagePickerTitle,
|
||||
selectedOption: $languageSettings.selectedLanguage,
|
||||
options: Language.allCases)
|
||||
.onChange(of: languageSettings.selectedLanguage) { newLanguage in
|
||||
languageSettings.changeLanguage(to: newLanguage)
|
||||
}
|
||||
}
|
||||
.frame(maxHeight: .infinity, alignment: .top)
|
||||
}
|
||||
}
|
||||
|
||||
struct GeneralParametersMenuView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
let languageSettings = LanguageSettings(selectedLanguage: .French)
|
||||
GeneralParametersMenuView(
|
||||
selectedAIOption: .RandomAction,
|
||||
selectedRulesOption: .Regular
|
||||
)
|
||||
.environmentObject(languageSettings)
|
||||
}
|
||||
}
|
@ -1,61 +0,0 @@
|
||||
//
|
||||
// MainMenu.swift
|
||||
// ArkitDoushiQi
|
||||
//
|
||||
// Created by Johan LACHENAL on 16/05/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct MainMenu: View {
|
||||
@EnvironmentObject var languageSettings: LanguageSettings
|
||||
let playButtonText: String
|
||||
let registeredGamesButtonText: String
|
||||
let parametersButtonText: String
|
||||
@State private var action: Int? = 0
|
||||
@AppStorage("isDarkMode") private var isDarkMode = false
|
||||
@State private var reloadView = false // Déclarer reloadView ici
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
NavigationView {
|
||||
VStack {
|
||||
Spacer()
|
||||
HStack() {
|
||||
Text("DouShiQi")
|
||||
.bold()
|
||||
.font(.title).padding()
|
||||
}
|
||||
Spacer().frame(height: 40)
|
||||
VStack(alignment: .leading) {
|
||||
ButtonComponent(title: playButtonText)
|
||||
{ GameParametersMenuView() }
|
||||
Spacer().frame(height: 30)
|
||||
ButtonComponent(title: registeredGamesButtonText)
|
||||
{ PartyListView() }
|
||||
Spacer().frame(height: 30)
|
||||
ButtonComponent(title: parametersButtonText)
|
||||
{ GeneralParametersMenuView(
|
||||
selectedAIOption: .RandomAction,
|
||||
selectedRulesOption: .Regular
|
||||
).id(reloadView) // Utilisez l'ID pour forcer le rechargement de la vue
|
||||
}
|
||||
}
|
||||
Spacer()
|
||||
}
|
||||
.padding(EdgeInsets(top: 10, leading: 32, bottom: 10, trailing: 32))
|
||||
}
|
||||
.environmentObject(languageSettings)
|
||||
.onReceive(NotificationCenter.default.publisher(for: NSNotification.Name("LanguageChanged"))) { _ in
|
||||
self.reloadView.toggle() // Changez la valeur pour forcer le rechargement
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct MainMenu_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
MainMenu(playButtonText: "Jouer", registeredGamesButtonText: "Parties enregistrées", parametersButtonText: "Paramètres")
|
||||
.environmentObject(LanguageSettings(selectedLanguage: .French))
|
||||
}
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
//
|
||||
// PartyEnregistery.swift
|
||||
// ArkitDoushiQi
|
||||
//
|
||||
// Created by Louis DUFOUR on 31/05/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct PartyListView: View {
|
||||
let parties: [Party] = [
|
||||
Party(player1Name: "Jack", player1Score: "Défaite", player1Image: "Perceval", player2Name: "Le gars du dimanche", player2Score: "Victoire", player2Image: "Perceval", date: Date()),
|
||||
Party(player1Name: "Le gars du dimanche", player1Score: "Victoire", player1Image: "Perceval", player2Name: "Jack", player2Score: "Défaite", player2Image: "Perceval", date: Date().addingTimeInterval(-86400))
|
||||
// Ajoutez plus de parties ici
|
||||
]
|
||||
|
||||
var body: some View {
|
||||
NavigationStack {
|
||||
List(parties) { party in
|
||||
ItemCollectionParty(party: party)
|
||||
.padding(.vertical, 5)
|
||||
.listRowInsets(EdgeInsets()) // Supprimer le padding
|
||||
}
|
||||
.navigationTitle("")
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .principal) {
|
||||
Text("Liste des Parties")
|
||||
.font(.custom("Nuku Nuku", size: 24)) // Appliquer la police personnalisée ici
|
||||
.foregroundColor(.primary) // Ajustez la couleur selon vos besoins
|
||||
}
|
||||
}
|
||||
.frame(maxWidth: .infinity) // Utiliser toute la largeur disponible
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct PartyListView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
PartyListView()
|
||||
}
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
//
|
||||
// PartyEnregistery.swift
|
||||
// ArkitDoushiQi
|
||||
//
|
||||
// Created by Louis DUFOUR on 31/05/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct PartyListView: View {
|
||||
let parties: [Party] = [
|
||||
Party(player1Name: "L'invaincu du samedi", player1Score: 2, player1Image: "Perceval", player2Name: "Le gars du dimanche", player2Score: 1, player2Image: "Perceval", date: "Samedi soir"),
|
||||
Party(player1Name: "Le champion du vendredi", player1Score: 3, player1Image: "Perceval", player2Name: "Le perdant du lundi", player2Score: 0, player2Image: "Perceval", date: "Vendredi soir")
|
||||
// Ajoutez plus de parties ici
|
||||
]
|
||||
|
||||
var body: some View {
|
||||
NavigationView {
|
||||
List(parties) { party in
|
||||
ItemCollectionParty(party: party)
|
||||
.padding(.vertical, 5)
|
||||
}
|
||||
.navigationTitle("Liste des Parties")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct PartyListView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
PartyListView()
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
//
|
||||
// Stub.swift
|
||||
// ArkitDoushiQi
|
||||
//
|
||||
// Created by Louis DUFOUR on 31/05/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct Party: Identifiable {
|
||||
let id = UUID()
|
||||
let player1Name: String
|
||||
let player1Score: Int
|
||||
let player1Image: String
|
||||
let player2Name: String
|
||||
let player2Score: Int
|
||||
let player2Image: String
|
||||
let date: String
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
/
|
||||
// Picker.swift
|
||||
// ArkitDoushiQi
|
||||
//
|
||||
// Created by Johan LACHENAL on 21/05/2024.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct Picker: View {
|
||||
var body: some View {
|
||||
Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
|
||||
}
|
||||
}
|
||||
|
||||
struct Picker_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
Picker()
|
||||
}
|
||||
}
|
Binary file not shown.
@ -0,0 +1,40 @@
|
||||
/*
|
||||
Localizable.strings
|
||||
ArkitDoushiQi
|
||||
|
||||
Created by Louis DUFOUR on 28/05/2024.
|
||||
|
||||
*/
|
||||
|
||||
"ParametersTitle" = "Parameters";
|
||||
"DarkModeDescription" = "Dark Mode";
|
||||
"LanguagePickerTitle" = "Language";
|
||||
"DOUSHIQI" = "DOUSHIQI";
|
||||
"GAME" = "GAME";
|
||||
"Play" = "Play";
|
||||
"Registered Games" = "Registered Games";
|
||||
"Choose Language" = "Choose Language";
|
||||
"French" = "French";
|
||||
"English" = "English";
|
||||
"Cancel" = "Cancel";
|
||||
"Paramètres de partie" = "Game Settings";
|
||||
"Sélectionne le type de partie :" = "Select Game Type:";
|
||||
"Joueur contre Joueur" = "Player vs Player";
|
||||
"Joueur contre IA" = "Player vs AI";
|
||||
"Sélectionne les règles :" = "Select Rules:";
|
||||
"Simplifié" = "Easy";
|
||||
"Normal" = "Regular";
|
||||
"Sélectionne une IA :" = "Select AI:";
|
||||
"IA Random" = "Random AI";
|
||||
"IA Facile" = "Easy AI";
|
||||
"IA Intermédiaire" = "Medium AI";
|
||||
"changer l'avatar du joueur 1" = "Change Player 1 Avatar";
|
||||
"changer l'avatar du joueur 2" = "Change Player 2 Avatar";
|
||||
"Nom du Joueur 1" = "Player 1 Name";
|
||||
"Nom du Joueur 2" = "Player 2 Name";
|
||||
"Lancer la partie" = "Start Game";
|
||||
"Changer d'avatar" = "Change Avatar";
|
||||
"Liste des Parties" = "Party List";
|
||||
"Victoire" = "Victory";
|
||||
"Défaite" = "Defeat";
|
||||
|
@ -0,0 +1,40 @@
|
||||
/*
|
||||
Localizable.strings
|
||||
ArkitDoushiQi
|
||||
|
||||
Created by Louis DUFOUR on 28/05/2024.
|
||||
|
||||
*/
|
||||
|
||||
"ParametersTitle" = "Paramètres";
|
||||
"DarkModeDescription" = "Mode sombre";
|
||||
"LanguagePickerTitle" = "Langue";
|
||||
"DOUSHIQI" = "DOUSHIQI";
|
||||
"GAME" = "JEU";
|
||||
"Play" = "Jouer";
|
||||
"Registered Games" = "Parties Enregistrees";
|
||||
"Choose Language" = "Choisissez la Langue";
|
||||
"French" = "Francais";
|
||||
"English" = "Anglais";
|
||||
"Cancel" = "Annuler";
|
||||
"Paramètres de partie" = "Paramètres de partie";
|
||||
"Sélectionne le type de partie :" = "Sélectionne le type de partie :";
|
||||
"Joueur contre Joueur" = "Joueur contre Joueur";
|
||||
"Joueur contre IA" = "Joueur contre IA";
|
||||
"Sélectionne les règles :" = "Sélectionne les règles :";
|
||||
"Simplifié" = "Simplifié";
|
||||
"Normal" = "Normal";
|
||||
"Sélectionne une IA :" = "Sélectionne une IA :";
|
||||
"IA Random" = "IA Random";
|
||||
"IA Facile" = "IA Facile";
|
||||
"IA Intermédiaire" = "IA Intermédiaire";
|
||||
"changer l'avatar du joueur 1" = "changer l'avatar du joueur 1";
|
||||
"changer l'avatar du joueur 2" = "changer l'avatar du joueur 2";
|
||||
"Nom du Joueur 1" = "Nom du Joueur 1";
|
||||
"Nom du Joueur 2" = "Nom du Joueur 2";
|
||||
"Lancer la partie" = "Lancer la partie";
|
||||
"Changer d'avatar" = "Changer d'avatar";
|
||||
"Liste des Parties" = "Liste des Parties";
|
||||
"Liste des Parties" = "Liste des Parties";
|
||||
"Victoire" = "Victoire";
|
||||
"Défaite" = "Défaite";
|
After Width: | Height: | Size: 21 KiB |
After Width: | Height: | Size: 21 KiB |
@ -1,11 +0,0 @@
|
||||
/*
|
||||
Localizable.strings
|
||||
ArkitDoushiQi
|
||||
|
||||
Created by Louis DUFOUR on 28/05/2024.
|
||||
|
||||
*/
|
||||
|
||||
"ParametersTitle" = "Parameters";
|
||||
"DarkModeDescription" = "Dark Mode";
|
||||
"LanguagePickerTitle" = "Language";
|
@ -1,11 +0,0 @@
|
||||
/*
|
||||
Localizable.strings
|
||||
ArkitDoushiQi
|
||||
|
||||
Created by Louis DUFOUR on 28/05/2024.
|
||||
|
||||
*/
|
||||
|
||||
"ParametersTitle" = "Paramètres";
|
||||
"DarkModeDescription" = "Mode sombre";
|
||||
"LanguagePickerTitle" = "Langue";
|
Loading…
Reference in new issue