diff --git a/Pendu.xcodeproj/project.pbxproj b/Pendu.xcodeproj/project.pbxproj index 1ee074526287de6dc7104bc70603caf180b34f07..a64ee7583a1761dd035d3b9ee3a73817afc99ce7 100644 --- a/Pendu.xcodeproj/project.pbxproj +++ b/Pendu.xcodeproj/project.pbxproj @@ -11,14 +11,15 @@ BF1D4A122A1CF36D002F97CB /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3C480D2A0A1FCA00CE128F /* AppDelegate.swift */; }; BF3C480E2A0A1FCA00CE128F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3C480D2A0A1FCA00CE128F /* AppDelegate.swift */; }; BF3C48102A0A1FCA00CE128F /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3C480F2A0A1FCA00CE128F /* SceneDelegate.swift */; }; - BF3C48122A0A1FCA00CE128F /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3C48112A0A1FCA00CE128F /* ViewController.swift */; }; - BF3C48152A0A1FCA00CE128F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BF3C48132A0A1FCA00CE128F /* Main.storyboard */; }; + BF3C48122A0A1FCA00CE128F /* GameViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3C48112A0A1FCA00CE128F /* GameViewController.swift */; }; BF3C48182A0A1FCA00CE128F /* Pendu.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = BF3C48162A0A1FCA00CE128F /* Pendu.xcdatamodeld */; }; BF3C481A2A0A1FCD00CE128F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = BF3C48192A0A1FCD00CE128F /* Assets.xcassets */; }; BF3C481D2A0A1FCD00CE128F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BF3C481B2A0A1FCD00CE128F /* LaunchScreen.storyboard */; }; BF3C48282A0A1FCD00CE128F /* PenduTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3C48272A0A1FCD00CE128F /* PenduTests.swift */; }; BF3C48322A0A1FCD00CE128F /* PenduUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3C48312A0A1FCD00CE128F /* PenduUITests.swift */; }; BF3C48342A0A1FCD00CE128F /* PenduUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3C48332A0A1FCD00CE128F /* PenduUITestsLaunchTests.swift */; }; + F817CE932A13B9DD0078F0A5 /* whatever it takes.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F817CE922A13B9DC0078F0A5 /* whatever it takes.ttf */; }; + F8B49FB42A25E67600750A52 /* Game.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = BF3C48132A0A1FCA00CE128F /* Game.storyboard */; }; BF3C48432A0A3CFF00CE128F /* GameEngineTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3C48422A0A3CFF00CE128F /* GameEngineTests.swift */; }; BF7F866E2A1CF44B0063A152 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF3C480D2A0A1FCA00CE128F /* AppDelegate.swift */; }; D082CCC92A0A33D600D97981 /* GameEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = D082CCC82A0A33D600D97981 /* GameEngine.swift */; }; @@ -48,8 +49,8 @@ BF3C480A2A0A1FCA00CE128F /* Pendu.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Pendu.app; sourceTree = BUILT_PRODUCTS_DIR; }; BF3C480D2A0A1FCA00CE128F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; BF3C480F2A0A1FCA00CE128F /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; }; - BF3C48112A0A1FCA00CE128F /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; }; - BF3C48142A0A1FCA00CE128F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; }; + BF3C48112A0A1FCA00CE128F /* GameViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameViewController.swift; sourceTree = "<group>"; }; + BF3C48142A0A1FCA00CE128F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Game.storyboard; sourceTree = "<group>"; }; BF3C48172A0A1FCA00CE128F /* Pendu.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Pendu.xcdatamodel; sourceTree = "<group>"; }; BF3C48192A0A1FCD00CE128F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; BF3C481C2A0A1FCD00CE128F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; @@ -59,6 +60,7 @@ BF3C482D2A0A1FCD00CE128F /* PenduUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PenduUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; BF3C48312A0A1FCD00CE128F /* PenduUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenduUITests.swift; sourceTree = "<group>"; }; BF3C48332A0A1FCD00CE128F /* PenduUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PenduUITestsLaunchTests.swift; sourceTree = "<group>"; }; + F817CE922A13B9DC0078F0A5 /* whatever it takes.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "whatever it takes.ttf"; sourceTree = "<group>"; }; BF3C48422A0A3CFF00CE128F /* GameEngineTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameEngineTests.swift; sourceTree = "<group>"; }; BF5A7EC82A13BF8A00168B16 /* GameEngineMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameEngineMock.swift; sourceTree = "<group>"; }; D082CCC82A0A33D600D97981 /* GameEngine.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GameEngine.swift; sourceTree = "<group>"; }; @@ -112,10 +114,11 @@ BF3C480C2A0A1FCA00CE128F /* Pendu */ = { isa = PBXGroup; children = ( + F817CE912A13B99F0078F0A5 /* Font */, BF3C480D2A0A1FCA00CE128F /* AppDelegate.swift */, BF3C480F2A0A1FCA00CE128F /* SceneDelegate.swift */, - BF3C48112A0A1FCA00CE128F /* ViewController.swift */, - BF3C48132A0A1FCA00CE128F /* Main.storyboard */, + BF3C48112A0A1FCA00CE128F /* GameViewController.swift */, + BF3C48132A0A1FCA00CE128F /* Game.storyboard */, BF3C48192A0A1FCD00CE128F /* Assets.xcassets */, BF3C481B2A0A1FCD00CE128F /* LaunchScreen.storyboard */, BF3C481E2A0A1FCD00CE128F /* Info.plist */, @@ -145,6 +148,14 @@ path = PenduUITests; sourceTree = "<group>"; }; + F817CE912A13B99F0078F0A5 /* Font */ = { + isa = PBXGroup; + children = ( + F817CE922A13B9DC0078F0A5 /* whatever it takes.ttf */, + ); + path = Font; + sourceTree = "<group>"; + }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -249,6 +260,8 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + F8B49FB42A25E67600750A52 /* Game.storyboard in Resources */, + F817CE932A13B9DD0078F0A5 /* whatever it takes.ttf in Resources */, BF3C481D2A0A1FCD00CE128F /* LaunchScreen.storyboard in Resources */, BF3C481A2A0A1FCD00CE128F /* Assets.xcassets in Resources */, 157E41DB2A1D136300E6DE57 /* zadi.jpeg in Resources */, @@ -277,6 +290,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + BF3C48122A0A1FCA00CE128F /* GameViewController.swift in Sources */, D082CCC92A0A33D600D97981 /* GameEngine.swift in Sources */, BF3C48122A0A1FCA00CE128F /* ViewController.swift in Sources */, BF3C480E2A0A1FCA00CE128F /* AppDelegate.swift in Sources */, @@ -324,12 +338,12 @@ /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ - BF3C48132A0A1FCA00CE128F /* Main.storyboard */ = { + BF3C48132A0A1FCA00CE128F /* Game.storyboard */ = { isa = PBXVariantGroup; children = ( BF3C48142A0A1FCA00CE128F /* Base */, ); - name = Main.storyboard; + name = Game.storyboard; sourceTree = "<group>"; }; BF3C481B2A0A1FCD00CE128F /* LaunchScreen.storyboard */ = { diff --git a/Pendu/Assets.xcassets/Image.imageset/Contents.json b/Pendu/Assets.xcassets/Image.imageset/Contents.json new file mode 100644 index 0000000000000000000000000000000000000000..a19a5492203a8d30fc85ccc30497536a9500155d --- /dev/null +++ b/Pendu/Assets.xcassets/Image.imageset/Contents.json @@ -0,0 +1,20 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Pendu/Assets.xcassets/background.imageset/Contents.json b/Pendu/Assets.xcassets/background.imageset/Contents.json new file mode 100644 index 0000000000000000000000000000000000000000..db2f75af916e709496f01b2778b0e068b5cd6bb4 --- /dev/null +++ b/Pendu/Assets.xcassets/background.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "background.jpeg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Pendu/Assets.xcassets/background.imageset/background.jpeg b/Pendu/Assets.xcassets/background.imageset/background.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..e4ff81fac8a5ed53e477c99fa0b8d4b79d402a14 Binary files /dev/null and b/Pendu/Assets.xcassets/background.imageset/background.jpeg differ diff --git a/Pendu/Assets.xcassets/background_table.jpeg b/Pendu/Assets.xcassets/background_table.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..e4ff81fac8a5ed53e477c99fa0b8d4b79d402a14 Binary files /dev/null and b/Pendu/Assets.xcassets/background_table.jpeg differ diff --git a/Pendu/Assets.xcassets/fond_acceuil.imageset/Contents.json b/Pendu/Assets.xcassets/fond_acceuil.imageset/Contents.json new file mode 100644 index 0000000000000000000000000000000000000000..247ca6594cde37423dac93db4e593bcb2455b04d --- /dev/null +++ b/Pendu/Assets.xcassets/fond_acceuil.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "fond_acceuil.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Pendu/Assets.xcassets/fond_acceuil.imageset/fond_acceuil.png b/Pendu/Assets.xcassets/fond_acceuil.imageset/fond_acceuil.png new file mode 100644 index 0000000000000000000000000000000000000000..eb10bb4b47c5d7e3d2f21093004153702b8f6cf7 Binary files /dev/null and b/Pendu/Assets.xcassets/fond_acceuil.imageset/fond_acceuil.png differ diff --git a/Pendu/Assets.xcassets/humain1.imageset/Contents.json b/Pendu/Assets.xcassets/humain1.imageset/Contents.json new file mode 100644 index 0000000000000000000000000000000000000000..b3c8bc084748ac03dcc71c67ab3fde8b7101b00c --- /dev/null +++ b/Pendu/Assets.xcassets/humain1.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "humain1.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Pendu/Assets.xcassets/humain1.imageset/humain1.png b/Pendu/Assets.xcassets/humain1.imageset/humain1.png new file mode 100644 index 0000000000000000000000000000000000000000..7b2e123d8b032995835232cc1c2b17b25d130041 Binary files /dev/null and b/Pendu/Assets.xcassets/humain1.imageset/humain1.png differ diff --git a/Pendu/Assets.xcassets/humain2.imageset/Contents.json b/Pendu/Assets.xcassets/humain2.imageset/Contents.json new file mode 100644 index 0000000000000000000000000000000000000000..7645645c77b4ac600e98cfeb703699ea5d4ab592 --- /dev/null +++ b/Pendu/Assets.xcassets/humain2.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "humain2.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Pendu/Assets.xcassets/humain2.imageset/humain2.png b/Pendu/Assets.xcassets/humain2.imageset/humain2.png new file mode 100644 index 0000000000000000000000000000000000000000..fc52d3006f64976de511adce0c014870426a2b9b Binary files /dev/null and b/Pendu/Assets.xcassets/humain2.imageset/humain2.png differ diff --git a/Pendu/Assets.xcassets/humain3.imageset/Contents.json b/Pendu/Assets.xcassets/humain3.imageset/Contents.json new file mode 100644 index 0000000000000000000000000000000000000000..63d4d18cac1d3bd2d517f8f3f92a643ee7fc766a --- /dev/null +++ b/Pendu/Assets.xcassets/humain3.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "humain3.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Pendu/Assets.xcassets/humain3.imageset/humain3.png b/Pendu/Assets.xcassets/humain3.imageset/humain3.png new file mode 100644 index 0000000000000000000000000000000000000000..bbb37133d1c0cbf2e96ec895902a27224be90637 Binary files /dev/null and b/Pendu/Assets.xcassets/humain3.imageset/humain3.png differ diff --git a/Pendu/Assets.xcassets/humain4.imageset/Contents.json b/Pendu/Assets.xcassets/humain4.imageset/Contents.json new file mode 100644 index 0000000000000000000000000000000000000000..f8f04b060ed211575986eb5b3f0f23fd28bdce8b --- /dev/null +++ b/Pendu/Assets.xcassets/humain4.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "humain4.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Pendu/Assets.xcassets/humain4.imageset/humain4.png b/Pendu/Assets.xcassets/humain4.imageset/humain4.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f28a4d2f2bdc9abddfbca7ae8700811c1f5c27 Binary files /dev/null and b/Pendu/Assets.xcassets/humain4.imageset/humain4.png differ diff --git a/Pendu/Assets.xcassets/humain5.imageset/Contents.json b/Pendu/Assets.xcassets/humain5.imageset/Contents.json new file mode 100644 index 0000000000000000000000000000000000000000..2bf1e2776f58f96c16c5a84b8e5319768b432f3a --- /dev/null +++ b/Pendu/Assets.xcassets/humain5.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "humain5.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Pendu/Assets.xcassets/humain5.imageset/humain5.png b/Pendu/Assets.xcassets/humain5.imageset/humain5.png new file mode 100644 index 0000000000000000000000000000000000000000..14a8dbd9e606df232318e284ac8f552e7c20cb55 Binary files /dev/null and b/Pendu/Assets.xcassets/humain5.imageset/humain5.png differ diff --git a/Pendu/Assets.xcassets/humain6.imageset/Contents.json b/Pendu/Assets.xcassets/humain6.imageset/Contents.json new file mode 100644 index 0000000000000000000000000000000000000000..4026a40775d6fdcb19e06810d4879df9535f548e --- /dev/null +++ b/Pendu/Assets.xcassets/humain6.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "humain6.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Pendu/Assets.xcassets/humain6.imageset/humain6.png b/Pendu/Assets.xcassets/humain6.imageset/humain6.png new file mode 100644 index 0000000000000000000000000000000000000000..75ffd11ea8ac7570d7bd26cd420b4b44cdbba8f2 Binary files /dev/null and b/Pendu/Assets.xcassets/humain6.imageset/humain6.png differ diff --git a/Pendu/Assets.xcassets/humain7.imageset/Contents.json b/Pendu/Assets.xcassets/humain7.imageset/Contents.json new file mode 100644 index 0000000000000000000000000000000000000000..3e5f9cf2c6dc04bbed4bed89ddeec455898b49d7 --- /dev/null +++ b/Pendu/Assets.xcassets/humain7.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "humain7.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Pendu/Assets.xcassets/humain7.imageset/humain7.png b/Pendu/Assets.xcassets/humain7.imageset/humain7.png new file mode 100644 index 0000000000000000000000000000000000000000..f7588d41f9906320eee8eec8cc3b45dbca15d92b Binary files /dev/null and b/Pendu/Assets.xcassets/humain7.imageset/humain7.png differ diff --git a/Pendu/Assets.xcassets/humain8-1.imageset/Contents.json b/Pendu/Assets.xcassets/humain8-1.imageset/Contents.json new file mode 100644 index 0000000000000000000000000000000000000000..d6d53d209824c2864ddf72fc8778d2de5f3e7a91 --- /dev/null +++ b/Pendu/Assets.xcassets/humain8-1.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "humain8.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Pendu/Assets.xcassets/humain8-1.imageset/humain8.png b/Pendu/Assets.xcassets/humain8-1.imageset/humain8.png new file mode 100644 index 0000000000000000000000000000000000000000..9205b05f2fd39b560660d0367c4fc9dfccc7afc8 Binary files /dev/null and b/Pendu/Assets.xcassets/humain8-1.imageset/humain8.png differ diff --git a/Pendu/Assets.xcassets/humain8.imageset/Contents.json b/Pendu/Assets.xcassets/humain8.imageset/Contents.json new file mode 100644 index 0000000000000000000000000000000000000000..7a61350bfe4f5012ea0654de06cf4406e69d9c93 --- /dev/null +++ b/Pendu/Assets.xcassets/humain8.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "humain.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Pendu/Assets.xcassets/humain8.imageset/humain.png b/Pendu/Assets.xcassets/humain8.imageset/humain.png new file mode 100644 index 0000000000000000000000000000000000000000..9205b05f2fd39b560660d0367c4fc9dfccc7afc8 Binary files /dev/null and b/Pendu/Assets.xcassets/humain8.imageset/humain.png differ diff --git a/Pendu/Base.lproj/Game.storyboard b/Pendu/Base.lproj/Game.storyboard new file mode 100644 index 0000000000000000000000000000000000000000..9d448a3cb797f3bee66175eb9aeab6144b83901c --- /dev/null +++ b/Pendu/Base.lproj/Game.storyboard @@ -0,0 +1,468 @@ +<?xml version="1.0" encoding="UTF-8"?> +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r"> + <device id="retina6_1" orientation="portrait" appearance="light"/> + <dependencies> + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/> + <capability name="Safe area layout guides" minToolsVersion="9.0"/> + <capability name="System colors in document resources" minToolsVersion="11.0"/> + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> + </dependencies> + <scenes> + <!--View Controller--> + <scene sceneID="tne-QT-ifu"> + <objects> + <viewController id="BYZ-38-t0r" customClass="ViewController" customModule="Pendu" customModuleProvider="target" sceneMemberID="viewController"> + <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC"> + <rect key="frame" x="0.0" y="0.0" width="414" height="896"/> + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> + <subviews> + <stackView autoresizesSubviews="NO" opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillProportionally" spacing="12" translatesAutoresizingMaskIntoConstraints="NO" id="2XB-iI-dfu"> + <rect key="frame" x="18" y="630" width="378" height="117"/> + <subviews> + <stackView opaque="NO" contentMode="scaleToFill" spacing="6" translatesAutoresizingMaskIntoConstraints="NO" id="Lig-Un-KRN"> + <rect key="frame" x="0.0" y="0.0" width="378" height="31"/> + <subviews> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="tLI-B6-X2y"> + <rect key="frame" x="0.0" y="0.0" width="37" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="37" id="S9Z-t7-cgC"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <buttonConfiguration key="configuration" style="filled" title="A"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="A_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="dOH-LY-aru"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="DbP-7q-EIq"> + <rect key="frame" x="43" y="0.0" width="36.5" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="36.5" id="IWm-6U-Mkz"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="Z"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="Z_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="mPP-Wi-VbW"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="pH9-cc-5ug"> + <rect key="frame" x="85.5" y="0.0" width="37" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="37" id="ieX-iU-DuB"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="E"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="E_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="Jvf-I4-eQg"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="jFS-B8-RI5"> + <rect key="frame" x="128.5" y="0.0" width="36.5" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="36.5" id="ddb-Xe-gwk"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="R"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="R_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="gHd-DF-0eb"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="IHm-sb-sqg"> + <rect key="frame" x="171" y="0.0" width="36" height="31"/> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="T"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="T_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="qE6-tN-eTQ"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="NdK-Hc-8G9"> + <rect key="frame" x="213" y="0.0" width="36.5" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="36.5" id="QKK-yO-5mB"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="Y"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="Y_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="Sie-8I-9Vt"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="JKG-hu-Aix"> + <rect key="frame" x="255.5" y="0.0" width="37" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="37" id="z3X-tU-nBV"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="U"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="U_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="UPn-5M-tIE"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="EPg-Ok-hmi"> + <rect key="frame" x="298.5" y="0.0" width="36.5" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="36.5" id="Et5-8c-qqj"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="I"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="I_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="eqe-yv-rkM"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3Ef-6z-48g"> + <rect key="frame" x="341" y="0.0" width="37" height="31"/> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="O"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="O_action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="v5b-7X-b7c"/> + </connections> + </button> + </subviews> + <constraints> + <constraint firstItem="tLI-B6-X2y" firstAttribute="baseline" secondItem="DbP-7q-EIq" secondAttribute="firstBaseline" id="4yY-kP-HNt"/> + <constraint firstItem="IHm-sb-sqg" firstAttribute="centerX" secondItem="Lig-Un-KRN" secondAttribute="centerX" id="5L0-wU-ksl"/> + </constraints> + </stackView> + <stackView opaque="NO" contentMode="scaleToFill" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="jCP-o5-MwY"> + <rect key="frame" x="0.0" y="43" width="378" height="31"/> + <subviews> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="aK8-wS-vG8"> + <rect key="frame" x="0.0" y="0.0" width="35" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="35" id="hNl-rT-OT7"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="P"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="P_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="d23-64-PEd"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="xT2-kz-Dkn"> + <rect key="frame" x="43" y="0.0" width="35" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="35" id="0nu-Fh-tbg"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="Q"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="Q_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="HpE-ZZ-mdf"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="7g4-B8-EDq"> + <rect key="frame" x="86" y="0.0" width="34" height="31"/> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="S"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="S_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="6NG-6d-9Xu"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="duW-jQ-MYh"> + <rect key="frame" x="128" y="0.0" width="35" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="35" id="aJd-Fw-bmx"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="D"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="D_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="7jE-wM-HQ3"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="M6a-B3-HXu"> + <rect key="frame" x="171" y="0.0" width="36" height="31"/> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="F"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="F_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="N4x-4I-23f"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gct-qK-35d"> + <rect key="frame" x="215" y="0.0" width="35" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="35" id="kbQ-Xk-59u"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="G"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="G_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="nOw-wS-qi8"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="dUP-t2-r07"> + <rect key="frame" x="258" y="0.0" width="35" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="35" id="8z2-Ri-9Yc"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="H"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="H_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="lsE-YL-w5u"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="95Q-4Y-w52"> + <rect key="frame" x="301" y="0.0" width="35" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="35" id="B8A-5n-ZUG"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="J"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="J_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="eB6-6n-uSO"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="dgp-zc-Thy"> + <rect key="frame" x="344" y="0.0" width="34" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="34" id="yaZ-oI-eQl"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="K"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="K_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="rs3-ky-hGa"/> + </connections> + </button> + </subviews> + <constraints> + <constraint firstItem="M6a-B3-HXu" firstAttribute="centerX" secondItem="jCP-o5-MwY" secondAttribute="centerX" id="G66-lW-1cs"/> + <constraint firstItem="duW-jQ-MYh" firstAttribute="leading" secondItem="7g4-B8-EDq" secondAttribute="trailing" constant="8" id="YJ6-hL-Ba7"/> + <constraint firstItem="aK8-wS-vG8" firstAttribute="baseline" secondItem="xT2-kz-Dkn" secondAttribute="firstBaseline" id="uIO-eu-3mY"/> + </constraints> + </stackView> + <stackView opaque="NO" contentMode="scaleToFill" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="aNJ-rU-xbP"> + <rect key="frame" x="0.0" y="86" width="378" height="31"/> + <subviews> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WFx-rP-ss5"> + <rect key="frame" x="0.0" y="0.0" width="40.5" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="40.5" id="N06-eQ-I5x"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="L"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="L_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="AB2-ef-gsH"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="K8y-2v-daN"> + <rect key="frame" x="48.5" y="0.0" width="40" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="40" id="G0z-u8-TNj"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="M"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="M_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="FjD-rM-GLZ"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Jwa-vY-VHc"> + <rect key="frame" x="96.5" y="0.0" width="40.5" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="40.5" id="9Ar-ug-g20"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="W"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="W_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="VjN-WS-B4n"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="0Ds-p6-HNv"> + <rect key="frame" x="145" y="0.0" width="40" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="40" id="xG6-O1-CtI"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="X"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="X_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="JKI-iI-i8P"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="uuI-Af-jaT"> + <rect key="frame" x="193" y="0.0" width="40.5" height="31"/> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="C"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="C_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="BL2-9e-oaY"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hn5-QO-hjX"> + <rect key="frame" x="241.5" y="0.0" width="40" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="40" id="Wc8-Td-Yzr"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="V"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="V_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="ZNS-I4-59U"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="2DZ-eh-e1s"> + <rect key="frame" x="289.5" y="0.0" width="40" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="40" id="Sbf-8k-plh"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="B"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="B_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="okt-4v-BBb"/> + </connections> + </button> + <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="1Cc-0D-Gn3"> + <rect key="frame" x="337.5" y="0.0" width="40.5" height="31"/> + <constraints> + <constraint firstAttribute="width" constant="40.5" id="JXi-Lb-Oak"/> + </constraints> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <state key="normal" title="Button"/> + <buttonConfiguration key="configuration" style="filled" title="N"> + <color key="baseBackgroundColor" systemColor="systemBrownColor"/> + </buttonConfiguration> + <connections> + <action selector="N_Action:" destination="BYZ-38-t0r" eventType="touchUpInside" id="WwJ-ck-bQ8"/> + </connections> + </button> + </subviews> + <constraints> + <constraint firstItem="2DZ-eh-e1s" firstAttribute="baseline" secondItem="hn5-QO-hjX" secondAttribute="firstBaseline" id="YsU-sZ-x0v"/> + </constraints> + </stackView> + </subviews> + <rect key="contentStretch" x="1" y="1" width="1" height="1"/> + </stackView> + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="z7N-Ws-jLx"> + <rect key="frame" x="20" y="562" width="376" height="60"/> + <fontDescription key="fontDescription" type="system" pointSize="30"/> + <color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + <nil key="highlightedColor"/> + </label> + </subviews> + <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/> + <color key="backgroundColor" systemColor="systemBackgroundColor"/> + <color key="tintColor" systemColor="opaqueSeparatorColor"/> + <constraints> + <constraint firstItem="z7N-Ws-jLx" firstAttribute="top" secondItem="6Tk-OE-BBY" secondAttribute="top" constant="518" id="3eI-PR-R29"/> + <constraint firstItem="2XB-iI-dfu" firstAttribute="top" secondItem="z7N-Ws-jLx" secondAttribute="bottom" constant="8" id="6dq-MW-jXR"/> + <constraint firstItem="2XB-iI-dfu" firstAttribute="top" secondItem="6Tk-OE-BBY" secondAttribute="top" constant="586" id="GDi-3N-WOL"/> + <constraint firstItem="2XB-iI-dfu" firstAttribute="leading" secondItem="6Tk-OE-BBY" secondAttribute="leading" constant="18" id="H7Y-qR-xN4"/> + <constraint firstItem="z7N-Ws-jLx" firstAttribute="trailing" secondItem="2XB-iI-dfu" secondAttribute="trailing" id="bRt-Cx-tpa"/> + <constraint firstItem="2XB-iI-dfu" firstAttribute="centerX" secondItem="8bC-Xf-vdC" secondAttribute="centerX" id="k43-6H-xEG"/> + <constraint firstItem="z7N-Ws-jLx" firstAttribute="leading" secondItem="8bC-Xf-vdC" secondAttribute="leadingMargin" id="v2G-KO-OfQ"/> + </constraints> + </view> + <toolbarItems/> + <simulatedToolbarMetrics key="simulatedBottomBarMetrics"/> + <connections> + <outlet property="A_Button" destination="tLI-B6-X2y" id="6Uc-ZO-T0V"/> + <outlet property="B_Button" destination="2DZ-eh-e1s" id="TFw-T5-E7I"/> + <outlet property="C_Button" destination="uuI-Af-jaT" id="hVh-Es-ceX"/> + <outlet property="D_Button" destination="duW-jQ-MYh" id="q8P-zg-Xk0"/> + <outlet property="E_Button" destination="pH9-cc-5ug" id="8FS-AD-OBw"/> + <outlet property="F_Button" destination="M6a-B3-HXu" id="ASf-xT-eVU"/> + <outlet property="G_Button" destination="gct-qK-35d" id="yaD-Al-bNf"/> + <outlet property="H_Button" destination="dUP-t2-r07" id="3RJ-8X-cwA"/> + <outlet property="I_Button" destination="EPg-Ok-hmi" id="3pB-yP-bMa"/> + <outlet property="J_Button" destination="95Q-4Y-w52" id="pmK-1O-VZS"/> + <outlet property="K_Button" destination="dgp-zc-Thy" id="k79-TN-63W"/> + <outlet property="L_Button" destination="WFx-rP-ss5" id="mKF-NJ-n5X"/> + <outlet property="M_Button" destination="K8y-2v-daN" id="dES-9W-lc7"/> + <outlet property="N_Button" destination="1Cc-0D-Gn3" id="RY0-Kx-z75"/> + <outlet property="O_Button" destination="3Ef-6z-48g" id="d40-qw-XdU"/> + <outlet property="P_Button" destination="aK8-wS-vG8" id="Nh1-nE-bUq"/> + <outlet property="Q_Button" destination="xT2-kz-Dkn" id="ssG-vI-sd6"/> + <outlet property="R_Button" destination="jFS-B8-RI5" id="cpM-ni-QDg"/> + <outlet property="S_Button" destination="7g4-B8-EDq" id="kmf-hs-Yeq"/> + <outlet property="T_Button" destination="IHm-sb-sqg" id="x8v-Ge-iH1"/> + <outlet property="U_Button" destination="JKG-hu-Aix" id="gtC-ZF-jxy"/> + <outlet property="V_Button" destination="hn5-QO-hjX" id="68l-xk-lSc"/> + <outlet property="W_Button" destination="Jwa-vY-VHc" id="aL0-nz-8gV"/> + <outlet property="X_Button" destination="0Ds-p6-HNv" id="K6T-ma-kCd"/> + <outlet property="Y_Button" destination="NdK-Hc-8G9" id="vwa-By-hL8"/> + <outlet property="Z_Button" destination="DbP-7q-EIq" id="nX8-cc-NvD"/> + <outlet property="wordLabel" destination="z7N-Ws-jLx" id="Qck-61-KN8"/> + </connections> + </viewController> + <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/> + </objects> + <point key="canvasLocation" x="321.73913043478262" y="105.80357142857143"/> + </scene> + </scenes> + <resources> + <systemColor name="opaqueSeparatorColor"> + <color red="0.77647058823529413" green="0.77647058823529413" blue="0.78431372549019607" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> + </systemColor> + <systemColor name="systemBackgroundColor"> + <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> + </systemColor> + <systemColor name="systemBrownColor"> + <color red="0.63529411764705879" green="0.51764705882352946" blue="0.36862745098039218" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> + </systemColor> + </resources> +</document> diff --git a/Pendu/ButtonTemplate.swift b/Pendu/ButtonTemplate.swift new file mode 100644 index 0000000000000000000000000000000000000000..649dd03cf02df2e8338d77200492062d9b012296 --- /dev/null +++ b/Pendu/ButtonTemplate.swift @@ -0,0 +1,42 @@ +import UIKit + + +struct ButtonTemplateViewModel { + let primaryColor: String +} + +final class ButtonTemplate: UIButton { + private let primaryLabel: UILabel = { + let label = UILabel() + label.numberOfLines = 0 + label.textAlignment = .center + label.textColor = .white + label.font = .systemFont(ofSize: 20, weight: .semibold) + return label + }() + + override init(frame: CGRect) { + super.init(frame: frame) + addSubview(primaryLabel) + clipsToBounds = true + layer.cornerRadius = 8 + layer.borderWidth = 1 + layer.borderColor = UIColor.secondarySystemBackground.cgColor + backgroundColor = .systemGreen + } + + required init?(coder: NSCoder) { + fatalError() + } + + func configure(with viewModel: ButtonTemplateViewModel) { + primaryLabel.text = viewModel.primaryColor + } + + override func layoutSubviews() { + super.layoutSubviews() + primaryLabel.frame = CGRect(x: 0, y: 5, width: frame.size.width, height: frame.size.height/2) + } + + +} diff --git a/Pendu/Font/whatever it takes.ttf b/Pendu/Font/whatever it takes.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b178c748d3f16a6948b9dfbb7557fe2b58a73dbb Binary files /dev/null and b/Pendu/Font/whatever it takes.ttf differ diff --git a/Pendu/GameViewController.swift b/Pendu/GameViewController.swift new file mode 100644 index 0000000000000000000000000000000000000000..17e9d49b1f914982de2a884341ddbc172480772a --- /dev/null +++ b/Pendu/GameViewController.swift @@ -0,0 +1,205 @@ +// +// ViewController.swift +// Pendu +// +// Created by Sofiane Lasri-Trienpont on 09/05/2023. +// + +import UIKit + +extension UIView { + func addBackground(imageName: String = "fond_acceuil.png", contentMode: UIView.ContentMode = .scaleToFill) { + // setup the UIImageView + let backgroundImageView = UIImageView(frame: UIScreen.main.bounds) + backgroundImageView.image = UIImage(named: imageName) + backgroundImageView.contentMode = contentMode + backgroundImageView.translatesAutoresizingMaskIntoConstraints = false + + addSubview(backgroundImageView) + sendSubviewToBack(backgroundImageView) + + // adding NSLayoutConstraints + let leadingConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: .leading, relatedBy: .equal, toItem: self, attribute: .leading, multiplier: 1.0, constant: 0.0) + let trailingConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: .trailing, relatedBy: .equal, toItem: self, attribute: .trailing, multiplier: 1.0, constant: 0.0) + let topConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: .top, relatedBy: .equal, toItem: self, attribute: .top, multiplier: 1.0, constant: 0.0) + let bottomConstraint = NSLayoutConstraint(item: backgroundImageView, attribute: .bottom, relatedBy: .equal, toItem: self, attribute: .bottom, multiplier: 1.0, constant: 0.0) + + NSLayoutConstraint.activate([leadingConstraint, trailingConstraint, topConstraint, bottomConstraint]) + } +} + +class ViewController: UIViewController { + + let mainstoryboard = UIStoryboard(name: "Game", bundle: nil) + + @IBOutlet weak var wordLabel: UILabel! + + @IBOutlet weak var A_Button: UIButton! + @IBOutlet weak var Z_Button: UIButton! + @IBOutlet weak var E_Button: UIButton! + @IBOutlet weak var R_Button: UIButton! + @IBOutlet weak var T_Button: UIButton! + @IBOutlet weak var Y_Button: UIButton! + @IBOutlet weak var U_Button: UIButton! + @IBOutlet weak var I_Button: UIButton! + @IBOutlet weak var O_Button: UIButton! + @IBOutlet weak var P_Button: UIButton! + @IBOutlet weak var Q_Button: UIButton! + @IBOutlet weak var S_Button: UIButton! + @IBOutlet weak var D_Button: UIButton! + @IBOutlet weak var F_Button: UIButton! + @IBOutlet weak var G_Button: UIButton! + @IBOutlet weak var H_Button: UIButton! + @IBOutlet weak var J_Button: UIButton! + @IBOutlet weak var K_Button: UIButton! + @IBOutlet weak var L_Button: UIButton! + @IBOutlet weak var M_Button: UIButton! + @IBOutlet weak var W_Button: UIButton! + @IBOutlet weak var X_Button: UIButton! + @IBOutlet weak var C_Button: UIButton! + @IBOutlet weak var V_Button: UIButton! + @IBOutlet weak var B_Button: UIButton! + @IBOutlet weak var N_Button: UIButton! + + @IBAction func A_Action(_ sender: Any) { + InputButton(inputButton: A_Button) + } + @IBAction func Z_Action(_ sender: Any) { + InputButton(inputButton: Z_Button) + } + @IBAction func E_Action(_ sender: Any) { + InputButton(inputButton: E_Button) + } + @IBAction func R_Action(_ sender: Any) { + InputButton(inputButton: R_Button) + } + @IBAction func T_Action(_ sender: Any) { + InputButton(inputButton: T_Button) + } + @IBAction func Y_Action(_ sender: Any) { + InputButton(inputButton: Y_Button) + } + @IBAction func U_Action(_ sender: Any) { + InputButton(inputButton: U_Button) + } + @IBAction func I_Action(_ sender: Any) { + InputButton(inputButton: I_Button) + } + @IBAction func O_action(_ sender: Any) { + InputButton(inputButton: O_Button) + } + @IBAction func P_Action(_ sender: Any) { + InputButton(inputButton: P_Button) + } + @IBAction func Q_Action(_ sender: Any) { + InputButton(inputButton: Q_Button) + } + @IBAction func S_Action(_ sender: Any) { + InputButton(inputButton: S_Button) + } + @IBAction func D_Action(_ sender: Any) { + InputButton(inputButton: D_Button) + } + @IBAction func F_Action(_ sender: Any) { + InputButton(inputButton: F_Button) + } + @IBAction func G_Action(_ sender: Any) { + InputButton(inputButton: G_Button) + } + @IBAction func H_Action(_ sender: Any) { + InputButton(inputButton: H_Button) + } + @IBAction func J_Action(_ sender: Any) { + InputButton(inputButton: J_Button) + } + @IBAction func K_Action(_ sender: Any) { + InputButton(inputButton: K_Button) + } + @IBAction func L_Action(_ sender: Any) { + InputButton(inputButton: L_Button) + } + @IBAction func M_Action(_ sender: Any) { + InputButton(inputButton: M_Button) + } + @IBAction func W_Action(_ sender: Any) { + InputButton(inputButton: W_Button) + } + @IBAction func X_Action(_ sender: Any) { + InputButton(inputButton: X_Button) + } + @IBAction func C_Action(_ sender: Any) { + InputButton(inputButton: C_Button) + } + @IBAction func V_Action(_ sender: Any) { + InputButton(inputButton: V_Button) + } + @IBAction func B_Action(_ sender: Any) { + InputButton(inputButton: B_Button) + } + @IBAction func N_Action(_ sender: Any) { + InputButton(inputButton: N_Button) + } + + func InputButton(inputButton: UIButton) { + guard let letter = inputButton.titleLabel?.text else { + return + } + guessLetter(Character(letter)) + inputButton.isEnabled = false + } + + func penduImage(nameFile: String) { + let image = UIImage(named: nameFile) + let imageView = UIImageView(image: image!) + imageView.frame = CGRect(x: 50, y: 250, width: 250, height: 250) + view.addSubview(imageView) + } + + let wordToGess = "PENDU" + var currentWordState = "" + + override func viewDidLoad() { + view.addBackground() + super.viewDidLoad() + + initializeWordState() + updateWordLabel() + + penduImage(nameFile: "humain8") + let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 40)) + label.center = CGPoint(x: 170, y: 230) + label.font = UIFont(name: "whatever it takes", size: 40) + label.textAlignment = .center + label.textColor = UIColor.white + label.text = "Pendu" + self.view.addSubview(label) + } + + func initializeWordState() { + for _ in wordToGess { + currentWordState += "_" + } + } + + func updateWordLabel() { + wordLabel.text = currentWordState + } + + func guessLetter(_ letter:Character) { + let guessedLetter = letter.uppercased() + guard wordToGess.contains(guessedLetter) + else { + return + } + for (index, char) in wordToGess.enumerated() { + if char.uppercased() == guessedLetter { + let startIndex = currentWordState.startIndex + let offsetIndex = currentWordState.index(startIndex, offsetBy: index) + + currentWordState.replaceSubrange(offsetIndex...offsetIndex, with: String(char)) + } + } + updateWordLabel() + } +} + diff --git a/Pendu/Info.plist b/Pendu/Info.plist index dd3c9afdae35805086796848ae7dfa52ec858a07..e73d9ce36d9ece2a3f1c2090edf82c3cd9e6d90c 100644 --- a/Pendu/Info.plist +++ b/Pendu/Info.plist @@ -21,5 +21,9 @@ </array> </dict> </dict> + <key>UIAppFonts</key> + <array> + <string>whatever it takes.ttf</string> + </array> </dict> </plist>