{"id":15788,"date":"2024-10-11T13:18:41","date_gmt":"2024-10-11T13:18:41","guid":{"rendered":"https:\/\/bestkora.com\/IosDeveloper\/?p=15788"},"modified":"2025-09-11T14:09:47","modified_gmt":"2025-09-11T14:09:47","slug":"%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b","status":"publish","type":"post","link":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\/","title":{"rendered":"iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI\u00a0 \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI."},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043f\u043e\u0441\u0442\u0435 <a href=\"https:\/\/bestkora.com\/IosDeveloper\/test\/\" title=\"&quot;iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1. \u041b\u043e\u0433\u0438\u043a\u0430 \u0438\u0433\u0440\u044b&quot;\">&#171;iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1. \u041b\u043e\u0433\u0438\u043a\u0430 \u0438\u0433\u0440\u044b&#187;<\/a> \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0438\u0433\u0440\u044b 2048 c \u043f\u043e\u043c\u043e\u0449\u044c\u044e ChatGPT. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043f\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (UI)I \u0438\u0433\u0440\u044b 2048 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ChatGPT \u0438 \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0443\u0434\u0435\u043b\u0438\u043c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043b\u0438\u0442\u043e\u043a \u043d\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0434\u043e\u0441\u043a\u0435. \u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 <a href=\"https:\/\/github.com\/BestKora\/Game2048ChatGPT\/tree\/main\" title=\"\">Github<\/a>. \u00a0<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u043e\u0441\u0442\u0435\u00a0\u00a0<a href=\"https:\/\/bestkora.com\/IosDeveloper\/ios-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435-\u0438\u0433\u0440\u044b-2048-\u0432-swiftui-\u0441-chatgpt-\u0447\u0430\u0441\u0442\u044c-3-\u0438\u0438-ai\/\">\u00abiOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT. \u0427\u0430\u0441\u0442\u044c 3. \u0418\u0418 (AI) \u0434\u043b\u044f \u0438\u0433\u0440\u044b 2048\u00bb\u00a0<\/a>\u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u00a0\u0418\u0418\u00a0(\u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0430)\u00a0\u043c\u0435\u0442\u043e\u0434\u043e\u0432 Expectimax \u0438 Monte Carlo. \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0432 \u0438\u0433\u0440\u0435 2048.<\/span><\/p>\n\n\n\n<h1 class=\"wp-block-heading has-medium-font-size\">\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438  UI<\/h1>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\">\u0428\u0430\u0433 8. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-16.28.08.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"201\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-16.28.08-1024x201.png\" alt=\"\" class=\"wp-image-15792\" style=\"width:631px;height:auto\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-16.28.08-1024x201.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-16.28.08-300x59.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-16.28.08-768x151.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-16.28.08-500x98.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-16.28.08.png 1376w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.09.44.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"186\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.09.44-1024x186.png\" alt=\"\" class=\"wp-image-15804\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.09.44-1024x186.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.09.44-300x55.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.09.44-768x140.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.09.44-500x91.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.09.44.png 1364w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.10.00.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"171\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.10.00-1024x171.png\" alt=\"\" class=\"wp-image-15805\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.10.00-1024x171.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.10.00-300x50.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.10.00-768x129.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.10.00-500x84.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.10.00.png 1386w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<!--more-->\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import SwiftUI\n\nstruct TileView: View {\n    let tile: Tile\n    let tileSize: CGFloat\n    let padding: CGFloat\n\n    var body: some View {\n        RoundedRectangle(cornerRadius: padding)\n            .fill(Color.colorForTile(tile.value))\n            .frame(width: tileSize, height: tileSize)\n            .overlay(\n                Text(tile.value > 0 ? \"\\(tile.value)\" : \"\")\n                    .font(.largeTitle)\n                    .foregroundColor(.black)\n            )\n            .position (getTilePosition())\n            .animation(.easeInOut(duration: 0.2), value: tile.position)\n            .scaleEffect(tile.value > 0 ? 1 : 0)\n            .animation(.spring(), value: tile.value)\n    }\n\n    private func getTilePosition() -> CGPoint {\n      let x = CGFloat(tile.position.col) * (tileSize + padding) + tileSize \/ 2\n      let y = CGFloat(tile.position.row) * (tileSize + padding) + tileSize \/ 2\n        return CGPoint(x: x, y: y)\n    }\n}\n\nextension Color {\n   static func colorForTile(_ value: Int) -> Color {\n        switch value {\n        case 0: return Color(UIColor.systemGray5)\n        case 2: return Color(UIColor.systemGray4)\n        case 4: return Color.orange\n        case 8: return Color.red\n        case 16: return Color.purple\n        case 32: return Color.blue\n        case 64: return Color.green\n        case 128: return Color.yellow\n        case 256: return Color.pink\n        case 512: return Color.brown\n        case 1024: return Color.cyan\n        case 2048: return Color.indigo\n        default: return Color.mint\n        }\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">import<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">SwiftUI<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">TileView<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">View <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tile: Tile<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tileSize: CGFloat<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> padding: CGFloat<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> body: <\/span><span style=\"color: #C678DD\">some<\/span><span style=\"color: #ABB2BF\"> View {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">RoundedRectangle<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">cornerRadius<\/span><span style=\"color: #ABB2BF\">: padding)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">fill<\/span><span style=\"color: #ABB2BF\">(Color.<\/span><span style=\"color: #61AFEF\">colorForTile<\/span><span style=\"color: #ABB2BF\">(tile.value))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">frame<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">width<\/span><span style=\"color: #ABB2BF\">: tileSize, <\/span><span style=\"color: #61AFEF\">height<\/span><span style=\"color: #ABB2BF\">: tileSize)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">overlay<\/span><span style=\"color: #ABB2BF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(tile.value &gt; <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\"> ? <\/span><span style=\"color: #98C379\">&quot;<\/span><span style=\"color: #C678DD\">\\(<\/span><span style=\"color: #ABB2BF\">tile.value<\/span><span style=\"color: #C678DD\">)<\/span><span style=\"color: #98C379\">&quot;<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">largeTitle<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">foregroundColor<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">black<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #61AFEF\">getTilePosition<\/span><span style=\"color: #ABB2BF\">())<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">animation<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #61AFEF\">easeInOut<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">duration<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0.2<\/span><span style=\"color: #ABB2BF\">), <\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: tile.<\/span><span style=\"color: #E06C75\">position<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">scaleEffect<\/span><span style=\"color: #ABB2BF\">(tile.value &gt; <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\"> ? <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">animation<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #61AFEF\">spring<\/span><span style=\"color: #ABB2BF\">(), <\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: tile.value)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">getTilePosition<\/span><span style=\"color: #ABB2BF\">() -&gt; CGPoint {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> x = <\/span><span style=\"color: #61AFEF\">CGFloat<\/span><span style=\"color: #ABB2BF\">(tile.<\/span><span style=\"color: #E06C75\">position<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">col<\/span><span style=\"color: #ABB2BF\">) * (tileSize + padding) + tileSize \/ <\/span><span style=\"color: #D19A66\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> y = <\/span><span style=\"color: #61AFEF\">CGFloat<\/span><span style=\"color: #ABB2BF\">(tile.<\/span><span style=\"color: #E06C75\">position<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">row<\/span><span style=\"color: #ABB2BF\">) * (tileSize + padding) + tileSize \/ <\/span><span style=\"color: #D19A66\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">CGPoint<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: x, <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: y)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">extension<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Color<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">   <\/span><span style=\"color: #C678DD\">static<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">colorForTile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">_<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Int<\/span><span style=\"color: #ABB2BF\">) -&gt; Color {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">switch<\/span><span style=\"color: #ABB2BF\"> value {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(UIColor.<\/span><span style=\"color: #E06C75\">systemGray5<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(UIColor.<\/span><span style=\"color: #E06C75\">systemGray4<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">orange<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">red<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">16<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">purple<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">32<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">blue<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">64<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">green<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">128<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">yellow<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">256<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">pink<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">512<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">brown<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">1024<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">cyan<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">2048<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">indigo<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">default:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">mint<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.13.27.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"269\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.13.27-1024x269.png\" alt=\"\" class=\"wp-image-15807\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.13.27-1024x269.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.13.27-300x79.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.13.27-768x201.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.13.27-500x131.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.13.27.png 1388w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>struct GameView: View {\n    @StateObject private var viewModel = GameViewModel()\n    let tileSize: CGFloat = 80\n    let padding: CGFloat = 8\n    var body: some View {\n        VStack {\n            Text(\"2048\")\n                .font(.largeTitle)\n                .padding()\n            \n            GridView(tiles: viewModel.tiles, tileSize: tileSize, \n                                             padding: padding)\n                .gesture(\n                    DragGesture()\n                        .onEnded { value in\n                            withAnimation(.easeInOut) {\n                                handleSwipe(value: value)\n                            } \n                        }\n                )\n            \n            Button(action: {\n              withAnimation(.easeInOut) {\n                  viewModel.resetGame()\n                }\n            }) {\n                Text(\"Restart\")\n                    .font(.title2)\n                    .padding()\n            }\n        }\n    }\n    \n    \/\/ Handle swipe gesture and trigger game actions\n    private func handleSwipe(value: DragGesture.Value) {\n        let threshold: CGFloat = 20\n        let horizontalShift = value.translation.width\n        let verticalShift = value.translation.height\n        \n        if abs(horizontalShift) > abs(verticalShift) {\n            if horizontalShift > threshold {\n                viewModel.move(.right)\n            } else if horizontalShift &lt; -threshold {\n                viewModel.move(.left)\n            }\n        } else {\n            if verticalShift > threshold {\n                viewModel.move(.down)\n            } else if verticalShift &lt; -threshold {\n                viewModel.move(.up)\n            }\n        }\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">GameView<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">View <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">@StateObject<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> viewModel = <\/span><span style=\"color: #61AFEF\">GameViewModel<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tileSize: CGFloat = <\/span><span style=\"color: #D19A66\">80<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> padding: CGFloat = <\/span><span style=\"color: #D19A66\">8<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> body: <\/span><span style=\"color: #C678DD\">some<\/span><span style=\"color: #ABB2BF\"> View {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">VStack<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;2048&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">largeTitle<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">GridView<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">tiles<\/span><span style=\"color: #ABB2BF\">: viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">tileSize<\/span><span style=\"color: #ABB2BF\">: tileSize, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                             <\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">: padding)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">gesture<\/span><span style=\"color: #ABB2BF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #61AFEF\">DragGesture<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        .<\/span><span style=\"color: #61AFEF\">onEnded<\/span><span style=\"color: #ABB2BF\"> { value <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                            <\/span><span style=\"color: #61AFEF\">withAnimation<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">easeInOut<\/span><span style=\"color: #ABB2BF\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                <\/span><span style=\"color: #61AFEF\">handleSwipe<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: value)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                            } <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">Button<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">action<\/span><span style=\"color: #ABB2BF\">: {<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">              <\/span><span style=\"color: #61AFEF\">withAnimation<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">easeInOut<\/span><span style=\"color: #ABB2BF\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                  viewModel.<\/span><span style=\"color: #61AFEF\">resetGame<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Restart&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">title2<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Handle swipe gesture and trigger game actions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">handleSwipe<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF; font-style: italic\">value<\/span><span style=\"color: #ABB2BF\">: DragGesture.<\/span><span style=\"color: #E5C07B\">Value<\/span><span style=\"color: #ABB2BF\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> threshold: CGFloat = <\/span><span style=\"color: #D19A66\">20<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> horizontalShift = value.<\/span><span style=\"color: #E06C75\">translation<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">width<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> verticalShift = value.<\/span><span style=\"color: #E06C75\">translation<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">height<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #56B6C2\">abs<\/span><span style=\"color: #ABB2BF\">(horizontalShift) &gt; <\/span><span style=\"color: #56B6C2\">abs<\/span><span style=\"color: #ABB2BF\">(verticalShift) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> horizontalShift &gt; threshold {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                viewModel.<\/span><span style=\"color: #56B6C2\">move<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">right<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            } <\/span><span style=\"color: #C678DD\">else<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> horizontalShift &lt; -threshold {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                viewModel.<\/span><span style=\"color: #56B6C2\">move<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">left<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        } <\/span><span style=\"color: #C678DD\">else<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> verticalShift &gt; threshold {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                viewModel.<\/span><span style=\"color: #56B6C2\">move<\/span><span style=\"color: #ABB2BF\">(.down)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            } <\/span><span style=\"color: #C678DD\">else<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> verticalShift &lt; -threshold {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                viewModel.<\/span><span style=\"color: #56B6C2\">move<\/span><span style=\"color: #ABB2BF\">(.up)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.22.01.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"419\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.22.01-1024x419.png\" alt=\"\" class=\"wp-image-15808\" style=\"width:614px;height:auto\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.22.01-1024x419.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.22.01-300x123.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.22.01-768x314.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.22.01-500x205.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.22.01.png 1378w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/ Define the GridView to use TileView\nstruct GridView: View {\n    let tiles: [&#91;Tile&#93;]\n    let tileSize : CGFloat\n    let padding : CGFloat\n    \n    var body: some View {\n       ZStack {\n\n\n         \/\/ Background grid\n            VStack(spacing: padding) {\n               ForEach(0..&lt;4) { row in\n                   HStack(spacing: padding) {\n                       ForEach(0..&lt;4) { col in\n                           RoundedRectangle(cornerRadius:padding)\n                               .fill(Color.colorForTile(0))\n                               .frame(width: tileSize, height: tileSize)\n                       }\n                   }\n               }\n           }\n\n            \/\/ Foreground tiles (only non-zero values)\n             ForEach(tiles.flatMap { $0 }.filter { $0.value != 0 }){ tile in\n                TileView(tile: tile, tileSize: tileSize, padding: padding)\n             }\n        }\n        .frame(width: 4 * tileSize + 3 * padding, \n               height: 4 * tileSize +  3 * padding) \/\/ Adjust frame size\n    }\n\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #7F848E; font-style: italic\">\/\/ Define the GridView to use TileView<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">GridView<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">View <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tiles: [&#91;Tile&#93;]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tileSize : CGFloat<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> padding : CGFloat<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> body: <\/span><span style=\"color: #C678DD\">some<\/span><span style=\"color: #ABB2BF\"> View {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">       <\/span><span style=\"color: #61AFEF\">ZStack<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">         <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Background grid<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">VStack<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">spacing<\/span><span style=\"color: #ABB2BF\">: padding) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               <\/span><span style=\"color: #61AFEF\">ForEach<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">..&lt;<\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">) { row <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                   <\/span><span style=\"color: #61AFEF\">HStack<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">spacing<\/span><span style=\"color: #ABB2BF\">: padding) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                       <\/span><span style=\"color: #61AFEF\">ForEach<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">..&lt;<\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">) { col <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                           <\/span><span style=\"color: #61AFEF\">RoundedRectangle<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">cornerRadius<\/span><span style=\"color: #ABB2BF\">:padding)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                               .<\/span><span style=\"color: #61AFEF\">fill<\/span><span style=\"color: #ABB2BF\">(Color.<\/span><span style=\"color: #61AFEF\">colorForTile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                               .<\/span><span style=\"color: #61AFEF\">frame<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">width<\/span><span style=\"color: #ABB2BF\">: tileSize, <\/span><span style=\"color: #61AFEF\">height<\/span><span style=\"color: #ABB2BF\">: tileSize)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                       }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                   }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">           }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Foreground tiles (only non-zero values)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">ForEach<\/span><span style=\"color: #ABB2BF\">(tiles.<\/span><span style=\"color: #56B6C2\">flatMap<\/span><span style=\"color: #ABB2BF\"> { <\/span><span style=\"color: #E5C07B\">$0<\/span><span style=\"color: #ABB2BF\"> }.<\/span><span style=\"color: #56B6C2\">filter<\/span><span style=\"color: #ABB2BF\"> { <\/span><span style=\"color: #E5C07B\">$0<\/span><span style=\"color: #ABB2BF\">.value != <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\"> }){ tile <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">TileView<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">tile<\/span><span style=\"color: #ABB2BF\">: tile, <\/span><span style=\"color: #61AFEF\">tileSize<\/span><span style=\"color: #ABB2BF\">: tileSize, <\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">: padding)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        .<\/span><span style=\"color: #61AFEF\">frame<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">width<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\"> * tileSize + <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\"> * padding, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               <\/span><span style=\"color: #61AFEF\">height<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\"> * tileSize +  <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\"> * padding) <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Adjust frame size<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.25.59.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"590\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.25.59-1024x590.png\" alt=\"\" class=\"wp-image-15809\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.25.59-1024x590.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.25.59-300x173.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.25.59-768x442.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.25.59-500x288.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.25.59.png 1368w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.26.35.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"560\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.26.35-1024x560.png\" alt=\"\" class=\"wp-image-15810\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.26.35-1024x560.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.26.35-300x164.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.26.35-768x420.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.26.35-500x273.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-19.26.35.png 1354w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u0434\u0430:<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXd-gkPiT4B2ks7CfpxbT-zaVUIYjaBjXT0vW7vFVH-9yuC4qW0iZAJ0jB_LSB6VI0JO3LILxwV-AgJyaGk1wafoRq-8h5lYpODgsxnTO6KVM2LCpxLpNmeoDqUmceL9hLfw0uQXhgcJOfCbrrEJOgPgDLM?key=w5NuDZeiHz-JjML98dOHbA\" width=\"389\" height=\"645\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"font-size:17px;font-style:normal;font-weight:700;text-transform:none\"><strong>\u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u043a \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438:<\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><span style=\"font-weight: 400;\"><code>TileView<\/code> \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f: \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e <code>Text<\/code>, a \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a <code>RoundedRectangle<\/code>, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>Text(tile.value &gt; 0 ? \"\\(tile.value)\" : \"\")<\/code>. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043b\u0438\u0442\u043a\u0430 \u0441 \u043d\u0443\u043b\u0435\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c <code>value == 0<\/code> \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0430 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e.<\/span><\/li>\n\n\n\n<li><span style=\"font-weight: 400;\">\u041c\u044b \u0432\u0438\u0434\u0438\u043c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043f\u043b\u0438\u0442\u043e\u043a, \u0442\u043e \u0435\u0441\u0442\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b<code> .position<\/code> \u0438 <code>.animation(.easeInOut(duration: 0.2), value: tile.position) <\/code>\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442, \u043d\u043e \u043c\u044b \u043d\u0435 \u0432\u0438\u0434\u0438\u043c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 \u043f\u043b\u0438\u0442\u043a\u0438, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0438\u043b\u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u0442\u043e \u0435\u0441\u0442\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b <code>.scaleEffect(tile.value &gt; 0 ? 1 : 0) <\/code>\u0438 <code>&nbsp;.animation(.spring(), value: tile.value)\u2019 <\/code>&nbsp;\u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442.&nbsp; \u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043e\u0442\u0447\u0435\u0442\u043b\u0438\u0432\u043e \u0432\u0438\u0434\u043d\u043e \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0435, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0436\u0438\u043c \u201c\u041c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0439 \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u0438\u201d (Slow Animation) :<\/span><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXe-QvN0jLKQMHEyORvExA7vyc3Q5-sZFp0f5npkVuOz-5hCABcPiCuAQK77VD5O-lyLDD2_IjvPw8qxtIsYqRPPdng4MkfaWd0N7M5AQZV37eNQsFLB-baKx9ZTQ26WzTt_DUiVqb5E6uf3pXNnPVjIw4I?key=w5NuDZeiHz-JjML98dOHbA\" width=\"411\" height=\"681\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e  \u041f\u041e\u0421\u041b\u0415 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a <code>TileView<\/code> \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>value<\/code> \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441 0 \u043d\u0430 \u0447\u0442\u043e-\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u043e\u0442 0, \u044d\u0442\u043e\u0442 <code>TileView<\/code> \u043f\u0440\u043e\u0441\u0442\u043e \u201c\u0432\u044b\u0445\u043e\u0434\u0438\u0442\u201d \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u043e\u0439 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438, a \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 value \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 0, \u0442\u043e <code>TileView<\/code> \u0438\u0441\u0447\u0435\u0437\u0430\u0435\u0442 \u0441 \u044d\u043a\u0440\u0430\u043d\u0430, \u0438 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u043e\u0436\u0435 \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438. \u0414\u043b\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0430 \/ \u0443\u0445\u043e\u0434\u0430 \u043d\u0430 \/ \u0441 \u044d\u043a\u0440\u0430\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u201c\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b\u201d \u0432 \u0432\u0438\u0434\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 <code>.transition<\/code>. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u2018\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u201d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e <code>transition(.opacity)<\/code>.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043a\u043e\u0434\u0430 <code>TileView<\/code>, ChatGPT \u0443\u0431\u0438\u0440\u0430\u0435\u0442&nbsp; \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b .<code>scaleEffect(tile.value &gt; 0 ? 1 : 0) <\/code>\u0438 &nbsp;<code>.animation(.spring(), value: tile.value) <\/code>\u0438 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0438\u0445 \u043d\u0430 <code>transition(.scale)<\/code>, \u0447\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0438\u043b\u0438 \u0443\u0445\u043e\u0434\u0430 \u0441 \u044d\u043a\u0440\u0430\u043d\u0430 <code>Views<\/code>:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-20.34.55.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"71\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-20.34.55-1024x71.png\" alt=\"\" class=\"wp-image-15817\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-20.34.55-1024x71.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-20.34.55-300x21.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-20.34.55-768x53.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-20.34.55-500x34.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-20.34.55.png 1452w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import SwiftUI\n\nstruct TileView: View {\n    let tile: Tile\n    let tileSize: CGFloat\n    let padding: CGFloat\n\n    var body: some View {\n        RoundedRectangle(cornerRadius: padding)\n            .fill(Color.colorForTile(tile.value))\n            .frame(width: tileSize, height: tileSize)\n            .overlay(\n                Text(tile.value > 0 ? \"\\(tile.value)\" : \"\")\n                    .font(.largeTitle)\n                    .foregroundColor(.black)\n            )\n            .position (getTilePosition())\n            .animation(.easeInOut(duration: 0.2), value: tile.position)\n            .transition(.scale)\n    }\n\n    private func getTilePosition() -> CGPoint {\n      let x = CGFloat(tile.position.col) * (tileSize + padding) + tileSize \/ 2\n      let y = CGFloat(tile.position.row) * (tileSize + padding) + tileSize \/ 2\n        return CGPoint(x: x, y: y)\n    }\n}\n\nextension Color {\n   static func colorForTile(_ value: Int) -> Color {\n        switch value {\n        case 0: return Color(UIColor.systemGray5)\n        case 2: return Color(UIColor.systemGray4)\n        case 4: return Color.orange\n        case 8: return Color.red\n        case 16: return Color.purple\n        case 32: return Color.blue\n        case 64: return Color.green\n        case 128: return Color.yellow\n        case 256: return Color.pink\n        case 512: return Color.brown\n        case 1024: return Color.cyan\n        case 2048: return Color.indigo\n        default: return Color.mint\n        }\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">import<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">SwiftUI<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">TileView<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">View <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tile: Tile<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tileSize: CGFloat<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> padding: CGFloat<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> body: <\/span><span style=\"color: #C678DD\">some<\/span><span style=\"color: #ABB2BF\"> View {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">RoundedRectangle<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">cornerRadius<\/span><span style=\"color: #ABB2BF\">: padding)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">fill<\/span><span style=\"color: #ABB2BF\">(Color.<\/span><span style=\"color: #61AFEF\">colorForTile<\/span><span style=\"color: #ABB2BF\">(tile.value))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">frame<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">width<\/span><span style=\"color: #ABB2BF\">: tileSize, <\/span><span style=\"color: #61AFEF\">height<\/span><span style=\"color: #ABB2BF\">: tileSize)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">overlay<\/span><span style=\"color: #ABB2BF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(tile.value &gt; <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\"> ? <\/span><span style=\"color: #98C379\">&quot;<\/span><span style=\"color: #C678DD\">\\(<\/span><span style=\"color: #ABB2BF\">tile.value<\/span><span style=\"color: #C678DD\">)<\/span><span style=\"color: #98C379\">&quot;<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">largeTitle<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">foregroundColor<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">black<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #61AFEF\">getTilePosition<\/span><span style=\"color: #ABB2BF\">())<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">animation<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #61AFEF\">easeInOut<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">duration<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0.2<\/span><span style=\"color: #ABB2BF\">), <\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: tile.<\/span><span style=\"color: #E06C75\">position<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">transition<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">scale<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">getTilePosition<\/span><span style=\"color: #ABB2BF\">() -&gt; CGPoint {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> x = <\/span><span style=\"color: #61AFEF\">CGFloat<\/span><span style=\"color: #ABB2BF\">(tile.<\/span><span style=\"color: #E06C75\">position<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">col<\/span><span style=\"color: #ABB2BF\">) * (tileSize + padding) + tileSize \/ <\/span><span style=\"color: #D19A66\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> y = <\/span><span style=\"color: #61AFEF\">CGFloat<\/span><span style=\"color: #ABB2BF\">(tile.<\/span><span style=\"color: #E06C75\">position<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">row<\/span><span style=\"color: #ABB2BF\">) * (tileSize + padding) + tileSize \/ <\/span><span style=\"color: #D19A66\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">CGPoint<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: x, <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: y)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">extension<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Color<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">   <\/span><span style=\"color: #C678DD\">static<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">colorForTile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">_<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Int<\/span><span style=\"color: #ABB2BF\">) -&gt; Color {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">switch<\/span><span style=\"color: #ABB2BF\"> value {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(UIColor.<\/span><span style=\"color: #E06C75\">systemGray5<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(UIColor.<\/span><span style=\"color: #E06C75\">systemGray4<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">orange<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">red<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">16<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">purple<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">32<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">blue<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">64<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">green<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">128<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">yellow<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">256<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">pink<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">512<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">brown<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">1024<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">cyan<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">2048<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">indigo<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">default:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Color.<\/span><span style=\"color: #E06C75\">mint<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"font-size:17px;font-style:normal;font-weight:700;text-transform:none\"><strong>\u041d\u0443\u0436\u043d\u0430 \u043b\u0438 \u044f\u0432\u043d\u0430\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f withAnimation \u0434\u043b\u044f \u0436\u0435\u0441\u0442\u0430 .gesture <\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.27.33.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"276\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.27.33-1024x276.png\" alt=\"\" class=\"wp-image-15819\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.27.33-1024x276.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.27.33-300x81.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.27.33-768x207.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.27.33-500x135.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.27.33.png 1350w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.29.59.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"756\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.29.59-1024x756.png\" alt=\"\" class=\"wp-image-15821\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.29.59-1024x756.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.29.59-300x221.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.29.59-768x567.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.29.59-407x300.png 407w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.29.59.png 1404w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.31.18.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"327\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.31.18-1024x327.png\" alt=\"\" class=\"wp-image-15822\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.31.18-1024x327.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.31.18-300x96.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.31.18-768x246.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.31.18-500x160.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.31.18.png 1370w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>struct ContentView: View {\n    @StateObject private var viewModel = GameViewModel()\n    let tileSize: CGFloat = 80\n    let padding: CGFloat = 8\n    \n    var body: some View {\n        VStack {\n            Text(\"2048\")\n                .font(.largeTitle)\n                .padding()\n            GridView(tiles: viewModel.tiles, tileSize: tileSize, \n                                             padding: padding)\n                .gesture(\n                    DragGesture()\n                        .onEnded { value in\n                            withAnimation { \/\/ animation\n                                handleSwipe(value: value) \/\/ swipe handler\n                            }\n                        }\n                )\n            Button(action: {\n                withAnimation {   \/\/ animation\n                     viewModel.resetGame()\n               }\n            }) {\n                Text(\"Restart\")\n                    .font(.title2)\n                    .padding()\n            }\n        }    }\n    \n    \/\/ Handle swipe gesture and trigger game actions\n    private func handleSwipe(value: DragGesture.Value) {. . .}\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">ContentView<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">View <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">@StateObject<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> viewModel = <\/span><span style=\"color: #61AFEF\">GameViewModel<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tileSize: CGFloat = <\/span><span style=\"color: #D19A66\">80<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> padding: CGFloat = <\/span><span style=\"color: #D19A66\">8<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> body: <\/span><span style=\"color: #C678DD\">some<\/span><span style=\"color: #ABB2BF\"> View {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">VStack<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;2048&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">largeTitle<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">GridView<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">tiles<\/span><span style=\"color: #ABB2BF\">: viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">tileSize<\/span><span style=\"color: #ABB2BF\">: tileSize, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                             <\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">: padding)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">gesture<\/span><span style=\"color: #ABB2BF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #61AFEF\">DragGesture<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        .<\/span><span style=\"color: #61AFEF\">onEnded<\/span><span style=\"color: #ABB2BF\"> { value <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                            <\/span><span style=\"color: #61AFEF\">withAnimation<\/span><span style=\"color: #ABB2BF\"> { <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ animation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                <\/span><span style=\"color: #61AFEF\">handleSwipe<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: value) <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ swipe handler<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">Button<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">action<\/span><span style=\"color: #ABB2BF\">: {<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">withAnimation<\/span><span style=\"color: #ABB2BF\"> {   <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ animation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                     viewModel.<\/span><span style=\"color: #61AFEF\">resetGame<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">               }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Restart&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">title2<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Handle swipe gesture and trigger game actions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">handleSwipe<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF; font-style: italic\">value<\/span><span style=\"color: #ABB2BF\">: DragGesture.<\/span><span style=\"color: #E5C07B\">Value<\/span><span style=\"color: #ABB2BF\">) {. . .}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.41.49.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"431\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.41.49-1024x431.png\" alt=\"\" class=\"wp-image-15823\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.41.49-1024x431.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.41.49-300x126.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.41.49-768x323.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.41.49-500x210.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.41.49.png 1378w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.42.17.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"733\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.42.17-1024x733.png\" alt=\"\" class=\"wp-image-15824\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.42.17-1024x733.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.42.17-300x215.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.42.17-768x549.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.42.17-419x300.png 419w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.42.17.png 1356w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412\u043e\u0442 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434:<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXePdvmDHlvT_vbfNluEE4slZDUPs3CI_cvJdOyH0Fhq12g_cr8uM_SarLyQKfjUycHW4wY4Z-7GpCpZVa19jI8CpNx6QT25UaSAKIh_MPE-vZFenorK_0cj-pGpSep96S0lVFlyl6dRIwC-ql6KPZdywW1D?key=w5NuDZeiHz-JjML98dOHbA\" width=\"482\" height=\"798\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">A \u0432\u043e\u0442 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 &nbsp; \u201c\u041c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0439 \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u0438\u201d (Slow Animation) :<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" width=\"368\" height=\"730\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXeEBiZ9wVhA9qkNhTza6cr7JCT8pg5Ye1fIxmIrZkYS2xyceC7p1SDnIwNGpt0Bgnl1I4T-me3-SnEYzHHiF2s11_OHA4NoeulhYGANrMyrtMlJKnamDW0O6c1jA87RYld63FZIdBJVWGih2lFn9mHErYGu?key=w5NuDZeiHz-JjML98dOHbA\"><span style=\"font-weight: 400;\"><span id=\"docs-internal-guid-38bcf5aa-7fff-a21c-c77a-3d9e008db8e1\"><\/span><\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u043f\u043b\u0438\u0442\u043e\u043a \u0430\u043d\u0438\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0438\u0437 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b (.center), \u0438 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u0430\u043c \u0431\u044b \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u043f\u043b\u0438\u0442\u043e\u043a&nbsp; \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u201c\u043f\u043e \u043c\u0435\u0441\u0442\u0443\u201d \u043f\u043b\u0438\u0442\u043e\u043a \u0432 \u0438\u0433\u0440\u043e\u0432\u043e\u043c \u043f\u043e\u043b\u0435.<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"font-size:16px;font-style:normal;font-weight:600;text-transform:none\"><strong>\u0423\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 .transition (.scale)<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043f\u0440\u043e\u0441\u0438\u043c, \u043a\u0430\u043a \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0433\u043e \u0443 ChatGPT:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.48.30.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"379\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.48.30-1024x379.png\" alt=\"\" class=\"wp-image-15825\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.48.30-1024x379.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.48.30-300x111.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.48.30-768x284.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.48.30-500x185.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.48.30.png 1464w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.53.30.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"753\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.53.30-1024x753.png\" alt=\"\" class=\"wp-image-15826\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.53.30-1024x753.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.53.30-300x221.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.53.30-768x565.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.53.30-408x300.png 408w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.53.30.png 1374w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.54.13.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"204\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.54.13-1024x204.png\" alt=\"\" class=\"wp-image-15827\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.54.13-1024x204.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.54.13-300x60.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.54.13-768x153.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.54.13-500x100.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-09.54.13.png 1312w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>struct TileView: View {\n    let tile: Tile\n    let tileSize: CGFloat\n    let padding: CGFloat\n    \n   var body: some View {\n       let tilePosition = getTilePosition()\n       \n        RoundedRectangle(cornerRadius:padding)\n            .fill(Color.colorForTile(tile.value))\n            .frame(width: tileSize, height: tileSize)\n            .overlay(\n                Text(tile.value > 0 ? \"\\(tile.value)\" : \"\")\n                    .font(.largeTitle)\n                    .foregroundColor(.black)\n            )\n            .position(tilePosition)\n            .animation(.easeInOut(duration: 0.2), value: tile.position) \n             .transition(.scale(scale: 0.12).combined (with: .offset( \n                            x: tilePosition.x - 2.0 * tileSize,\n                             y: tilePosition.y - 2.0 * tileSize)))\n    }\n    \n    private func getTilePosition() -> CGPoint {\n      let x = CGFloat(tile.position.col) * (tileSize + padding) + tileSize \/ 2\n      let y = CGFloat(tile.position.row) * (tileSize + padding) + tileSize \/ 2\n        \n        return CGPoint(x: x, y: y)\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">TileView<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">View <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tile: Tile<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tileSize: CGFloat<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> padding: CGFloat<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">   <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> body: <\/span><span style=\"color: #C678DD\">some<\/span><span style=\"color: #ABB2BF\"> View {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">       <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tilePosition = <\/span><span style=\"color: #61AFEF\">getTilePosition<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">       <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">RoundedRectangle<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">cornerRadius<\/span><span style=\"color: #ABB2BF\">:padding)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">fill<\/span><span style=\"color: #ABB2BF\">(Color.<\/span><span style=\"color: #61AFEF\">colorForTile<\/span><span style=\"color: #ABB2BF\">(tile.value))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">frame<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">width<\/span><span style=\"color: #ABB2BF\">: tileSize, <\/span><span style=\"color: #61AFEF\">height<\/span><span style=\"color: #ABB2BF\">: tileSize)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">overlay<\/span><span style=\"color: #ABB2BF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(tile.value &gt; <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\"> ? <\/span><span style=\"color: #98C379\">&quot;<\/span><span style=\"color: #C678DD\">\\(<\/span><span style=\"color: #ABB2BF\">tile.value<\/span><span style=\"color: #C678DD\">)<\/span><span style=\"color: #98C379\">&quot;<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">largeTitle<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">foregroundColor<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">black<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">(tilePosition)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">animation<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #61AFEF\">easeInOut<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">duration<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0.2<\/span><span style=\"color: #ABB2BF\">), <\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: tile.<\/span><span style=\"color: #E06C75\">position<\/span><span style=\"color: #ABB2BF\">) <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">             .<\/span><span style=\"color: #61AFEF\">transition<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #61AFEF\">scale<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">scale<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0.12<\/span><span style=\"color: #ABB2BF\">).<\/span><span style=\"color: #61AFEF\">combined<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #61AFEF\">with<\/span><span style=\"color: #ABB2BF\">: .<\/span><span style=\"color: #61AFEF\">offset<\/span><span style=\"color: #ABB2BF\">( <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                            <\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: tilePosition.<\/span><span style=\"color: #E06C75\">x<\/span><span style=\"color: #ABB2BF\"> - <\/span><span style=\"color: #D19A66\">2.0<\/span><span style=\"color: #ABB2BF\"> * tileSize,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                             <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: tilePosition.<\/span><span style=\"color: #E06C75\">y<\/span><span style=\"color: #ABB2BF\"> - <\/span><span style=\"color: #D19A66\">2.0<\/span><span style=\"color: #ABB2BF\"> * tileSize)))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">getTilePosition<\/span><span style=\"color: #ABB2BF\">() -&gt; CGPoint {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> x = <\/span><span style=\"color: #61AFEF\">CGFloat<\/span><span style=\"color: #ABB2BF\">(tile.<\/span><span style=\"color: #E06C75\">position<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">col<\/span><span style=\"color: #ABB2BF\">) * (tileSize + padding) + tileSize \/ <\/span><span style=\"color: #D19A66\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> y = <\/span><span style=\"color: #61AFEF\">CGFloat<\/span><span style=\"color: #ABB2BF\">(tile.<\/span><span style=\"color: #E06C75\">position<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">row<\/span><span style=\"color: #ABB2BF\">) * (tileSize + padding) + tileSize \/ <\/span><span style=\"color: #D19A66\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">CGPoint<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: x, <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: y)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.01.52.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"462\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.01.52-1024x462.png\" alt=\"\" class=\"wp-image-15828\" style=\"width:616px;height:auto\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.01.52-1024x462.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.01.52-300x135.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.01.52-768x347.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.01.52-500x226.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.01.52.png 1352w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.03.11.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"587\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.03.11-1024x587.png\" alt=\"\" class=\"wp-image-15829\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.03.11-1024x587.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.03.11-300x172.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.03.11-768x441.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.03.11-500x287.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.03.11.png 1384w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412\u043e\u0442 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434:<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXe9LmNHiyghT9ILVXCYOSuR7XeeUHTBzy9t4TjkEGqL7LXv8CuZ4l33V9lRqiCsblE1kwayzZhP0G_IQu1Yx4vkrlJOdfIVOzta_PciEDfDeo-n-L-bR2zpQQAQUSk5Am3pCzQujsVkIkfcK7nvytcm5q8d?key=w5NuDZeiHz-JjML98dOHbA\" width=\"334\" height=\"675\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">A \u0432\u043e\u0442 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 &nbsp; \u201c\u041c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0439 \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u0438\u201d (Slow Animation) :<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXccRJ26VgSpPnMv_d5h81i6IKP53r2n7WjPGNxI7bWEDXKzSOOddpaaRR6eeGe1N2YZB4tPp_KIp4rm4LakJRAgtWp1ofafLN-czAeJ38xn7EKIQNWY3Uf4lccyrUCVvgNqD0tb5b1Rlpe-9d01QoUtKqBH?key=w5NuDZeiHz-JjML98dOHbA\" width=\"364\" height=\"736\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435 \u0437\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043b\u0438\u0442\u043e\u043a \u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043b\u0438\u0442\u043a\u0438 \u043f\u0440\u0438 \u0435\u0451 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u043b\u0438\u0442\u043e\u043a \u043d\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0434\u043e\u0441\u043a\u0435.<\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\"><strong>\u0428\u0410\u0413. 9&nbsp; \u0426\u0432\u0435\u0442\u0430 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u043b\u044f \u0438\u0433\u0440\u044b 2048<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.18.10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"200\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.18.10-1024x200.png\" alt=\"\" class=\"wp-image-15830\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.18.10-1024x200.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.18.10-300x59.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.18.10-768x150.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.18.10-500x98.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.18.10.png 1360w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.18.19.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"311\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.18.19-1024x311.png\" alt=\"\" class=\"wp-image-15831\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.18.19-1024x311.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.18.19-300x91.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.18.19-768x233.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.18.19-500x152.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-10.18.19.png 1358w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import SwiftUI\n\nextension Color {\n   \n    static func colorForTile(_ value: Int) -> Color {\n    switch value {\n      case 0:\n        return Color(hex: \"#CDC1B4\") \/\/  color for empty \n      case 2:\n        return Color(hex: \"#EEE4DA\") \/\/ Light beige\n      case 4:\n        return Color(hex: \"#EDE0C8\") \/\/ Beige\n      case 8:\n        return Color(hex: \"#F2B179\") \/\/ Light orange\n      case 16:\n        return Color(hex: \"#F59563\") \/\/ Orange\n      case 32:\n        return Color(hex: \"#F67C5F\") \/\/ Darker orange\n      case 64:\n        return Color(hex: \"#F65E3B\") \/\/ Dark orange-red\n      case 128:\n        return Color(hex: \"#EDCF72\") \/\/ Yellow\n      case 256:\n        return Color(hex: \"#EDCC61\") \/\/ Darker yellow\n      case 512:\n        return Color(hex: \"#EDC850\") \/\/ Gold\n      case 1024:\n        return Color(hex: \"#EDC53F\") \/\/ Dark gold\n      case 2048:\n        return Color(hex: \"#EDC22E\") \/\/ Bright gold\n     default:\n        return Color(hex: \"#CDC1B4\") \/\/ Default color (for empty or non-standard tiles)\n    }\n  }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">import<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">SwiftUI<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">extension<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Color<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">   <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">static<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">colorForTile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">_<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Int<\/span><span style=\"color: #ABB2BF\">) -&gt; Color {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">switch<\/span><span style=\"color: #ABB2BF\"> value {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">hex<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;#CDC1B4&quot;<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/  color for empty <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">hex<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;#EEE4DA&quot;<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Light beige<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">hex<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;#EDE0C8&quot;<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Beige<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">hex<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;#F2B179&quot;<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Light orange<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">16<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">hex<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;#F59563&quot;<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Orange<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">32<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">hex<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;#F67C5F&quot;<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Darker orange<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">64<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">hex<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;#F65E3B&quot;<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Dark orange-red<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">128<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">hex<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;#EDCF72&quot;<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Yellow<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">256<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">hex<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;#EDCC61&quot;<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Darker yellow<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">512<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">hex<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;#EDC850&quot;<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Gold<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">1024<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">hex<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;#EDC53F&quot;<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Dark gold<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">2048<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">hex<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;#EDC22E&quot;<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Bright gold<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">     <\/span><span style=\"color: #C678DD\">default:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">hex<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;#CDC1B4&quot;<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Default color (for empty or non-standard tiles)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-11.58.37.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"234\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-11.58.37-1024x234.png\" alt=\"\" class=\"wp-image-15832\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-11.58.37-1024x234.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-11.58.37-300x69.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-11.58.37-768x176.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-11.58.37-500x114.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-11.58.37.png 1400w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import SwiftUI\n\nextension Color {\n  init(hex: String) {\n    let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)\n    var int: UInt64 = 0\n    Scanner(string: hex).scanHexInt64(&amp;int)\n    let a, r, g, b: UInt64\n    switch hex.count {\n      case 3: \/\/ RGB (12-bit)\n           (a, r, g, b) = \n              (255, (int >> 8) * 17, (int >> 4 &amp; 0xF) * 17, (int &amp; 0xF) * 17)\n      case 6: \/\/ RGB (24-bit)\n            (a, r, g, b) = (255, int >> 16, int >> 8 &amp; 0xFF, int &amp; 0xFF)\n      case 8: \/\/ ARGB (32-bit)\n          (a, r, g, b) = \n               (int >> 24, int >> 16 &amp; 0xFF, int >> 8 &amp; 0xFF, int &amp; 0xFF)\n        default:\n            (a, r, g, b) = (255, 0, 0, 0)\n        }\n\n        self.init(\n            .sRGB,\n            red: Double(r) \/ 255,\n            green: Double(g) \/ 255,\n            blue: Double(b) \/ 255,\n            opacity: Double(a) \/ 255\n        )\n    }\n   \n    static func colorForTile(_ value: Int) -> Color {. . .}\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">import<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">SwiftUI<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">extension<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Color<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">init<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF; font-style: italic\">hex<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">String<\/span><span style=\"color: #ABB2BF\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> hex = hex.<\/span><span style=\"color: #61AFEF\">trimmingCharacters<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">in<\/span><span style=\"color: #ABB2BF\">: CharacterSet.<\/span><span style=\"color: #E06C75\">alphanumerics<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">inverted<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> int: <\/span><span style=\"color: #E5C07B\">UInt64<\/span><span style=\"color: #ABB2BF\"> = <\/span><span style=\"color: #D19A66\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #61AFEF\">Scanner<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">string<\/span><span style=\"color: #ABB2BF\">: hex).<\/span><span style=\"color: #61AFEF\">scanHexInt64<\/span><span style=\"color: #ABB2BF\">(&amp;int)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> a, r, g, b<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">UInt64<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">switch<\/span><span style=\"color: #ABB2BF\"> hex.count {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ RGB (12-bit)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">           (a, r, g, b) = <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">              (<\/span><span style=\"color: #D19A66\">255<\/span><span style=\"color: #ABB2BF\">, (int &gt;&gt; <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #ABB2BF\">) * <\/span><span style=\"color: #D19A66\">17<\/span><span style=\"color: #ABB2BF\">, (int &gt;&gt; <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\"> &amp; <\/span><span style=\"color: #D19A66\">0xF<\/span><span style=\"color: #ABB2BF\">) * <\/span><span style=\"color: #D19A66\">17<\/span><span style=\"color: #ABB2BF\">, (int &amp; <\/span><span style=\"color: #D19A66\">0xF<\/span><span style=\"color: #ABB2BF\">) * <\/span><span style=\"color: #D19A66\">17<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">6<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ RGB (24-bit)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            (a, r, g, b) = (<\/span><span style=\"color: #D19A66\">255<\/span><span style=\"color: #ABB2BF\">, int &gt;&gt; <\/span><span style=\"color: #D19A66\">16<\/span><span style=\"color: #ABB2BF\">, int &gt;&gt; <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #ABB2BF\"> &amp; <\/span><span style=\"color: #D19A66\">0xFF<\/span><span style=\"color: #ABB2BF\">, int &amp; <\/span><span style=\"color: #D19A66\">0xFF<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ ARGB (32-bit)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">          (a, r, g, b) = <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               (int &gt;&gt; <\/span><span style=\"color: #D19A66\">24<\/span><span style=\"color: #ABB2BF\">, int &gt;&gt; <\/span><span style=\"color: #D19A66\">16<\/span><span style=\"color: #ABB2BF\"> &amp; <\/span><span style=\"color: #D19A66\">0xFF<\/span><span style=\"color: #ABB2BF\">, int &gt;&gt; <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #ABB2BF\"> &amp; <\/span><span style=\"color: #D19A66\">0xFF<\/span><span style=\"color: #ABB2BF\">, int &amp; <\/span><span style=\"color: #D19A66\">0xFF<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">default:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            (a, r, g, b) = (<\/span><span style=\"color: #D19A66\">255<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #E5C07B\">self<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #C678DD\">init<\/span><span style=\"color: #ABB2BF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #E06C75\">sRGB<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">red<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Double<\/span><span style=\"color: #ABB2BF\">(r) \/ <\/span><span style=\"color: #D19A66\">255<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">green<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Double<\/span><span style=\"color: #ABB2BF\">(g) \/ <\/span><span style=\"color: #D19A66\">255<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">blue<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Double<\/span><span style=\"color: #ABB2BF\">(b) \/ <\/span><span style=\"color: #D19A66\">255<\/span><span style=\"color: #ABB2BF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">opacity<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Double<\/span><span style=\"color: #ABB2BF\">(a) \/ <\/span><span style=\"color: #D19A66\">255<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">   <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">static<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">colorForTile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">_<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Int<\/span><span style=\"color: #ABB2BF\">) -&gt; Color {. . .}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.02.23.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"163\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.02.23-1024x163.png\" alt=\"\" class=\"wp-image-15833\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.02.23-1024x163.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.02.23-300x48.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.02.23-768x123.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.02.23-500x80.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.02.23.png 1378w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>struct TileView: View {\n    let tile: Tile\n    let tileSize: CGFloat\n    let padding: CGFloat\n    \n   var body: some View {\n       let tilePosition = getTilePosition()\n       \n        RoundedRectangle(cornerRadius:padding)\n           .fill(Color.colorForTile(tile.value))\n            .frame(width: tileSize, height: tileSize)\n            .overlay(\n                Text(tile.value > 0 ? \"\\(tile.value)\" : \"\")\n                    .font(.largeTitle)\n                     .foregroundColor(tile.value > 4 ? .white : .black) \/\/ Adjust text color based on tile value\n            )\n            .position(tilePosition)\n            .animation(.easeInOut(duration: 0.2), value: tile.position)\n             .transition(.scale(scale: 0.12).combined (with: .offset(\n                            x: tilePosition.x - 2.0 * tileSize,\n                             y: tilePosition.y - 2.0 * tileSize)))\n    }\n    \n    private func getTilePosition() -> CGPoint {\n      let x = CGFloat(tile.position.col) * (tileSize + padding) + tileSize \/ 2\n      let y = CGFloat(tile.position.row) * (tileSize + padding) + tileSize \/ 2\n        \n        return CGPoint(x: x, y: y)\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">TileView<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">View <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tile: Tile<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tileSize: CGFloat<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> padding: CGFloat<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">   <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> body: <\/span><span style=\"color: #C678DD\">some<\/span><span style=\"color: #ABB2BF\"> View {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">       <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tilePosition = <\/span><span style=\"color: #61AFEF\">getTilePosition<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">       <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">RoundedRectangle<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">cornerRadius<\/span><span style=\"color: #ABB2BF\">:padding)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">           .<\/span><span style=\"color: #61AFEF\">fill<\/span><span style=\"color: #ABB2BF\">(Color.<\/span><span style=\"color: #61AFEF\">colorForTile<\/span><span style=\"color: #ABB2BF\">(tile.value))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">frame<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">width<\/span><span style=\"color: #ABB2BF\">: tileSize, <\/span><span style=\"color: #61AFEF\">height<\/span><span style=\"color: #ABB2BF\">: tileSize)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">overlay<\/span><span style=\"color: #ABB2BF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(tile.value &gt; <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\"> ? <\/span><span style=\"color: #98C379\">&quot;<\/span><span style=\"color: #C678DD\">\\(<\/span><span style=\"color: #ABB2BF\">tile.value<\/span><span style=\"color: #C678DD\">)<\/span><span style=\"color: #98C379\">&quot;<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">largeTitle<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                     .<\/span><span style=\"color: #61AFEF\">foregroundColor<\/span><span style=\"color: #ABB2BF\">(tile.value &gt; <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\"> ? .<\/span><span style=\"color: #E06C75\">white<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">black<\/span><span style=\"color: #ABB2BF\">) <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Adjust text color based on tile value<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">(tilePosition)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">animation<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #61AFEF\">easeInOut<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">duration<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0.2<\/span><span style=\"color: #ABB2BF\">), <\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: tile.<\/span><span style=\"color: #E06C75\">position<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             .<\/span><span style=\"color: #61AFEF\">transition<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #61AFEF\">scale<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">scale<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0.12<\/span><span style=\"color: #ABB2BF\">).<\/span><span style=\"color: #61AFEF\">combined<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #61AFEF\">with<\/span><span style=\"color: #ABB2BF\">: .<\/span><span style=\"color: #61AFEF\">offset<\/span><span style=\"color: #ABB2BF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                            <\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: tilePosition.<\/span><span style=\"color: #E06C75\">x<\/span><span style=\"color: #ABB2BF\"> - <\/span><span style=\"color: #D19A66\">2.0<\/span><span style=\"color: #ABB2BF\"> * tileSize,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                             <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: tilePosition.<\/span><span style=\"color: #E06C75\">y<\/span><span style=\"color: #ABB2BF\"> - <\/span><span style=\"color: #D19A66\">2.0<\/span><span style=\"color: #ABB2BF\"> * tileSize)))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">getTilePosition<\/span><span style=\"color: #ABB2BF\">() -&gt; CGPoint {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> x = <\/span><span style=\"color: #61AFEF\">CGFloat<\/span><span style=\"color: #ABB2BF\">(tile.<\/span><span style=\"color: #E06C75\">position<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">col<\/span><span style=\"color: #ABB2BF\">) * (tileSize + padding) + tileSize \/ <\/span><span style=\"color: #D19A66\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> y = <\/span><span style=\"color: #61AFEF\">CGFloat<\/span><span style=\"color: #ABB2BF\">(tile.<\/span><span style=\"color: #E06C75\">position<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">row<\/span><span style=\"color: #ABB2BF\">) * (tileSize + padding) + tileSize \/ <\/span><span style=\"color: #D19A66\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">CGPoint<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: x, <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: y)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.33.00.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"73\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.33.00-1024x73.png\" alt=\"\" class=\"wp-image-15834\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.33.00-1024x73.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.33.00-300x21.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.33.00-768x55.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.33.00-500x36.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.33.00.png 1348w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/ Define the GridView to use TileView\nstruct GridView: View {\n    let tiles: [&#91;Tile&#93;]\n    let tileSize : CGFloat\n    let padding : CGFloat\n    \n    var body: some View {\n       ZStack {\n\n\n         \/\/ Background grid\n            VStack(spacing: padding) {\n               ForEach(0..&lt;4) { row in\n                   HStack(spacing: padding) {\n                       ForEach(0..&lt;4) { col in\n                           RoundedRectangle(cornerRadius:padding)\n                               .fill(Color.colorForTile(0))\n                               .frame(width: tileSize, height: tileSize)\n                       }\n                   }\n               }\n           }\n            .padding()\n            .background(Color(hex: \"#BBADA0\"))\n\n            \/\/ Foreground tiles (only non-zero values)\n             ForEach(tiles.flatMap { $0 }.filter { $0.value != 0 }){ tile in\n                TileView(tile: tile, tileSize: tileSize, padding: padding)\n             }\n             .padding()\n        }\n        .frame(width: 4 * tileSize + 3 * padding,\n               height: 4 * tileSize +  3 * padding) \/\/ Adjust frame size\n    }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #7F848E; font-style: italic\">\/\/ Define the GridView to use TileView<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">GridView<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">View <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tiles: [&#91;Tile&#93;]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tileSize : CGFloat<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> padding : CGFloat<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> body: <\/span><span style=\"color: #C678DD\">some<\/span><span style=\"color: #ABB2BF\"> View {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">       <\/span><span style=\"color: #61AFEF\">ZStack<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">         <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Background grid<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">VStack<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">spacing<\/span><span style=\"color: #ABB2BF\">: padding) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               <\/span><span style=\"color: #61AFEF\">ForEach<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">..&lt;<\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">) { row <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                   <\/span><span style=\"color: #61AFEF\">HStack<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">spacing<\/span><span style=\"color: #ABB2BF\">: padding) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                       <\/span><span style=\"color: #61AFEF\">ForEach<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">..&lt;<\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">) { col <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                           <\/span><span style=\"color: #61AFEF\">RoundedRectangle<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">cornerRadius<\/span><span style=\"color: #ABB2BF\">:padding)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                               .<\/span><span style=\"color: #61AFEF\">fill<\/span><span style=\"color: #ABB2BF\">(Color.<\/span><span style=\"color: #61AFEF\">colorForTile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                               .<\/span><span style=\"color: #61AFEF\">frame<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">width<\/span><span style=\"color: #ABB2BF\">: tileSize, <\/span><span style=\"color: #61AFEF\">height<\/span><span style=\"color: #ABB2BF\">: tileSize)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                       }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                   }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">           }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">background<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">hex<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;#BBADA0&quot;<\/span><span style=\"color: #ABB2BF\">))<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Foreground tiles (only non-zero values)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">ForEach<\/span><span style=\"color: #ABB2BF\">(tiles.<\/span><span style=\"color: #56B6C2\">flatMap<\/span><span style=\"color: #ABB2BF\"> { <\/span><span style=\"color: #E5C07B\">$0<\/span><span style=\"color: #ABB2BF\"> }.<\/span><span style=\"color: #56B6C2\">filter<\/span><span style=\"color: #ABB2BF\"> { <\/span><span style=\"color: #E5C07B\">$0<\/span><span style=\"color: #ABB2BF\">.value != <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\"> }){ tile <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">TileView<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">tile<\/span><span style=\"color: #ABB2BF\">: tile, <\/span><span style=\"color: #61AFEF\">tileSize<\/span><span style=\"color: #ABB2BF\">: tileSize, <\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">: padding)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        .<\/span><span style=\"color: #61AFEF\">frame<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">width<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\"> * tileSize + <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\"> * padding,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               <\/span><span style=\"color: #61AFEF\">height<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\"> * tileSize +  <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\"> * padding) <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Adjust frame size<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.42.58.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"719\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.42.58-1024x719.png\" alt=\"\" class=\"wp-image-15835\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.42.58-1024x719.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.42.58-300x211.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.42.58-768x539.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.42.58-427x300.png 427w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.42.58.png 1384w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.43.19.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"442\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.43.19-1024x442.png\" alt=\"\" class=\"wp-image-15836\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.43.19-1024x442.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.43.19-300x129.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.43.19-768x331.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.43.19-500x216.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-12.43.19.png 1372w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screen-Recording-2024-10-12-at-14.44.07.gif\"><img loading=\"lazy\" decoding=\"async\" width=\"374\" height=\"718\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screen-Recording-2024-10-12-at-14.44.07.gif\" alt=\"\" class=\"wp-image-15840\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\" style=\"font-size:16px\"><strong>\u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u043a \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0446\u0432\u0435\u0442\u0430 \u0444\u043e\u043d\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u043b\u044f <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">Color(hex: \"#BBADA0\")<\/mark><\/code> \u0438 \u043f\u0443\u0441\u0442\u043e\u0439 \u043f\u043b\u0438\u0442\u043a\u0438 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">Color(hex: \"#DC1B4\")<\/mark><\/code> \u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 extension <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">Color <\/mark><\/code>\u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0441\u0442\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438 UI<\/span>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 extension <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">Color<\/mark><\/code><\/strong>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(1 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>extension Color {\n    static let colorBG  = Color(hex: \"#BBADA0\")\n    static let colorEmpty   = Color(hex: \"#CDC1B4\")\n    \n  \/\/ Other code for Color extension \n \/\/ .  .  .  .  .  .  .  .  .  .  .  .  .  .<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">extension<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Color<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">static<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> colorBG  = <\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">hex<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;#BBADA0&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">static<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> colorEmpty   = <\/span><span style=\"color: #61AFEF\">Color<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">hex<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #98C379\">&quot;#CDC1B4&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Other code for Color extension <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ .  .  .  .  .  .  .  .  .  .  .  .  .  .<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\"><strong>\u0428\u0410\u0413 10. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u043f\u043b\u0438\u0442\u043a\u0438 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 value 2 \u0438 4<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438&nbsp; <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">addNewTile() <\/mark><\/code>\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u043f\u043b\u0438\u0442\u043a\u0438 \u043d\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">tiles<\/mark><\/code>, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043b\u0438\u0442\u043a\u0430 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c value \u0440\u0430\u0432\u043d\u044b\u043c 2 \u0431\u0443\u0434\u0435\u0442 <strong>p = 0.5<\/strong>:<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>func addNewTile() {\n        var emptyPositions: &#91;Position&#93; = []\n        for row in 0..&lt;4 {\n            for col in 0..&lt;4 {\n                if tiles&#91;row&#93;&#91;col&#93;.value == 0 {\n                    emptyPositions.append(Position(row: row, col: col))\n                }\n            }\n        }\n        if let randomPosition = emptyPositions.randomElement() {\n            let newValue = Bool.random() ? 2 : 4\n                tiles&#91;randomPosition.row&#93;&#91;randomPosition.col&#93;.value = newValue\n        }\n    }<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">addNewTile<\/span><span style=\"color: #ABB2BF\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> emptyPositions: &#91;Position&#93; = []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">for<\/span><span style=\"color: #ABB2BF\"> row <\/span><span style=\"color: #C678DD\">in<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">..&lt;<\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">for<\/span><span style=\"color: #ABB2BF\"> col <\/span><span style=\"color: #C678DD\">in<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">..&lt;<\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> tiles&#91;row&#93;&#91;col&#93;.value == <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    emptyPositions.<\/span><span style=\"color: #56B6C2\">append<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: row, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: col))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> randomPosition = emptyPositions.<\/span><span style=\"color: #61AFEF\">randomElement<\/span><span style=\"color: #ABB2BF\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> newValue = <\/span><span style=\"color: #E5C07B\">Bool<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">random<\/span><span style=\"color: #ABB2BF\">() ? <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">4<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                tiles&#91;randomPosition.<\/span><span style=\"color: #E06C75\">row<\/span><span style=\"color: #ABB2BF\">&#93;&#91;randomPosition.<\/span><span style=\"color: #E06C75\">col<\/span><span style=\"color: #ABB2BF\">&#93;.value = newValue<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0438\u0433\u0440\u0435 2048 \u044d\u0442\u0430 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0432\u043d\u0430&nbsp;<strong> p = 0.9<\/strong>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043c ChatGPT \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u044d\u0442\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 p \u043a\u043e\u0434:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-14.56.03.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"190\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-14.56.03-1024x190.png\" alt=\"\" class=\"wp-image-15842\" style=\"width:663px;height:auto\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-14.56.03-1024x190.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-14.56.03-300x56.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-14.56.03-768x142.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-14.56.03-500x93.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-14.56.03.png 1380w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-14.56.51.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"382\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-14.56.51-1024x382.png\" alt=\"\" class=\"wp-image-15843\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-14.56.51-1024x382.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-14.56.51-300x112.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-14.56.51-768x286.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-14.56.51-500x186.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-14.56.51.png 1368w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>func addNewTile() {\n    let emptyPositions = tiles.flatMap { $0 }.filter { $0.value == 0 }\n\n    \/\/ Check if there are no empty tiles available\n    guard !emptyPositions.isEmpty else {\n        return\n    }\n\n    \/\/ Select a random empty position\n    let randomIndex = Int.random(in: 0..&lt;emptyPositions.count)\n    let randomPosition = emptyPositions&#91;randomIndex&#93;.position\n\n    \/\/ Determine whether to place a 2 or a 4, with a 90% chance of placing a 2\n    let newValue = Double.random(in: 0..&lt;1) &lt; 0.9 ? 2 : 4\n\n    \/\/ Update the tiles array with the new tile\n    tiles&#91;randomPosition.row&#93;&#91;randomPosition.col&#93; = \n                             Tile(value: newValue, position: randomPosition)\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">addNewTile<\/span><span style=\"color: #ABB2BF\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> emptyPositions = tiles.<\/span><span style=\"color: #56B6C2\">flatMap<\/span><span style=\"color: #ABB2BF\"> { <\/span><span style=\"color: #E5C07B\">$0<\/span><span style=\"color: #ABB2BF\"> }.<\/span><span style=\"color: #56B6C2\">filter<\/span><span style=\"color: #ABB2BF\"> { <\/span><span style=\"color: #E5C07B\">$0<\/span><span style=\"color: #ABB2BF\">.value == <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\"> }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Check if there are no empty tiles available<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">guard<\/span><span style=\"color: #ABB2BF\"> !emptyPositions.isEmpty <\/span><span style=\"color: #C678DD\">else<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Select a random empty position<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> randomIndex = <\/span><span style=\"color: #E5C07B\">Int<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">random<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">in<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">..&lt;emptyPositions.count)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> randomPosition = emptyPositions&#91;randomIndex&#93;.<\/span><span style=\"color: #E06C75\">position<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Determine whether to place a 2 or a 4, with a 90% chance of placing a 2<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> newValue = <\/span><span style=\"color: #E5C07B\">Double<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">random<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">in<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">..&lt;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">) &lt; <\/span><span style=\"color: #D19A66\">0.9<\/span><span style=\"color: #ABB2BF\"> ? <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">4<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Update the tiles array with the new tile<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    tiles&#91;randomPosition.<\/span><span style=\"color: #E06C75\">row<\/span><span style=\"color: #ABB2BF\">&#93;&#91;randomPosition.<\/span><span style=\"color: #E06C75\">col<\/span><span style=\"color: #ABB2BF\">&#93; = <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: newValue, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: randomPosition)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.41.22.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"738\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.41.22-1024x738.png\" alt=\"\" class=\"wp-image-15844\" style=\"width:614px;height:auto\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.41.22-1024x738.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.41.22-300x216.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.41.22-768x553.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.41.22-416x300.png 416w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.41.22.png 1382w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.42.10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"171\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.42.10-1024x171.png\" alt=\"\" class=\"wp-image-15845\" style=\"width:614px;height:auto\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.42.10-1024x171.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.42.10-300x50.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.42.10-768x129.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.42.10-500x84.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.42.10.png 1386w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screen-Recording-2024-10-12-at-15.46.26.gif\"><img loading=\"lazy\" decoding=\"async\" width=\"362\" height=\"744\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screen-Recording-2024-10-12-at-15.46.26.gif\" alt=\"\" class=\"wp-image-15846\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\">\u0428\u0430\u0433. 11.&nbsp; \u0421\u0447\u0435\u0442 score \u0434\u043b\u044f \u0438\u0433\u0440\u044b 2048<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.58.17.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"204\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.58.17-1024x204.png\" alt=\"\" class=\"wp-image-15847\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.58.17-1024x204.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.58.17-300x60.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.58.17-768x153.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.58.17-500x99.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.58.17.png 1308w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.59.06.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"353\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.59.06-1024x353.png\" alt=\"\" class=\"wp-image-15848\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.59.06-1024x353.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.59.06-300x103.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.59.06-768x265.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.59.06-500x172.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-15.59.06.png 1386w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class GameViewModel: ObservableObject {\n     @Published var tiles: [&#91;Tile&#93;] = []\n     @Published var isGameOver = false\n     @Published var score: Int = 0\n    \n    init() {\n        resetGame()\n    }\n    \n   func resetGame() {\n        score = 0\n        isGameOver = false\n        tiles = (0..&lt;4).map { row in\n                (0..&lt;4).map { col in\n                    Tile(value: 0, position: Position(row: row, col: col))\n                }\n            }\n        addNewTile()\n        addNewTile()\n        }\n        \n        \n    \/\/ Other functions such as addNewTile(), rotateLeft(), etc.\n    \/\/ .  .  .  .  .  .  .  .  .  .  .  .  .  .\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">class<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">GameViewModel<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">ObservableObject <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">     <\/span><span style=\"color: #C678DD\">@Published<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> tiles: [&#91;Tile&#93;] = []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">     <\/span><span style=\"color: #C678DD\">@Published<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> isGameOver = <\/span><span style=\"color: #D19A66\">false<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">     <\/span><span style=\"color: #C678DD\">@Published<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> score: <\/span><span style=\"color: #E5C07B\">Int<\/span><span style=\"color: #ABB2BF\"> = <\/span><span style=\"color: #D19A66\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">init<\/span><span style=\"color: #ABB2BF\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">resetGame<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">   <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">resetGame<\/span><span style=\"color: #ABB2BF\">() {<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">        score = <\/span><span style=\"color: #D19A66\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        isGameOver = <\/span><span style=\"color: #D19A66\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        tiles = (<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">..&lt;<\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">).<\/span><span style=\"color: #56B6C2\">map<\/span><span style=\"color: #ABB2BF\"> { row <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                (<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">..&lt;<\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">).<\/span><span style=\"color: #56B6C2\">map<\/span><span style=\"color: #ABB2BF\"> { col <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: row, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: col))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">addNewTile<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">addNewTile<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Other functions such as addNewTile(), rotateLeft(), etc.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ .  .  .  .  .  .  .  .  .  .  .  .  .  .<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.43.05.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"217\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.43.05-1024x217.png\" alt=\"\" class=\"wp-image-15851\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.43.05-1024x217.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.43.05-300x63.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.43.05-768x162.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.43.05-500x106.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.43.05.png 1324w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>  private func mergeRow(_ row: &#91;Tile&#93;) -> &#91;Tile&#93; {\n        var newRow = row\n        var scoreToAdd = 0\n       \n        for i in 0..&lt;row.count - 1 {\n          if newRow&#91;i&#93;.value != 0 &amp;&amp; newRow&#91;i&#93;.value == newRow&#91;i + 1&#93;.value {\n               \n                \/\/ Merge tiles\n                newRow&#91;i&#93;.value *= 2\n                scoreToAdd += newRow&#91;i&#93;.value\n\n                \/\/ Change the id\n                newRow&#91;i&#93;.id = newRow&#91;i + 1&#93;.id\n\n                \/\/ new zero Tile on i + ! position\n                newRow&#91;i + 1&#93; = Tile(value: 0, position: \n                         Position(row: newRow&#91;i&#93;.position.row, col: i + 1))\n            }\n        }\n        \/\/ Update the score\n          score += scoreToAdd\n        \n        \/\/ Compress the row after merging\n        return compressRow(newRow)\n     }<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">mergeRow<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">_<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">row<\/span><span style=\"color: #ABB2BF\">: &#91;Tile&#93;) -&gt; &#91;Tile&#93; {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> newRow = row<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> scoreToAdd = <\/span><span style=\"color: #D19A66\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">       <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">for<\/span><span style=\"color: #ABB2BF\"> i <\/span><span style=\"color: #C678DD\">in<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">..&lt;row.count - <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">          <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> newRow&#91;i&#93;.value != <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\"> &amp;&amp; newRow&#91;i&#93;.value == newRow&#91;i + <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;.value {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Merge tiles<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                newRow&#91;i&#93;.value *= <\/span><span style=\"color: #D19A66\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                scoreToAdd += newRow&#91;i&#93;.value<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Change the id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                newRow&#91;i&#93;.<\/span><span style=\"color: #E06C75\">id<\/span><span style=\"color: #ABB2BF\"> = newRow&#91;i + <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;.<\/span><span style=\"color: #E06C75\">id<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ new zero Tile on i + ! position<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                newRow&#91;i + <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93; = <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                         <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: newRow&#91;i&#93;.<\/span><span style=\"color: #E06C75\">position<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">row<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: i + <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Update the score<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">          score += scoreToAdd<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Compress the row after merging<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">compressRow<\/span><span style=\"color: #ABB2BF\">(newRow)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">     }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.45.10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"121\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.45.10-1024x121.png\" alt=\"\" class=\"wp-image-15852\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.45.10-1024x121.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.45.10-300x35.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.45.10-768x90.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.45.10-500x59.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.45.10.png 1274w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>struct ContentView: View {\n    \n    @StateObject private var viewModel = GameViewModel()\n    let tileSize: CGFloat = 80\n    let padding: CGFloat = 8\n    \n    var body: some View {\n        VStack {\n            Text(\"2048\")\n                .bold()\n                .font(.largeTitle)\n                .padding()\n            \n           HStack {\n                \/\/ Score Display\n                Text(\"Score: \\(viewModel.score)\")\n                    .monospacedDigit()\n                    .font(.title)\n                    .foregroundColor(.accentColor)\n                    .padding()\n                Spacer()\n            }\n            \n            GridView(tiles: viewModel.tiles, tileSize: tileSize, \n                                             padding: padding)\n                .gesture(\n                    DragGesture()\n                        .onEnded { value in\n                           withAnimation {\n                                handleSwipe(value: value) \/\/ swipe handler\n                           }\n                        }\n                )\n            \n            \/\/ Reset Button\n            Button (action:  {\n                withAnimation {\n                    viewModel.resetGame()\n                }\n            }){\n                Text(\"Restart\")\n                    .bold()\n                    .font(.title)\n             }\n            .padding()\n        }\n    }\n    \n    \/\/ Handle swipe gesture and trigger game actions\n    private func handleSwipe(value: DragGesture.Value)  {. . .}  \n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">ContentView<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">View <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">@StateObject<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> viewModel = <\/span><span style=\"color: #61AFEF\">GameViewModel<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tileSize: CGFloat = <\/span><span style=\"color: #D19A66\">80<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> padding: CGFloat = <\/span><span style=\"color: #D19A66\">8<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> body: <\/span><span style=\"color: #C678DD\">some<\/span><span style=\"color: #ABB2BF\"> View {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">VStack<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;2048&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">bold<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">largeTitle<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">           <\/span><span style=\"color: #61AFEF\">HStack<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Score Display<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Score: <\/span><span style=\"color: #C678DD\">\\(<\/span><span style=\"color: #ABB2BF\">viewModel.<\/span><span style=\"color: #E06C75\">score<\/span><span style=\"color: #C678DD\">)<\/span><span style=\"color: #98C379\">&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">monospacedDigit<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">title<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">foregroundColor<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">accentColor<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">Spacer<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">GridView<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">tiles<\/span><span style=\"color: #ABB2BF\">: viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">tileSize<\/span><span style=\"color: #ABB2BF\">: tileSize, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                             <\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">: padding)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">gesture<\/span><span style=\"color: #ABB2BF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #61AFEF\">DragGesture<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        .<\/span><span style=\"color: #61AFEF\">onEnded<\/span><span style=\"color: #ABB2BF\"> { value <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                           <\/span><span style=\"color: #61AFEF\">withAnimation<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                <\/span><span style=\"color: #61AFEF\">handleSwipe<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: value) <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ swipe handler<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                           }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Reset Button<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">Button<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #61AFEF\">action<\/span><span style=\"color: #ABB2BF\">:  {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">withAnimation<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    viewModel.<\/span><span style=\"color: #61AFEF\">resetGame<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Restart&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">bold<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">title<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Handle swipe gesture and trigger game actions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">handleSwipe<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF; font-style: italic\">value<\/span><span style=\"color: #ABB2BF\">: DragGesture.<\/span><span style=\"color: #E5C07B\">Value<\/span><span style=\"color: #ABB2BF\">)  {. . .}  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.53.27-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"608\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.53.27-1-1024x608.png\" alt=\"\" class=\"wp-image-15854\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.53.27-1-1024x608.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.53.27-1-300x178.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.53.27-1-768x456.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.53.27-1-500x297.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.53.27-1.png 1360w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.54.00.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"221\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.54.00-1024x221.png\" alt=\"\" class=\"wp-image-15855\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.54.00-1024x221.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.54.00-300x65.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.54.00-768x166.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.54.00-500x108.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-17.54.00.png 1360w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screen-Recording-2024-10-12-at-18.03.30.gif\"><img loading=\"lazy\" decoding=\"async\" width=\"372\" height=\"724\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screen-Recording-2024-10-12-at-18.03.30.gif\" alt=\"\" class=\"wp-image-15857\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\"><strong>\u0428\u0410\u0413 12.&nbsp; \u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0436\u0435\u0441\u0442\u0430 \u0434\u043b\u044f \u0438\u0433\u0440\u044b 2048.<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0420\u0430\u0437 \u043c\u044b \u0443\u043c\u0435\u0435\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0430 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">scoreToAdd <\/mark><\/code>\u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0436\u0435\u0441\u0442\u0430 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 (<code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">.up<\/mark><\/code>, <code>.<mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">do<\/mark>wn<\/code>, <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">.left<\/mark><\/code>, <code>.right<\/code>), \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u0447\u0435\u0442\u0430 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">scoreToAdd<\/mark><\/code> \u0431\u0443\u0434\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c.<br>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043d\u0430\u0448\u0435\u0439 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">GameViewModel<\/mark> <\/code>: <\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#EEFFFF;--cbp-line-number-width:calc(1 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#212121\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly> var gameView = GameViewModel()), <\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-darker\" style=\"background-color: #212121\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #F78C6C\">var<\/span><span style=\"color: #EEFFFF\"> gameView <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">GameViewModel<\/span><span style=\"color: #89DDFF\">()<\/span><span style=\"color: #EEFFFF\">), <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">&#8230; <span style=\"font-weight: 400;\">\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u043c\u0443 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0438\u0433\u0440\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 <\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#EEFFFF;--cbp-line-number-width:calc(1 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#212121\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>gameView.tiles = tiles <\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-darker\" style=\"background-color: #212121\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #EEFFFF\">gameView.tiles <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #EEFFFF\"> tiles <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">&#8230; <span style=\"font-weight: 400;\">\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435&nbsp;\u043f\u043b\u0438\u0442\u043e\u043a <\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#EEFFFF;--cbp-line-number-width:calc(1 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#212121\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>slide (_ direction: Direction) <\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-darker\" style=\"background-color: #212121\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #82AAFF\">slide<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">_ direction<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #EEFFFF\"> Direction<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">&#8230; <span style=\"font-weight: 400;\">\u0431\u0435\u0437 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u043f\u043b\u0438\u0442\u043a\u0438, \u043d\u043e \u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u0447\u0435\u0442\u0430 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">score<\/mark><\/code> \u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">moved<\/mark><\/code>&nbsp; \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043b\u0438\u0442\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e. \u042d\u0442\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0430\u0448 \u043a\u043e\u0434 \u0431\u043e\u043b\u0435\u0435 \u0433\u0438\u0431\u043a\u0438\u043c \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">direction<\/mark><\/code> \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u0440\u0438\u0440\u043e\u0441\u0442\u043e\u043c \u0441\u0447\u0435\u0442\u0430 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">score<\/mark><\/code>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0430\u043a \u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043c.<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"font-size:16px;font-style:normal;font-weight:700;text-transform:none\"><strong>\u0424\u0443\u043d\u043a\u0446\u0438\u044f slide (_ direction:Direction)<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e&nbsp; <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">move<\/mark><\/code>:<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#EEFFFF;--cbp-line-number-width:calc(1 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#212121\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>func move (_ direction: Direction)<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-darker\" style=\"background-color: #212121\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C792EA\">func<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">move<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">_<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">direction<\/span><span style=\"color: #EEFFFF\">: Direction<\/span><span style=\"color: #89DDFF\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">&#8230; <span style=\"font-weight: 400;\">\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438 \u0434\u0432\u0438\u0433\u0430\u0435\u0442 \u043f\u043b\u0438\u0442\u043a\u0438 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u043e\u0432\u0443\u044e \u043f\u043b\u0438\u0442\u043a\u0443, \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0437 \u043d\u0435\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">slide<\/mark><\/code>:<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#EEFFFF;--cbp-line-number-width:calc(1 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#212121\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>func slide(_ direction: Direction) -> (moved: Bool, score: Int)\u00a0<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-darker\" style=\"background-color: #212121\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C792EA\">func<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">slide<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF\">_<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #EEFFFF; font-style: italic\">direction<\/span><span style=\"color: #EEFFFF\">: Direction<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">moved: <\/span><span style=\"color: #FFCB6B\">Bool<\/span><span style=\"color: #EEFFFF\">, score: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\">\u00a0<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">&#8230; \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e&nbsp; \u0441\u0434\u0432\u0438\u0433 \u043f\u043b\u0438\u0442\u043e\u043a \u043d\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u043c \u043f\u043e\u043b\u0435 \u0432&nbsp; \u043d\u0443\u0436\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0438\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044f \u043e \u0442\u043e\u043c, \u0431\u044b\u043b\u043e \u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0447\u043a\u043e\u0432 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0432 \u043d\u0430\u0448 \u0441\u0447\u0435\u0442 \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u0440\u0442\u0435\u0436\u0430 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">(moved: Bool, score: Int)<\/mark><\/code>, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e \u0438\u0437 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">Bool<\/mark><\/code> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">moved<\/mark><\/code> (\u0442\u043e \u0435\u0441\u0442\u044c \u0431\u044b\u043b\u043e \u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043b\u0438\u0442\u043e\u043a \u0438 \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043f\u043b\u0438\u0442\u043a\u0443) \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u0447\u0435\u0442\u0430 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">score:Int <\/mark><\/code>\u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043f\u043b\u0438\u0442\u043e\u043a \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">direction<\/mark><\/code>.&nbsp; \u0422\u0430\u043a\u0430\u044f <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">slide<\/mark><\/code> \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u0432\u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0432 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">move<\/mark><\/code> \u0438 \u0434\u0430\u0441\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043b\u0438\u0442\u043e\u043a \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f:<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#EEFFFF;--cbp-line-number-width:calc(1 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#212121\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>func bestMoveDirection ( ) -> Direction\u00a0<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-darker\" style=\"background-color: #212121\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C792EA\">func<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">bestMoveDirection<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #EEFFFF\"> Direction\u00a0<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043c \u043e\u0431 \u044d\u0442\u043e\u043c ChatGPT:<br><\/span><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.09.12.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"317\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.09.12-1024x317.png\" alt=\"\" class=\"wp-image-15863\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.09.12-1024x317.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.09.12-300x93.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.09.12-768x238.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.09.12-500x155.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.09.12.png 1382w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.09.50.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"344\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.09.50-1024x344.png\" alt=\"\" class=\"wp-image-15864\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.09.50-1024x344.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.09.50-300x101.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.09.50-768x258.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.09.50-500x168.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.09.50.png 1388w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.10.52.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"354\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.10.52-1024x354.png\" alt=\"\" class=\"wp-image-15865\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.10.52-1024x354.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.10.52-300x104.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.10.52-768x266.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.10.52-500x173.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-12-at-21.10.52.png 1330w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>extension GameViewModel {\n    func slide(_ direction: Direction) -> (moved: Bool, score: Int) {\n        var moved = false\n        var totalScore = 0\n\n        \/\/ Rotate the board so we can always handle the move as a \"left\" move\n        switch direction {\n        case .up:\n            rotateLeft()\n        case .down:\n            rotateRight()\n        case .right:\n            rotateRight()\n            rotateRight()\n        case .left:\n            break\n        }\n\n        \/\/ Process each row\n        for i in 0..&lt;4 {\n            let row = tiles&#91;i&#93;\n            if canMoveLeft(row) {\n               let compressedRow = compressRow(row)\n               let (mergedRow, rowScore) = mergeRow(compressedRow)\n               totalScore += rowScore\n\n               if mergedRow != row {\n                  moved = true\n                  tiles &#91;i&#93; = mergedRow\n               }\n             }\n         }\n        \/\/ Rotate back to the original orientation\n        switch direction {\n        case .up:\n            rotateRight()\n        case .down:\n            rotateLeft()\n        case .right:\n            rotateRight()\n            rotateRight()\n        case .left:\n            break\n        }\n\n        return (moved, totalScore)\n    }\n\n    \/\/ Helper functions (rotateLeft, rotateRight, compressRow, mergeRow)\n    \/\/ These functions should already be defined in your GameViewModel\n    \/\/ If not, please define them as per your existing code.\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">extension<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">GameViewModel<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">slide<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">_<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">direction<\/span><span style=\"color: #ABB2BF\">: Direction) -&gt; (moved: <\/span><span style=\"color: #E5C07B\">Bool<\/span><span style=\"color: #ABB2BF\">, score: <\/span><span style=\"color: #E5C07B\">Int<\/span><span style=\"color: #ABB2BF\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> moved = <\/span><span style=\"color: #D19A66\">false<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> totalScore = <\/span><span style=\"color: #D19A66\">0<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Rotate the board so we can always handle the move as a &quot;left&quot; move<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">switch<\/span><span style=\"color: #ABB2BF\"> direction {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .up<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">rotateLeft<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .down<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">rotateRight<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">right<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">rotateRight<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">rotateRight<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">left<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">break<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Process each row<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">for<\/span><span style=\"color: #ABB2BF\"> i <\/span><span style=\"color: #C678DD\">in<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">..&lt;<\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> row = tiles&#91;i&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">canMoveLeft<\/span><span style=\"color: #ABB2BF\">(row) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> compressedRow = <\/span><span style=\"color: #61AFEF\">compressRow<\/span><span style=\"color: #ABB2BF\">(row)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> (mergedRow, rowScore) = <\/span><span style=\"color: #61AFEF\">mergeRow<\/span><span style=\"color: #ABB2BF\">(compressedRow)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">               totalScore += rowScore<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> mergedRow != row {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                  moved = <\/span><span style=\"color: #D19A66\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                  tiles &#91;i&#93; = mergedRow<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">         }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Rotate back to the original orientation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">switch<\/span><span style=\"color: #ABB2BF\"> direction {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .up<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">rotateRight<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .down<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">rotateLeft<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">right<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">rotateRight<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">rotateRight<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">left<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">break<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> (moved, totalScore)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Helper functions (rotateLeft, rotateRight, compressRow, mergeRow)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ These functions should already be defined in your GameViewModel<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ If not, please define them as per your existing code.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.49.56.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"537\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.49.56-1024x537.png\" alt=\"\" class=\"wp-image-15866\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.49.56-1024x537.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.49.56-300x157.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.49.56-768x403.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.49.56-500x262.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.49.56.png 1392w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.50.07.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"522\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.50.07-1024x522.png\" alt=\"\" class=\"wp-image-15867\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.50.07-1024x522.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.50.07-300x153.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.50.07-768x391.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.50.07-500x255.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.50.07.png 1358w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(1 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>let (moved, score) = gameViewModel.slide(.left)\nif moved {\n    \/\/ Optionally call addNewTile() here, if needed\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> (moved, score) = gameViewModel.<\/span><span style=\"color: #61AFEF\">slide<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">left<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> moved {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Optionally call addNewTile() here, if needed<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.51.39.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"144\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.51.39-1024x144.png\" alt=\"\" class=\"wp-image-15868\" style=\"width:614px;height:auto\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.51.39-1024x144.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.51.39-300x42.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.51.39-768x108.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.51.39-500x70.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.51.39.png 1322w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.52.05.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"204\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.52.05-1024x204.png\" alt=\"\" class=\"wp-image-15869\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.52.05-1024x204.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.52.05-300x60.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.52.05-768x153.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.52.05-500x100.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.52.05.png 1404w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(1 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>func move(_ direction: Direction) {\n    let (moved, score) = slide(direction)\n    \n    if moved {\n        self.score += score\n        addNewTile()\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">move<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">_<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">direction<\/span><span style=\"color: #ABB2BF\">: Direction) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> (moved, score) = <\/span><span style=\"color: #61AFEF\">slide<\/span><span style=\"color: #ABB2BF\">(direction)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> moved {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #E5C07B\">self<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">score<\/span><span style=\"color: #ABB2BF\"> += score<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">addNewTile<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.53.10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"144\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.53.10-1024x144.png\" alt=\"\" class=\"wp-image-15870\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.53.10-1024x144.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.53.10-300x42.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.53.10-768x108.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.53.10-500x70.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.53.10.png 1378w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>private func mergeRow(_ row: &#91;Tile&#93;) -> (&#91;Tile&#93;, Int) {\n        var newRow = row\n        var scoreToAdd = 0\n        \n        let nonZeroTiles = row.filter { $0.value != 0 }\n        \n        \/\/ If the row has less than 2 tiles return it as is\n        guard nonZeroTiles.count > 1 else {\n            return (row, scoreToAdd)\n        }\n        for i in 0..&lt;row.count - 1 {\n          if newRow&#91;i&#93;.value != 0 &amp;&amp; newRow&#91;i&#93;.value == newRow&#91;i + 1&#93;.value {\n                \n                \/\/ Merge tiles\n                newRow&#91;i&#93;.value *= 2\n                scoreToAdd += newRow&#91;i&#93;.value\n                \n                \/\/ Change the id\n                newRow&#91;i&#93;.id = newRow&#91;i + 1&#93;.id\n                \n                \/\/ New zero tile on i + ! position\n                newRow&#91;i + 1&#93; = Tile(value: 0, position: \n                          Position(row: newRow&#91;i&#93;.position.row, col: i + 1))\n            }\n        }\n        \/\/ Compress the row after merging\n        return (compressRow(newRow), scoreToAdd)\n    }<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">mergeRow<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">_<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">row<\/span><span style=\"color: #ABB2BF\">: &#91;Tile&#93;) -&gt; (&#91;Tile&#93;, <\/span><span style=\"color: #E5C07B\">Int<\/span><span style=\"color: #ABB2BF\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> newRow = row<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> scoreToAdd = <\/span><span style=\"color: #D19A66\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> nonZeroTiles = row.<\/span><span style=\"color: #56B6C2\">filter<\/span><span style=\"color: #ABB2BF\"> { <\/span><span style=\"color: #E5C07B\">$0<\/span><span style=\"color: #ABB2BF\">.value != <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\"> }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ If the row has less than 2 tiles return it as is<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">guard<\/span><span style=\"color: #ABB2BF\"> nonZeroTiles.count &gt; <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">else<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> (row, scoreToAdd)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">for<\/span><span style=\"color: #ABB2BF\"> i <\/span><span style=\"color: #C678DD\">in<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">..&lt;row.count - <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">          <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> newRow&#91;i&#93;.value != <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\"> &amp;&amp; newRow&#91;i&#93;.value == newRow&#91;i + <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;.value {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Merge tiles<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                newRow&#91;i&#93;.value *= <\/span><span style=\"color: #D19A66\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                scoreToAdd += newRow&#91;i&#93;.value<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Change the id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                newRow&#91;i&#93;.<\/span><span style=\"color: #E06C75\">id<\/span><span style=\"color: #ABB2BF\"> = newRow&#91;i + <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;.<\/span><span style=\"color: #E06C75\">id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ New zero tile on i + ! position<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                newRow&#91;i + <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93; = <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                          <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: newRow&#91;i&#93;.<\/span><span style=\"color: #E06C75\">position<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">row<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: i + <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Compress the row after merging<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> (<\/span><span style=\"color: #61AFEF\">compressRow<\/span><span style=\"color: #ABB2BF\">(newRow), scoreToAdd)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.55.55.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"748\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.55.55-1024x748.png\" alt=\"\" class=\"wp-image-15871\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.55.55-1024x748.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.55.55-300x219.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.55.55-768x561.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.55.55-411x300.png 411w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.55.55.png 1366w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.57.10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"233\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.57.10-1024x233.png\" alt=\"\" class=\"wp-image-15872\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.57.10-1024x233.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.57.10-300x68.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.57.10-768x174.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.57.10-500x114.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-12.57.10.png 1374w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f&nbsp;<code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\"> slide <\/mark><\/code>\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u0420\u0430\u043d\u0435\u0435 \u043c\u044b \u043d\u0435 \u043c\u043e\u0433\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438&nbsp; <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">move<\/mark><\/code> \u0438\u0437-\u0437\u0430 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u0442\u0430\u043a\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f.<\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"font-size:17px;text-transform:none\"><strong>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 slide<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.04.53.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"194\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.04.53-1024x194.png\" alt=\"\" class=\"wp-image-15873\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.04.53-1024x194.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.04.53-300x57.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.04.53-768x145.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.04.53-500x95.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.04.53.png 1362w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.05.16.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"372\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.05.16-1024x372.png\" alt=\"\" class=\"wp-image-15874\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.05.16-1024x372.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.05.16-300x109.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.05.16-768x279.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.05.16-500x182.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.05.16.png 1348w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(3 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import XCTest\n@testable import Game2048ChatGPT_Test\n\nfinal class Game2048ChatGPT_Tests: XCTestCase {\n    var viewModel: GameViewModel!\n    \n    override func setUpWithError() throws {\n \/\/ Put setup code here. This method is called before the invocation of each test method in the class.\n        super.setUp()\n               viewModel = GameViewModel()\n    }\n    override func tearDownWithError() throws {\n \/\/ Put teardown code here. This method is called after the invocation of each test method in the class.\n        viewModel = nil\n        super.tearDown()\n    }\n    func testSlideLeftWithoutMerging() {\n            viewModel.tiles = [\n                &#91;Tile(value: 2, position: Position(row: 0, col: 0)),\n                 Tile(value: 0, position: Position(row: 0, col: 1)), \n                 Tile(value: 4, position: Position(row: 0, col: 2)), \n                 Tile(value: 0, position: Position(row: 0, col: 3))&#93;,\n\n                &#91;Tile(value: 0, position: Position(row: 1, col: 0)), \n                 Tile(value: 0, position: Position(row: 1, col: 1)), \n                 Tile(value: 2, position: Position(row: 1, col: 2)), \n                 Tile(value: 0, position: Position(row: 1, col: 3))&#93;,\n\n                &#91;Tile(value: 0, position: Position(row: 2, col: 0)),\n                 Tile(value: 2, position: Position(row: 2, col: 1)), \n                 Tile(value: 0, position: Position(row: 2, col: 2)), \n                 Tile(value: 4, position: Position(row: 2, col: 3))&#93;,\n\n                &#91;Tile(value: 4, position: Position(row: 3, col: 0)),\n                 Tile(value: 4, position: Position(row: 3, col: 1)), \n                 Tile(value: 0, position: Position(row: 3, col: 2)), \n                 Tile(value: 2, position: Position(row: 3, col: 3))&#93;\n            ]\n            \n            let (moved, score) = viewModel.slide(.left)\n            \n            XCTAssertTrue(moved)\n            XCTAssertEqual(score, 8)\n            XCTAssertEqual(viewModel.tiles&#91;0&#93;&#91;0&#93;.value, 2)\n            XCTAssertEqual(viewModel.tiles&#91;0&#93;&#91;1&#93;.value, 4)\n            XCTAssertEqual(viewModel.tiles&#91;0&#93;&#91;2&#93;.value, 0)\n            XCTAssertEqual(viewModel.tiles&#91;0&#93;&#91;3&#93;.value, 0)\n            XCTAssertEqual(viewModel.tiles&#91;3&#93;&#91;0&#93;.value, 8)\n            XCTAssertEqual(viewModel.tiles&#91;3&#93;&#91;1&#93;.value, 2)\n            XCTAssertEqual(viewModel.tiles&#91;3&#93;&#91;2&#93;.value, 0)\n            XCTAssertEqual(viewModel.tiles&#91;3&#93;&#91;3&#93;.value, 0)\n        }\n        \n        func testSlideRightWithMerging() {\n            viewModel.tiles = [\n                &#91;Tile(value: 2, position: Position(row: 0, col: 0)),\n                 Tile(value: 2, position: Position(row: 0, col: 1)), \n                 Tile(value: 4, position: Position(row: 0, col: 2)), \n                 Tile(value: 4, position: Position(row: 0, col: 3))&#93;,\n\n                &#91;Tile(value: 0, position: Position(row: 1, col: 0)),\n                 Tile(value: 2, position: Position(row: 1, col: 1)), \n                 Tile(value: 0, position: Position(row: 1, col: 2)), \n                 Tile(value: 2, position: Position(row: 1, col: 3))&#93;,\n\n                &#91;Tile(value: 4, position: Position(row: 2, col: 0)),\n                 Tile(value: 4, position: Position(row: 2, col: 1)), \n                 Tile(value: 4, position: Position(row: 2, col: 2)), \n                 Tile(value: 4, position: Position(row: 2, col: 3))&#93;,\n\n                &#91;Tile(value: 0, position: Position(row: 3, col: 0)),\n                 Tile(value: 0, position: Position(row: 3, col: 1)), \n                 Tile(value: 0, position: Position(row: 3, col: 2)), \n                 Tile(value: 2, position: Position(row: 3, col: 3))&#93;\n            ]\n            \n            let (moved, score) = viewModel.slide(.right)\n            viewModel.printBoard()\n                       \n            XCTAssertTrue(moved)\n            XCTAssertEqual(score, 32)\n            XCTAssertEqual(viewModel.tiles&#91;0&#93;&#91;0&#93;.value, 0)\n            XCTAssertEqual(viewModel.tiles&#91;0&#93;&#91;1&#93;.value, 0)\n            XCTAssertEqual(viewModel.tiles&#91;0&#93;&#91;2&#93;.value, 4)\n            XCTAssertEqual(viewModel.tiles&#91;0&#93;&#91;3&#93;.value, 8)\n            XCTAssertEqual(viewModel.tiles&#91;1&#93;&#91;0&#93;.value, 0)\n            XCTAssertEqual(viewModel.tiles&#91;1&#93;&#91;1&#93;.value, 0)\n            XCTAssertEqual(viewModel.tiles&#91;1&#93;&#91;2&#93;.value, 0)\n            XCTAssertEqual(viewModel.tiles&#91;1&#93;&#91;3&#93;.value, 4)\n            XCTAssertEqual(viewModel.tiles&#91;2&#93;&#91;0&#93;.value, 0)\n            XCTAssertEqual(viewModel.tiles&#91;2&#93;&#91;1&#93;.value, 0)\n            XCTAssertEqual(viewModel.tiles&#91;2&#93;&#91;2&#93;.value, 8)\n            XCTAssertEqual(viewModel.tiles&#91;2&#93;&#91;3&#93;.value, 8)\n            XCTAssertEqual(viewModel.tiles&#91;3&#93;&#91;0&#93;.value, 0)\n            XCTAssertEqual(viewModel.tiles&#91;3&#93;&#91;1&#93;.value, 0)\n            XCTAssertEqual(viewModel.tiles&#91;3&#93;&#91;2&#93;.value, 0)\n            XCTAssertEqual(viewModel.tiles&#91;3&#93;&#91;3&#93;.value, 2)\n        }\n        \n        func testSlideUp() {\n            viewModel.tiles = [\n                &#91;Tile(value: 2, position: Position(row: 0, col: 0)),\n                 Tile(value: 2, position: Position(row: 0, col: 1)), \n                 Tile(value: 0, position: Position(row: 0, col: 2)), \n                 Tile(value: 4, position: Position(row: 0, col: 3))&#93;,\n\n                &#91;Tile(value: 4, position: Position(row: 1, col: 0)),\n                 Tile(value: 4, position: Position(row: 1, col: 1)), \n                 Tile(value: 2, position: Position(row: 1, col: 2)), \n                 Tile(value: 2, position: Position(row: 1, col: 3))&#93;,\n\n                &#91;Tile(value: 2, position: Position(row: 2, col: 0)),\n                 Tile(value: 2, position: Position(row: 2, col: 1)), \n                 Tile(value: 4, position: Position(row: 2, col: 2)), \n                 Tile(value: 4, position: Position(row: 2, col: 3))&#93;,\n\n                &#91;Tile(value: 4, position: Position(row: 3, col: 0)),\n                 Tile(value: 0, position: Position(row: 3, col: 1)), \n                 Tile(value: 4, position: Position(row: 3, col: 2)), \n                 Tile(value: 0, position: Position(row: 3, col: 3))&#93;\n            ]\n            \n            let (moved, score) = viewModel.slide(.up)\n            \n            XCTAssertTrue(moved)\n            XCTAssertEqual(score, 8)\n            XCTAssertEqual(viewModel.tiles&#91;0&#93;&#91;0&#93;.value, 2)\n            XCTAssertEqual(viewModel.tiles&#91;0&#93;&#91;1&#93;.value, 2)\n            XCTAssertEqual(viewModel.tiles&#91;0&#93;&#91;2&#93;.value, 2)\n            XCTAssertEqual(viewModel.tiles&#91;0&#93;&#91;3&#93;.value, 4)\n            XCTAssertEqual(viewModel.tiles&#91;1&#93;&#91;0&#93;.value, 4)\n            XCTAssertEqual(viewModel.tiles&#91;1&#93;&#91;1&#93;.value, 4)\n            XCTAssertEqual(viewModel.tiles&#91;1&#93;&#91;2&#93;.value, 8)\n            XCTAssertEqual(viewModel.tiles&#91;1&#93;&#91;3&#93;.value, 2)\n            XCTAssertEqual(viewModel.tiles&#91;2&#93;&#91;0&#93;.value, 2)\n            XCTAssertEqual(viewModel.tiles&#91;2&#93;&#91;1&#93;.value, 2)\n            XCTAssertEqual(viewModel.tiles&#91;2&#93;&#91;2&#93;.value, 0)\n            XCTAssertEqual(viewModel.tiles&#91;2&#93;&#91;3&#93;.value, 4)\n            XCTAssertEqual(viewModel.tiles&#91;3&#93;&#91;0&#93;.value, 4)\n            XCTAssertEqual(viewModel.tiles&#91;3&#93;&#91;1&#93;.value, 0)\n            XCTAssertEqual(viewModel.tiles&#91;3&#93;&#91;2&#93;.value, 0)\n            XCTAssertEqual(viewModel.tiles&#91;3&#93;&#91;3&#93;.value, 0)\n        }\n        \n        func testSlideDown() {\n            viewModel.tiles = [\n                &#91;Tile(value: 2, position: Position(row: 0, col: 0)),\n                 Tile(value: 2, position: Position(row: 0, col: 1)),\n                 Tile(value: 0, position: Position(row: 0, col: 2)),\n                 Tile(value: 4, position: Position(row: 0, col: 3))&#93;,\n\n                &#91;Tile(value: 4, position: Position(row: 1, col: 0)),\n                 Tile(value: 4, position: Position(row: 1, col: 1)), \n                 Tile(value: 2, position: Position(row: 1, col: 2)),\n                 Tile(value: 2, position: Position(row: 1, col: 3))&#93;,\n\n                &#91;Tile(value: 2, position: Position(row: 2, col: 0)),\n                 Tile(value: 2, position: Position(row: 2, col: 1)),\n                 Tile(value: 4, position: Position(row: 2, col: 2)), \n                 Tile(value: 4, position: Position(row: 2, col: 3))&#93;,\n\n                &#91;Tile(value: 4, position: Position(row: 3, col: 0)),\n                 Tile(value: 0, position: Position(row: 3, col: 1)), \n                 Tile(value: 4, position: Position(row: 3, col: 2)), \n                 Tile(value: 0, position: Position(row: 3, col: 3))&#93;\n            ]\n            \n            let (moved, score) = viewModel.slide(.down)\n            \n            XCTAssertTrue(moved)\n            XCTAssertEqual(score, 8)\n            XCTAssertEqual(viewModel.tiles&#91;3&#93;&#91;0&#93;.value, 4)\n            XCTAssertEqual(viewModel.tiles&#91;3&#93;&#91;1&#93;.value, 2)\n            XCTAssertEqual(viewModel.tiles&#91;3&#93;&#91;2&#93;.value, 8)\n            XCTAssertEqual(viewModel.tiles&#91;3&#93;&#91;3&#93;.value, 4)\n            XCTAssertEqual(viewModel.tiles&#91;2&#93;&#91;0&#93;.value, 2)\n            XCTAssertEqual(viewModel.tiles&#91;2&#93;&#91;1&#93;.value, 4)\n            XCTAssertEqual(viewModel.tiles&#91;2&#93;&#91;2&#93;.value, 2)\n            XCTAssertEqual(viewModel.tiles&#91;2&#93;&#91;3&#93;.value, 2)\n            XCTAssertEqual(viewModel.tiles&#91;1&#93;&#91;0&#93;.value, 4)\n            XCTAssertEqual(viewModel.tiles&#91;1&#93;&#91;1&#93;.value, 2)\n            XCTAssertEqual(viewModel.tiles&#91;1&#93;&#91;2&#93;.value, 0)\n            XCTAssertEqual(viewModel.tiles&#91;1&#93;&#91;3&#93;.value, 4)\n            XCTAssertEqual(viewModel.tiles&#91;0&#93;&#91;0&#93;.value, 2)\n            XCTAssertEqual(viewModel.tiles&#91;0&#93;&#91;1&#93;.value, 0)\n            XCTAssertEqual(viewModel.tiles&#91;0&#93;&#91;2&#93;.value, 0)\n            XCTAssertEqual(viewModel.tiles&#91;0&#93;&#91;3&#93;.value, 0)\n        }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">import<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">XCTest<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">@testable<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">import<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Game2048ChatGPT_Test<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">final<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">class<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Game2048ChatGPT_Tests<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">XCTestCase <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> viewModel: GameViewModel!<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">override<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">setUpWithError<\/span><span style=\"color: #ABB2BF\">() <\/span><span style=\"color: #C678DD\">throws<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Put setup code here. This method is called before the invocation of each test method in the class.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #E5C07B\">super<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">setUp<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               viewModel = <\/span><span style=\"color: #61AFEF\">GameViewModel<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">override<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">tearDownWithError<\/span><span style=\"color: #ABB2BF\">() <\/span><span style=\"color: #C678DD\">throws<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Put teardown code here. This method is called after the invocation of each test method in the class.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        viewModel = <\/span><span style=\"color: #D19A66\">nil<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #E5C07B\">super<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #61AFEF\">tearDown<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">testSlideLeftWithoutMerging<\/span><span style=\"color: #ABB2BF\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\"> = [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            ]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> (moved, score) = viewModel.<\/span><span style=\"color: #61AFEF\">slide<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">left<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertTrue<\/span><span style=\"color: #ABB2BF\">(moved)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(score, <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">testSlideRightWithMerging<\/span><span style=\"color: #ABB2BF\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\"> = [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            ]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> (moved, score) = viewModel.<\/span><span style=\"color: #61AFEF\">slide<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">right<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            viewModel.<\/span><span style=\"color: #61AFEF\">printBoard<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                       <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertTrue<\/span><span style=\"color: #ABB2BF\">(moved)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(score, <\/span><span style=\"color: #D19A66\">32<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">testSlideUp<\/span><span style=\"color: #ABB2BF\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\"> = [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            ]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> (moved, score) = viewModel.<\/span><span style=\"color: #61AFEF\">slide<\/span><span style=\"color: #ABB2BF\">(.up)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertTrue<\/span><span style=\"color: #ABB2BF\">(moved)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(score, <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">testSlideDown<\/span><span style=\"color: #ABB2BF\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\"> = [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            ]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> (moved, score) = viewModel.<\/span><span style=\"color: #61AFEF\">slide<\/span><span style=\"color: #ABB2BF\">(.down)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertTrue<\/span><span style=\"color: #ABB2BF\">(moved)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(score, <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">&#91;<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">&#93;&#91;<\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">&#93;.value, <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.09.08.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"608\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.09.08-1024x608.png\" alt=\"\" class=\"wp-image-15875\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.09.08-1024x608.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.09.08-300x178.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.09.08-768x456.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.09.08-500x297.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.09.08.png 1360w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.09.27.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"535\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.09.27-1024x535.png\" alt=\"\" class=\"wp-image-15876\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.09.27-1024x535.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.09.27-300x157.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.09.27-768x401.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.09.27-500x261.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-13.09.27.png 1370w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u044b:<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXcZgVcqhQMLJshfcXJj4fZA5zOi9i_gQh9KUchCxklgJPsmgwbnl4dU7pDCh7bkdHy3tWdNhg-I-PlMDKSQSyftPCbZyTUW1Dcav_sgtwW9NMfHlvXLa0KKOIMt73-lm_b42C-hBRWRpJScyL6J3kVYTu_G?key=w5NuDZeiHz-JjML98dOHbA\" width=\"692\" height=\"324\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\"><strong>\u0428\u0410\u0413 13&nbsp; \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 AIGame \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f oneStepGame. <\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0418\u0442\u0430\u043a, \u043c\u044b \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043c \u043f\u0440\u043e\u0449\u0435, \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">struct AIGame<\/mark><\/code> \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0443\u0434\u0430 \u043c\u0435\u0442\u043e\u0434 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">oneStepGame<\/mark><\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c&nbsp; \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">GameViewModel<\/mark><\/code> \u0441 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0434\u043e\u0441\u043a\u043e\u0439 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">matrix<\/mark><\/code> \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">slide<\/mark><\/code> \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438:&nbsp;<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#EEFFFF;--cbp-line-number-width:calc(1 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#212121\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#EEFFFF;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>func oneStepGame(direction: Direction, matrix: [&#91;Tile&#93;]) ->\u00a0\u00a0(moved: Bool, score: Int)<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-darker\" style=\"background-color: #212121\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C792EA\">func<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #82AAFF\">oneStepGame<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #82AAFF; font-style: italic\">direction<\/span><span style=\"color: #EEFFFF\">: Direction, <\/span><span style=\"color: #82AAFF; font-style: italic\">matrix<\/span><span style=\"color: #EEFFFF\">: <\/span><span style=\"color: #89DDFF\">[&#91;<\/span><span style=\"color: #EEFFFF\">Tile<\/span><span style=\"color: #89DDFF\">&#93;])<\/span><span style=\"color: #EEFFFF\"> <\/span><span style=\"color: #89DDFF\">-&gt;<\/span><span style=\"color: #EEFFFF\">\u00a0\u00a0<\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #EEFFFF\">moved: <\/span><span style=\"color: #FFCB6B\">Bool<\/span><span style=\"color: #EEFFFF\">, score: <\/span><span style=\"color: #FFCB6B\">Int<\/span><span style=\"color: #89DDFF\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043b\u0438\u0442\u043e\u043a \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f&nbsp; \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0442\u043e\u043c, \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043b\u0438 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043b\u0438\u0442\u043e\u043a <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">moved<\/mark><\/code>, \u0438 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b\u0441\u044f \u0441\u0447\u0435\u0442 <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">score<\/mark><\/code>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043c \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c ChatGPT:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.13.12.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"344\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.13.12-1024x344.png\" alt=\"\" class=\"wp-image-15879\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.13.12-1024x344.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.13.12-300x101.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.13.12-768x258.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.13.12-500x168.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.13.12.png 1406w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.13.24.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"275\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.13.24-1024x275.png\" alt=\"\" class=\"wp-image-15880\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.13.24-1024x275.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.13.24-300x81.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.13.24-768x206.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.13.24-500x134.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.13.24.png 1406w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.15.02.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"314\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.15.02-1024x314.png\" alt=\"\" class=\"wp-image-15881\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.15.02-1024x314.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.15.02-300x92.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.15.02-768x236.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.15.02-500x153.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-18.15.02.png 1362w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>struct AIGame {\n\n    \/\/ Method to simulate one step of the game in a given direction\n    func oneStepGame(direction: Direction, matrix: [&#91;Tile&#93;]) ->\n                                                (moved: Bool, score: Int) {\n        var gameViewModel = GameViewModel() \/\/ Initialize GameViewModel\n        gameViewModel.tiles = matrix \/\/ Set the tiles to the provided matrix\n\n        \/\/ Call the slide method on GameViewModel\n        let result = gameViewModel.slide(direction)\n\n        \/\/ Return the result from the slide method\n        return result\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">AIGame<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Method to simulate one step of the game in a given direction<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">oneStepGame<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF; font-style: italic\">direction<\/span><span style=\"color: #ABB2BF\">: Direction, <\/span><span style=\"color: #61AFEF; font-style: italic\">matrix<\/span><span style=\"color: #ABB2BF\">: [&#91;Tile&#93;]) -&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                                (<\/span><span style=\"color: #61AFEF\">moved<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Bool<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">score<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Int<\/span><span style=\"color: #ABB2BF\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> gameViewModel = <\/span><span style=\"color: #61AFEF\">GameViewModel<\/span><span style=\"color: #ABB2BF\">() <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Initialize GameViewModel<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        gameViewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\"> = matrix <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Set the tiles to the provided matrix<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Call the slide method on GameViewModel<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> result = gameViewModel.<\/span><span style=\"color: #61AFEF\">slide<\/span><span style=\"color: #ABB2BF\">(direction)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Return the result from the slide method<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> result<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.19.10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"774\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.19.10-1024x774.png\" alt=\"\" class=\"wp-image-15882\" style=\"width:614px;height:auto\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.19.10-1024x774.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.19.10-300x227.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.19.10-768x581.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.19.10-397x300.png 397w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.19.10.png 1354w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(1 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>let aiGame = AIGame()\nlet matrix = \/\/ your current matrix of tiles\nlet result = aiGame.oneStepGame(direction: .left, matrix: matrix)\n\n\/\/ Accessing the result\nlet moved = result.moved<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> aiGame = <\/span><span style=\"color: #61AFEF\">AIGame<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> matrix = <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ your current matrix of tiles<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> result = aiGame.<\/span><span style=\"color: #61AFEF\">oneStepGame<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">direction<\/span><span style=\"color: #ABB2BF\">: .<\/span><span style=\"color: #E06C75\">left<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">matrix<\/span><span style=\"color: #ABB2BF\">: matrix)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #7F848E; font-style: italic\">\/\/ Accessing the result<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> moved = result.<\/span><span style=\"color: #E06C75\">moved<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.20.22.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"157\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.20.22-1024x157.png\" alt=\"\" class=\"wp-image-15883\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.20.22-1024x157.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.20.22-300x46.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.20.22-768x118.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.20.22-500x77.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.20.22.png 1354w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\"><strong>\u0428\u0410\u0413 14.&nbsp; \u041e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435 \u0438\u0433\u0440\u044b 2048.&nbsp;<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c AIGame \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0438\u0433\u0440\u044b:<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>   class GameViewModel: ObservableObject {\n    @Published var tiles: [&#91;Tile&#93;] = []\n    @Published var isGameOver = false\n    @Published var score: Int = 0\n   \n    private var aiGame = AIGame()\n\/\/.  .  .  .  .  .  .  .  .  .  .  .  . \n    func move(_ direction: Direction) {\n        let (moved, score) = slide(direction)\n        \n        if moved {\n            self.score += score\n            addNewTile()\n        }\n        checkGameOver()\n     }\n\n     func checkGameOver() {\n            \/\/ Logic to check if the game is over\n            if !canMove() {\n                isGameOver = true\n            }\n      }\n        \n    func canMove() -> Bool {\n      return Direction.allCases.contains { direction in\n               aiGame.oneStepGame(direction: direction, matrix: tiles).moved\n           }\n     }\n  }<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ABB2BF\">   <\/span><span style=\"color: #C678DD\">class<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">GameViewModel<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">ObservableObject <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">@Published<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> tiles: [&#91;Tile&#93;] = []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">@Published<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> isGameOver = <\/span><span style=\"color: #D19A66\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">@Published<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> score: <\/span><span style=\"color: #E5C07B\">Int<\/span><span style=\"color: #ABB2BF\"> = <\/span><span style=\"color: #D19A66\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">   <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> aiGame = <\/span><span style=\"color: #61AFEF\">AIGame<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7F848E; font-style: italic\">\/\/.  .  .  .  .  .  .  .  .  .  .  .  . <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">move<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">_<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">direction<\/span><span style=\"color: #ABB2BF\">: Direction) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> (moved, score) = <\/span><span style=\"color: #61AFEF\">slide<\/span><span style=\"color: #ABB2BF\">(direction)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> moved {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #E5C07B\">self<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #E06C75\">score<\/span><span style=\"color: #ABB2BF\"> += score<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">addNewTile<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">checkGameOver<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">     }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">     <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">checkGameOver<\/span><span style=\"color: #ABB2BF\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Logic to check if the game is over<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> !<\/span><span style=\"color: #61AFEF\">canMove<\/span><span style=\"color: #ABB2BF\">() {<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                isGameOver = <\/span><span style=\"color: #D19A66\">true<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">canMove<\/span><span style=\"color: #ABB2BF\">() -&gt; <\/span><span style=\"color: #E5C07B\">Bool<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Direction.<\/span><span style=\"color: #E06C75\">allCases<\/span><span style=\"color: #ABB2BF\">.<\/span><span style=\"color: #56B6C2\">contains<\/span><span style=\"color: #ABB2BF\"> { direction <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               aiGame.<\/span><span style=\"color: #61AFEF\">oneStepGame<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">direction<\/span><span style=\"color: #ABB2BF\">: direction, <\/span><span style=\"color: #61AFEF\">matrix<\/span><span style=\"color: #ABB2BF\">: tiles).<\/span><span style=\"color: #E06C75\">moved<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">           }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">     }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-15-at-12.15.34.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"515\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-15-at-12.15.34-1024x515.png\" alt=\"\" class=\"wp-image-15920\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-15-at-12.15.34-1024x515.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-15-at-12.15.34-300x151.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-15-at-12.15.34-768x386.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-15-at-12.15.34-500x251.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-15-at-12.15.34.png 1380w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>struct GameView: View {\n @StateObject var viewModel: GameViewModel\n \n var body: some View { \n       VStack {\n            Text(\"2048\")\n                .font(.largeTitle)\n                .padding()\n            \n            HStack {\n                \/\/ Score Display\n                Text(\"Score: \\(viewModel.score)\")\n                .monospacedDigit()\n                Spacer()\n            }\n            .font(.title)\n            .foregroundColor(.accentColor)\n            .padding()\n\n      \/\/ Game Over                \n        if viewModel.isGameOver {\n                 Text(\"Game Over\")\n                  .font(.title) \n                  .foregroundColor(.red) \n          }\n\n         \/\/ Your game UI components here (e.g., grid view, score display).\n \n      } .padding() \n    } \n }<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">GameView<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">View <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">@StateObject<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> viewModel: GameViewModel<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> body: <\/span><span style=\"color: #C678DD\">some<\/span><span style=\"color: #ABB2BF\"> View { <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">       <\/span><span style=\"color: #61AFEF\">VStack<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;2048&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">largeTitle<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">HStack<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Score Display<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Score: <\/span><span style=\"color: #C678DD\">\\(<\/span><span style=\"color: #ABB2BF\">viewModel.<\/span><span style=\"color: #E06C75\">score<\/span><span style=\"color: #C678DD\">)<\/span><span style=\"color: #98C379\">&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">monospacedDigit<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">Spacer<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">title<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">foregroundColor<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">accentColor<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Game Over                <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> viewModel.isGameOver {<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Game Over&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                  .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">title<\/span><span style=\"color: #ABB2BF\">) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                  .<\/span><span style=\"color: #61AFEF\">foregroundColor<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">red<\/span><span style=\"color: #ABB2BF\">) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">          }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">         <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Your game UI components here (e.g., grid view, score display).<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">      } .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">() <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    } <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\"> }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"font-size:17px;text-transform:none\"><strong>\u0427\u0435\u043c \u043f\u043b\u043e\u0445 Text (&#171;GameOver&#187;), \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 ChatGPT:<\/strong><\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(1 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>if viewModel.isGameOver {\n                Text(\"Game Over\")\n                    .font(.largeTitle)\n                    .foregroundColor(.red)\n }<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> viewModel.isGameOver {<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Game Over&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">largeTitle<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    .<\/span><span style=\"color: #61AFEF\">foregroundColor<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">red<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\"> }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0422\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439 UI, \u0438 \u0435\u0441\u043b\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u0442\u043e \u043c\u0435\u0441\u0442\u0430 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043f\u043e\u0434 \u043d\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043e. \u0418 \u043d\u0430\u0448 UI \u0431\u0443\u0434\u0435\u0442 \u201c\u0441\u043a\u0430\u043a\u0430\u0442\u044c\u201d \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0427\u0442\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442&nbsp; ChatGPT, \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u0441\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.04.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"98\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.04-1024x98.png\" alt=\"\" class=\"wp-image-15912\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.04-1024x98.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.04-300x29.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.04-768x73.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.04-500x48.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.04.png 1384w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.11.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"149\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.11-1024x149.png\" alt=\"\" class=\"wp-image-15913\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.11-1024x149.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.11-300x44.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.11-768x111.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.11-500x73.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.11.png 1434w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.46.31.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"225\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.46.31-1024x225.png\" alt=\"\" class=\"wp-image-15914\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.46.31-1024x225.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.46.31-300x66.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.46.31-768x169.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.46.31-500x110.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.46.31.png 1390w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.25.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"336\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.25-1024x336.png\" alt=\"\" class=\"wp-image-15915\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.25-1024x336.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.25-300x99.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.25-768x252.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.25-500x164.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.45.25.png 1370w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import SwiftUI\n\nstruct GameView: View {\n    @ObservedObject var viewModel: GameViewModel\n    \n    var body: some View {\n        VStack {\n            \/\/ Your game UI components here...\n\n            Text(viewModel.isGameOver ? \"Game Over\" : \"---- ----\")\n                .font(.largeTitle)\n                .foregroundColor(viewModel.isGameOver ? .red : .clear)\n                .frame(maxWidth: .infinity)\n                .padding(.top)\n\n            \/\/ Other game UI components (e.g., grid view, score display)...\n        }\n        .padding()\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">import<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">SwiftUI<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">GameView<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">View <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">@ObservedObject<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> viewModel: GameViewModel<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> body: <\/span><span style=\"color: #C678DD\">some<\/span><span style=\"color: #ABB2BF\"> View {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">VStack<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Your game UI components here...<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">isGameOver<\/span><span style=\"color: #ABB2BF\"> ? <\/span><span style=\"color: #98C379\">&quot;Game Over&quot;<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;---- ----&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">largeTitle<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">foregroundColor<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">isGameOver<\/span><span style=\"color: #ABB2BF\"> ? .<\/span><span style=\"color: #E06C75\">red<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">clear<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">frame<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">maxWidth<\/span><span style=\"color: #ABB2BF\">: .infinity)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">top<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Other game UI components (e.g., grid view, score display)...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-15-at-12.27.54.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"732\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-15-at-12.27.54-1024x732.png\" alt=\"\" class=\"wp-image-15921\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-15-at-12.27.54-1024x732.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-15-at-12.27.54-300x215.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-15-at-12.27.54-768x549.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-15-at-12.27.54-420x300.png 420w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-15-at-12.27.54.png 1172w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.48.45.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"200\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.48.45-1024x200.png\" alt=\"\" class=\"wp-image-15917\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.48.45-1024x200.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.48.45-300x59.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.48.45-768x150.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.48.45-500x98.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-20.48.45.png 1332w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412\u043e\u0442 \u043c\u043e\u0439 \u043a\u043e\u0434:<\/span><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(1 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/ Game Over\n  Text(viewModel.isGameOver  ? \"Game Over\": \"____ ____\")\n        .font(.title)\n        .foregroundColor(isGameOver  ? .red : .clear)<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #7F848E; font-style: italic\">\/\/ Game Over<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">  <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(viewModel.<\/span><span style=\"color: #E06C75\">isGameOver<\/span><span style=\"color: #ABB2BF\">  ? <\/span><span style=\"color: #98C379\">&quot;Game Over&quot;<\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;____ ____&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">title<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        .<\/span><span style=\"color: #61AFEF\">foregroundColor<\/span><span style=\"color: #ABB2BF\">(isGameOver  ? .<\/span><span style=\"color: #E06C75\">red<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">clear<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0412\u043e\u0442 \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435:<\/span><\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screen-Recording-2024-10-15-at-14.23.43.gif\"><img loading=\"lazy\" decoding=\"async\" width=\"366\" height=\"734\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screen-Recording-2024-10-15-at-14.23.43.gif\" alt=\"\" class=\"wp-image-15922\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-15-at-14.29.13.png\"><img loading=\"lazy\" decoding=\"async\" width=\"520\" height=\"1024\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-15-at-14.29.13-520x1024.png\" alt=\"\" class=\"wp-image-15923\" style=\"width:283px;height:auto\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-15-at-14.29.13-520x1024.png 520w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-15-at-14.29.13-152x300.png 152w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-15-at-14.29.13.png 690w\" sizes=\"auto, (max-width: 520px) 100vw, 520px\" \/><\/a><\/figure>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\"><strong>\u0428\u0430\u0433 15.&nbsp; \u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0436\u0435\u0441\u0442\u0430 \u0434\u043b\u044f \u0438\u0433\u0440\u044b 2048..<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u0440\u0430\u0441\u0447\u0435\u0442\u0443 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f:<\/span><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.35.16.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"187\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.35.16-1024x187.png\" alt=\"\" class=\"wp-image-15884\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.35.16-1024x187.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.35.16-300x55.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.35.16-768x140.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.35.16-500x91.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.35.16.png 1372w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.36.12.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"543\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.36.12-1024x543.png\" alt=\"\" class=\"wp-image-15885\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.36.12-1024x543.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.36.12-300x159.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.36.12-768x407.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.36.12-500x265.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.36.12.png 1374w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>enum Direction: CaseIterable {\n    case up, down, left, right\n}\n\nclass GameViewModel: ObservableObject {\n    @Published var tiles : [&#91;Tile&#93;] = []\n    @Published var isGameOver = false\n    @Published var score = 0\n    \n    private var aiGame = AIGame()\n    init() {\n        resetGame()\n    }\n\/\/ .  .  .  .  .  .  .  .\n\n\nfunc bestMoveDirection() -> Direction {\n    var bestDirection: Direction = .left \/\/ Default to .left initially\n    var maxScore = 0\n    \n    for direction in Direction.allCases {\n        let (moved, score) = aiGame.oneStepGame(direction: direction, matrix: tiles)\n        if moved &amp;&amp; score > maxScore {\n            maxScore = score\n            bestDirection = direction\n        }\n    }  \n    return bestDirection\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">enum<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">Direction<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">CaseIterable <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E06C75\">up<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">down<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">left<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #E06C75\">right<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">class<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">GameViewModel<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">ObservableObject <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">@Published<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> tiles : [&#91;Tile&#93;] = []<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">@Published<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> isGameOver = <\/span><span style=\"color: #D19A66\">false<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">@Published<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> score = <\/span><span style=\"color: #D19A66\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> aiGame = <\/span><span style=\"color: #61AFEF\">AIGame<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">init<\/span><span style=\"color: #ABB2BF\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">resetGame<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #7F848E; font-style: italic\">\/\/ .  .  .  .  .  .  .  .<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">bestMoveDirection<\/span><span style=\"color: #ABB2BF\">() -&gt; Direction {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> bestDirection: Direction = .<\/span><span style=\"color: #E06C75\">left<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Default to .left initially<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> maxScore = <\/span><span style=\"color: #D19A66\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">for<\/span><span style=\"color: #ABB2BF\"> direction <\/span><span style=\"color: #C678DD\">in<\/span><span style=\"color: #ABB2BF\"> Direction.allCases {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> (moved, score) = aiGame.<\/span><span style=\"color: #61AFEF\">oneStepGame<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">direction<\/span><span style=\"color: #ABB2BF\">: direction, <\/span><span style=\"color: #61AFEF\">matrix<\/span><span style=\"color: #ABB2BF\">: tiles)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> moved &amp;&amp; score &gt; maxScore {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            maxScore = score<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            bestDirection = direction<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> bestDirection<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.42.00.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"689\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.42.00-1024x689.png\" alt=\"\" class=\"wp-image-15887\" style=\"width:607px;height:auto\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.42.00-1024x689.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.42.00-300x202.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.42.00-768x517.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.42.00-446x300.png 446w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.42.00.png 1332w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.42.42.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"225\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.42.42-1024x225.png\" alt=\"\" class=\"wp-image-15886\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.42.42-1024x225.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.42.42-300x66.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.42.42-768x169.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.42.42-500x110.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.42.42.png 1392w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c &nbsp;<code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">bestMoveDirection.<\/mark><\/code><\/span><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"font-size:18px;text-transform:none\"><strong>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f <\/strong><strong>bestMoveDirection<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.45.31.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"223\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.45.31-1024x223.png\" alt=\"\" class=\"wp-image-15888\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.45.31-1024x223.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.45.31-300x65.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.45.31-768x167.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.45.31-500x109.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.45.31.png 1342w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.46.06.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"192\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.46.06-1024x192.png\" alt=\"\" class=\"wp-image-15889\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.46.06-1024x192.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.46.06-300x56.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.46.06-768x144.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.46.06-500x94.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.46.06.png 1390w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.46.33.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"291\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.46.33-1024x291.png\" alt=\"\" class=\"wp-image-15890\" style=\"width:614px;height:auto\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.46.33-1024x291.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.46.33-300x85.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.46.33-768x218.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.46.33-500x142.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-19.46.33.png 1322w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import XCTest\n@testable import YourGameModule\n\nclass GameViewModelTests: XCTestCase {\n\n    func testBestMoveDirection() {\n        \/\/ Example 1: Test a board where moving right is the best move\n        let tiles1: [&#91;Tile&#93;] = [\n            &#91;Tile(value: 2, position: Position(row: 0, col: 0)), \n             Tile(value: 2, position: Position(row: 0, col: 1)), \n             Tile(value: 4, position: Position(row: 0, col: 2)), \n             Tile(value: 8, position: Position(row: 0, col: 3))&#93;,\n\n            &#91;Tile(value: 0, position: Position(row: 1, col: 0)), \n             Tile(value: 4, position: Position(row: 1, col: 1)), \n             Tile(value: 0, position: Position(row: 1, col: 2)), \n             Tile(value: 4, position: Position(row: 1, col: 3))&#93;,\n\n            &#91;Tile(value: 8, position: Position(row: 2, col: 0)), \n             Tile(value: 8, position: Position(row: 2, col: 1)), \n             Tile(value: 8, position: Position(row: 2, col: 2)), \n             Tile(value: 8, position: Position(row: 2, col: 3))&#93;,\n\n            &#91;Tile(value: 16, position: Position(row: 3, col: 0)), \n             Tile(value: 0, position: Position(row: 3, col: 1)), \n             Tile(value: 16, position: Position(row: 3, col: 2)), \n             Tile(value: 16, position: Position(row: 3, col: 3))&#93;\n        ]\n        \n        var viewModel = GameViewModel()\n        viewModel.tiles = tiles1\n        \n        let bestDirection1 = viewModel.bestMoveDirection()\n        XCTAssertEqual(bestDirection1, .right, \n                       \"The best move should be to the right in this case.\")\n        \n        \/\/ Example 2: Test a board where moving down is the best move\n        let tiles2: [&#91;Tile&#93;] = [\n            &#91;Tile(value: 0, position: Position(row: 0, col: 0)), \n             Tile(value: 0, position: Position(row: 0, col: 1)), \n             Tile(value: 4, position: Position(row: 0, col: 2)), \n             Tile(value: 8, position: Position(row: 0, col: 3))&#93;,\n\n            &#91;Tile(value: 4, position: Position(row: 1, col: 0)), \n             Tile(value: 4, position: Position(row: 1, col: 1)), \n             Tile(value: 0, position: Position(row: 1, col: 2)), \n             Tile(value: 0, position: Position(row: 1, col: 3))&#93;,\n\n            &#91;Tile(value: 2, position: Position(row: 2, col: 0)), \n             Tile(value: 2, position: Position(row: 2, col: 1)), \n             Tile(value: 4, position: Position(row: 2, col: 2)), \n             Tile(value: 8, position: Position(row: 2, col: 3))&#93;,\n\n            &#91;Tile(value: 0, position: Position(row: 3, col: 0)), \n             Tile(value: 4, position: Position(row: 3, col: 1)), \n             Tile(value: 0, position: Position(row: 3, col: 2)), \n             Tile(value: 4, position: Position(row: 3, col: 3))&#93;\n        ]\n        \n        viewModel.tiles = tiles2\n        \n        let bestDirection2 = viewModel.bestMoveDirection()\n        XCTAssertEqual(bestDirection2, .down, \n                           \"The best move should be down in this case.\")\n        \n        \/\/ Example 3: Test a board where moving right is the best move\n        let tiles3: [&#91;Tile&#93;] = [\n            &#91;Tile(value: 4, position: Position(row: 0, col: 0)), \n             Tile(value: 2, position: Position(row: 0, col: 1)), \n             Tile(value: 2, position: Position(row: 0, col: 2)), \n             Tile(value: 0, position: Position(row: 0, col: 3))&#93;,\n\n            &#91;Tile(value: 2, position: Position(row: 1, col: 0)), \n             Tile(value: 2, position: Position(row: 1, col: 1)), \n             Tile(value: 0, position: Position(row: 1, col: 2)), \n             Tile(value: 0, position: Position(row: 1, col: 3))&#93;,\n\n            &#91;Tile(value: 2, position: Position(row: 2, col: 0)), \n             Tile(value: 0, position: Position(row: 2, col: 1)), \n             Tile(value: 0, position: Position(row: 2, col: 2)), \n             Tile(value: 0, position: Position(row: 2, col: 3))&#93;,\n\n            &#91;Tile(value: 4, position: Position(row: 3, col: 0)), \n             Tile(value: 4, position: Position(row: 3, col: 1)), \n             Tile(value: 4, position: Position(row: 3, col: 2)), \n             Tile(value: 4, position: Position(row: 3, col: 3))&#93;\n        ]\n        \n        viewModel.tiles = tiles3\n        \n        let bestDirection3 = viewModel.bestMoveDirection()\n        XCTAssertEqual(bestDirection3, .right, \n                      \"The best move should be to the right in this case.\")\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">import<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">XCTest<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">@testable<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">import<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">YourGameModule<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">class<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">GameViewModelTests<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">XCTestCase <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">testBestMoveDirection<\/span><span style=\"color: #ABB2BF\">() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Example 1: Test a board where moving right is the best move<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tiles1: [&#91;Tile&#93;] = [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">16<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">16<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">16<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        ]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> viewModel = <\/span><span style=\"color: #61AFEF\">GameViewModel<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\"> = tiles1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> bestDirection1 = viewModel.<\/span><span style=\"color: #61AFEF\">bestMoveDirection<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(bestDirection1, .<\/span><span style=\"color: #E06C75\">right<\/span><span style=\"color: #ABB2BF\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                       <\/span><span style=\"color: #98C379\">&quot;The best move should be to the right in this case.&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Example 2: Test a board where moving down is the best move<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tiles2: [&#91;Tile&#93;] = [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">8<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        ]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\"> = tiles2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> bestDirection2 = viewModel.<\/span><span style=\"color: #61AFEF\">bestMoveDirection<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(bestDirection2, .down, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                           <\/span><span style=\"color: #98C379\">&quot;The best move should be down in this case.&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Example 3: Test a board where moving right is the best move<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tiles3: [&#91;Tile&#93;] = [<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;,<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            &#91;<\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">1<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)), <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">Tile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">Position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">row<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">col<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\">))&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        ]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\"> = tiles3<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> bestDirection3 = viewModel.<\/span><span style=\"color: #61AFEF\">bestMoveDirection<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">XCTAssertEqual<\/span><span style=\"color: #ABB2BF\">(bestDirection3, .<\/span><span style=\"color: #E06C75\">right<\/span><span style=\"color: #ABB2BF\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                      <\/span><span style=\"color: #98C379\">&quot;The best move should be to the right in this case.&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-20.50.31.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"578\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-20.50.31-1024x578.png\" alt=\"\" class=\"wp-image-15892\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-20.50.31-1024x578.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-20.50.31-300x169.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-20.50.31-768x433.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-20.50.31-500x282.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-20.50.31.png 1386w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-21.02.10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"419\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-21.02.10-1024x419.png\" alt=\"\" class=\"wp-image-15894\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-21.02.10-1024x419.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-21.02.10-300x123.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-21.02.10-768x314.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-21.02.10-500x204.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-13-at-21.02.10.png 1384w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u0442\u0435\u0441\u0442\u0443 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0442\u043e\u0447\u043d\u0438\u0442\u044c \u043a\u043e\u0434 \u0434\u043b\u044f&nbsp; <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">bestMoveDirection()<\/mark><\/code><\/span>:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>func bestMoveDirection() -> Direction {\n        var bestDirection: Direction = .left\n            var maxScore = 0\n            \n            for direction in Direction.allCases {\n                let (moved, score) = aiGame.oneStepGame(direction: direction, \n                                                           matrix: tiles)\n                if moved &amp;&amp; score >= maxScore {\n                    maxScore = score\n                    bestDirection = direction\n                }\n            }\n        \n        return bestDirection\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">bestMoveDirection<\/span><span style=\"color: #ABB2BF\">() -&gt; Direction {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> bestDirection: Direction = .<\/span><span style=\"color: #E06C75\">left<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> maxScore = <\/span><span style=\"color: #D19A66\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">for<\/span><span style=\"color: #ABB2BF\"> direction <\/span><span style=\"color: #C678DD\">in<\/span><span style=\"color: #ABB2BF\"> Direction.allCases {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> (moved, score) = aiGame.<\/span><span style=\"color: #61AFEF\">oneStepGame<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">direction<\/span><span style=\"color: #ABB2BF\">: direction, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                                           <\/span><span style=\"color: #61AFEF\">matrix<\/span><span style=\"color: #ABB2BF\">: tiles)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> moved &amp;&amp; score &gt;= maxScore {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    maxScore = score<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    bestDirection = direction<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> bestDirection<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXfHqPqBs7Pbjc8vxOJLQx1EKpLwtEx1ZmDgJy4OT8KH94nQso0evyQ0mwuaLwd3sw_YXLORU3QH42dLUY_LHXcO1G45KCz9zXGe1_UqUztHN5jSTOW_gTvnzRVJ9wFaC_-zgohwX9xVslAndLUk3io0pZQy?key=w5NuDZeiHz-JjML98dOHbA\" width=\"671\" height=\"499\"><\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" style=\"font-size:17px;text-transform:none\"><strong>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f bestMoveDirection<\/strong><\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-14.09.17.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"417\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-14.09.17-1024x417.png\" alt=\"\" class=\"wp-image-15898\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-14.09.17-1024x417.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-14.09.17-300x122.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-14.09.17-768x313.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-14.09.17-500x204.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-14.09.17.png 1410w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-14.10.03.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"537\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-14.10.03-1024x537.png\" alt=\"\" class=\"wp-image-15899\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-14.10.03-1024x537.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-14.10.03-300x157.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-14.10.03-768x403.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-14.10.03-500x262.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-14.10.03.png 1388w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import SwiftUI\n\nstruct GameView: View {\n    @StateObject private var viewModel = GameViewModel()\n    @State private var isShowingOptimalDirection = false\n\n    let tileSize: CGFloat = 80\n    let padding: CGFloat = 8\n    \n    var body: some View {\n        VStack {\n            Text(\"2048\")\n                .font(.largeTitle)\n                .padding()\n            \n            HStack {\n                \/\/ Score Display\n                Text(\"Score: \\(viewModel.score)\")\n                .monospacedDigit()\n                Spacer()\n            }\n            .font(.title)\n            .foregroundColor(.accentColor)\n            .padding()\n            \n            \/\/  Grid\n            GridView(tiles: viewModel.tiles, tileSize: tileSize, \n                    padding: padding, \n                    optimalDirection: viewModel.bestMoveDirection(), \n                    isShowingOptimalDirection: isShowingOptimalDirection)\n                .gesture(\n                    DragGesture()\n                        .onEnded { value in\n                          withAnimation {\n                                handleSwipe(value: value)\n                          }\n                        }\n                )\n            \n            HStack {\n                \/\/ Reset Button\n                Button(action: {\n                    withAnimation {\n                        viewModel.resetGame()\n                    }\n                }) {\n                    Text(\"Restart\")\n                        .font(.title)\n                        .padding()\n                }\n                \n                Spacer()\n                \n                \/\/ Show Optimal\n                Button(action: {\n                    isShowingOptimalDirection.toggle()\n                }) {\n                    HStack {\n                        Image(systemName:\n                  isShowingOptimalDirection ? \"checkmark.square\" : \"square\")\n                            .resizable()\n                            .frame(width: 34, height: 34)\n                        Text(\"Hint\")\n                    }\n                }\n            }\n            .font(.title)\n            .foregroundColor(.accentColor)\n            .padding()\n        }\n    }\n   \n   \/\/ Handle swipe gesture and trigger game actions\n   private func handleSwipe(value: DragGesture.Value) {. . .}\n }<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">import<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">SwiftUI<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">GameView<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">View <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">@StateObject<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> viewModel = <\/span><span style=\"color: #61AFEF\">GameViewModel<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">@State<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> isShowingOptimalDirection = <\/span><span style=\"color: #D19A66\">false<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tileSize: CGFloat = <\/span><span style=\"color: #D19A66\">80<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> padding: CGFloat = <\/span><span style=\"color: #D19A66\">8<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> body: <\/span><span style=\"color: #C678DD\">some<\/span><span style=\"color: #ABB2BF\"> View {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">VStack<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;2048&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">largeTitle<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">HStack<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Score Display<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Score: <\/span><span style=\"color: #C678DD\">\\(<\/span><span style=\"color: #ABB2BF\">viewModel.<\/span><span style=\"color: #E06C75\">score<\/span><span style=\"color: #C678DD\">)<\/span><span style=\"color: #98C379\">&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">monospacedDigit<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">Spacer<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">title<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">foregroundColor<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">accentColor<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/  Grid<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">GridView<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">tiles<\/span><span style=\"color: #ABB2BF\">: viewModel.<\/span><span style=\"color: #E06C75\">tiles<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">tileSize<\/span><span style=\"color: #ABB2BF\">: tileSize, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">: padding, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #61AFEF\">optimalDirection<\/span><span style=\"color: #ABB2BF\">: viewModel.<\/span><span style=\"color: #61AFEF\">bestMoveDirection<\/span><span style=\"color: #ABB2BF\">(), <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #61AFEF\">isShowingOptimalDirection<\/span><span style=\"color: #ABB2BF\">: isShowingOptimalDirection)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                .<\/span><span style=\"color: #61AFEF\">gesture<\/span><span style=\"color: #ABB2BF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #61AFEF\">DragGesture<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        .<\/span><span style=\"color: #61AFEF\">onEnded<\/span><span style=\"color: #ABB2BF\"> { value <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                          <\/span><span style=\"color: #61AFEF\">withAnimation<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                <\/span><span style=\"color: #61AFEF\">handleSwipe<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">value<\/span><span style=\"color: #ABB2BF\">: value)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                          }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">HStack<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Reset Button<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">Button<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">action<\/span><span style=\"color: #ABB2BF\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #61AFEF\">withAnimation<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        viewModel.<\/span><span style=\"color: #61AFEF\">resetGame<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                }) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Restart&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">title<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">Spacer<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Show Optimal<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">Button<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">action<\/span><span style=\"color: #ABB2BF\">: {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    isShowingOptimalDirection.<\/span><span style=\"color: #61AFEF\">toggle<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                }) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    <\/span><span style=\"color: #61AFEF\">HStack<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        <\/span><span style=\"color: #61AFEF\">Image<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">systemName<\/span><span style=\"color: #ABB2BF\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                  isShowingOptimalDirection ? <\/span><span style=\"color: #98C379\">&quot;checkmark.square&quot;<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">:<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #98C379\">&quot;square&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                            .<\/span><span style=\"color: #61AFEF\">resizable<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                            .<\/span><span style=\"color: #61AFEF\">frame<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">width<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">34<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">height<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">34<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                        <\/span><span style=\"color: #61AFEF\">Text<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #98C379\">&quot;Hint&quot;<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                    }<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                }<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">font<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">title<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">foregroundColor<\/span><span style=\"color: #ABB2BF\">(.<\/span><span style=\"color: #E06C75\">accentColor<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">   <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">   <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Handle swipe gesture and trigger game actions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">   <\/span><span style=\"color: #C678DD\">private<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">handleSwipe<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF; font-style: italic\">value<\/span><span style=\"color: #ABB2BF\">: DragGesture.<\/span><span style=\"color: #E5C07B\">Value<\/span><span style=\"color: #ABB2BF\">) {. . .}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\"> }<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.22.54.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"588\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.22.54-1024x588.png\" alt=\"\" class=\"wp-image-15900\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.22.54-1024x588.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.22.54-300x172.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.22.54-768x441.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.22.54-500x287.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.22.54.png 1358w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);--cbp-line-highlight-color:rgba(134, 167, 228, 0.2);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\n \/\/ Define the GridView to use TileView\nstruct GridView: View {\n    let tiles: [&#91;Tile&#93;]\n    let tileSize : CGFloat\n    let padding : CGFloat\n    \/\/-------------------\n    let optimalDirection: Direction\n    var isShowingOptimalDirection: Bool\n    \n    var body: some View {\n       ZStack {\n           \/\/ Background grid\n           VStack(spacing: padding) {\n               ForEach(0..&lt;4) { row in\n                 HStack(spacing: padding) {\n                   ForEach(0..&lt;4) { col in\n                           RoundedRectangle(cornerRadius:padding)\n                               .fill(Color.colorForTile(0))\n                               .frame(width: tileSize, height: tileSize)\n                       }\n                   }\n               }\n           }\n           .padding()\n           .background(Color.colorBG)\n\n           \/\/ Foreground tiles (only non-zero values)\n           ForEach(tiles.flatMap { $0 }.filter { $0.value != 0 }) { tile in\n                TileView(tile: tile, tileSize: tileSize, padding: padding)\n            }\n           .padding()\n           if isShowingOptimalDirection {\n                   OptimalDirectionArrow(direction: optimalDirection)\n                   .padding()\n           }\n        }\n       .frame(width: 4 * tileSize + 3 * padding, \n             height: 4 * tileSize +  3 * padding) \/\/ Adjust frame size\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Define the GridView to use TileView<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">GridView<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">View <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tiles: [&#91;Tile&#93;]<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tileSize : CGFloat<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> padding : CGFloat<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/-------------------<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> optimalDirection: Direction<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> isShowingOptimalDirection: <\/span><span style=\"color: #E5C07B\">Bool<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> body: <\/span><span style=\"color: #C678DD\">some<\/span><span style=\"color: #ABB2BF\"> View {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">       <\/span><span style=\"color: #61AFEF\">ZStack<\/span><span style=\"color: #ABB2BF\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">           <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Background grid<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">           <\/span><span style=\"color: #61AFEF\">VStack<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">spacing<\/span><span style=\"color: #ABB2BF\">: padding) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               <\/span><span style=\"color: #61AFEF\">ForEach<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">..&lt;<\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">) { row <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                 <\/span><span style=\"color: #61AFEF\">HStack<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">spacing<\/span><span style=\"color: #ABB2BF\">: padding) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                   <\/span><span style=\"color: #61AFEF\">ForEach<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">..&lt;<\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">) { col <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                           <\/span><span style=\"color: #61AFEF\">RoundedRectangle<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">cornerRadius<\/span><span style=\"color: #ABB2BF\">:padding)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                               .<\/span><span style=\"color: #61AFEF\">fill<\/span><span style=\"color: #ABB2BF\">(Color.<\/span><span style=\"color: #61AFEF\">colorForTile<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                               .<\/span><span style=\"color: #61AFEF\">frame<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">width<\/span><span style=\"color: #ABB2BF\">: tileSize, <\/span><span style=\"color: #61AFEF\">height<\/span><span style=\"color: #ABB2BF\">: tileSize)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                       }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                   }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">           }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">           .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">           .<\/span><span style=\"color: #61AFEF\">background<\/span><span style=\"color: #ABB2BF\">(Color.<\/span><span style=\"color: #E06C75\">colorBG<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">           <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Foreground tiles (only non-zero values)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">           <\/span><span style=\"color: #61AFEF\">ForEach<\/span><span style=\"color: #ABB2BF\">(tiles.<\/span><span style=\"color: #56B6C2\">flatMap<\/span><span style=\"color: #ABB2BF\"> { <\/span><span style=\"color: #E5C07B\">$0<\/span><span style=\"color: #ABB2BF\"> }.<\/span><span style=\"color: #56B6C2\">filter<\/span><span style=\"color: #ABB2BF\"> { <\/span><span style=\"color: #E5C07B\">$0<\/span><span style=\"color: #ABB2BF\">.value != <\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\"> }) { tile <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">TileView<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">tile<\/span><span style=\"color: #ABB2BF\">: tile, <\/span><span style=\"color: #61AFEF\">tileSize<\/span><span style=\"color: #ABB2BF\">: tileSize, <\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">: padding)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">           .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">           <\/span><span style=\"color: #C678DD\">if<\/span><span style=\"color: #ABB2BF\"> isShowingOptimalDirection {<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                   <\/span><span style=\"color: #61AFEF\">OptimalDirectionArrow<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">direction<\/span><span style=\"color: #ABB2BF\">: optimalDirection)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">                   .<\/span><span style=\"color: #61AFEF\">padding<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #ABB2BF\">           }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">       .<\/span><span style=\"color: #61AFEF\">frame<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">width<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\"> * tileSize + <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\"> * padding, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">             <\/span><span style=\"color: #61AFEF\">height<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\"> * tileSize +  <\/span><span style=\"color: #D19A66\">3<\/span><span style=\"color: #ABB2BF\"> * padding) <\/span><span style=\"color: #7F848E; font-style: italic\">\/\/ Adjust frame size<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.27.25.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"59\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.27.25-1024x59.png\" alt=\"\" class=\"wp-image-15901\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.27.25-1024x59.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.27.25-300x17.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.27.25-768x44.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.27.25-500x29.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.27.25.png 1396w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>struct OptimalDirectionArrow: View {\n    var direction: Direction\n    \n    var body: some View {\n        GeometryReader { geometry in\n          let arrowLength = min(geometry.size.width, geometry.size.height) \/ 2\n            \n            Path { path in\n                switch direction {\n                case .up:\n                    path.move(to: CGPoint(x: geometry.size.width \/ 2, \n                                          y: geometry.size.height \/ 2))\n                    path.addLine(to: CGPoint(x: geometry.size.width \/ 2, \n                                  y: geometry.size.height \/ 2 - arrowLength))\n                case .down:\n                    path.move(to: CGPoint(x: geometry.size.width \/ 2, \n                                          y: geometry.size.height \/ 2))\n                    path.addLine(to: CGPoint(x: geometry.size.width \/ 2, \n                                  y: geometry.size.height \/ 2 + arrowLength))\n                case .left:\n                    path.move(to: CGPoint(x: geometry.size.width \/ 2, \n                                          y: geometry.size.height \/ 2))\n                    path.addLine(to: CGPoint(\n                               x: geometry.size.width \/ 2 - arrowLength, \n                              y: geometry.size.height \/ 2))\n                case .right:\n                    path.move(to: CGPoint(x: geometry.size.width \/ 2, \n                                          y: geometry.size.height \/ 2))\n                    path.addLine(to: CGPoint(\n                                  x: geometry.size.width \/ 2 + arrowLength, \n                                  y: geometry.size.height \/ 2))\n                }\n            }\n            .stroke(Color.red, lineWidth: 4)\n            .overlay(\n                ArrowheadShape(direction: direction)\n                        .fill(Color.red)\n                        .frame(width: 20, height: 20)\n                        .rotationEffect( rotationAngle(for: direction))\n                        .position(arrowheadPosition(in: geometry.size, \n                               direction: direction, length: arrowLength))\n                        .transaction { transaction in\n                            transaction.animation = nil\n                        }\n            )\n        }\n    }\n    \n    func arrowheadPosition(in size: CGSize, direction: Direction, length: CGFloat) -> CGPoint {\n        switch direction {\n        case .up:\n            return CGPoint(x: size.width \/ 2, y: size.height \/ 2 - length)\n        case .down:\n            return CGPoint(x: size.width \/ 2, y: size.height \/ 2 + length)\n        case .left:\n            return CGPoint(x: size.width \/ 2 - length, y: size.height \/ 2)\n        case .right:\n            return CGPoint(x: size.width \/ 2 + length, y: size.height \/ 2)\n        }\n    }\n    \n    func rotationAngle(for direction: Direction) -> Angle {\n           switch direction {\n           case .up:\n               return Angle.degrees(0)\n           case .down:\n               return Angle.degrees(180)\n           case .left:\n               return Angle.degrees(-90)\n           case .right:\n               return Angle.degrees(90)\n           }\n       }\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">OptimalDirectionArrow<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">View <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> direction: Direction<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> body: <\/span><span style=\"color: #C678DD\">some<\/span><span style=\"color: #ABB2BF\"> View {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #61AFEF\">GeometryReader<\/span><span style=\"color: #ABB2BF\"> { geometry <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">          <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> arrowLength = <\/span><span style=\"color: #56B6C2\">min<\/span><span style=\"color: #ABB2BF\">(geometry.size.<\/span><span style=\"color: #E06C75\">width<\/span><span style=\"color: #ABB2BF\">, geometry.size.<\/span><span style=\"color: #E06C75\">height<\/span><span style=\"color: #ABB2BF\">) \/ <\/span><span style=\"color: #D19A66\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #61AFEF\">Path<\/span><span style=\"color: #ABB2BF\"> { path <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">switch<\/span><span style=\"color: #ABB2BF\"> direction {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .up<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    path.<\/span><span style=\"color: #56B6C2\">move<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">to<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">CGPoint<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: geometry.size.<\/span><span style=\"color: #E06C75\">width<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                          <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: geometry.size.<\/span><span style=\"color: #E06C75\">height<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    path.<\/span><span style=\"color: #61AFEF\">addLine<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">to<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">CGPoint<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: geometry.size.<\/span><span style=\"color: #E06C75\">width<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                  <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: geometry.size.<\/span><span style=\"color: #E06C75\">height<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\"> - arrowLength))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .down<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    path.<\/span><span style=\"color: #56B6C2\">move<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">to<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">CGPoint<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: geometry.size.<\/span><span style=\"color: #E06C75\">width<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                          <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: geometry.size.<\/span><span style=\"color: #E06C75\">height<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    path.<\/span><span style=\"color: #61AFEF\">addLine<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">to<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">CGPoint<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: geometry.size.<\/span><span style=\"color: #E06C75\">width<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                  <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: geometry.size.<\/span><span style=\"color: #E06C75\">height<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\"> + arrowLength))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">left<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    path.<\/span><span style=\"color: #56B6C2\">move<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">to<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">CGPoint<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: geometry.size.<\/span><span style=\"color: #E06C75\">width<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                          <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: geometry.size.<\/span><span style=\"color: #E06C75\">height<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    path.<\/span><span style=\"color: #61AFEF\">addLine<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">to<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">CGPoint<\/span><span style=\"color: #ABB2BF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                               <\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: geometry.size.<\/span><span style=\"color: #E06C75\">width<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\"> - arrowLength, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                              <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: geometry.size.<\/span><span style=\"color: #E06C75\">height<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">right<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    path.<\/span><span style=\"color: #56B6C2\">move<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">to<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">CGPoint<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: geometry.size.<\/span><span style=\"color: #E06C75\">width<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                          <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: geometry.size.<\/span><span style=\"color: #E06C75\">height<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                    path.<\/span><span style=\"color: #61AFEF\">addLine<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">to<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #61AFEF\">CGPoint<\/span><span style=\"color: #ABB2BF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                  <\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: geometry.size.<\/span><span style=\"color: #E06C75\">width<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\"> + arrowLength, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                                  <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: geometry.size.<\/span><span style=\"color: #E06C75\">height<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">stroke<\/span><span style=\"color: #ABB2BF\">(Color.<\/span><span style=\"color: #E06C75\">red<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">lineWidth<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">4<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            .<\/span><span style=\"color: #61AFEF\">overlay<\/span><span style=\"color: #ABB2BF\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                <\/span><span style=\"color: #61AFEF\">ArrowheadShape<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">direction<\/span><span style=\"color: #ABB2BF\">: direction)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        .<\/span><span style=\"color: #61AFEF\">fill<\/span><span style=\"color: #ABB2BF\">(Color.<\/span><span style=\"color: #E06C75\">red<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        .<\/span><span style=\"color: #61AFEF\">frame<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">width<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">20<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">height<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #D19A66\">20<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        .<\/span><span style=\"color: #61AFEF\">rotationEffect<\/span><span style=\"color: #ABB2BF\">( <\/span><span style=\"color: #61AFEF\">rotationAngle<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">for<\/span><span style=\"color: #ABB2BF\">: direction))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        .<\/span><span style=\"color: #61AFEF\">position<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">arrowheadPosition<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">in<\/span><span style=\"color: #ABB2BF\">: geometry.size, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                               <\/span><span style=\"color: #61AFEF\">direction<\/span><span style=\"color: #ABB2BF\">: direction, <\/span><span style=\"color: #61AFEF\">length<\/span><span style=\"color: #ABB2BF\">: arrowLength))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        .<\/span><span style=\"color: #61AFEF\">transaction<\/span><span style=\"color: #ABB2BF\"> { transaction <\/span><span style=\"color: #C678DD\">in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                            transaction.<\/span><span style=\"color: #E06C75\">animation<\/span><span style=\"color: #ABB2BF\"> = <\/span><span style=\"color: #D19A66\">nil<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">                        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">arrowheadPosition<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">in<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">size<\/span><span style=\"color: #ABB2BF\">: CGSize, <\/span><span style=\"color: #61AFEF; font-style: italic\">direction<\/span><span style=\"color: #ABB2BF\">: Direction, <\/span><span style=\"color: #61AFEF; font-style: italic\">length<\/span><span style=\"color: #ABB2BF\">: CGFloat) -&gt; CGPoint {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">switch<\/span><span style=\"color: #ABB2BF\"> direction {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .up<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">CGPoint<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: size.<\/span><span style=\"color: #E06C75\">width<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: size.<\/span><span style=\"color: #E06C75\">height<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\"> - length)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .down<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">CGPoint<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: size.<\/span><span style=\"color: #E06C75\">width<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: size.<\/span><span style=\"color: #E06C75\">height<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\"> + length)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">left<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">CGPoint<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: size.<\/span><span style=\"color: #E06C75\">width<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\"> - length, <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: size.<\/span><span style=\"color: #E06C75\">height<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">right<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">            <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">CGPoint<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: size.<\/span><span style=\"color: #E06C75\">width<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\"> + length, <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: size.<\/span><span style=\"color: #E06C75\">height<\/span><span style=\"color: #ABB2BF\"> \/ <\/span><span style=\"color: #D19A66\">2<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">rotationAngle<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">for<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">direction<\/span><span style=\"color: #ABB2BF\">: Direction) -&gt; Angle {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">           <\/span><span style=\"color: #C678DD\">switch<\/span><span style=\"color: #ABB2BF\"> direction {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">           <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .up<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Angle.<\/span><span style=\"color: #61AFEF\">degrees<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #D19A66\">0<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">           <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .down<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Angle.<\/span><span style=\"color: #61AFEF\">degrees<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #D19A66\">180<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">           <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">left<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Angle.<\/span><span style=\"color: #61AFEF\">degrees<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #D19A66\">-90<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">           <\/span><span style=\"color: #C678DD\">case<\/span><span style=\"color: #ABB2BF\"> .<\/span><span style=\"color: #E06C75\">right<\/span><span style=\"color: #C678DD\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">               <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> Angle.<\/span><span style=\"color: #61AFEF\">degrees<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #D19A66\">90<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">           }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">       }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.51.19.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"254\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.51.19-1024x254.png\" alt=\"\" class=\"wp-image-15902\" style=\"width:641px;height:auto\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.51.19-1024x254.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.51.19-300x74.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.51.19-768x190.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.51.19-500x124.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.51.19.png 1404w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.75rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#abb2bf;--cbp-line-number-width:calc(2 * 0.6 * .75rem);line-height:1rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#282c34\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#abb2bf;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>struct ArrowheadShape: Shape {\n    var direction: Direction\n    \n    func path(in rect: CGRect) -> Path {\n        var path = Path()\n        let tip = CGPoint(x: rect.midX, y: rect.minY)\n        let left = CGPoint(x: rect.minX, y: rect.maxY)\n        let right = CGPoint(x: rect.maxX, y: rect.maxY)\n        \n        path.move(to: tip)\n        path.addLine(to: left)\n        path.addLine(to: right)\n        path.closeSubpath()\n        return path\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki one-dark-pro\" style=\"background-color: #282c34\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C678DD\">struct<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #E5C07B\">ArrowheadShape<\/span><span style=\"color: #ABB2BF\">: <\/span><span style=\"color: #E5C07B\">Shape <\/span><span style=\"color: #ABB2BF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> direction: Direction<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    <\/span><span style=\"color: #C678DD\">func<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #61AFEF\">path<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">in<\/span><span style=\"color: #ABB2BF\"> <\/span><span style=\"color: #ABB2BF; font-style: italic\">rect<\/span><span style=\"color: #ABB2BF\">: CGRect) -&gt; Path {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">var<\/span><span style=\"color: #ABB2BF\"> path = <\/span><span style=\"color: #61AFEF\">Path<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> tip = <\/span><span style=\"color: #61AFEF\">CGPoint<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: rect.<\/span><span style=\"color: #E06C75\">midX<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: rect.<\/span><span style=\"color: #E06C75\">minY<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> left = <\/span><span style=\"color: #61AFEF\">CGPoint<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: rect.<\/span><span style=\"color: #E06C75\">minX<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: rect.<\/span><span style=\"color: #E06C75\">maxY<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">let<\/span><span style=\"color: #ABB2BF\"> right = <\/span><span style=\"color: #61AFEF\">CGPoint<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">x<\/span><span style=\"color: #ABB2BF\">: rect.<\/span><span style=\"color: #E06C75\">maxX<\/span><span style=\"color: #ABB2BF\">, <\/span><span style=\"color: #61AFEF\">y<\/span><span style=\"color: #ABB2BF\">: rect.<\/span><span style=\"color: #E06C75\">maxY<\/span><span style=\"color: #ABB2BF\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        path.<\/span><span style=\"color: #56B6C2\">move<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">to<\/span><span style=\"color: #ABB2BF\">: tip)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        path.<\/span><span style=\"color: #61AFEF\">addLine<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">to<\/span><span style=\"color: #ABB2BF\">: left)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        path.<\/span><span style=\"color: #61AFEF\">addLine<\/span><span style=\"color: #ABB2BF\">(<\/span><span style=\"color: #61AFEF\">to<\/span><span style=\"color: #ABB2BF\">: right)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        path.<\/span><span style=\"color: #61AFEF\">closeSubpath<\/span><span style=\"color: #ABB2BF\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">        <\/span><span style=\"color: #C678DD\">return<\/span><span style=\"color: #ABB2BF\"> path<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ABB2BF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.52.29.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"282\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.52.29-1024x282.png\" alt=\"\" class=\"wp-image-15903\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.52.29-1024x282.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.52.29-300x82.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.52.29-768x211.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.52.29-500x137.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.52.29.png 1382w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.52.57.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"393\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.52.57-1024x393.png\" alt=\"\" class=\"wp-image-15904\" srcset=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.52.57-1024x393.png 1024w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.52.57-300x115.png 300w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.52.57-768x295.png 768w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.52.57-500x192.png 500w, https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-14-at-17.52.57.png 1376w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXeieo9-k6xk5-N9dfmUii4IxZshyTdw4aeSnbchRsqcElW_8ByF_IJYMfSX9b4TulrDqrKzZVyW1F_aG9Bc89FDgcxMCgya74_KIMfQ53gPdhefX1sYmXigduIzQ8Jt-sfE34aYihi23qRn7nIVT8oiXkXj?key=w5NuDZeiHz-JjML98dOHbA\" width=\"603\" height=\"281\"><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screen-Recording-2024-10-14-at-19.20.33.gif\"><img loading=\"lazy\" decoding=\"async\" width=\"368\" height=\"730\" src=\"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screen-Recording-2024-10-14-at-19.20.33.gif\" alt=\"\" class=\"wp-image-15907\"\/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0438\u0433\u0440\u044b 2048 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043b\u0438\u0442\u043e\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e&nbsp; <code><mark style=\"background-color:#e2e2e2\" class=\"has-inline-color\">bestMoveDirection(),<\/mark><\/code> \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0443\u0447\u043d\u043e\u0439 <strong>swipe<\/strong> \u0436\u0435\u0441\u0442 \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043b\u0438\u0442\u043e\u043a \u0432 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438. \u0438 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u043e\u0434\u0430 AI \u0432 \u0438\u0433\u0440\u0435 2048.&nbsp;<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\">\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u043e\u0441\u0442\u0435 <span style=\"font-weight: 400;\"><a href=\"https:\/\/bestkora.com\/IosDeveloper\/ios-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435-\u0438\u0433\u0440\u044b-2048-\u0432-swiftui-\u0441-chatgpt-\u0447\u0430\u0441\u0442\u044c-3-\u0438\u0438-ai\/\" title=\"&quot;iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1. \u041b\u043e\u0433\u0438\u043a\u0430 \u0438\u0433\u0440\u044b&quot;\">&#171;iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 3. \u0418\u0418 (AI)&#187;<\/a> \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 <strong>Expectimax<\/strong> \u0438 <strong>Monte Carlo<\/strong> \u0432 \u0438\u0433\u0440\u0435 2048<\/span> \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"font-weight: 400;\"><br><\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043f\u043e\u0441\u0442\u0435 &#171;iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1. \u041b\u043e\u0433\u0438\u043a\u0430 \u0438\u0433\u0440\u044b&#187; \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0438\u0433\u0440\u044b 2048 c \u043f\u043e\u043c\u043e\u0449\u044c\u044e ChatGPT. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043f\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (UI)I \u0438\u0433\u0440\u044b 2048 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ChatGPT \u0438 &hellip; <a href=\"https:\/\/bestkora.com\/IosDeveloper\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\/\">\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u0435\u0435 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[107,14,54,109,108],"tags":[112,113,31,56,110],"class_list":["post-15788","post","type-post","status-publish","format-standard","hentry","category-chatgpt","category-swift","category-swiftui","category-109","category-108","tag-expectimax","tag-monte-carlo","tag-swift","tag-swiftui","tag-110"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.8 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043f\u043e\u0441\u0442\u0435 &quot;iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1. \u041b\u043e\u0433\u0438\u043a\u0430 \u0438\u0433\u0440\u044b&quot; \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0438\u0433\u0440\u044b 2048 c \u043f\u043e\u043c\u043e\u0449\u044c\u044e ChatGPT. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043f\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (UI)I \u0438\u0433\u0440\u044b 2048 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ChatGPT \u0438 \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0443\u0434\u0435\u043b\u0438\u043c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043b\u0438\u0442\u043e\u043a \u043d\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0434\u043e\u0441\u043a\u0435. \u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 Github. \u0412\" \/>\n\t<meta name=\"robots\" content=\"max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n\t<meta name=\"author\" content=\"tatiana.kornilova@gmail.com\"\/>\n\t<meta name=\"keywords\" content=\"ai,game2048,chatgpt 4-o,swiftui,expectimax,monte carlo,\u0438\u0438\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/bestkora.com\/IosDeveloper\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.8\" \/>\n\t\t<meta property=\"og:locale\" content=\"ru_RU\" \/>\n\t\t<meta property=\"og:site_name\" content=\"\u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. | \u0420\u0443\u0441\u0441\u043a\u0438\u0439 \u043d\u0435\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u043f\u0435\u043a\u0442 \u043b\u0435\u043a\u0446\u0438\u0439 \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u043e\u0433\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 &quot; \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439&quot; 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 , 2023,  2024,  2025  \u0438 2026 \u0433\u0433., \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0435\u043c\u044b\u0439 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u0439 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u0435\u0439 \u043a\u0443\u0440\u0441\u043e\u0432 \u043a \u043d\u043e\u0432\u044b\u043c \u0432\u0435\u0440\u0441\u0438\u044f\u043c Swift, Objective-C \u0438 iOS.\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI. | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043f\u043e\u0441\u0442\u0435 &quot;iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1. \u041b\u043e\u0433\u0438\u043a\u0430 \u0438\u0433\u0440\u044b&quot; \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0438\u0433\u0440\u044b 2048 c \u043f\u043e\u043c\u043e\u0449\u044c\u044e ChatGPT. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043f\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (UI)I \u0438\u0433\u0440\u044b 2048 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ChatGPT \u0438 \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0443\u0434\u0435\u043b\u0438\u043c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043b\u0438\u0442\u043e\u043a \u043d\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0434\u043e\u0441\u043a\u0435. \u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 Github. \u0412\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/bestkora.com\/IosDeveloper\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2024-10-11T13:18:41+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2025-09-11T14:09:47+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI. | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.\" \/>\n\t\t<meta name=\"twitter:description\" content=\"\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043f\u043e\u0441\u0442\u0435 &quot;iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1. \u041b\u043e\u0433\u0438\u043a\u0430 \u0438\u0433\u0440\u044b&quot; \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0438\u0433\u0440\u044b 2048 c \u043f\u043e\u043c\u043e\u0449\u044c\u044e ChatGPT. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043f\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (UI)I \u0438\u0433\u0440\u044b 2048 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ChatGPT \u0438 \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0443\u0434\u0435\u043b\u0438\u043c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043b\u0438\u0442\u043e\u043a \u043d\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0434\u043e\u0441\u043a\u0435. \u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 Github. \u0412\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\\\/#article\",\"name\":\"iOS \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u044f \\u0438\\u0433\\u0440\\u044b 2048 \\u0432 SwiftUI \\u0441 ChatGPT 4-o. \\u0427\\u0430\\u0441\\u0442\\u044c 2. \\u0410\\u043d\\u0438\\u043c\\u0430\\u0446\\u0438\\u044f \\u0438 UI. | \\u041e\\u0431\\u0443\\u0447\\u0430\\u044e\\u0449\\u0438\\u0439 \\u043a\\u0443\\u0440\\u0441 \\u043f\\u043e \\u0440\\u0430\\u0437\\u0440\\u0430\\u0431\\u043e\\u0442\\u043a\\u0435 iOS+Swift \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u0439.\",\"headline\":\"iOS \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u044f \\u0438\\u0433\\u0440\\u044b 2048 \\u0432 SwiftUI\\u00a0 \\u0441 ChatGPT 4-o. \\u0427\\u0430\\u0441\\u0442\\u044c 2. \\u0410\\u043d\\u0438\\u043c\\u0430\\u0446\\u0438\\u044f \\u0438 UI.\",\"author\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/author\\\/tatiana-lornilovagmail-com\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/#person\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/Screenshot-2024-10-11-at-16.28.08.png\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\\\/#articleImage\",\"width\":1376,\"height\":270},\"datePublished\":\"2024-10-11T13:18:41+00:00\",\"dateModified\":\"2025-09-11T14:09:47+00:00\",\"inLanguage\":\"ru-RU\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\\\/#webpage\"},\"articleSection\":\"ChatGPT, Swift, SwiftUI, \\u0438\\u0433\\u0440\\u0430 2048, \\u0418\\u0418 \\u0430\\u043b\\u0433\\u043e\\u0440\\u0438\\u0442\\u043c\\u044b, Expectimax, Monte Carlo, Swift, SwiftUI, \\u0418\\u0418 2048\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/category\\\/swift\\\/#listItem\",\"name\":\"Swift\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/category\\\/swift\\\/#listItem\",\"position\":2,\"name\":\"Swift\",\"item\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/category\\\/swift\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\\\/#listItem\",\"name\":\"iOS \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u044f \\u0438\\u0433\\u0440\\u044b 2048 \\u0432 SwiftUI\\u00a0 \\u0441 ChatGPT 4-o. \\u0427\\u0430\\u0441\\u0442\\u044c 2. \\u0410\\u043d\\u0438\\u043c\\u0430\\u0446\\u0438\\u044f \\u0438 UI.\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\\\/#listItem\",\"position\":3,\"name\":\"iOS \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u044f \\u0438\\u0433\\u0440\\u044b 2048 \\u0432 SwiftUI\\u00a0 \\u0441 ChatGPT 4-o. \\u0427\\u0430\\u0441\\u0442\\u044c 2. \\u0410\\u043d\\u0438\\u043c\\u0430\\u0446\\u0438\\u044f \\u0438 UI.\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/category\\\/swift\\\/#listItem\",\"name\":\"Swift\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/#person\",\"name\":\"tatiana.kornilova@gmail.com\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\\\/#personImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/33ccc19059014d8a7849c3621afa2b66a5f3e50ac7291c91c30ff35df5747628?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"tatiana.kornilova@gmail.com\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/author\\\/tatiana-lornilovagmail-com\\\/#author\",\"url\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/author\\\/tatiana-lornilovagmail-com\\\/\",\"name\":\"tatiana.kornilova@gmail.com\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/33ccc19059014d8a7849c3621afa2b66a5f3e50ac7291c91c30ff35df5747628?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"tatiana.kornilova@gmail.com\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\\\/#webpage\",\"url\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\\\/\",\"name\":\"iOS \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u044f \\u0438\\u0433\\u0440\\u044b 2048 \\u0432 SwiftUI \\u0441 ChatGPT 4-o. \\u0427\\u0430\\u0441\\u0442\\u044c 2. \\u0410\\u043d\\u0438\\u043c\\u0430\\u0446\\u0438\\u044f \\u0438 UI. | \\u041e\\u0431\\u0443\\u0447\\u0430\\u044e\\u0449\\u0438\\u0439 \\u043a\\u0443\\u0440\\u0441 \\u043f\\u043e \\u0440\\u0430\\u0437\\u0440\\u0430\\u0431\\u043e\\u0442\\u043a\\u0435 iOS+Swift \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u0439.\",\"description\":\"\\u0412 \\u043f\\u0440\\u043e\\u0448\\u043b\\u043e\\u043c \\u043f\\u043e\\u0441\\u0442\\u0435 \\\"iOS \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u0435 \\u0438\\u0433\\u0440\\u044b 2048 \\u0432 SwiftUI \\u0441 ChatGPT 4-o. \\u0427\\u0430\\u0441\\u0442\\u044c 1. \\u041b\\u043e\\u0433\\u0438\\u043a\\u0430 \\u0438\\u0433\\u0440\\u044b\\\" \\u043f\\u043e\\u043a\\u0430\\u0437\\u0430\\u043d\\u043e, \\u043a\\u0430\\u043a \\u0440\\u0435\\u0430\\u043b\\u0438\\u0437\\u043e\\u0432\\u0430\\u0442\\u044c \\u043b\\u043e\\u0433\\u0438\\u043a\\u0443 \\u0438\\u0433\\u0440\\u044b 2048 c \\u043f\\u043e\\u043c\\u043e\\u0449\\u044c\\u044e ChatGPT. \\u0412 \\u044d\\u0442\\u043e\\u043c \\u043f\\u043e\\u0441\\u0442\\u0435 \\u043c\\u044b \\u0440\\u0430\\u0441\\u0441\\u043c\\u043e\\u0442\\u0440\\u0438\\u043c \\u043f\\u0440\\u043e\\u0435\\u043a\\u0442\\u0438\\u0440\\u043e\\u0432\\u0430\\u043d\\u0438\\u0435 \\u043f\\u043e\\u043b\\u044c\\u0437\\u043e\\u0432\\u0430\\u0442\\u0435\\u043f\\u044c\\u0441\\u043a\\u043e\\u0433\\u043e \\u0438\\u043d\\u0442\\u0435\\u0440\\u0444\\u0435\\u0439\\u0441\\u0430 (UI)I \\u0438\\u0433\\u0440\\u044b 2048 \\u0441 \\u043f\\u043e\\u043c\\u043e\\u0449\\u044c\\u044e ChatGPT \\u0438 \\u043e\\u0441\\u043e\\u0431\\u043e\\u0435 \\u0432\\u043d\\u0438\\u043c\\u0430\\u043d\\u0438\\u0435 \\u0443\\u0434\\u0435\\u043b\\u0438\\u043c \\u0430\\u043d\\u0438\\u043c\\u0430\\u0446\\u0438\\u0438 \\u043f\\u0435\\u0440\\u0435\\u043c\\u0435\\u0449\\u0435\\u043d\\u0438\\u044f \\u043f\\u043b\\u0438\\u0442\\u043e\\u043a \\u043d\\u0430 \\u0438\\u0433\\u0440\\u043e\\u0432\\u043e\\u0439 \\u0434\\u043e\\u0441\\u043a\\u0435. \\u041a\\u043e\\u0434 \\u043d\\u0430\\u0445\\u043e\\u0434\\u0438\\u0442\\u0441\\u044f \\u043d\\u0430 Github. \\u0412\",\"inLanguage\":\"ru-RU\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/author\\\/tatiana-lornilovagmail-com\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/author\\\/tatiana-lornilovagmail-com\\\/#author\"},\"datePublished\":\"2024-10-11T13:18:41+00:00\",\"dateModified\":\"2025-09-11T14:09:47+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/#website\",\"url\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/\",\"name\":\"\\u041e\\u0431\\u0443\\u0447\\u0430\\u044e\\u0449\\u0438\\u0439 \\u043a\\u0443\\u0440\\u0441 \\u043f\\u043e \\u0440\\u0430\\u0437\\u0440\\u0430\\u0431\\u043e\\u0442\\u043a\\u0435 iOS+Swift \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u0439.\",\"description\":\"\\u0420\\u0443\\u0441\\u0441\\u043a\\u0438\\u0439 \\u043d\\u0435\\u0430\\u0432\\u0442\\u043e\\u0440\\u0438\\u0437\\u043e\\u0432\\u0430\\u043d\\u043d\\u044b\\u0439 \\u043a\\u043e\\u043d\\u0441\\u043f\\u0435\\u043a\\u0442 \\u043b\\u0435\\u043a\\u0446\\u0438\\u0439 \\u0421\\u0442\\u044d\\u043d\\u0444\\u043e\\u0440\\u0434\\u0441\\u043a\\u043e\\u0433\\u043e \\u0443\\u043d\\u0438\\u0432\\u0435\\u0440\\u0441\\u0438\\u0442\\u0435\\u0442\\u0430 \\\" \\u0420\\u0430\\u0437\\u0440\\u0430\\u0431\\u043e\\u0442\\u043a\\u0430 iOS \\u043f\\u0440\\u0438\\u043b\\u043e\\u0436\\u0435\\u043d\\u0438\\u0439\\\" 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 , 2023,  2024,  2025  \\u0438 2026 \\u0433\\u0433., \\u0441\\u043e\\u043f\\u0440\\u043e\\u0432\\u043e\\u0436\\u0434\\u0430\\u0435\\u043c\\u044b\\u0439 \\u0440\\u0435\\u0448\\u0435\\u043d\\u0438\\u044f\\u043c\\u0438 \\u0437\\u0430\\u0434\\u0430\\u043d\\u0438\\u0439 \\u0438 \\u0434\\u043e\\u043f\\u043e\\u043b\\u043d\\u0435\\u043d\\u0438\\u044f\\u043c\\u0438, \\u0441\\u0432\\u044f\\u0437\\u0430\\u043d\\u043d\\u044b\\u043c\\u0438 \\u0441 \\u0430\\u0434\\u0430\\u043f\\u0442\\u0430\\u0446\\u0438\\u0435\\u0439 \\u043a\\u0443\\u0440\\u0441\\u043e\\u0432 \\u043a \\u043d\\u043e\\u0432\\u044b\\u043c \\u0432\\u0435\\u0440\\u0441\\u0438\\u044f\\u043c Swift, Objective-C \\u0438 iOS.\",\"inLanguage\":\"ru-RU\",\"publisher\":{\"@id\":\"https:\\\/\\\/bestkora.com\\\/IosDeveloper\\\/#person\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI. | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.","description":"\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \"iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1. \u041b\u043e\u0433\u0438\u043a\u0430 \u0438\u0433\u0440\u044b\" \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0438\u0433\u0440\u044b 2048 c \u043f\u043e\u043c\u043e\u0449\u044c\u044e ChatGPT. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043f\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (UI)I \u0438\u0433\u0440\u044b 2048 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ChatGPT \u0438 \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0443\u0434\u0435\u043b\u0438\u043c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043b\u0438\u0442\u043e\u043a \u043d\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0434\u043e\u0441\u043a\u0435. \u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 Github. \u0412","canonical_url":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\/","robots":"max-snippet:-1, max-image-preview:large, max-video-preview:-1","keywords":"ai,game2048,chatgpt 4-o,swiftui,expectimax,monte carlo,\u0438\u0438","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\/#article","name":"iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI. | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.","headline":"iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI\u00a0 \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI.","author":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/author\/tatiana-lornilovagmail-com\/#author"},"publisher":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/#person"},"image":{"@type":"ImageObject","url":"https:\/\/bestkora.com\/IosDeveloper\/wp-content\/uploads\/2024\/10\/Screenshot-2024-10-11-at-16.28.08.png","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\/#articleImage","width":1376,"height":270},"datePublished":"2024-10-11T13:18:41+00:00","dateModified":"2025-09-11T14:09:47+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\/#webpage"},"isPartOf":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\/#webpage"},"articleSection":"ChatGPT, Swift, SwiftUI, \u0438\u0433\u0440\u0430 2048, \u0418\u0418 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, Expectimax, Monte Carlo, Swift, SwiftUI, \u0418\u0418 2048"},{"@type":"BreadcrumbList","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper#listItem","position":1,"name":"Home","item":"https:\/\/bestkora.com\/IosDeveloper","nextItem":{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper\/category\/swift\/#listItem","name":"Swift"}},{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper\/category\/swift\/#listItem","position":2,"name":"Swift","item":"https:\/\/bestkora.com\/IosDeveloper\/category\/swift\/","nextItem":{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\/#listItem","name":"iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI\u00a0 \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI."},"previousItem":{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\/#listItem","position":3,"name":"iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI\u00a0 \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI.","previousItem":{"@type":"ListItem","@id":"https:\/\/bestkora.com\/IosDeveloper\/category\/swift\/#listItem","name":"Swift"}}]},{"@type":"Person","@id":"https:\/\/bestkora.com\/IosDeveloper\/#person","name":"tatiana.kornilova@gmail.com","image":{"@type":"ImageObject","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\/#personImage","url":"https:\/\/secure.gravatar.com\/avatar\/33ccc19059014d8a7849c3621afa2b66a5f3e50ac7291c91c30ff35df5747628?s=96&d=mm&r=g","width":96,"height":96,"caption":"tatiana.kornilova@gmail.com"}},{"@type":"Person","@id":"https:\/\/bestkora.com\/IosDeveloper\/author\/tatiana-lornilovagmail-com\/#author","url":"https:\/\/bestkora.com\/IosDeveloper\/author\/tatiana-lornilovagmail-com\/","name":"tatiana.kornilova@gmail.com","image":{"@type":"ImageObject","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/33ccc19059014d8a7849c3621afa2b66a5f3e50ac7291c91c30ff35df5747628?s=96&d=mm&r=g","width":96,"height":96,"caption":"tatiana.kornilova@gmail.com"}},{"@type":"WebPage","@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\/#webpage","url":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\/","name":"iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI. | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.","description":"\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \"iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1. \u041b\u043e\u0433\u0438\u043a\u0430 \u0438\u0433\u0440\u044b\" \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0438\u0433\u0440\u044b 2048 c \u043f\u043e\u043c\u043e\u0449\u044c\u044e ChatGPT. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043f\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (UI)I \u0438\u0433\u0440\u044b 2048 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ChatGPT \u0438 \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0443\u0434\u0435\u043b\u0438\u043c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043b\u0438\u0442\u043e\u043a \u043d\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0434\u043e\u0441\u043a\u0435. \u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 Github. \u0412","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/#website"},"breadcrumb":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\/#breadcrumblist"},"author":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/author\/tatiana-lornilovagmail-com\/#author"},"creator":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/author\/tatiana-lornilovagmail-com\/#author"},"datePublished":"2024-10-11T13:18:41+00:00","dateModified":"2025-09-11T14:09:47+00:00"},{"@type":"WebSite","@id":"https:\/\/bestkora.com\/IosDeveloper\/#website","url":"https:\/\/bestkora.com\/IosDeveloper\/","name":"\u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.","description":"\u0420\u0443\u0441\u0441\u043a\u0438\u0439 \u043d\u0435\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u043f\u0435\u043a\u0442 \u043b\u0435\u043a\u0446\u0438\u0439 \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u043e\u0433\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 \" \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439\" 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 , 2023,  2024,  2025  \u0438 2026 \u0433\u0433., \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0435\u043c\u044b\u0439 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u0439 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u0435\u0439 \u043a\u0443\u0440\u0441\u043e\u0432 \u043a \u043d\u043e\u0432\u044b\u043c \u0432\u0435\u0440\u0441\u0438\u044f\u043c Swift, Objective-C \u0438 iOS.","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/bestkora.com\/IosDeveloper\/#person"}}]},"og:locale":"ru_RU","og:site_name":"\u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. | \u0420\u0443\u0441\u0441\u043a\u0438\u0439 \u043d\u0435\u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u043f\u0435\u043a\u0442 \u043b\u0435\u043a\u0446\u0438\u0439 \u0421\u0442\u044d\u043d\u0444\u043e\u0440\u0434\u0441\u043a\u043e\u0433\u043e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0438\u0442\u0435\u0442\u0430 &quot; \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439&quot; 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 , 2023,  2024,  2025  \u0438 2026 \u0433\u0433., \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0435\u043c\u044b\u0439 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u0439 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0430\u0434\u0430\u043f\u0442\u0430\u0446\u0438\u0435\u0439 \u043a\u0443\u0440\u0441\u043e\u0432 \u043a \u043d\u043e\u0432\u044b\u043c \u0432\u0435\u0440\u0441\u0438\u044f\u043c Swift, Objective-C \u0438 iOS.","og:type":"article","og:title":"iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI. | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.","og:description":"\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043f\u043e\u0441\u0442\u0435 &quot;iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1. \u041b\u043e\u0433\u0438\u043a\u0430 \u0438\u0433\u0440\u044b&quot; \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0438\u0433\u0440\u044b 2048 c \u043f\u043e\u043c\u043e\u0449\u044c\u044e ChatGPT. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043f\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (UI)I \u0438\u0433\u0440\u044b 2048 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ChatGPT \u0438 \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0443\u0434\u0435\u043b\u0438\u043c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043b\u0438\u0442\u043e\u043a \u043d\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0434\u043e\u0441\u043a\u0435. \u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 Github. \u0412","og:url":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\/","article:published_time":"2024-10-11T13:18:41+00:00","article:modified_time":"2025-09-11T14:09:47+00:00","twitter:card":"summary","twitter:title":"iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI. | \u041e\u0431\u0443\u0447\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0440\u0441 \u043f\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 iOS+Swift \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.","twitter:description":"\u0412 \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u043f\u043e\u0441\u0442\u0435 &quot;iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 1. \u041b\u043e\u0433\u0438\u043a\u0430 \u0438\u0433\u0440\u044b&quot; \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0438\u0433\u0440\u044b 2048 c \u043f\u043e\u043c\u043e\u0449\u044c\u044e ChatGPT. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u0441\u0442\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043f\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 (UI)I \u0438\u0433\u0440\u044b 2048 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ChatGPT \u0438 \u043e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0443\u0434\u0435\u043b\u0438\u043c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043b\u0438\u0442\u043e\u043a \u043d\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0434\u043e\u0441\u043a\u0435. \u041a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 Github. \u0412"},"aioseo_meta_data":{"post_id":"15788","title":null,"description":null,"keywords":[{"label":"AI","value":"AI"},{"label":"Game2048","value":"Game2048"},{"label":"ChatGPT 4-o","value":"ChatGPT 4-o"},{"label":"SwiftUI","value":"SwiftUI"},{"label":"Expectimax","value":"Expectimax"},{"label":"Monte Carlo","value":"Monte Carlo"},{"label":"\u0418\u0418","value":"\u0418\u0418"}],"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"titles":[],"descriptions":[],"socialPosts":{"email":[],"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2024-10-11 13:17:16","updated":"2026-02-22 20:11:14","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/bestkora.com\/IosDeveloper\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/bestkora.com\/IosDeveloper\/category\/swift\/\" title=\"Swift\">Swift<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tiOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI  \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI.\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/bestkora.com\/IosDeveloper"},{"label":"Swift","link":"https:\/\/bestkora.com\/IosDeveloper\/category\/swift\/"},{"label":"iOS \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u044b 2048 \u0432 SwiftUI\u00a0 \u0441 ChatGPT 4-o. \u0427\u0430\u0441\u0442\u044c 2. \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0438 UI.","link":"https:\/\/bestkora.com\/IosDeveloper\/%d0%b0%d0%b7%d0%b0%d1%80%d1%82%d0%bd%d0%b0%d1%8f-%d1%80%d0%b0%d0%b7%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%ba%d0%b0-ios-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d1%8f-%d0%b8%d0%b3%d1%80%d1%8b\/"}],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/posts\/15788","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/comments?post=15788"}],"version-history":[{"count":4,"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/posts\/15788\/revisions"}],"predecessor-version":[{"id":17077,"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/posts\/15788\/revisions\/17077"}],"wp:attachment":[{"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/media?parent=15788"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/categories?post=15788"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bestkora.com\/IosDeveloper\/wp-json\/wp\/v2\/tags?post=15788"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}