{"id":8040,"date":"2026-02-19T11:14:16","date_gmt":"2026-02-19T19:14:16","guid":{"rendered":"https:\/\/johnfreeborn.com\/words\/?p=8040"},"modified":"2026-02-19T11:14:17","modified_gmt":"2026-02-19T19:14:17","slug":"teaching-computers-to-draw","status":"publish","type":"post","link":"https:\/\/johnfreeborn.com\/words\/teaching-computers-to-draw\/","title":{"rendered":"Teaching Computers to Draw"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">I&#8217;m not an AI expert. I&#8217;m an enthusiast, and playing around with these things is how I learn. I&#8217;ve been working with <a href=\"https:\/\/cursor.com\" target=\"_blank\" rel=\"noreferrer noopener\">Cursor<\/a> and <a href=\"https:\/\/code.claude.com\/docs\/en\/overview\" target=\"_blank\" rel=\"noreferrer noopener\">Claude Code<\/a>, and my most successful experiment to date has been rebuilding the iOS game, <a href=\"https:\/\/toucharcade.com\/2008\/12\/28\/a-quick-look-at-rts-strategery-for-the-iphone\/\" target=\"_blank\" rel=\"noreferrer noopener\">Strategery<\/a>. This game recently stopped working on my phone. It doesn&#8217;t have fancy features. It doesn&#8217;t connect to the web and try to upsell you or gamify your experience. It&#8217;s just a nice, pared-down Risk clone. I was bummed when it stopped working. So my goal is to recreate it as best as I can.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/johnfreeborn.com\/RiskGame\/\" target=\"_blank\" rel=\"noreferrer noopener\">V1 worked<\/a>, but wasn&#8217;t pretty.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-18-at-17.13.20%402x.png?fit=580%2C366&amp;ssl=1\" alt=\"\" class=\"wp-image-8070\"\/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">On the next version, I started working towards an iOS experience, and that&#8217;s when I started to attempt to beautify things. This is where the machine struggled. I asked it to add a stroke, inside of the hex shapes. Things got strange-looking.<\/p>\n\n\n\n<figure class=\"is-style-default wp-block-image size-full\"><img decoding=\"async\" width=\"992\" height=\"699\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-07-at-01.33.23.png?fit=992%2C699&amp;ssl=1\" alt=\"\" class=\"wp-image-8042\" srcset=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-07-at-01.33.23.png?w=992&amp;ssl=1 992w, https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-07-at-01.33.23.png?resize=300%2C211&amp;ssl=1 300w, https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-07-at-01.33.23.png?resize=768%2C541&amp;ssl=1 768w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I don&#8217;t exactly know why it darkened half the map, but this wasn&#8217;t what I wanted.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"225\" height=\"216\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-07-at-01.40.58.png?fit=225%2C216&amp;ssl=1\" alt=\"\" class=\"wp-image-8044\"\/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">I went backwards and took away the heavy stroke. I was left with tiny gaps in the map. This isn&#8217;t right either. At this point, I went back to the tools that I know best: Illustrator and Figma. I had to get my own head around how this should work.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" width=\"475\" height=\"406\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-07-at-01.42.22.png?fit=475%2C406&amp;ssl=1\" alt=\"\" class=\"wp-image-8046\" srcset=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-07-at-01.42.22.png?w=475&amp;ssl=1 475w, https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-07-at-01.42.22.png?resize=300%2C256&amp;ssl=1 300w\" sizes=\"auto, (max-width: 475px) 100vw, 475px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">This was what I wanted. Slightly rounded hex shapes, with a lighter inset stroke. The hard part is knowing when to connect the shapes, when not to, and how to layer them all together.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"698\" height=\"313\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-07-at-01.44.37.png?fit=698%2C313&amp;ssl=1\" alt=\"\" class=\"wp-image-8050\" srcset=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-07-at-01.44.37.png?w=698&amp;ssl=1 698w, https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-07-at-01.44.37.png?resize=300%2C135&amp;ssl=1 300w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The machine&#8217;s next attempt wasn&#8217;t working. Back to the drawing board\u2013literally.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"666\" height=\"955\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-09-at-01.58.25.png?fit=666%2C955&amp;ssl=1\" alt=\"\" class=\"wp-image-8052\" srcset=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-09-at-01.58.25.png?w=666&amp;ssl=1 666w, https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-09-at-01.58.25.png?resize=209%2C300&amp;ssl=1 209w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I created this diagram to help the machine understand the system. There&#8217;s a base tile. Under that tile, there are connectors to create the smooth, rounded shapes. Above, there are two layers: over connectors to hide the strokes and stroke connectors to make the proper connections with the strokes. In Illustrator, everything is a layer. I&#8217;ve been using this tool for so long, my brain just works that way now.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When I shared this with Claude Code, it understood the structure straight away, which by itself is impressive. At that point, I created a series of SVGs that it could use to layer everything together.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-18-at-17.04.35%402x.png?fit=580%2C643&amp;ssl=1\" alt=\"\" class=\"wp-image-8054\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Now that we have all the pieces, it should be easy. Right? Not exactly.<\/p>\n\n\n\n<div class=\"is-style-rectangular wp-block-jetpack-tiled-gallery aligncenter is-style-rectangular\"><div class=\"\"><div class=\"tiled-gallery__gallery\"><div class=\"tiled-gallery__row\"><div class=\"tiled-gallery__col\" style=\"flex-basis:37.71594%\"><figure class=\"tiled-gallery__item\"><img decoding=\"async\" loading=\"lazy\" srcset=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-09-at-02.25.12.webp?strip=info&#038;w=395&#038;ssl=1 395w\" alt=\"\" data-height=\"281\" data-id=\"8055\" data-link=\"https:\/\/johnfreeborn.com\/words\/cleanshot-2026-02-09-at-02-25-12-webp\/\" data-url=\"https:\/\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-09-at-02.25.12.webp\" data-width=\"395\" src=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-09-at-02.25.12.webp?ssl=1\" data-amp-layout=\"responsive\"\/><\/figure><figure class=\"tiled-gallery__item\"><img decoding=\"async\" loading=\"lazy\" srcset=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-09-at-02.33.09.webp?strip=info&#038;w=200&#038;ssl=1 200w\" alt=\"\" data-height=\"138\" data-id=\"8059\" data-link=\"https:\/\/johnfreeborn.com\/words\/cleanshot-2026-02-09-at-02-33-09-webp\/\" data-url=\"https:\/\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-09-at-02.33.09.webp\" data-width=\"200\" src=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-09-at-02.33.09.webp?ssl=1\" data-amp-layout=\"responsive\"\/><\/figure><figure class=\"tiled-gallery__item\"><img decoding=\"async\" loading=\"lazy\" srcset=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-09-at-02.30.38.webp?strip=info&#038;w=354&#038;ssl=1 354w\" alt=\"\" data-height=\"247\" data-id=\"8057\" data-link=\"https:\/\/johnfreeborn.com\/words\/cleanshot-2026-02-09-at-02-30-38-webp\/\" data-url=\"https:\/\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-09-at-02.30.38.webp\" data-width=\"354\" src=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-09-at-02.30.38.webp?ssl=1\" data-amp-layout=\"responsive\"\/><\/figure><\/div><div class=\"tiled-gallery__col\" style=\"flex-basis:62.28406%\"><figure class=\"tiled-gallery__item\"><img decoding=\"async\" loading=\"lazy\" srcset=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-09-at-11.45.43.webp?strip=info&#038;w=339&#038;ssl=1 339w\" alt=\"\" data-height=\"436\" data-id=\"8065\" data-link=\"https:\/\/johnfreeborn.com\/words\/cleanshot-2026-02-09-at-11-45-43-webp\/\" data-url=\"https:\/\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-09-at-11.45.43.webp\" data-width=\"339\" src=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-09-at-11.45.43.webp?ssl=1\" data-amp-layout=\"responsive\"\/><\/figure><\/div><\/div><\/div><\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The machine had a really hard time understanding how to connect the pieces. It was trying to create the stroke connections in pairs. This does not work. It was sort of getting the layering right, but clearly, there were still issues.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once I understood that it was working in pairs, it took several attempts to help it work around that issue, and after a few more iterations, boom\u2013it worked.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img decoding=\"async\" width=\"1600\" height=\"750\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/strategry-2.0-fix.jpg?fit=580%2C272&amp;ssl=1\" alt=\"\" class=\"wp-image-8068\" srcset=\"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/strategry-2.0-fix.jpg?w=1600&amp;ssl=1 1600w, https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/strategry-2.0-fix.jpg?resize=300%2C141&amp;ssl=1 300w, https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/strategry-2.0-fix.jpg?resize=1024%2C480&amp;ssl=1 1024w, https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/strategry-2.0-fix.jpg?resize=768%2C360&amp;ssl=1 768w, https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/strategry-2.0-fix.jpg?resize=1536%2C720&amp;ssl=1 1536w, https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/strategry-2.0-fix.jpg?resize=1200%2C563&amp;ssl=1 1200w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">There&#8217;s still a long way to go to get this ready for the app store. I&#8217;m enjoying the process and realizing more about how my own process works.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;m not an AI expert. I&#8217;m an enthusiast, and playing around with these things is how I learn. I&#8217;ve been working with Cursor and Claude Code, and my most successful experiment to date has been rebuilding the iOS game, Strategery. This game recently stopped working on my phone. It doesn&#8217;t have fancy features. It doesn&#8217;t [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":8070,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[22],"tags":[132,29],"class_list":["post-8040","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-personal","tag-ai","tag-video-games"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/johnfreeborn.com\/words\/wp-content\/uploads\/2026\/02\/CleanShot-2026-02-18-at-17.13.20%402x.png?fit=1830%2C1154&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/johnfreeborn.com\/words\/wp-json\/wp\/v2\/posts\/8040","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/johnfreeborn.com\/words\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/johnfreeborn.com\/words\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/johnfreeborn.com\/words\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/johnfreeborn.com\/words\/wp-json\/wp\/v2\/comments?post=8040"}],"version-history":[{"count":2,"href":"https:\/\/johnfreeborn.com\/words\/wp-json\/wp\/v2\/posts\/8040\/revisions"}],"predecessor-version":[{"id":8072,"href":"https:\/\/johnfreeborn.com\/words\/wp-json\/wp\/v2\/posts\/8040\/revisions\/8072"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/johnfreeborn.com\/words\/wp-json\/wp\/v2\/media\/8070"}],"wp:attachment":[{"href":"https:\/\/johnfreeborn.com\/words\/wp-json\/wp\/v2\/media?parent=8040"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/johnfreeborn.com\/words\/wp-json\/wp\/v2\/categories?post=8040"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/johnfreeborn.com\/words\/wp-json\/wp\/v2\/tags?post=8040"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}