diff --git a/Assets/board.svg b/Assets/board.svg new file mode 100644 index 0000000..b91c80d --- /dev/null +++ b/Assets/board.svg @@ -0,0 +1,1931 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Assets/chevron-right.svg b/Assets/chevron-right.svg new file mode 100644 index 0000000..fc771f7 --- /dev/null +++ b/Assets/chevron-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Assets/title-background.svg b/Assets/title-background.svg new file mode 100644 index 0000000..a587d3e --- /dev/null +++ b/Assets/title-background.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/DouShouQi_App/DouShouQi-App-Info.plist b/DouShouQi_App/DouShouQi-App-Info.plist index 0c67376..b31fd90 100644 --- a/DouShouQi_App/DouShouQi-App-Info.plist +++ b/DouShouQi_App/DouShouQi-App-Info.plist @@ -1,5 +1,10 @@ - + + UIAppFonts + + samurai.ttf + + diff --git a/DouShouQi_App/DouShouQi_App.xcodeproj/project.pbxproj b/DouShouQi_App/DouShouQi_App.xcodeproj/project.pbxproj new file mode 100644 index 0000000..5584a47 --- /dev/null +++ b/DouShouQi_App/DouShouQi_App.xcodeproj/project.pbxproj @@ -0,0 +1,814 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 56; + objects = { + +/* Begin PBXBuildFile section */ + 643AB6932BFCEFD00018DA73 /* GameResumeFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = 643AB6922BFCEFD00018DA73 /* GameResumeFrame.swift */; }; + 643AB69B2BFCFB5C0018DA73 /* HistoricView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 643AB69A2BFCFB5C0018DA73 /* HistoricView.swift */; }; + 6458345C2BF5F92300E18321 /* DouShouQi_AppApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6458345B2BF5F92300E18321 /* DouShouQi_AppApp.swift */; }; + 6458345E2BF5F92300E18321 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6458345D2BF5F92300E18321 /* ContentView.swift */; }; + 645834602BF5F92500E18321 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6458345F2BF5F92500E18321 /* Assets.xcassets */; }; + 645834632BF5F92500E18321 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 645834622BF5F92500E18321 /* Preview Assets.xcassets */; }; + 6458346D2BF5F92600E18321 /* DouShouQi_AppTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6458346C2BF5F92600E18321 /* DouShouQi_AppTests.swift */; }; + 645834772BF5F92600E18321 /* DouShouQi_AppUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 645834762BF5F92600E18321 /* DouShouQi_AppUITests.swift */; }; + 645834792BF5F92600E18321 /* DouShouQi_AppUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 645834782BF5F92600E18321 /* DouShouQi_AppUITestsLaunchTests.swift */; }; + 645834882BF5FEA000E18321 /* DSQ.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 645834872BF5FEA000E18321 /* DSQ.xcframework */; }; + 645834892BF5FEA000E18321 /* DSQ.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 645834872BF5FEA000E18321 /* DSQ.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 645B4C202BFCCA0500FD658A /* PlayerResumeFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = 645B4C1F2BFCCA0500FD658A /* PlayerResumeFrame.swift */; }; + 645B4C252BFCD3C600FD658A /* ScoreBoardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 645B4C242BFCD3C600FD658A /* ScoreBoardView.swift */; }; + 6493C1C02C046BF900B5121D /* samurai.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 6493C1BF2C046BF900B5121D /* samurai.ttf */; }; + 6493C1C22C046E5E00B5121D /* Fonts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6493C1C12C046E5E00B5121D /* Fonts.swift */; }; + 649ABF5B2BF60D78002E8894 /* MainMenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649ABF5A2BF60D78002E8894 /* MainMenuView.swift */; }; + 649ABF602BF60F2D002E8894 /* MainMenuButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649ABF5F2BF60F2D002E8894 /* MainMenuButton.swift */; }; + 649B59A42BF64574002BAE38 /* TitlePageFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649B59A32BF64574002BAE38 /* TitlePageFrame.swift */; }; + 649B59A72BF64BA9002BAE38 /* Colors.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 649B59A62BF64BA9002BAE38 /* Colors.xcassets */; }; + 649B59A92BF64C6A002BAE38 /* Colors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649B59A82BF64C6A002BAE38 /* Colors.swift */; }; + 649B59AC2BF64E12002BAE38 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 649B59AB2BF64E12002BAE38 /* Images.xcassets */; }; + 649B59AE2BF64EAB002BAE38 /* AppImages.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649B59AD2BF64EAB002BAE38 /* AppImages.swift */; }; + 649B59B22BF65392002BAE38 /* TextStyles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649B59B12BF65392002BAE38 /* TextStyles.swift */; }; + 649B59B42BF653E1002BAE38 /* ViewTitleTextStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649B59B32BF653E1002BAE38 /* ViewTitleTextStyle.swift */; }; + EC62C4EF2BFE367F0048CD0B /* SwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC62C4EE2BFE367F0048CD0B /* SwiftUIView.swift */; }; + EC62C4F92C0371660048CD0B /* MusicPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC62C4F82C0371660048CD0B /* MusicPlayer.swift */; }; + EC62C4FB2C038BD20048CD0B /* PlayersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC62C4FA2C038BD20048CD0B /* PlayersView.swift */; }; + EC62C4FD2C0391D30048CD0B /* PlayerRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC62C4FC2C0391D30048CD0B /* PlayerRow.swift */; }; + EC62C4FF2C0457AD0048CD0B /* TitleScreenMusic.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = EC62C4FE2C0457AD0048CD0B /* TitleScreenMusic.mp3 */; }; + EC62C5012C045B590048CD0B /* SoundPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC62C5002C045B590048CD0B /* SoundPlayer.swift */; }; + EC62C5062C045C1A0048CD0B /* TitleScreenButtonSound.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = EC62C5052C045C1A0048CD0B /* TitleScreenButtonSound.mp3 */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 645834692BF5F92600E18321 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 645834502BF5F92300E18321 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 645834572BF5F92300E18321; + remoteInfo = DouShouQi_App; + }; + 645834732BF5F92600E18321 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 645834502BF5F92300E18321 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 645834572BF5F92300E18321; + remoteInfo = DouShouQi_App; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 6458348A2BF5FEA000E18321 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 645834892BF5FEA000E18321 /* DSQ.xcframework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 643AB6922BFCEFD00018DA73 /* GameResumeFrame.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameResumeFrame.swift; sourceTree = ""; }; + 643AB69A2BFCFB5C0018DA73 /* HistoricView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoricView.swift; sourceTree = ""; }; + 645834582BF5F92300E18321 /* DouShouQi_App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DouShouQi_App.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 6458345B2BF5F92300E18321 /* DouShouQi_AppApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DouShouQi_AppApp.swift; sourceTree = ""; }; + 6458345D2BF5F92300E18321 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + 6458345F2BF5F92500E18321 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 645834622BF5F92500E18321 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + 645834682BF5F92600E18321 /* DouShouQi_AppTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DouShouQi_AppTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 6458346C2BF5F92600E18321 /* DouShouQi_AppTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DouShouQi_AppTests.swift; sourceTree = ""; }; + 645834722BF5F92600E18321 /* DouShouQi_AppUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DouShouQi_AppUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 645834762BF5F92600E18321 /* DouShouQi_AppUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DouShouQi_AppUITests.swift; sourceTree = ""; }; + 645834782BF5F92600E18321 /* DouShouQi_AppUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DouShouQi_AppUITestsLaunchTests.swift; sourceTree = ""; }; + 645834852BF5FE1400E18321 /* DouShouQi-App-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DouShouQi-App-Info.plist"; sourceTree = SOURCE_ROOT; }; + 645834872BF5FEA000E18321 /* DSQ.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = DSQ.xcframework; sourceTree = ""; }; + 645B4C1F2BFCCA0500FD658A /* PlayerResumeFrame.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerResumeFrame.swift; sourceTree = ""; }; + 645B4C242BFCD3C600FD658A /* ScoreBoardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScoreBoardView.swift; sourceTree = ""; }; + 6493C1BF2C046BF900B5121D /* samurai.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = samurai.ttf; sourceTree = ""; }; + 6493C1C12C046E5E00B5121D /* Fonts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Fonts.swift; sourceTree = ""; }; + 649ABF5A2BF60D78002E8894 /* MainMenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenuView.swift; sourceTree = ""; }; + 649ABF5F2BF60F2D002E8894 /* MainMenuButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainMenuButton.swift; sourceTree = ""; }; + 649B59A32BF64574002BAE38 /* TitlePageFrame.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitlePageFrame.swift; sourceTree = ""; }; + 649B59A62BF64BA9002BAE38 /* Colors.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Colors.xcassets; sourceTree = ""; }; + 649B59A82BF64C6A002BAE38 /* Colors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Colors.swift; sourceTree = ""; }; + 649B59AB2BF64E12002BAE38 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + 649B59AD2BF64EAB002BAE38 /* AppImages.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppImages.swift; sourceTree = ""; }; + 649B59B12BF65392002BAE38 /* TextStyles.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextStyles.swift; sourceTree = ""; }; + 649B59B32BF653E1002BAE38 /* ViewTitleTextStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewTitleTextStyle.swift; sourceTree = ""; }; + EC62C4EE2BFE367F0048CD0B /* SwiftUIView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUIView.swift; sourceTree = ""; }; + EC62C4F82C0371660048CD0B /* MusicPlayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicPlayer.swift; sourceTree = ""; }; + EC62C4FA2C038BD20048CD0B /* PlayersView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayersView.swift; sourceTree = ""; }; + EC62C4FC2C0391D30048CD0B /* PlayerRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlayerRow.swift; sourceTree = ""; }; + EC62C4FE2C0457AD0048CD0B /* TitleScreenMusic.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = TitleScreenMusic.mp3; sourceTree = ""; }; + EC62C5002C045B590048CD0B /* SoundPlayer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SoundPlayer.swift; sourceTree = ""; }; + EC62C5052C045C1A0048CD0B /* TitleScreenButtonSound.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = TitleScreenButtonSound.mp3; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 645834552BF5F92300E18321 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 645834882BF5FEA000E18321 /* DSQ.xcframework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 645834652BF5F92600E18321 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6458346F2BF5F92600E18321 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 643AB6912BFCEFB70018DA73 /* Game */ = { + isa = PBXGroup; + children = ( + 643AB6922BFCEFD00018DA73 /* GameResumeFrame.swift */, + ); + path = Game; + sourceTree = ""; + }; + 643AB6992BFCFB480018DA73 /* Game */ = { + isa = PBXGroup; + children = ( + 643AB69A2BFCFB5C0018DA73 /* HistoricView.swift */, + EC62C4EE2BFE367F0048CD0B /* SwiftUIView.swift */, + ); + path = Game; + sourceTree = ""; + }; + 6458344F2BF5F92300E18321 = { + isa = PBXGroup; + children = ( + 6458345A2BF5F92300E18321 /* DouShouQi_App */, + 6458346B2BF5F92600E18321 /* DouShouQi_AppTests */, + 645834752BF5F92600E18321 /* DouShouQi_AppUITests */, + 645834592BF5F92300E18321 /* Products */, + 645834862BF5FE9F00E18321 /* Frameworks */, + ); + sourceTree = ""; + }; + 645834592BF5F92300E18321 /* Products */ = { + isa = PBXGroup; + children = ( + 645834582BF5F92300E18321 /* DouShouQi_App.app */, + 645834682BF5F92600E18321 /* DouShouQi_AppTests.xctest */, + 645834722BF5F92600E18321 /* DouShouQi_AppUITests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 6458345A2BF5F92300E18321 /* DouShouQi_App */ = { + isa = PBXGroup; + children = ( + EC62C5022C045BB90048CD0B /* SoundPlayerClass */, + 649B59A52BF64B1B002BAE38 /* Assets */, + 649ABF5E2BF60ED5002E8894 /* Components */, + 649ABF592BF60D13002E8894 /* Views */, + 645834852BF5FE1400E18321 /* DouShouQi-App-Info.plist */, + 6458345B2BF5F92300E18321 /* DouShouQi_AppApp.swift */, + 6458345D2BF5F92300E18321 /* ContentView.swift */, + 6458345F2BF5F92500E18321 /* Assets.xcassets */, + 645834612BF5F92500E18321 /* Preview Content */, + ); + path = DouShouQi_App; + sourceTree = ""; + }; + 645834612BF5F92500E18321 /* Preview Content */ = { + isa = PBXGroup; + children = ( + 645834622BF5F92500E18321 /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; + 6458346B2BF5F92600E18321 /* DouShouQi_AppTests */ = { + isa = PBXGroup; + children = ( + 6458346C2BF5F92600E18321 /* DouShouQi_AppTests.swift */, + ); + path = DouShouQi_AppTests; + sourceTree = ""; + }; + 645834752BF5F92600E18321 /* DouShouQi_AppUITests */ = { + isa = PBXGroup; + children = ( + 645834762BF5F92600E18321 /* DouShouQi_AppUITests.swift */, + 645834782BF5F92600E18321 /* DouShouQi_AppUITestsLaunchTests.swift */, + ); + path = DouShouQi_AppUITests; + sourceTree = ""; + }; + 645834862BF5FE9F00E18321 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 645834872BF5FEA000E18321 /* DSQ.xcframework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 645B4C1C2BFCC95000FD658A /* Player */ = { + isa = PBXGroup; + children = ( + 645B4C1F2BFCCA0500FD658A /* PlayerResumeFrame.swift */, + EC62C4FC2C0391D30048CD0B /* PlayerRow.swift */, + ); + path = Player; + sourceTree = ""; + }; + 645B4C232BFCD39A00FD658A /* Player */ = { + isa = PBXGroup; + children = ( + 645B4C242BFCD3C600FD658A /* ScoreBoardView.swift */, + EC62C4FA2C038BD20048CD0B /* PlayersView.swift */, + ); + path = Player; + sourceTree = ""; + }; + 6493C1BE2C04650200B5121D /* Menu */ = { + isa = PBXGroup; + children = ( + 649ABF5A2BF60D78002E8894 /* MainMenuView.swift */, + ); + path = Menu; + sourceTree = ""; + }; + 649ABF592BF60D13002E8894 /* Views */ = { + isa = PBXGroup; + children = ( + 643AB6992BFCFB480018DA73 /* Game */, + 645B4C232BFCD39A00FD658A /* Player */, + 6493C1BE2C04650200B5121D /* Menu */, + ); + path = Views; + sourceTree = ""; + }; + 649ABF5E2BF60ED5002E8894 /* Components */ = { + isa = PBXGroup; + children = ( + 643AB6912BFCEFB70018DA73 /* Game */, + 645B4C1C2BFCC95000FD658A /* Player */, + 649ABF5F2BF60F2D002E8894 /* MainMenuButton.swift */, + 649B59A32BF64574002BAE38 /* TitlePageFrame.swift */, + ); + path = Components; + sourceTree = ""; + }; + 649B59A52BF64B1B002BAE38 /* Assets */ = { + isa = PBXGroup; + children = ( + EC62C5042C045BE00048CD0B /* Musics */, + EC62C5032C045BD30048CD0B /* Sounds */, + 649B59B02BF65360002BAE38 /* TextStyles */, + 649B59AF2BF64F0A002BAE38 /* Colors */, + 649B59AA2BF64DF1002BAE38 /* Images */, + ); + path = Assets; + sourceTree = ""; + }; + 649B59AA2BF64DF1002BAE38 /* Images */ = { + isa = PBXGroup; + children = ( + 649B59AB2BF64E12002BAE38 /* Images.xcassets */, + 649B59AD2BF64EAB002BAE38 /* AppImages.swift */, + ); + path = Images; + sourceTree = ""; + }; + 649B59AF2BF64F0A002BAE38 /* Colors */ = { + isa = PBXGroup; + children = ( + 649B59A62BF64BA9002BAE38 /* Colors.xcassets */, + 649B59A82BF64C6A002BAE38 /* Colors.swift */, + ); + path = Colors; + sourceTree = ""; + }; + 649B59B02BF65360002BAE38 /* TextStyles */ = { + isa = PBXGroup; + children = ( + 6493C1BF2C046BF900B5121D /* samurai.ttf */, + 649B59B12BF65392002BAE38 /* TextStyles.swift */, + 649B59B32BF653E1002BAE38 /* ViewTitleTextStyle.swift */, + 6493C1C12C046E5E00B5121D /* Fonts.swift */, + ); + path = TextStyles; + sourceTree = ""; + }; + EC62C5022C045BB90048CD0B /* SoundPlayerClass */ = { + isa = PBXGroup; + children = ( + EC62C5002C045B590048CD0B /* SoundPlayer.swift */, + EC62C4F82C0371660048CD0B /* MusicPlayer.swift */, + ); + path = SoundPlayerClass; + sourceTree = ""; + }; + EC62C5032C045BD30048CD0B /* Sounds */ = { + isa = PBXGroup; + children = ( + EC62C5052C045C1A0048CD0B /* TitleScreenButtonSound.mp3 */, + ); + path = Sounds; + sourceTree = ""; + }; + EC62C5042C045BE00048CD0B /* Musics */ = { + isa = PBXGroup; + children = ( + EC62C4FE2C0457AD0048CD0B /* TitleScreenMusic.mp3 */, + ); + path = Musics; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 645834572BF5F92300E18321 /* DouShouQi_App */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6458347C2BF5F92600E18321 /* Build configuration list for PBXNativeTarget "DouShouQi_App" */; + buildPhases = ( + 645834542BF5F92300E18321 /* Sources */, + 645834552BF5F92300E18321 /* Frameworks */, + 645834562BF5F92300E18321 /* Resources */, + 6458348A2BF5FEA000E18321 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = DouShouQi_App; + productName = DouShouQi_App; + productReference = 645834582BF5F92300E18321 /* DouShouQi_App.app */; + productType = "com.apple.product-type.application"; + }; + 645834672BF5F92600E18321 /* DouShouQi_AppTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 6458347F2BF5F92600E18321 /* Build configuration list for PBXNativeTarget "DouShouQi_AppTests" */; + buildPhases = ( + 645834642BF5F92600E18321 /* Sources */, + 645834652BF5F92600E18321 /* Frameworks */, + 645834662BF5F92600E18321 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 6458346A2BF5F92600E18321 /* PBXTargetDependency */, + ); + name = DouShouQi_AppTests; + productName = DouShouQi_AppTests; + productReference = 645834682BF5F92600E18321 /* DouShouQi_AppTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 645834712BF5F92600E18321 /* DouShouQi_AppUITests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 645834822BF5F92600E18321 /* Build configuration list for PBXNativeTarget "DouShouQi_AppUITests" */; + buildPhases = ( + 6458346E2BF5F92600E18321 /* Sources */, + 6458346F2BF5F92600E18321 /* Frameworks */, + 645834702BF5F92600E18321 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 645834742BF5F92600E18321 /* PBXTargetDependency */, + ); + name = DouShouQi_AppUITests; + productName = DouShouQi_AppUITests; + productReference = 645834722BF5F92600E18321 /* DouShouQi_AppUITests.xctest */; + productType = "com.apple.product-type.bundle.ui-testing"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 645834502BF5F92300E18321 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = 1; + LastSwiftUpdateCheck = 1420; + LastUpgradeCheck = 1420; + TargetAttributes = { + 645834572BF5F92300E18321 = { + CreatedOnToolsVersion = 14.2; + }; + 645834672BF5F92600E18321 = { + CreatedOnToolsVersion = 14.2; + TestTargetID = 645834572BF5F92300E18321; + }; + 645834712BF5F92600E18321 = { + CreatedOnToolsVersion = 14.2; + TestTargetID = 645834572BF5F92300E18321; + }; + }; + }; + buildConfigurationList = 645834532BF5F92300E18321 /* Build configuration list for PBXProject "DouShouQi_App" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 6458344F2BF5F92300E18321; + productRefGroup = 645834592BF5F92300E18321 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 645834572BF5F92300E18321 /* DouShouQi_App */, + 645834672BF5F92600E18321 /* DouShouQi_AppTests */, + 645834712BF5F92600E18321 /* DouShouQi_AppUITests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 645834562BF5F92300E18321 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 649B59A72BF64BA9002BAE38 /* Colors.xcassets in Resources */, + 6493C1C02C046BF900B5121D /* samurai.ttf in Resources */, + EC62C5062C045C1A0048CD0B /* TitleScreenButtonSound.mp3 in Resources */, + 649B59AC2BF64E12002BAE38 /* Images.xcassets in Resources */, + 645834632BF5F92500E18321 /* Preview Assets.xcassets in Resources */, + 645834602BF5F92500E18321 /* Assets.xcassets in Resources */, + EC62C4FF2C0457AD0048CD0B /* TitleScreenMusic.mp3 in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 645834662BF5F92600E18321 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 645834702BF5F92600E18321 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 645834542BF5F92300E18321 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 643AB69B2BFCFB5C0018DA73 /* HistoricView.swift in Sources */, + 6458345E2BF5F92300E18321 /* ContentView.swift in Sources */, + 649B59A92BF64C6A002BAE38 /* Colors.swift in Sources */, + 649B59B42BF653E1002BAE38 /* ViewTitleTextStyle.swift in Sources */, + EC62C5012C045B590048CD0B /* SoundPlayer.swift in Sources */, + 645B4C252BFCD3C600FD658A /* ScoreBoardView.swift in Sources */, + 649B59AE2BF64EAB002BAE38 /* AppImages.swift in Sources */, + 649ABF602BF60F2D002E8894 /* MainMenuButton.swift in Sources */, + 643AB6932BFCEFD00018DA73 /* GameResumeFrame.swift in Sources */, + EC62C4EF2BFE367F0048CD0B /* SwiftUIView.swift in Sources */, + 649B59B22BF65392002BAE38 /* TextStyles.swift in Sources */, + EC62C4F92C0371660048CD0B /* MusicPlayer.swift in Sources */, + EC62C4FD2C0391D30048CD0B /* PlayerRow.swift in Sources */, + EC62C4FB2C038BD20048CD0B /* PlayersView.swift in Sources */, + 6458345C2BF5F92300E18321 /* DouShouQi_AppApp.swift in Sources */, + 645B4C202BFCCA0500FD658A /* PlayerResumeFrame.swift in Sources */, + 649ABF5B2BF60D78002E8894 /* MainMenuView.swift in Sources */, + 6493C1C22C046E5E00B5121D /* Fonts.swift in Sources */, + 649B59A42BF64574002BAE38 /* TitlePageFrame.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 645834642BF5F92600E18321 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6458346D2BF5F92600E18321 /* DouShouQi_AppTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6458346E2BF5F92600E18321 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 645834792BF5F92600E18321 /* DouShouQi_AppUITestsLaunchTests.swift in Sources */, + 645834772BF5F92600E18321 /* DouShouQi_AppUITests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 6458346A2BF5F92600E18321 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 645834572BF5F92300E18321 /* DouShouQi_App */; + targetProxy = 645834692BF5F92600E18321 /* PBXContainerItemProxy */; + }; + 645834742BF5F92600E18321 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 645834572BF5F92300E18321 /* DouShouQi_App */; + targetProxy = 645834732BF5F92600E18321 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 6458347A2BF5F92600E18321 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 6458347B2BF5F92600E18321 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 6458347D2BF5F92600E18321 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"DouShouQi_App/Preview Content\""; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "DouShouQi-App-Info.plist"; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "fr.uca.iut.DouShouQi-App"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 6458347E2BF5F92600E18321 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_ASSET_PATHS = "\"DouShouQi_App/Preview Content\""; + ENABLE_PREVIEWS = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = "DouShouQi-App-Info.plist"; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "fr.uca.iut.DouShouQi-App"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 645834802BF5F92600E18321 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "fr.uca.iut.DouShouQi-AppTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/DouShouQi_App.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/DouShouQi_App"; + }; + name = Debug; + }; + 645834812BF5F92600E18321 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 16.2; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "fr.uca.iut.DouShouQi-AppTests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/DouShouQi_App.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/DouShouQi_App"; + }; + name = Release; + }; + 645834832BF5F92600E18321 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "fr.uca.iut.DouShouQi-AppUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = DouShouQi_App; + }; + name = Debug; + }; + 645834842BF5F92600E18321 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = "fr.uca.iut.DouShouQi-AppUITests"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_EMIT_LOC_STRINGS = NO; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_TARGET_NAME = DouShouQi_App; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 645834532BF5F92300E18321 /* Build configuration list for PBXProject "DouShouQi_App" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6458347A2BF5F92600E18321 /* Debug */, + 6458347B2BF5F92600E18321 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6458347C2BF5F92600E18321 /* Build configuration list for PBXNativeTarget "DouShouQi_App" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6458347D2BF5F92600E18321 /* Debug */, + 6458347E2BF5F92600E18321 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 6458347F2BF5F92600E18321 /* Build configuration list for PBXNativeTarget "DouShouQi_AppTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 645834802BF5F92600E18321 /* Debug */, + 645834812BF5F92600E18321 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 645834822BF5F92600E18321 /* Build configuration list for PBXNativeTarget "DouShouQi_AppUITests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 645834832BF5F92600E18321 /* Debug */, + 645834842BF5F92600E18321 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 645834502BF5F92300E18321 /* Project object */; +} diff --git a/DouShouQi_App/DouShouQi_App/Assets/Colors/Colors.swift b/DouShouQi_App/DouShouQi_App/Assets/Colors/Colors.swift index 14b3ea0..bc9baf0 100644 --- a/DouShouQi_App/DouShouQi_App/Assets/Colors/Colors.swift +++ b/DouShouQi_App/DouShouQi_App/Assets/Colors/Colors.swift @@ -10,4 +10,6 @@ import SwiftUI public struct Colors { static let TitleText = Color("TitleTextColor") + static let Button = Color("ButtonColor") + static let TextButton = Color("ButtonTextColor") } diff --git a/DouShouQi_App/DouShouQi_App/Assets/Colors/Colors.xcassets/ButtonColor.colorset/Contents.json b/DouShouQi_App/DouShouQi_App/Assets/Colors/Colors.xcassets/ButtonColor.colorset/Contents.json new file mode 100644 index 0000000..27c0a4f --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/Assets/Colors/Colors.xcassets/ButtonColor.colorset/Contents.json @@ -0,0 +1,28 @@ +{ + "colors" : [ + { + "color" : { + "platform" : "universal", + "reference" : "systemRedColor" + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "platform" : "tvos", + "reference" : "systemRedColor" + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DouShouQi_App/DouShouQi_App/Assets/Colors/Colors.xcassets/ButtonTextColor.colorset/Contents.json b/DouShouQi_App/DouShouQi_App/Assets/Colors/Colors.xcassets/ButtonTextColor.colorset/Contents.json new file mode 100644 index 0000000..22c4bb0 --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/Assets/Colors/Colors.xcassets/ButtonTextColor.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DouShouQi_App/DouShouQi_App/Assets/Colors/Colors.xcassets/Color.colorset/Contents.json b/DouShouQi_App/DouShouQi_App/Assets/Colors/Colors.xcassets/Color.colorset/Contents.json new file mode 100644 index 0000000..22c4bb0 --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/Assets/Colors/Colors.xcassets/Color.colorset/Contents.json @@ -0,0 +1,38 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "1.000", + "green" : "1.000", + "red" : "1.000" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DouShouQi_App/DouShouQi_App/Assets/Images/AppImages.swift b/DouShouQi_App/DouShouQi_App/Assets/Images/AppImages.swift index ac0dc80..f26776f 100644 --- a/DouShouQi_App/DouShouQi_App/Assets/Images/AppImages.swift +++ b/DouShouQi_App/DouShouQi_App/Assets/Images/AppImages.swift @@ -10,4 +10,5 @@ import SwiftUI public struct AppImages { static let TitleImage = "TitlePageImage" + static let SemiLion = "SemiLion" } diff --git a/DouShouQi_App/DouShouQi_App/Assets/Images/Images.xcassets/SemiLion.imageset/Contents.json b/DouShouQi_App/DouShouQi_App/Assets/Images/Images.xcassets/SemiLion.imageset/Contents.json new file mode 100644 index 0000000..29853d4 --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/Assets/Images/Images.xcassets/SemiLion.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "doushouqi-lion 1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DouShouQi_App/DouShouQi_App/Assets/Images/Images.xcassets/SemiLion.imageset/doushouqi-lion 1.png b/DouShouQi_App/DouShouQi_App/Assets/Images/Images.xcassets/SemiLion.imageset/doushouqi-lion 1.png new file mode 100644 index 0000000..f306b56 Binary files /dev/null and b/DouShouQi_App/DouShouQi_App/Assets/Images/Images.xcassets/SemiLion.imageset/doushouqi-lion 1.png differ diff --git a/DouShouQi_App/DouShouQi_App/Assets/Images/Images.xcassets/TitlePageImage.imageset/-16-05-2024.svg b/DouShouQi_App/DouShouQi_App/Assets/Images/Images.xcassets/TitlePageImage.imageset/-16-05-2024.svg new file mode 100644 index 0000000..a587d3e --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/Assets/Images/Images.xcassets/TitlePageImage.imageset/-16-05-2024.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/DouShouQi_App/DouShouQi_App/Assets/Images/Images.xcassets/TitlePageImage.imageset/Contents.json b/DouShouQi_App/DouShouQi_App/Assets/Images/Images.xcassets/TitlePageImage.imageset/Contents.json index 1cfb966..1bb4e2b 100644 --- a/DouShouQi_App/DouShouQi_App/Assets/Images/Images.xcassets/TitlePageImage.imageset/Contents.json +++ b/DouShouQi_App/DouShouQi_App/Assets/Images/Images.xcassets/TitlePageImage.imageset/Contents.json @@ -12,6 +12,8 @@ { "idiom" : "universal", "scale" : "3x" + "filename" : "-16-05-2024.svg", + "idiom" : "universal" } ], "info" : { diff --git a/DouShouQi_App/DouShouQi_App/Assets/Images/Semi-lion.svg b/DouShouQi_App/DouShouQi_App/Assets/Images/Semi-lion.svg new file mode 100644 index 0000000..a1a7aa2 --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/Assets/Images/Semi-lion.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/DouShouQi_App/DouShouQi_App/Assets/Musics/TitleScreenMusic.mp3 b/DouShouQi_App/DouShouQi_App/Assets/Musics/TitleScreenMusic.mp3 new file mode 100644 index 0000000..3d9329c Binary files /dev/null and b/DouShouQi_App/DouShouQi_App/Assets/Musics/TitleScreenMusic.mp3 differ diff --git a/DouShouQi_App/DouShouQi_App/Assets/Musique/AppMusic.swift b/DouShouQi_App/DouShouQi_App/Assets/Musique/AppMusic.swift new file mode 100644 index 0000000..0357b84 --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/Assets/Musique/AppMusic.swift @@ -0,0 +1,14 @@ +// +// AppMusic.swift +// DouShouQi_App +// +// Created by étudiant on 26/05/2024. +// + +import Foundation +import SwiftUI + +public struct AppMusic { + static let ScreenTitleMusic = "ScreenTitleMusique" + +} diff --git a/DouShouQi_App/DouShouQi_App/Assets/Musique/Musique.xcassets/Contents.json b/DouShouQi_App/DouShouQi_App/Assets/Musique/Musique.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/Assets/Musique/Musique.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DouShouQi_App/DouShouQi_App/Assets/Musique/Musique.xcassets/ScreenTitleMusique.dataset/Contents.json b/DouShouQi_App/DouShouQi_App/Assets/Musique/Musique.xcassets/ScreenTitleMusique.dataset/Contents.json new file mode 100644 index 0000000..dafdbb1 --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/Assets/Musique/Musique.xcassets/ScreenTitleMusique.dataset/Contents.json @@ -0,0 +1,13 @@ +{ + "data" : [ + { + "filename" : "ytmp3free.cc_1-a-o-t-2-main-theme-attack-on-titan-2-soundtrack-youtubemp3free.org.mp3", + "idiom" : "universal", + "universal-type-identifier" : "public.mp3" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/DouShouQi_App/DouShouQi_App/Assets/Musique/Musique.xcassets/ScreenTitleMusique.dataset/ytmp3free.cc_1-a-o-t-2-main-theme-attack-on-titan-2-soundtrack-youtubemp3free.org.mp3 b/DouShouQi_App/DouShouQi_App/Assets/Musique/Musique.xcassets/ScreenTitleMusique.dataset/ytmp3free.cc_1-a-o-t-2-main-theme-attack-on-titan-2-soundtrack-youtubemp3free.org.mp3 new file mode 100644 index 0000000..3d9329c Binary files /dev/null and b/DouShouQi_App/DouShouQi_App/Assets/Musique/Musique.xcassets/ScreenTitleMusique.dataset/ytmp3free.cc_1-a-o-t-2-main-theme-attack-on-titan-2-soundtrack-youtubemp3free.org.mp3 differ diff --git a/DouShouQi_App/DouShouQi_App/Assets/Sounds/TitleScreenButtonSound.mp3 b/DouShouQi_App/DouShouQi_App/Assets/Sounds/TitleScreenButtonSound.mp3 new file mode 100644 index 0000000..91ec965 Binary files /dev/null and b/DouShouQi_App/DouShouQi_App/Assets/Sounds/TitleScreenButtonSound.mp3 differ diff --git a/DouShouQi_App/DouShouQi_App/Assets/TextStyles/Fonts.swift b/DouShouQi_App/DouShouQi_App/Assets/TextStyles/Fonts.swift new file mode 100644 index 0000000..56f2dbf --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/Assets/TextStyles/Fonts.swift @@ -0,0 +1,12 @@ +// +// Fonts.swift +// DouShouQi_App +// +// Created by Rémi REGNAULT on 27/05/2024. +// + +import Foundation + +public struct Fonts { + static let title = "samurai" +} diff --git a/DouShouQi_App/DouShouQi_App/Assets/TextStyles/ViewTitleTextStyle.swift b/DouShouQi_App/DouShouQi_App/Assets/TextStyles/ViewTitleTextStyle.swift index 4e1c641..6e3a6e1 100644 --- a/DouShouQi_App/DouShouQi_App/Assets/TextStyles/ViewTitleTextStyle.swift +++ b/DouShouQi_App/DouShouQi_App/Assets/TextStyles/ViewTitleTextStyle.swift @@ -13,5 +13,9 @@ struct ViewTitleTextStyle: TextStyle { content .foregroundColor(Colors.TitleText) .fontWeight(.bold) +<<<<<<< HEAD +======= + .font(.custom(Fonts.title, size: 30)) +>>>>>>> dev_views } } diff --git a/DouShouQi_App/DouShouQi_App/Assets/TextStyles/samurai.ttf b/DouShouQi_App/DouShouQi_App/Assets/TextStyles/samurai.ttf new file mode 100644 index 0000000..5de690c Binary files /dev/null and b/DouShouQi_App/DouShouQi_App/Assets/TextStyles/samurai.ttf differ diff --git a/DouShouQi_App/DouShouQi_App/Assets/TitleScreenMusic.mp3 b/DouShouQi_App/DouShouQi_App/Assets/TitleScreenMusic.mp3 new file mode 100644 index 0000000..3d9329c Binary files /dev/null and b/DouShouQi_App/DouShouQi_App/Assets/TitleScreenMusic.mp3 differ diff --git a/DouShouQi_App/DouShouQi_App/Components/Game/GameResumeFrame.swift b/DouShouQi_App/DouShouQi_App/Components/Game/GameResumeFrame.swift new file mode 100644 index 0000000..dade4f8 --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/Components/Game/GameResumeFrame.swift @@ -0,0 +1,51 @@ +// +// GameResumeFrame.swift +// DouShouQi_App +// +// Created by Rémi REGNAULT on 21/05/2024. +// + +import SwiftUI + +struct GameResumeFrame: View { + + // Players Params + let Player1Name: String + let Player2Name: String + + // Game Params + let Status: String + + var body: some View { + ZStack { + HStack(alignment: .center) { + VStack(alignment: .leading) { + Text("\(Player1Name) vs \(Player2Name)") + .font(.headline) + + Text(Status) + .font(.subheadline) + .foregroundColor(.gray) + } + + Spacer() + + Text("Detail >") + .frame(width: 100) + .foregroundColor(.gray) + } + + .padding(10) + .overlay( + RoundedRectangle(cornerRadius: 3) + .stroke(.gray, lineWidth: 2) + ) + }.padding(2) + } +} + +struct GameResumeFrame_Previews: PreviewProvider { + static var previews: some View { + GameResumeFrame(Player1Name: "Rayhan", Player2Name: "Remi", Status: "Winner: Remi") + } +} diff --git a/DouShouQi_App/DouShouQi_App/Components/MainMenuButton.swift b/DouShouQi_App/DouShouQi_App/Components/MainMenuButton.swift index 289207f..b421b74 100644 --- a/DouShouQi_App/DouShouQi_App/Components/MainMenuButton.swift +++ b/DouShouQi_App/DouShouQi_App/Components/MainMenuButton.swift @@ -7,14 +7,91 @@ import SwiftUI -struct MainMenuButton: View { +struct MainMenuButton: View { + + // Text Params + var text: String + var destination: Destination + var sound: String + + + // Button Alignment + var horizontalAlignment: Alignment = .center + + // Button corner radius + var topLeftCorner: CGFloat = 0 + var topRightCorner: CGFloat = 0 + var bottomLeftCorner: CGFloat = 0 + var bottomRightCorner: CGFloat = 0 + var body: some View { - Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) + NavigationLink(destination: destination) { + Text(text.uppercased()) + .font(.headline) + .fontWeight(.semibold) + .foregroundColor(.white) + .padding() + .frame(maxWidth: .infinity, maxHeight: 40) + .background( + Color.red + .clipShape(RoundedRectangle(cornerSize: CGSize(width: 0, height: 0))) + .mask(RoundedCornersShape(cornerRadii: (topLeft: topLeftCorner, topRight: topRightCorner, bottomLeft: bottomLeftCorner, bottomRight: bottomRightCorner))) + ) + } + .simultaneousGesture(TapGesture().onEnded { + playSound(named: sound) + }) + .frame(width: UIScreen.main.bounds.width / 1.7) + .frame(maxWidth: .infinity, alignment: horizontalAlignment) + } +} + +struct RoundedCornersShape: Shape { + var cornerRadii: (topLeft: CGFloat, topRight: CGFloat, bottomLeft: CGFloat, bottomRight: CGFloat) + + func path(in rect: CGRect) -> Path { + let path = UIBezierPath() + + // Top left corner + path.move(to: CGPoint(x: rect.minX, y: rect.minY + cornerRadii.topLeft)) + path.addArc(withCenter: CGPoint(x: rect.minX + cornerRadii.topLeft, y: rect.minY + cornerRadii.topLeft), + radius: cornerRadii.topLeft, + startAngle: .pi, + endAngle: -.pi / 2, + clockwise: true) + + // Top right corner + path.addLine(to: CGPoint(x: rect.maxX - cornerRadii.topRight, y: rect.minY)) + path.addArc(withCenter: CGPoint(x: rect.maxX - cornerRadii.topRight, y: rect.minY + cornerRadii.topRight), + radius: cornerRadii.topRight, + startAngle: -.pi / 2, + endAngle: 0, + clockwise: true) + + // Bottom right corner + path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY - cornerRadii.bottomRight)) + path.addArc(withCenter: CGPoint(x: rect.maxX - cornerRadii.bottomRight, y: rect.maxY - cornerRadii.bottomRight), + radius: cornerRadii.bottomRight, + startAngle: 0, + endAngle: .pi / 2, + clockwise: true) + + // Bottom left corner + path.addLine(to: CGPoint(x: rect.minX + cornerRadii.bottomLeft, y: rect.maxY)) + path.addArc(withCenter: CGPoint(x: rect.minX + cornerRadii.bottomLeft, y: rect.maxY - cornerRadii.bottomLeft), + radius: cornerRadii.bottomLeft, + startAngle: .pi / 2, + endAngle: .pi, + clockwise: true) + + path.addLine(to: CGPoint(x: rect.minX, y: rect.minY + cornerRadii.topLeft)) + + return Path(path.cgPath) } } struct MainMenuButton_Previews: PreviewProvider { static var previews: some View { - MainMenuButton() + MainMenuButton(text: "test", destination: HistoricView(), sound: "TitleScreenButtonSound", horizontalAlignment: .leading, topRightCorner: 10, bottomRightCorner: 10) } } diff --git a/DouShouQi_App/DouShouQi_App/Components/Player/PlayerResumeFrame.swift b/DouShouQi_App/DouShouQi_App/Components/Player/PlayerResumeFrame.swift new file mode 100644 index 0000000..201bffb --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/Components/Player/PlayerResumeFrame.swift @@ -0,0 +1,45 @@ +// +// PlayerResumeFrame.swift +// DouShouQi_App +// +// Created by Rémi REGNAULT on 21/05/2024. +// + +import SwiftUI + +struct PlayerResumeFrame: View { + + // Player Params + let Name: String + let Rank: Int + let Wins: Int + let Looses: Int + + var body: some View { + VStack { + HStack { + Text("\(Rank)") + .font(.headline) + .frame(width: 50, alignment: .trailing) + + Text(Name) + + Spacer() + + Text("\(Wins)") + .frame(width: 55, alignment: .trailing) + + Text("\(Looses)") + .frame(width: 55, alignment: .trailing) + + } + .padding(10) + } + } +} + +struct PlayerResumeFrame_Previews: PreviewProvider { + static var previews: some View { + PlayerResumeFrame(Name: "Michel Polnaref", Rank: 178, Wins: 0, Looses: 296) + } +} diff --git a/DouShouQi_App/DouShouQi_App/Components/Player/PlayerRow.swift b/DouShouQi_App/DouShouQi_App/Components/Player/PlayerRow.swift new file mode 100644 index 0000000..fff7900 --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/Components/Player/PlayerRow.swift @@ -0,0 +1,43 @@ +// +// PlayerRow.swift +// DouShouQi_App +// +// Created by étudiant on 26/05/2024. +// + +import Foundation +import SwiftUI + +struct PlayerRow: View { + var player: Player + + var body: some View { + HStack { + VStack(alignment: .leading) { + Text(player.name) + .font(.headline) + Text("Victoires : \(player.wins) Défaites : \(player.losses)") + .font(.subheadline) + } + Spacer() + Button(action: { + // Action pour éditer le joueur + }) { + Image(systemName: "pencil") + .foregroundColor(.red) + } + Button(action: { + // Action pour supprimer le joueur + }) { + Image(systemName: "trash") + .foregroundColor(.red) + } + } + .padding() + .background(Color.white) + .cornerRadius(10) + .shadow(radius: 1) + } +} + + diff --git a/DouShouQi_App/DouShouQi_App/Components/TitlePageFrame.swift b/DouShouQi_App/DouShouQi_App/Components/TitlePageFrame.swift index e492471..12ef286 100644 --- a/DouShouQi_App/DouShouQi_App/Components/TitlePageFrame.swift +++ b/DouShouQi_App/DouShouQi_App/Components/TitlePageFrame.swift @@ -9,6 +9,9 @@ import SwiftUI struct TitlePageFrame: View { + // Text Params + var Text: String + // Image Params var ImageWidth: CGFloat var ImageHeight: CGFloat @@ -20,9 +23,13 @@ struct TitlePageFrame: View { .resizable() .aspectRatio(contentMode: .fit) .frame(width: ImageWidth, height: ImageHeight) - + Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/) .textStyle(T: TextStyles.ViewTitle) + SwiftUI.Text(self.Text) + .foregroundColor(Colors.TitleText) + .fontWeight(.bold) + .font(.custom(Fonts.title, size: 30)) } } @@ -31,6 +38,6 @@ struct TitlePageFrame: View { struct TitlePageFrame_Previews: PreviewProvider { static var previews: some View { - TitlePageFrame(ImageWidth: 200, ImageHeight: 200) + TitlePageFrame(Text: "DouShouQi", ImageWidth: 200, ImageHeight: 200) } } diff --git a/DouShouQi_App/DouShouQi_App/DouShouQi_AppApp.swift b/DouShouQi_App/DouShouQi_App/DouShouQi_AppApp.swift index c341ba1..07aed7a 100644 --- a/DouShouQi_App/DouShouQi_App/DouShouQi_AppApp.swift +++ b/DouShouQi_App/DouShouQi_App/DouShouQi_AppApp.swift @@ -11,7 +11,7 @@ import SwiftUI struct DouShouQi_AppApp: App { var body: some Scene { WindowGroup { - ContentView() + MainMenuView() } } } diff --git a/DouShouQi_App/DouShouQi_App/SoundPlayerClass/MusicPlayer.swift b/DouShouQi_App/DouShouQi_App/SoundPlayerClass/MusicPlayer.swift new file mode 100644 index 0000000..d4faadc --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/SoundPlayerClass/MusicPlayer.swift @@ -0,0 +1,34 @@ +// +// MusicPlayer.swift +// DouShouQi_App +// +// Created by étudiant on 26/05/2024. +// + +import Foundation +import AVFoundation + +class MusicPlayer { + static let shared = MusicPlayer() + var audioPlayer: AVAudioPlayer? + + func playBackgroundMusic(music: String) { + if let bundle = Bundle.main.path(forResource: music, ofType: "mp3") { + let backgroundMusic = NSURL(fileURLWithPath: bundle) + do { + audioPlayer = try AVAudioPlayer(contentsOf: backgroundMusic as URL) + guard let audioPlayer = audioPlayer else { return } + audioPlayer.numberOfLoops = -1 // Loop indefinitely + audioPlayer.prepareToPlay() + audioPlayer.play() + } catch { + print(error) + } + } + } + + func stopBackgroundMusic() { + audioPlayer?.stop() + } +} + diff --git a/DouShouQi_App/DouShouQi_App/SoundPlayerClass/SoundPlayer.swift b/DouShouQi_App/DouShouQi_App/SoundPlayerClass/SoundPlayer.swift new file mode 100644 index 0000000..2378b8a --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/SoundPlayerClass/SoundPlayer.swift @@ -0,0 +1,22 @@ +// +// SoundPlayer.swift +// DouShouQi_App +// +// Created by étudiant on 27/05/2024. +// + +import Foundation +import AVFoundation + +var audioPlayer: AVAudioPlayer? + +func playSound(named soundName: String) { + guard let url = Bundle.main.url(forResource: soundName, withExtension: "mp3") else { return } + + do { + audioPlayer = try AVAudioPlayer(contentsOf: url) + audioPlayer?.play() + } catch let error { + print("Error playing sound. \(error.localizedDescription)") + } +} diff --git a/DouShouQi_App/DouShouQi_App/Views/Game/HistoricView.swift b/DouShouQi_App/DouShouQi_App/Views/Game/HistoricView.swift new file mode 100644 index 0000000..ece39a7 --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/Views/Game/HistoricView.swift @@ -0,0 +1,32 @@ +// +// HistoricView.swift +// DouShouQi_App +// +// Created by Rémi REGNAULT on 21/05/2024. +// + +import SwiftUI + +struct HistoricView: View { + var body: some View { + VStack { + TitlePageFrame(Text: "Historic", ImageWidth: 200, ImageHeight: 200) + + VStack { + GameResumeFrame(Player1Name: "Remi", Player2Name: "Nathan", Status: "Winner: Nathan") + GameResumeFrame(Player1Name: "Rayhan", Player2Name: "Nathan", Status: "Winner: Nathan") + GameResumeFrame(Player1Name: "Rayhan", Player2Name: "Rémi", Status: "Draw") + } + .padding(.horizontal, 10) + + Spacer() + + } + } +} + +struct HistoricView_Previews: PreviewProvider { + static var previews: some View { + HistoricView() + } +} diff --git a/DouShouQi_App/DouShouQi_App/Views/Game/SwiftUIView.swift b/DouShouQi_App/DouShouQi_App/Views/Game/SwiftUIView.swift new file mode 100644 index 0000000..e544d48 --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/Views/Game/SwiftUIView.swift @@ -0,0 +1,98 @@ +// +// SwiftUIView.swift +// DouShouQi_App +// +// Created by étudiant on 22/05/2024. +// + +import SwiftUI + +struct SwiftUIView: View { + var body: some View { + VStack { + TitlePageFrame(Text: "DOU SHOU QI", ImageWidth: 200, ImageHeight: 200) + Spacer() + + VStack { + HStack{ + VStack { + Button(action: { + // Action du bouton + }, label: { + Text("Play".uppercased()) + .font(.headline) + .fontWeight(.semibold) + .foregroundColor(.white) + .frame(maxWidth: .infinity, maxHeight: 50) + .background( + Color.red + ) + .cornerRadius(0) + }) + .frame(width: UIScreen.main.bounds.width / 1.7) + .frame(maxWidth: .infinity, alignment: .leading) + + Button(action: { + // Action du bouton + }, label: { + Text("Historique".uppercased()) + .font(.headline) + .fontWeight(.semibold) + .foregroundColor(.white) + .frame(maxWidth: .infinity, maxHeight: 50) + .background( + Color.red + ) + .cornerRadius(0) + }) + .frame(width: UIScreen.main.bounds.width / 1.7) + .frame(maxWidth: .infinity, alignment: .leading) + + Button(action: { + // Action du bouton + }, label: { + Text("Best scores".uppercased()) + .font(.headline) + .fontWeight(.semibold) + .foregroundColor(.white) + .frame(maxWidth: .infinity, maxHeight: 50) + .background( + Color.red + ) + .cornerRadius(0) + }) + .frame(width: UIScreen.main.bounds.width / 1.7) + .frame(maxWidth: .infinity, alignment: .leading) + + Button(action: { + // Action du bouton + }, label: { + Text("Players".uppercased()) + .font(.headline) + .fontWeight(.semibold) + .foregroundColor(.white) + .frame(maxWidth: .infinity, maxHeight: 50) + .background( + Color.red + ) + .cornerRadius(0) + }) + .frame(width: UIScreen.main.bounds.width / 1.7) + .frame(maxWidth: .infinity, alignment: .leading) + } + .padding() + } + } + .padding(.horizontal, 10) + + Spacer() + } + } +} + + +struct SwiftUIView_Previews: PreviewProvider { + static var previews: some View { + SwiftUIView() + } +} diff --git a/DouShouQi_App/DouShouQi_App/Views/Menu/MainMenuView.swift b/DouShouQi_App/DouShouQi_App/Views/Menu/MainMenuView.swift new file mode 100644 index 0000000..d192947 --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/Views/Menu/MainMenuView.swift @@ -0,0 +1,71 @@ +// +// MainMenuView.swift +// DouShouQi_App +// +// Created by Rémi REGNAULT on 16/05/2024. +// + +import SwiftUI + +struct MainMenuView: View { + var body: some View { + NavigationView { + VStack { + + TitlePageFrame(Text: "DOU SHOU QI", ImageWidth: 200, ImageHeight: 200) + + Spacer() + + VStack { + HStack{ + VStack(spacing: 25) { + MainMenuButton(text: "Play", destination: ScoreBoardView(), sound: "TitleScreenButtonSound", horizontalAlignment: .leading, topRightCorner: 10, bottomRightCorner: 10) + MainMenuButton(text: "Historique", destination: HistoricView(), sound: "TitleScreenButtonSound", horizontalAlignment: .leading, topRightCorner: 10, bottomRightCorner: 10) + MainMenuButton(text: "Best Scores", destination: ScoreBoardView(), sound: "TitleScreenButtonSound", horizontalAlignment: .leading, topRightCorner: 10, bottomRightCorner: 10) + MainMenuButton(text: "Players", destination: PlayersView(), sound: "TitleScreenButtonSound", horizontalAlignment: .leading, topRightCorner: 10, bottomRightCorner: 10) + } + Image(AppImages.SemiLion) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: 200, height: 500) + } + + } + Spacer() + HStack { + Text("Copyright @") + .font(.headline) + .frame(alignment: .trailing) + + Text("Dou Shou Qi Team") + + Spacer() + + Text("2024") + .frame(alignment: .trailing) + } + .padding() // Ajout de padding pour éviter que le contenu ne touche la bordure + .background(Color.white) // Couleur de fond pour le HStack + .overlay( + Rectangle() + .stroke(Color.black, lineWidth: 1) // Couleur et épaisseur de la bordure + ) + + Spacer() + .onAppear { + MusicPlayer.shared.playBackgroundMusic(music: "TitleScreenMusic") + } + .onDisappear { + MusicPlayer.shared.stopBackgroundMusic() + } + + } + } + } +} + +struct MainMenuView_Previews: PreviewProvider { + static var previews: some View { + MainMenuView() + } +} diff --git a/DouShouQi_App/DouShouQi_App/Views/Player/PlayersView.swift b/DouShouQi_App/DouShouQi_App/Views/Player/PlayersView.swift new file mode 100644 index 0000000..8f27145 --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/Views/Player/PlayersView.swift @@ -0,0 +1,119 @@ +// +// PlayersView.swift +// DouShouQi_App +// +// Created by étudiant on 26/05/2024. +// + +import Foundation +import SwiftUI + +// Modèle de données pour un joueur +struct Player: Identifiable { + var id = UUID() + var name: String + var wins: Int + var losses: Int +} + +// Exemple de vue pour l'interface utilisateur des joueurs +struct PlayersView: View { + // Liste de joueurs pour l'exemple + @State private var players = [ + Player(name: "Rayhan", wins: 7, losses: 6), + Player(name: "Remi", wins: 7, losses: 2), + Player(name: "Nathan", wins: 14, losses: 5) + ] + + @State private var searchText = "" + + var filteredPlayers: [Player] { + if searchText.isEmpty { + return players + } else { + return players.filter { $0.name.lowercased().contains(searchText.lowercased()) } + } + } + + var body: some View { + NavigationView { + VStack { + // Image en haut + TitlePageFrame(Text: "PLAYERS", ImageWidth: 200, ImageHeight: 200) + + // Barre de recherche + SearchBar(text: $searchText) + .padding(.horizontal) + + // Liste de joueurs + List { + ForEach(groupedPlayers.keys.sorted(), id: \.self) { key in + Section(header: Text(key)) { + ForEach(groupedPlayers[key]!) { player in + PlayerRow(player: player) + } + } + } + } + + Button(action: { + + }) { + Text("Add a player") + .font(.headline) + .foregroundColor(.white) + .padding() + .frame(maxWidth: .infinity) + .background(Color.red) + .cornerRadius(10) + .padding(.horizontal) + } + .padding(.bottom) + } + } + } + + var groupedPlayers: [String: [Player]] { + Dictionary(grouping: filteredPlayers) { player in + String(player.name.prefix(1)).uppercased() + } + } +} + + +// Vue pour la barre de recherche +struct SearchBar: UIViewRepresentable { + @Binding var text: String + + class Coordinator: NSObject, UISearchBarDelegate { + @Binding var text: String + + init(text: Binding) { + _text = text + } + + func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { + text = searchText + } + } + + func makeCoordinator() -> Coordinator { + return Coordinator(text: $text) + } + + func makeUIView(context: Context) -> UISearchBar { + let searchBar = UISearchBar(frame: .zero) + searchBar.delegate = context.coordinator + return searchBar + } + + func updateUIView(_ uiView: UISearchBar, context: Context) { + uiView.text = text + } +} + +struct PlayersPageView_Previews: PreviewProvider { + static var previews: some View { + PlayersView() + } +} diff --git a/DouShouQi_App/DouShouQi_App/Views/Player/ScoreBoardView.swift b/DouShouQi_App/DouShouQi_App/Views/Player/ScoreBoardView.swift new file mode 100644 index 0000000..53c3e1a --- /dev/null +++ b/DouShouQi_App/DouShouQi_App/Views/Player/ScoreBoardView.swift @@ -0,0 +1,57 @@ +// +// ScoreBoardView.swift +// DouShouQi_App +// +// Created by Rémi REGNAULT on 21/05/2024. +// + +import SwiftUI +import DouShouQiModel + +struct ScoreBoardView: View { + var body: some View { + VStack { + HStack { + TitlePageFrame(Text: "Score Board", ImageWidth: 200, ImageHeight: 200) + } + + VStack { + HStack { + Text("Rank") + .font(.headline) + .frame(width: 50, alignment: .trailing) + + Text("Name") + + Spacer() + + Text("Wins") + .frame(width: 55, alignment: .trailing) + + Text("Looses") + .frame(width: 55, alignment: .trailing) + + } + .padding(10) + + HStack { + Rectangle() + .frame(height: 2) + } + + PlayerResumeFrame(Name: "Nathan Verdier", Rank: 1, Wins: 19, Looses: 15) + PlayerResumeFrame(Name: "Rayhan Hassou", Rank: 2, Wins: 17, Looses: 17) + PlayerResumeFrame(Name: "Rémi Regnault", Rank: 3, Wins: 15, Looses: 19) + + Spacer() + } + } + .padding(10) + } +} + +struct ScoreBoardView_Previews: PreviewProvider { + static var previews: some View { + ScoreBoardView() + } +}