{"id":3898,"date":"2025-07-30T03:50:03","date_gmt":"2025-07-29T18:50:03","guid":{"rendered":"https:\/\/smilekabagon.com\/?p=3898"},"modified":"2025-10-13T18:41:49","modified_gmt":"2025-10-13T09:41:49","slug":"%e3%83%9d%e3%83%b3%e3%82%b3%e3%83%84%e5%a4%ab%e5%a9%a6%e3%81%aegame-trial-log-vol-1","status":"publish","type":"post","link":"https:\/\/smilekabagon.com\/?p=3898","title":{"rendered":"\u30dd\u30f3\u30b3\u30c4\u592b\u5a66\u306eGame Trial Log Vol.1"},"content":{"rendered":"\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h1 class=\"wp-block-heading has-white-color has-vivid-cyan-blue-background-color has-text-color has-background has-link-color has-medium-font-size wp-elements-0319d66d743b160a81009bf457742355\">\u30ab\u30c6\u30b4\u30ea\u30fc\u306e\u5909\u66f4\u304b\u3089<\/h1>\n\n\n\n<p>\u30ab\u30c6\u30b4\u30ea\u30fc\u5909\u66f4\u306e\u8aac\u660e\u304c\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5316\u3057\u3066\u3044\u308b\u70b9\u3001\u3054\u5bb9\u8d66\u304f\u3060\u3055\u3044\u3002\u4eca\u56de\u306f\u8131\u30b3\u30ed\u30ca\u3092\u30a4\u30e1\u30fc\u30b8\u3057\u3066\u306e\u5909\u66f4\u3067\u306f\u306a\u304f\u3001\u30b2\u30fc\u30e0\u306b\u95a2\u308f\u308b\u4e8b\u67c4\u3092\u6271\u3046<strong>\u65b0\u3057\u3044\u72ec\u7acb\u3057\u305f\u30ab\u30c6\u30b4\u30ea\u30fc<\/strong>\u3068\u3057\u3066\u300cGame Trial Log\u300d\u3092\u7acb\u3061\u4e0a\u3052\u307e\u3059\u3002<\/p>\n\n\n<div class=\"wp-block-su-blogcard\">\n\t<article class=\"wp-blogcard\" cite=\"https:\/\/smilekabagon.com\/?cat=280\">\n\t\t<a\n\t\t\thref=\"https:\/\/smilekabagon.com\/?cat=280\"\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t\t\trel=\"noopener\"\n\t\t\t\t\t\tclass=\"wp-blogcard-item\"\n\t\t>\n\t\t\t\t\t\t<div class=\"wp-blogcard-content\">\n\t\t\t\t<div class=\"wp-blogcard-title\">\u524d\u56de\u307e\u3067\u306e\u8133\u5185\u6d3b\u6027\u306e\u30d6\u30ed\u30b0<\/div>\n\t\t\t\t<div class=\"wp-blogcard-description\">\u8a8d\u77e5\u75c7\u306e\u5224\u65ad\u30c6\u30b9\u30c8\u306b\u884c\u308f\u308c\u308b\u8a18\u61b6\u80fd\u529b\u3068\u3001\u7a7a\u9593\u8a8d\u77e5\u529b\u304c\u30c6\u30fc\u30de\u306b\u306a\u3063\u305f\u30aa\u30f3\u30e9\u30a4\u30f3\u30b2\u30fc\u30e0\u3092\u884c\u3063\u3066\u3044\u304d\u307e\u3059\u3002\u305d\u3057\u3066\u306a\u305credkabagon\u304c\u500b\u5225\u3067\u767b\u5834\u3059\u308b\u306e\u304b\u3068\u8a00\u3046\u3068\u3001\u3053\u308c\u3089\u306e\u30b2\u30fc\u30e0\u304c\u5f97\u610f\u51fa\u3042\u308b\u305f\u3081\u3001\u8ab2\u91d1\u3092\u305b\u305a\u306b\u3069\u3053\u307e\u3067\u30ec\u30d9\u30eb\u30a2\u30c3\u30d7\u304c\u3067\u304d\u308b\u306e\u304b\u3092\u767a\u4fe1\u3057\u305f\u3044\u304b\u3089\u3067\u3059\u3002<\/div>\n\t\t\t\t<div class=\"wp-blogcard-cite\">\n\t\t\t\t\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tclass=\"wp-blogcard-favicon\"\n\t\t\t\t\t\t\tsrc=\"https:\/\/smilekabagon.com\/favicon.ico\"\n\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\t\t\/>\n\t\t\t\t\t\t\t\t\t\t<div class=\"wp-blogcard-domain\">smilekabagon.com<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/a>\n\t<\/article>\n<\/div>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-white-color has-vivid-cyan-blue-background-color has-text-color has-background has-link-color wp-elements-d5fd32828bb9d9ac77b7925fac450f4c\">\u30dd\u30f3\u30b3\u30c4\u592b\u5a66\u306e\u5f79\u5272<\/h2>\n\n\n\n<p><strong>Redkabagon<\/strong>\u306f\u3053\u308c\u307e\u3067\u901a\u308a\u3001G5Entertainment\u306e\u63d0\u4f9b\u3059\u308b\u30a2\u30a4\u30c6\u30e0\u63a2\u3057\uff06\u30de\u30c3\u30c13\u3092\u884c\u3044\u3001\u305d\u306e\u69d8\u5b50\u3092\u9332\u753b\u30fb\u516c\u958b\u3057\u307e\u3059\u3002\u7b46\u8005<strong>Dr.takodemous<\/strong>\u306f\u65b0\u305f\u306b\u30b2\u30fc\u30e0\u30a2\u30d7\u30ea\u3092\u4f5c\u6210\u3057\u3001\u30a2\u30d7\u30ea\u306e\u30b3\u30fc\u30c9\u7d39\u4ecb\u3068\u52d5\u4f5c\u72b6\u6cc1\u306e\u9332\u753b\u516c\u958b\u306b\u6311\u6226\u3057\u307e\u3059<\/p>\n\n\n\n<p>\u30b2\u30fc\u30e0\u30a2\u30d7\u30ea\u4f5c\u6210\u306f<strong>Gemini<\/strong>\u306e\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30b5\u30dd\u30fc\u30c8\u3092\u53d7\u3051\u307e\u3059\u304c\u3001\u6642\u9593\u304c\u304b\u304b\u308b\u305f\u3081\u66f4\u65b0\u983b\u5ea6\u306f\u9045\u304f\u306a\u308a\u307e\u3059\u3002\u6c17\u9577\u306b\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002\u307e\u305f\u3001\u6a5f\u6750\u306b\u95a2\u308f\u308b\u5185\u5bb9\u306f\u300cThe Gear\u300d\u3068\u30af\u30ed\u30b9\u30aa\u30fc\u30d0\u30fc\u3057\u307e\u3059\u306e\u3067\u3001\u30b2\u30fc\u30e0\u306b\u8208\u5473\u306f\u306a\u3044\u3051\u3069\u6a5f\u6750\u306b\u306f\u8208\u5473\u304c\u3042\u308b\u3068\u3044\u3046\u65b9\u3005\u306e\u3054\u6765\u5834\u3082\u304a\u5f85\u3061\u3057\u3066\u304a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-white-color has-vivid-cyan-blue-background-color has-text-color has-background has-link-color wp-elements-f6878551c61e55022aff6a084c1dd314\">\u7b46\u8005\u306e\u7d4c\u6b74<\/h2>\n\n\n\n<p>\u7d4c\u6b74\u306e\u8a73\u7d30\u306f\u5272\u611b\u3057\u307e\u3059\u304c\u30012012\u5e747\u6708\u306b\u30b5\u30fc\u30c6\u30a3\u30d5\u30a1\u30a4WEB\u30af\u30ea\u30a8\u30a4\u30bf\u30fc\u80fd\u529b\u8a8d\u5b9a\u8a66\u9a13\u306e\u4e0a\u7d1a\uff08\u5408\u683c\u70b965\u70b9\u306b\u5bfe\u305766\u70b9\u3068\u3044\u3046\u30d6\u30fc\u30d3\u30fc\u8cde\uff01\uff09\u309245\u6b73\u3067\u53d6\u5f97\u3002\u73fe\u5728\u306b\u81f3\u308b\u307e\u3067\u3001WEB\u696d\u754c\u3067\u751f\u8a08\u3092\u7acb\u3066\u3089\u308c\u3066\u3044\u308b\u3068\u306f\u8a00\u3044\u96e3\u3044\u72b6\u6cc1\u3067\u3059\u3002\u4ed6\u306bIllustrator\u3001Photoshop\u3001Javascript\u3001\u4eca\u3067\u306f\u4f7f\u308f\u308c\u306a\u304f\u306a\u3063\u305fflash\u3092\u304b\u3044\u3064\u307e\u3093\u3060\u7a0b\u5ea6\u306b\u7406\u89e3\u3057\u3066\u3044\u308b\u72b6\u6cc1\u3067\u3059\u3002<\/p>\n\n\n\n<p>Python\u306e\u30b3\u30fc\u30c9\u4f5c\u6210\u306f\u672a\u7d4c\u9a13\u4ee5\u524d\u306e\u7121\u77e5\u3002\u3068\u3044\u3046\u72b6\u6cc1\u3067\u30b2\u30fc\u30e0\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u305d\u3053\u3067R60\u4e16\u4ee3\u306b\u5411\u3051\u3066\u662f\u975e\u3068\u3082\u30e1\u30c3\u30bb\u30fc\u30b8\u3057\u305f\u3044\u4e8b\u304c\u3042\u308a\u307e\u3059\u3002AI\u751f\u6210\u6280\u8853\u306f\u7523\u696d\u9769\u547d\u306b\u5339\u6575\u3059\u308b\u3068\u8a00\u308f\u308c\u3066\u3044\u307e\u3059\u304c\u3001\uff08\u7b46\u8005\u306f\u7523\u696d\u9769\u547d\u3092\u7d4c\u9a13\u3057\u3066\u3044\u306a\u3044\u306e\u3067\u5339\u6575\u3059\u308b\u304b\u3069\u3046\u304b\u306f\u4e0d\u660e\uff01\uff09AI\u306f\u7d4c\u9a13\u4e0a\u3001\u672a\u77e5\u306e\u4e16\u754c\u3078\u98db\u3073\u8fbc\u3080\u3053\u3068\u306b\u5927\u3044\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002R60\u4e16\u4ee3\u306e\u7686\u69d8\u3082\u3001\u4e00\u7dd2\u306b\u98db\u3073\u8fbc\u307f\u307e\u3057\u3087\u3046\uff01<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-white-color has-vivid-cyan-blue-background-color has-text-color has-background has-link-color wp-elements-08eab6811e6af9e2fa121a44332a371d\">\u3044\u304d\u306a\u308a\u306eYou Tube\u306e\u52d5\u753b\u30ea\u30f3\u30af\u304b\u3089<\/h2>\n\n\n\n<p>\u3010\u52d5\u753b\u3011AI\u3068\u5171\u540c\u5236\u4f5c\u3057\u305f\u30aa\u30bb\u30ed\u3001Dr.takodemous\u304c\u52dd\u5229\uff01 Gemini\u3068\u5171\u540c\u5236\u4f5c\u3057\u305f\u30aa\u30bb\u30ed\u306e\u5b8c\u6210\u7248\u3092\u3001\u7b46\u8005\u304cAI\u76f8\u624b\u306b\u6253\u3061\u52dd\u3063\u305f\u52d5\u753b\u3067\u3059\u3002\u307b\u307c\u5f37\u5236\u7684\u306b\u8a2d\u7f6e\u3055\u308c\u305f\u30d2\u30f3\u30c8\u8868\u793a\u3092\u4f7f\u7528\u305b\u305a\u52dd\u5229\u3057\u305f\u306e\u306f\u3001\u3042\u308b\u7a0b\u5ea6\u306e\u30b2\u30fc\u30e0\u306e\u30b3\u30c4\u3092\u77e5\u3063\u3066\u3044\u305f\u304b\u3089\u3067\u3059\u3002\uff08\u30b3\u30c4\u306f\u672c\u30d6\u30ed\u30b0\u306e\u8da3\u65e8\u3068\u7570\u306a\u308b\u305f\u3081\u7701\u7565\u3057\u307e\u3059\u3002\uff09<\/p>\n\n\n\n<p>\u4f1d\u3048\u305f\u3044\u306e\u306f\u3001\u7121\u77e5\u306a\u30ec\u30d9\u30eb\u3067\u3042\u3063\u3066\u3082AI\u3092\u99c6\u4f7f\u3059\u308b\u3068\u3001\u30b3\u30fc\u30c0\u30fc\u3068\u8a00\u3048\u308b\u30ec\u30d9\u30eb\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u3064\u304f\u308c\u308b\u3068\u3044\u3046\u4e8b\u3067\u3059\u3002\u30b2\u30fc\u30e0\u3084\u30d7\u30ed\u30b0\u30e9\u30e0\u306b\u8208\u5473\u304c\u3042\u308b\u65b9\u306f\u662f\u975e\u53c2\u8003\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p>\u30d7\u30ed\u30f3\u30d7\u30c8\u306e\u53c2\u8003\u306b\u306a\u308b\u3088\u3046\u306b\u3001\u6700\u521d\u306b\u4f5c\u6210\u3057\u305f\u30aa\u30bb\u30ed\u306e\u30b3\u30fc\u30c9\u304b\u3089\u5b8c\u6210\u7248\u307e\u3067\u306e\u9053\u306e\u308a\u3092\u30d5\u30a9\u30eb\u30c0\u306b\u6dfb\u4ed8\u3057\u3066\u304a\u304d\u307e\u3059\u3002\u30d7\u30ed\u30b0\u30e9\u30e0\u306b\u8208\u5473\u306e\u3042\u308b\u65b9\u306f\u6700\u521d\u304b\u3089\u9806\u756a\u306b\u3001\u30b2\u30fc\u30e0\u306b\u8208\u5473\u306e\u3042\u308b\u65b9\u306f\u5b8c\u5168\u7248\u3092\u8a66\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u5168\u3066Python\u306e\u30b3\u30fc\u30c9\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"\u30d7\u30ed\u30f3\u30d7\u30c8\u4e00\u767a\u3067\u30b2\u30fc\u30e0\u304c\u3067\u304d\u305f!? Python\u3067\u30aa\u30bb\u30ed\u3092\u7206\u901f\u958b\u767a\u2192Gemini\u3068\u9b3c\u30c7\u30d0\u30c3\u30b0\uff01\" width=\"525\" height=\"295\" src=\"https:\/\/www.youtube.com\/embed\/HKUkwBHYXZU?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading has-white-color has-vivid-cyan-blue-background-color has-text-color has-background has-link-color has-medium-font-size wp-elements-04e812df064423d9572b2dd2b9fd0a59\">pyramid of mahjong\u305d\u306e\u4e09<\/h2>\n\n\n\n<p>redkabagon\u306f\u4eca\u307e\u3067\u901a\u308a\u3001G5Entertainment\u306e\u63d0\u4f9b\u3059\u308b\u30a2\u30a4\u30c6\u30e0\u63a2\u3057\uff06\u30de\u30c3\u30c13\u3092\u30b2\u30fc\u30e0\u3057\u3066\u3082\u3089\u3044\u3001\u305d\u306e\u72b6\u6cc1\u3092\u9332\u753b\u305d\u3057\u3066You Tube\u306b\u6295\u7a3f\uff06\u672c\u30d6\u30ed\u30b0\u306b\u30ea\u30f3\u30af\u3059\u308b\u6d41\u308c\u3092\u884c\u3063\u3066\u3082\u3089\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>CapCut\u3067\u306e\u52d5\u753b\u7de8\u96c6\u306f\u73fe\u5728\u306e\u30c1\u30e3\u30f3\u30cd\u30eb\u767b\u9332\u5206\u3067\u6700\u7d42\u3068\u306a\u308a\u307e\u3059\u3002\u4eca\u5f8c\u306fCyberlink\u306e\u63d0\u4f9b\u3059\u308b<strong>PowerDirector 365<\/strong>\u3092\u4f7f\u7528\u3057\u3066\u4f5c\u6210\u3057\u3066\u3044\u304d\u307e\u3059\u3002PowerDirector 365\u306b\u3064\u3044\u3066\u3082\u3001\u6a5f\u6750\u8aac\u660e\u306e\u6a5f\u4f1a\u306b\u300cThe Gear\u300d\u30ab\u30c6\u30b4\u30ea\u30fc\u3067\u7d39\u4ecb\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u6620\u50cf\u4f5c\u6210\u306b\u8208\u5473\u306e\u3042\u308b\u65b9\u306f\u3001\u662f\u975e\u3054\u6765\u5834\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"M2T pyramid of mahjong no3 \u2010 Clipchamp\u3067\u4f5c\u6210\" width=\"525\" height=\"295\" src=\"https:\/\/www.youtube.com\/embed\/5wzf3s6yAT4?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">pyramid of mahjong<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading has-white-color has-vivid-cyan-blue-background-color has-text-color has-background has-link-color has-medium-font-size wp-elements-178a330016d2b1892840f7a112ee464b\">\u697d\u3057\u307f\u306a\u304c\u3089\u8001\u3044\u3066\u3044\u304f\uff08\u7dcf\u62ec\uff09<\/h3>\n\n\n\n<p>\u524d\u56de\u307e\u3067\u4e94\u56de\u306b\u308f\u305f\u3063\u3066\u8a18\u8f09\u3057\u3066\u304d\u305f\u3053\u306e\u984c\u76ee\u3092\u3001\u7dcf\u62ec\u3068\u3057\u3066\u7d42\u4e86\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002\u30b3\u30ed\u30ca\u798d\u304c\u4e0e\u3048\u305f\u5f71\u97ff\u306f\u5fc3\u8eab\u3068\u3082\u306b\u3001\u7121\u610f\u8b58\u4e0b\u306b\u30c0\u30e1\u30fc\u30b8\u3092\u4e0e\u3048\u3066\u3044\u305f\u3068\u7b46\u8005\u306f\u611f\u3058\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u6f20\u7136\u3068\u3057\u305f\u65e5\u3005\u306e\u4e0d\u5b89\u3084\u62e0\u308a\u6240\u306e\u306a\u3044\u5e0c\u671b\u306a\u3069\u3001\u8a18\u8f09\u5185\u5bb9\u306f\u610f\u56f3\u7684\u3067\u3042\u308c\u7121\u610f\u8b58\u3067\u3042\u308c\u3001\u30cd\u30ac\u30c6\u30a3\u30d6\u306a\u5185\u5bb9\u3067\u3042\u3063\u305f\u6c17\u304c\u3057\u307e\u3059\u3002\u305d\u306e\u5f53\u6642\u306f\u305d\u306e\u72b6\u614b\u304c\u4ed5\u65b9\u306a\u3044\u3068\u3057\u3066\u3082\u3001\u73fe\u5728\u306e\u72b6\u6cc1\u306f\u81ea\u5df1\u9078\u629e\u304c\u51fa\u6765\u308b\u72b6\u614b\u3067\u3059\u3002<\/p>\n\n\n\n<p>\u7dcf\u3058\u3066\u30ab\u30c6\u30b4\u30ea\u30fc\u306e\u5909\u66f4\u3092\u884c\u3063\u305f\u5f8c\u306f\u3001\u697d\u3057\u307f\u306a\u304c\u3089\u8001\u3044\u3066\u3044\u304f\u3092\u5b9f\u8df5\u3057\u3066\u3044\u308b\u3088\u3046\u306a\u3082\u306e\u3067\u3059\u3002\u3064\u307e\u308a\u6700\u8fd1\u306e\u30d6\u30ed\u30b0\u306e\u5185\u5bb9\u306f\u3001R60\u306e\u30dd\u30f3\u30b3\u30c4\u592b\u5a66\u304c\u697d\u3057\u307f\u306a\u304c\u3089\u8001\u3044\u3066\u3044\u304f\u59ff\u3092\u7d39\u4ecb\u3057\u3066\u3044\u308b\u306e\u3067\u3059\u3002\u3084\u305f\u3089\u3001\u53c2\u8003\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3068\u3044\u3046\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u591a\u767a\u3059\u308b\u306e\u306f\u3001\u81ea\u5df1\u9078\u629e\u306e\u7d50\u679c\u306a\u3088\u3046\u306a\u6c17\u304c\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u3084\u308a\u304c\u3044\u3084\u751f\u304d\u304c\u3044\u306f\u3001\u8a8d\u77e5\u6a5f\u80fd\u3084\u8089\u4f53\u6a5f\u80fd\u3092\u7dad\u6301\u3059\u308b\u306e\u306b\u5f79\u7acb\u3064\u3068\u8a00\u308f\u308c\u3066\u3044\u307e\u3059\u3002\u771f\u610f\u306f\u4e0d\u660e\u3068\u3044\u3048\u3070\u305d\u308c\u307e\u3067\u306a\u306e\u3067\u3059\u304c\u3001\u4fe1\u3058\u3066\u30e1\u30c3\u30bb\u30fc\u30b8\u3057\u3066\u3044\u304d\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h4 class=\"wp-block-heading has-white-color has-vivid-cyan-blue-background-color has-text-color has-background has-link-color has-medium-font-size wp-elements-aa6f2c46d68a0d5d88d023bc566d6953\">\u6d77\u99ac\u3092\u935b\u3048\u308b\u8133\u30c8\u30ec\u30b2\u30fc\u30e0\u305d\u306e\u516d<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>PR TIMES\u3055\u3093\u306e\u30b5\u30a4\u30c8\u3088\u308a\u201d\u8a8d\u77e5\u75c7\u4e88\u9632\u306e\u8133\u30c8\u30ecWeb\u30b2\u30fc\u30e0\u300eDr.\u8133\u30c8\u30ec\u300f\u3092\u30ea\u30ea\u30fc\u30b9\u3002\u201d\u306e\u30da\u30fc\u30b8\u3092\u5f15\u7528\u3057\u3066\u3044\u307e\u3059<\/p>\n<\/blockquote>\n\n\n\n<p>\u4eca\u56de\u304b\u3089\u306f\u3001\u7121\u77e5\u306aAI\u30b3\u30fc\u30c0\u30fc\uff08\u7b46\u8005\uff09VS\u30d7\u30ed\u306e\u30b3\u30fc\u30c0\u30fc\u306e\u6c7a\u6226\u306e\u610f\u5473\u5408\u3044\u3082\u542b\u307f\u307e\u3059\u3002\u8133\u79d1\u5b66\u306b\u306f\u89e6\u308c\u305f\u3053\u3068\u3059\u3089\u306a\u3044\u7b46\u8005\u304c\u300c\u8133\u6a5f\u80fd\u3092\u935b\u3048\u308b\u300d\u3068\u30d7\u30ed\u30f3\u30d7\u30c8\u306b\u6307\u793a\u3057\u3066\u751f\u307e\u308c\u305f\u30b3\u30fc\u30c9\u304c\u3001\u3069\u3053\u307e\u3067\u30d7\u30ed\u306b\u8089\u8584\u3067\u304d\u308b\u304b\u3001\u81ea\u8eab\u3067\u3082\u30a6\u30ad\u30a6\u30ad\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/prtimes.jp\/main\/html\/rd\/p\/000000233.000006308.html\" data-lkc-id=\"77\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=prtimes.jp\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">\u30d7\u30ec\u30b9\u30ea\u30ea\u30fc\u30b9\u30fb\u30cb\u30e5\u30fc\u30b9\u30ea\u30ea\u30fc\u30b9\u914d\u4fe1\u30b7\u30a7\u30a2No.1\uff5cPR TIMES<\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"\/\/smilekabagon.com\/wp-content\/uploads\/pz-linkcard\/cache\/db17ce0891a484c8b6348bb27a2888cd4c6bbd3d61b9ed31bcafd8e4dbdfb9e9.jpeg\" width=\"100px\" height=\"150px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">\u8a8d\u77e5\u75c7\u4e88\u9632\u306e\u8133\u30c8\u30ecWeb\u30b2\u30fc\u30e0\u300eDr.\u8133\u30c8\u30ec\u300f\u3092\u30ea\u30ea\u30fc\u30b9\u3002<\/div><div class=\"lkc-excerpt\">\u682a\u5f0f\u4f1a\u793e\uff23\uff2d\u30b5\u30a4\u30c8\u306e\u30d7\u30ec\u30b9\u30ea\u30ea\u30fc\u30b9\uff082020\u5e743\u67084\u65e5 09\u664200\u5206\uff09\u8a8d\u77e5\u75c7\u4e88\u9632\u306e\u8133\u30c8\u30ecWeb\u30b2\u30fc\u30e0\u300eDr.\u8133\u30c8\u30ec\u300f\u3092\u30ea\u30ea\u30fc\u30b9\u3002<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n\n\n\n<h5 class=\"wp-block-heading has-white-color has-vivid-cyan-blue-background-color has-text-color has-background has-link-color has-medium-font-size wp-elements-172df84a6c661b49ca8c3d48c593f426\">\u5897\u3048\u305f\u8a18\u53f7\u3092\u9078\u307c\u3046<\/h5>\n\n\n\n<p>\u7b2c\u56db\u56de\u76ee\u3082\u6d77\u99ac\u3092\u935b\u3048\u308b\u30b7\u30ea\u30fc\u30ba\u306b\u306a\u308a\u307e\u3059\u3002\u5148\u305a\u306f\u30b2\u30b9\u30c8\u30e2\u30fc\u30c9\u3067\u8a66\u3057\u3066\u307f\u3066\u3001\u52b9\u679c\u3092\u611f\u3058\u305f\u5834\u5408\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210\u3059\u308b\u611f\u3058\u3067\u624b\u8efd\u306b\u59cb\u3081\u308b\u3053\u3068\u304c\u51fa\u6765\u307e\u3059\u3002\u3053\u306e\u30b3\u30ca\u30fc\u306e\u30b2\u30fc\u30e0\u306f<strong>\u8a18\u61b6\u306e\u5f62\u6210\u3001\u7a7a\u9593\u5b66\u7fd2\u3001\u611f\u60c5\u306e\u5236\u5fa1<\/strong>\u3092\u935b\u3048\u308b\u3068\u3044\u3046\u30b2\u30fc\u30e0\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u7b46\u8005\u3082\u540c\u985e\u306e\u30a2\u30d7\u30ea\u306e\u4f5c\u6210\u306b\u30c1\u30e3\u30ec\u30f3\u30b8\u3059\u308b\u3064\u3082\u308a\u3067\u3059\u3002<\/p>\n\n\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/dr-noutore.jp\/cont\/preview\/018C.html\" data-lkc-id=\"149\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=dr-noutore.jp\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">dr-noutore.jp<\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"https:\/\/s.wordpress.com\/mshots\/v1\/https%3A%2F%2Fdr-noutore.jp%2Fcont%2Fpreview%2F018C.html?w=200\" width=\"100px\" height=\"150px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">\u6d77\u99ac\u3092\u935b\u3048\u308b\u8133\u30c8\u30ec\u30b2\u30fc\u30e0(\u7121\u6599)\uff5c\u5897\u3048\u305f\u8a18\u53f7\u3092\u9078\u307c\u3046\uff5cDr.\u8133\u30c8\u30ec<\/div><div class=\"lkc-excerpt\">\u6d77\u99ac\u3092\u935b\u3048\u308b\u8133\u30c8\u30ec\u30b2\u30fc\u30e0(\u7121\u6599)\uff5c\u5897\u3048\u305f\u8a18\u53f7\u3092\u9078\u307c\u3046\uff5c1\u3064\u305a\u3064\u65b0\u3057\u3044\u8a18\u53f7\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002\u524d\u306e\u753b\u9762\u306b\u306a\u304b\u3063\u305f\u8a18\u53f7\u3092\u9078\u3073\u307e\u3059\u3002\u3069\u3053\u307e\u3067\u899a\u3048\u3089\u308c\u308b\u304b\u6311\u6226\u3057\u307e\u3057\u3087\u3046\u3002<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-white-color has-vivid-cyan-blue-background-color has-text-color has-background has-link-color wp-elements-31a7a31c5539fb341d3c088eafd0cb96\">\u30dd\u30f3\u30b3\u30c4\u592b\u5a66\u306eGame Trial Log<\/h2>\n\n\n\n<p>\u52d5\u753b\u306b\u767b\u5834\u3057\u3066\u3044\u308b\u30d0\u30fc\u30b8\u30e7\u30f3\u306f**\u30d7\u30ed\u30f3\u30d7\u30c8 No.6\u3067\u3059\u3002<code>DEPTH=4<\/code>\u3068\u3044\u3046\u8a2d\u5b9a\u3067\u3001\u30ec\u30d9\u30eb\u306f\u4e2d\u7d1a\u8005\u4ee5\u4e0a\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002\u5b9f\u884c\u3059\u308b\u306b\u306f\u3001<strong>Python<\/strong>\u3092\u5165\u624b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u5165\u624b\u306f\u81ea\u5df1\u8cac\u4efb\u3067\u3059\u304c\u3001\u4e16\u754c\u4e2d\u3067\u4f7f\u7528\u3055\u308c\u3066\u3044\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306b\u306f\u5fc5\u9700\u54c1\u3067\u3059\u3002\u5165\u624b\u65b9\u6cd5\u3084\u8a2d\u5b9a\u65b9\u6cd5\u306a\u3069\u306e\u30ea\u30f3\u30af\u3092\u8cbc\u3063\u3066\u304a\u304d\u307e\u3059\u3002<\/p>\n\n\n<div class=\"linkcard\"><div class=\"lkc-external-wrap\"><a class=\"lkc-link no_icon\" href=\"https:\/\/www.python.jp\/install\/docs\/install_plan.html\" data-lkc-id=\"150\" target=\"_blank\" rel=\"external noopener\"><div class=\"lkc-card\"><div class=\"lkc-info\"><div class=\"lkc-favicon\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.google.com\/s2\/favicons?domain=www.python.jp\" alt=\"\" width=\"16\" height=\"16\" \/><\/div><div class=\"lkc-domain\">www.python.jp<\/div><\/div><div class=\"lkc-content\"><figure class=\"lkc-thumbnail\"><img decoding=\"async\" class=\"lkc-thumbnail-img\" src=\"\/\/smilekabagon.com\/wp-content\/uploads\/pz-linkcard\/cache\/950f2e6adde55b6e88a6022f023a9b64e8a22b4a4a0e2302e41179ba4e7ceab4.jpeg\" width=\"100px\" height=\"150px\" alt=\"\" \/><\/figure><div class=\"lkc-title\">Python\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u91dd - python.jp<\/div><div class=\"lkc-excerpt\">Python\u74b0\u5883\u69cb\u7bc9\u30ac\u30a4\u30c9 \u3067\u306f\u3001Python\u3092\u521d\u3081\u3066\u4f7f\u3046\u65b9\u306e\u5b66\u7fd2\u7528\u306b\u3001\u3067\u304d\u308b\u3060\u3051\u7c21\u5358\u3067\u6c4e\u7528\u6027\u306e\u3042\u308bPython\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u3066\u3044\u307e\u3059\u3002 \u672c\u6765\u3001Python\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u81ea\u4f53\u306f\u305d\u3046\u9762\u5012\u306a\u3053\u3068\u3067\u306f\u306a\u3044\u306e\u3067\u3059\u304c\u3001Web\u3067\u3061\u3087\u3063\u3068\u691c\u7d22\u3059\u308b\u3068\u3044\u308d\u3044\u308d\u306a\u60c5\u5831<\/div><\/div><div class=\"clear\"><\/div><\/div><\/a><\/div><\/div>\n\n\n\n<p>\u3069\u3046\u305eGemini\u306e\u30d7\u30ed\u30f3\u30d7\u30c8\u306e\u4e16\u754c\u306b\u3001\u98db\u3073\u8fbc\u3093\u3067\u307f\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>\u30d7\u30ed\u30f3\u30d7\u30c8no1(\u5916\u6bbb\u306e\u8a2d\u5b9a\u3068\u521d\u671f\u52d5\u4f5c:\u76f8\u4e92\u624b\u52d5)<\/summary>\n<pre class=\"wp-block-code\"><code># othello.py\n\n# 1. \u30b2\u30fc\u30e0\u30dc\u30fc\u30c9\u306e\u521d\u671f\u5316\ndef create_board():\n    board = &#091;]\n    for i in range(8):\n        row = &#091;' '] * 8\n        board.append(row)\n    \n    board&#091;3]&#091;3] = 'W'\n    board&#091;3]&#091;4] = 'B'\n    board&#091;4]&#091;3] = 'B'\n    board&#091;4]&#091;4] = 'W'\n    return board\n\n# 2. \u30dc\u30fc\u30c9\u306e\u8868\u793a\ndef print_board(board):\n    print('  a b c d e f g h')\n    print(' +-+-+-+-+-+-+-+-+')\n    for i in range(8):\n        print(f'{i+1}|', end='')\n        for j in range(8):\n            print(f'{board&#091;i]&#091;j]}|', end='')\n        print(f' {i+1}')\n    print(' +-+-+-+-+-+-+-+-+')\n    print('  a b c d e f g h')\n\n# 3. \u99d2\u3092\u7f6e\u3051\u308b\u5834\u6240\u306e\u5224\u5b9a\u3068\u99d2\u306e\u53cd\u8ee2\ndef is_valid_move(board, row, col, player, opponent):\n    if not (0 &lt;= row &lt; 8 and 0 &lt;= col &lt; 8) or board&#091;row]&#091;col] != ' ':\n        return False\n\n    directions = &#091;\n        (-1, -1), (-1, 0), (-1, 1),\n        (0, -1),          (0, 1),\n        (1, -1),  (1, 0),  (1, 1)\n    ]\n    \n    found_flips = &#091;]\n\n    for dr, dc in directions:\n        r, c = row + dr, col + dc\n        path = &#091;]\n        while 0 &lt;= r &lt; 8 and 0 &lt;= c &lt; 8 and board&#091;r]&#091;c] == opponent:\n            path.append((r, c))\n            r, c = r + dr, c + dc\n        \n        if 0 &lt;= r &lt; 8 and 0 &lt;= c &lt; 8 and board&#091;r]&#091;c] == player and path:\n            found_flips.extend(path)\n            \n    return found_flips\n\ndef flip_pieces(board, pieces_to_flip, player):\n    for r, c in pieces_to_flip:\n        board&#091;r]&#091;c] = player\n\n# 4. \u30e1\u30a4\u30f3\u30b2\u30fc\u30e0\u30eb\u30fc\u30d7\ndef main():\n    board = create_board()\n    player_turn = 'B'\n    opponent_turn = 'W'\n\n    while True:\n        print_board(board)\n        print(f'\u73fe\u5728\u306e\u30bf\u30fc\u30f3: {player_turn}')\n\n        try:\n            move_str = input('\u99d2\u3092\u7f6e\u304f\u5834\u6240\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 (\u4f8b: d3): ')\n            col_char = move_str&#091;0].lower()\n            row_char = move_str&#091;1:]\n            \n            # \u5165\u529b\u3092\u5ea7\u6a19\u306b\u5909\u63db\n            col = 'abcdefgh'.index(col_char)\n            row = int(row_char) - 1\n            \n            if not (0 &lt;= row &lt; 8 and 0 &lt;= col &lt; 8):\n                print('\u7121\u52b9\u306a\u5165\u529b\u3067\u3059\u3002')\n                continue\n            \n            # \u6709\u52b9\u306a\u624b\u304b\u5224\u5b9a\n            pieces_to_flip = is_valid_move(board, row, col, player_turn, opponent_turn)\n            \n            if pieces_to_flip:\n                board&#091;row]&#091;col] = player_turn\n                flip_pieces(board, pieces_to_flip, player_turn)\n                \n                # \u30bf\u30fc\u30f3\u3092\u4ea4\u4ee3\n                player_turn, opponent_turn = opponent_turn, player_turn\n            else:\n                print('\u305d\u306e\u5834\u6240\u306b\u306f\u7f6e\u3051\u307e\u305b\u3093\u3002\u6709\u52b9\u306a\u624b\u3092\u6253\u3063\u3066\u304f\u3060\u3055\u3044\u3002')\n        \n        except (ValueError, IndexError):\n            print('\u7121\u52b9\u306a\u5165\u529b\u3067\u3059\u3002\u4f8b: d3 \u306e\u3088\u3046\u306b\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002')\n\n# \u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5b9f\u884c\nif __name__ == '__main__':\n    main()<\/code><\/pre>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>\u30d7\u30ed\u30f3\u30d7\u30c8no2(GUI\u306e\u8a2d\u5b9a1\u3068\u521d\u671f\u52d5\u4f5c:\u76f8\u4e92\u624b\u52d5)<\/summary>\n<pre class=\"wp-block-code\"><code># 1. \u30b2\u30fc\u30e0\u30dc\u30fc\u30c9\u306e\u521d\u671f\u5316\n# \u76e4\u9762\u3092\u8868\u3059\u305f\u3081\u306e\u5b9a\u6570\u3092\u5b9a\u7fa9\u3057\u307e\u3059\n# '\u30fb' : \u7a7a, '&#x26ab;' : \u9ed2, '&#x26aa;' : \u767d\nEMPTY = '\u30fb'\nBLACK = '&#x26ab;'\nWHITE = '&#x26aa;'\n\ndef create_board():\n    \"\"\"\n    8x8\u306e\u7a7a\u306e\u76e4\u9762\u3092\u4f5c\u6210\u3057\u3001\u521d\u671f\u914d\u7f6e\u306e\u77f3\u3092\u914d\u7f6e\u3057\u307e\u3059\u3002\n    \"\"\"\n    board = &#091;]\n    for _ in range(8):\n        row = &#091;EMPTY] * 8\n        board.append(row)\n    \n    board&#091;3]&#091;3] = WHITE\n    board&#091;3]&#091;4] = BLACK\n    board&#091;4]&#091;3] = BLACK\n    board&#091;4]&#091;4] = WHITE\n    return board\n\n# 2. \u30dc\u30fc\u30c9\u306e\u8868\u793a\ndef print_board(board):\n    \"\"\"\n    \u73fe\u5728\u306e\u76e4\u9762\u3092\u304d\u308c\u3044\u306b\u8868\u793a\u3057\u307e\u3059\u3002\n    \"\"\"\n    # \u5217\u306e\u8868\u8a18\u3092\u4fee\u6b63\n    print('    a    b    c    d    e    f    g    h')\n    # \u7f6b\u7dda\u306e\u8868\u793a\n    print('  +---+---+---+---+---+---+---+---+---+---')\n    for i in range(8):\n        # \u884c\u306e\u8868\u793a\u3068\u5347\u76ee\u306e\u8abf\u6574\n        row_str = f'{i+1} |'\n        for j in range(8):\n            row_str += f' {board&#091;i]&#091;j]} |'\n        print(row_str)\n        print('  +---+---+---+---+---+---+---+---+---+---')\n    \n# 3. \u99d2\u3092\u7f6e\u3051\u308b\u5834\u6240\u306e\u5224\u5b9a\u3068\u99d2\u306e\u53cd\u8ee2\ndef is_valid_move(board, row, col, player, opponent):\n    \"\"\"\n    \u6307\u5b9a\u3055\u308c\u305f\u4f4d\u7f6e\u306b\u77f3\u3092\u7f6e\u304f\u3053\u3068\u304c\u3067\u304d\u308b\u304b\u5224\u5b9a\u3057\u3001\n    \u3072\u3063\u304f\u308a\u8fd4\u305b\u308b\u77f3\u306e\u30ea\u30b9\u30c8\u3092\u8fd4\u3057\u307e\u3059\u3002\n    \"\"\"\n    if not (0 &lt;= row &lt; 8 and 0 &lt;= col &lt; 8) or board&#091;row]&#091;col] != EMPTY:\n        return None\n\n    # 8\u3064\u306e\u65b9\u5411\u3092\u5b9a\u7fa9 (\u884c\u306e\u5909\u5316, \u5217\u306e\u5909\u5316)\n    directions = &#091;\n        (-1, -1), (-1, 0), (-1, 1),\n        (0, -1),            (0, 1),\n        (1, -1),  (1, 0),  (1, 1)\n    ]\n    \n    pieces_to_flip = &#091;]\n\n    for dr, dc in directions:\n        r, c = row + dr, col + dc\n        path = &#091;]\n        while 0 &lt;= r &lt; 8 and 0 &lt;= c &lt; 8 and board&#091;r]&#091;c] == opponent:\n            path.append((r, c))\n            r, c = r + dr, c + dc\n        \n        # \u631f\u307f\u8fbc\u3093\u3067\u3044\u308b\u304b\u30c1\u30a7\u30c3\u30af\n        if 0 &lt;= r &lt; 8 and 0 &lt;= c &lt; 8 and board&#091;r]&#091;c] == player and path:\n            pieces_to_flip.extend(path)\n            \n    return pieces_to_flip if pieces_to_flip else None\n\ndef flip_pieces(board, pieces_to_flip, player):\n    \"\"\"\n    \u3072\u3063\u304f\u308a\u8fd4\u3059\u77f3\u306e\u30ea\u30b9\u30c8\u3092\u3001\u6307\u5b9a\u3055\u308c\u305f\u30d7\u30ec\u30a4\u30e4\u30fc\u306e\u77f3\u306b\u5909\u63db\u3057\u307e\u3059\u3002\n    \"\"\"\n    for r, c in pieces_to_flip:\n        board&#091;r]&#091;c] = player\n\ndef get_valid_moves(board, player, opponent):\n    \"\"\"\n    \u73fe\u5728\u306e\u30d7\u30ec\u30a4\u30e4\u30fc\u304c\u77f3\u3092\u7f6e\u3051\u308b\u3059\u3079\u3066\u306e\u5834\u6240\uff08\u6709\u52b9\u306a\u624b\uff09\u306e\u30ea\u30b9\u30c8\u3092\u8fd4\u3057\u307e\u3059\u3002\n    \"\"\"\n    valid_moves = &#091;]\n    for r in range(8):\n        for c in range(8):\n            if board&#091;r]&#091;c] == EMPTY:\n                if is_valid_move(board, r, c, player, opponent):\n                    valid_moves.append((r, c))\n    return valid_moves\n\ndef count_pieces(board):\n    \"\"\"\n    \u76e4\u9762\u4e0a\u306e\u77f3\u306e\u6570\u3092\u6570\u3048\u3001\u52dd\u6557\u3092\u8868\u793a\u3057\u307e\u3059\u3002\n    \"\"\"\n    black_count = 0\n    white_count = 0\n    for r in range(8):\n        for c in range(8):\n            if board&#091;r]&#091;c] == BLACK:\n                black_count += 1\n            elif board&#091;r]&#091;c] == WHITE:\n                white_count += 1\n    \n    print(f\"\u6700\u7d42\u7d50\u679c\uff1a\u9ed2 = {black_count}\u3001\u767d = {white_count}\")\n    \n    if black_count &gt; white_count:\n        print(\"\u9ed2\u306e\u52dd\u3061\u3067\u3059\uff01\")\n    elif white_count &gt; black_count:\n        print(\"\u767d\u306e\u52dd\u3061\u3067\u3059\uff01\")\n    else:\n        print(\"\u5f15\u304d\u5206\u3051\u3067\u3059\u3002\")\n\n# 4. \u30e1\u30a4\u30f3\u30b2\u30fc\u30e0\u30eb\u30fc\u30d7\ndef main():\n    \"\"\"\n    \u30b2\u30fc\u30e0\u306e\u30e1\u30a4\u30f3\u51e6\u7406\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\n    \"\"\"\n    board = create_board()\n    player_turn = BLACK\n    opponent_turn = WHITE\n    pass_count = 0  # \u9023\u7d9a\u3067\u30d1\u30b9\u3057\u305f\u56de\u6570\u3092\u30ab\u30a6\u30f3\u30c8\n\n    while True:\n        print_board(board)\n        \n        valid_moves = get_valid_moves(board, player_turn, opponent_turn)\n        \n        if not valid_moves:\n            pass_count += 1\n            print(f'\u73fe\u5728\u306e\u30bf\u30fc\u30f3: {\"\u9ed2\" if player_turn == BLACK else \"\u767d\"}')\n            print(\"\u7f6e\u3051\u308b\u5834\u6240\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u30d1\u30b9\u3057\u307e\u3059\u3002\")\n            \n            if pass_count == 2:\n                print(\"\u4e21\u30d7\u30ec\u30a4\u30e4\u30fc\u304c\u30d1\u30b9\u3057\u307e\u3057\u305f\u3002\u30b2\u30fc\u30e0\u3092\u7d42\u4e86\u3057\u307e\u3059\u3002\")\n                break\n            \n            player_turn, opponent_turn = opponent_turn, player_turn\n            continue\n        else:\n            pass_count = 0\n            \n        print(f'\u73fe\u5728\u306e\u30bf\u30fc\u30f3: {\"\u9ed2\" if player_turn == BLACK else \"\u767d\"}')\n        \n        try:\n            move_str = input('\u99d2\u3092\u7f6e\u304f\u5834\u6240\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 (\u4f8b: d3): ')\n            \n            if move_str.lower() == 'q':\n                print(\"\u30b2\u30fc\u30e0\u3092\u7d42\u4e86\u3057\u307e\u3059\u3002\")\n                break\n\n            col_char = move_str&#091;0].lower()\n            row_char = move_str&#091;1:]\n            \n            col = 'abcdefgh'.index(col_char)\n            row = int(row_char) - 1\n            \n            if (row, col) not in valid_moves:\n                print('\u305d\u306e\u5834\u6240\u306b\u306f\u7f6e\u3051\u307e\u305b\u3093\u3002\u6709\u52b9\u306a\u624b\u3092\u6253\u3063\u3066\u304f\u3060\u3055\u3044\u3002')\n                continue\n            \n            pieces_to_flip = is_valid_move(board, row, col, player_turn, opponent_turn)\n            board&#091;row]&#091;col] = player_turn\n            flip_pieces(board, pieces_to_flip, player_turn)\n            \n            player_turn, opponent_turn = opponent_turn, player_turn\n        \n        except (ValueError, IndexError):\n            print('\u7121\u52b9\u306a\u5165\u529b\u3067\u3059\u3002\u4f8b: d3 \u306e\u3088\u3046\u306b\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002')\n    \n    print(\"\u30b2\u30fc\u30e0\u7d42\u4e86\uff01\")\n    count_pieces(board)\n    \n    input(\"\u7d50\u679c\u3092\u78ba\u8a8d\u5f8c\u3001\u4f55\u304b\u30ad\u30fc\u3092\u62bc\u3057\u3066\u7d42\u4e86\u3057\u3066\u304f\u3060\u3055\u3044...\")\n\n# \u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5b9f\u884c\nif __name__ == '__main__':\n    main()<\/code><\/pre>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>\u30d7\u30ed\u30f3\u30d7\u30c8no3(GUI\u306e\u8a2d\u5b9a2\u3068\u521d\u671f\u52d5\u4f5c:\u76f8\u4e92\u624b\u52d5:\u76e4\u9762\u307b\u307c\u5b8c\u6210)<\/summary>\n<pre class=\"wp-block-code\"><code>import tkinter as tk\nfrom tkinter import messagebox\n\n# \u76e4\u9762\u3092\u8868\u3059\u305f\u3081\u306e\u5b9a\u6570\nEMPTY = '\u30fb'\nBLACK = '&#x26ab;'\nWHITE = '&#x26aa;'\n\n# \u30a6\u30a3\u30f3\u30c9\u30a6\u3068\u30ad\u30e3\u30f3\u30d0\u30b9\u306e\u30b5\u30a4\u30ba\nBOARD_SIZE = 400\nCELL_SIZE = BOARD_SIZE \/\/ 8\n\n# \u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570\u3068\u3057\u3066\u30dc\u30fc\u30c9\u306e\u72b6\u614b\u3092\u4fdd\u6301\ngame_board = None\ncanvas = None\ncurrent_player = BLACK\npass_count = 0\n\ndef create_board():\n    \"\"\"\n    8x8\u306e\u7a7a\u306e\u76e4\u9762\u3092\u4f5c\u6210\u3057\u3001\u521d\u671f\u914d\u7f6e\u306e\u77f3\u3092\u914d\u7f6e\u3057\u307e\u3059\u3002\n    \"\"\"\n    board = &#091;]\n    for _ in range(8):\n        row = &#091;EMPTY] * 8\n        board.append(row)\n    \n    board&#091;3]&#091;3] = WHITE\n    board&#091;3]&#091;4] = BLACK\n    board&#091;4]&#091;3] = BLACK\n    board&#091;4]&#091;4] = WHITE\n    return board\n\ndef is_valid_move(board, row, col, player, opponent):\n    \"\"\"\n    \u6307\u5b9a\u3055\u308c\u305f\u4f4d\u7f6e\u306b\u77f3\u3092\u7f6e\u304f\u3053\u3068\u304c\u3067\u304d\u308b\u304b\u5224\u5b9a\u3057\u3001\n    \u3072\u3063\u304f\u308a\u8fd4\u305b\u308b\u77f3\u306e\u30ea\u30b9\u30c8\u3092\u8fd4\u3057\u307e\u3059\u3002\n    \"\"\"\n    if not (0 &lt;= row &lt; 8 and 0 &lt;= col &lt; 8) or board&#091;row]&#091;col] != EMPTY:\n        return None\n\n    directions = &#091;\n        (-1, -1), (-1, 0), (-1, 1),\n        (0, -1),            (0, 1),\n        (1, -1),  (1, 0),  (1, 1)\n    ]\n    \n    pieces_to_flip = &#091;]\n\n    for dr, dc in directions:\n        r, c = row + dr, col + dc\n        path = &#091;]\n        while 0 &lt;= r &lt; 8 and 0 &lt;= c &lt; 8 and board&#091;r]&#091;c] == opponent:\n            path.append((r, c))\n            r, c = r + dr, c + dc\n        \n        if 0 &lt;= r &lt; 8 and 0 &lt;= c &lt; 8 and board&#091;r]&#091;c] == player and path:\n            pieces_to_flip.extend(path)\n            \n    return pieces_to_flip if pieces_to_flip else None\n\ndef flip_pieces(board, pieces_to_flip, player):\n    \"\"\"\n    \u3072\u3063\u304f\u308a\u8fd4\u3059\u77f3\u306e\u30ea\u30b9\u30c8\u3092\u3001\u6307\u5b9a\u3055\u308c\u305f\u30d7\u30ec\u30a4\u30e4\u30fc\u306e\u77f3\u306b\u5909\u63db\u3057\u307e\u3059\u3002\n    \"\"\"\n    for r, c in pieces_to_flip:\n        board&#091;r]&#091;c] = player\n\ndef get_valid_moves(board, player, opponent):\n    \"\"\"\n    \u73fe\u5728\u306e\u30d7\u30ec\u30a4\u30e4\u30fc\u304c\u77f3\u3092\u7f6e\u3051\u308b\u3059\u3079\u3066\u306e\u5834\u6240\uff08\u6709\u52b9\u306a\u624b\uff09\u306e\u30ea\u30b9\u30c8\u3092\u8fd4\u3057\u307e\u3059\u3002\n    \"\"\"\n    valid_moves = &#091;]\n    for r in range(8):\n        for c in range(8):\n            if board&#091;r]&#091;c] == EMPTY:\n                if is_valid_move(board, r, c, player, opponent):\n                    valid_moves.append((r, c))\n    return valid_moves\n\ndef count_pieces(board):\n    \"\"\"\n    \u76e4\u9762\u4e0a\u306e\u77f3\u306e\u6570\u3092\u6570\u3048\u3001\u52dd\u6557\u3092\u6c7a\u5b9a\u3057\u307e\u3059\u3002\n    \"\"\"\n    black_count = sum(row.count(BLACK) for row in board)\n    white_count = sum(row.count(WHITE) for row in board)\n    return black_count, white_count\n\ndef end_game_check():\n    \"\"\"\n    \u30b2\u30fc\u30e0\u304c\u7d42\u4e86\u3057\u305f\u304b\u30c1\u30a7\u30c3\u30af\u3057\u3001\u7d42\u4e86\u3057\u3066\u3044\u308c\u3070\u52dd\u6557\u3092\u8868\u793a\u3057\u307e\u3059\u3002\n    \"\"\"\n    global pass_count\n    \n    black_count, white_count = count_pieces(game_board)\n    \n    if pass_count == 2 or (black_count + white_count) == 64:\n        # \u30b2\u30fc\u30e0\u7d42\u4e86\n        if black_count &gt; white_count:\n            message = f\"\u30b2\u30fc\u30e0\u7d42\u4e86\uff01\\n\u9ed2\u306e\u52dd\u3061\u3067\u3059\uff01\\n(\u9ed2: {black_count}, \u767d: {white_count})\"\n        elif white_count &gt; black_count:\n            message = f\"\u30b2\u30fc\u30e0\u7d42\u4e86\uff01\\n\u767d\u306e\u52dd\u3061\u3067\u3059\uff01\\n(\u9ed2: {black_count}, \u767d: {white_count})\"\n        else:\n            message = f\"\u30b2\u30fc\u30e0\u7d42\u4e86\uff01\\n\u5f15\u304d\u5206\u3051\u3067\u3059\uff01\\n(\u9ed2: {black_count}, \u767d: {white_count})\"\n            \n        messagebox.showinfo(\"\u30b2\u30fc\u30e0\u7d42\u4e86\", message)\n        return True\n    return False\n\ndef draw_pieces():\n    \"\"\"\n    Python\u306e\u30dc\u30fc\u30c9\u60c5\u5831\u306b\u57fa\u3065\u3044\u3066\u3001canvas\u4e0a\u306b\u77f3\u3092\u63cf\u753b\u3057\u307e\u3059\u3002\n    \"\"\"\n    canvas.delete(\"all\")\n    \n    # \u76e4\u9762\u306e\u5347\u76ee\u3092\u518d\u63cf\u753b\n    for i in range(8):\n        for j in range(8):\n            x1 = j * CELL_SIZE\n            y1 = i * CELL_SIZE\n            x2 = x1 + CELL_SIZE\n            y2 = y1 + CELL_SIZE\n            canvas.create_rectangle(x1, y1, x2, y2, outline=\"black\", fill=\"green\")\n            \n    # \u77f3\u3092\u63cf\u753b\n    for row_idx in range(8):\n        for col_idx in range(8):\n            piece = game_board&#091;row_idx]&#091;col_idx]\n            if piece == BLACK:\n                color = \"black\"\n            elif piece == WHITE:\n                color = \"white\"\n            else:\n                continue\n            \n            x1 = col_idx * CELL_SIZE + 5\n            y1 = row_idx * CELL_SIZE + 5\n            x2 = x1 + CELL_SIZE - 10\n            y2 = y1 + CELL_SIZE - 10\n            \n            canvas.create_oval(x1, y1, x2, y2, fill=color, outline=\"black\")\n\ndef on_click(event):\n    \"\"\"\n    \u30de\u30a6\u30b9\u304c\u30af\u30ea\u30c3\u30af\u3055\u308c\u305f\u3068\u304d\u306b\u547c\u3073\u51fa\u3055\u308c\u308b\u95a2\u6570\u3067\u3059\u3002\n    \"\"\"\n    global current_player, pass_count\n    \n    col = event.x \/\/ CELL_SIZE\n    row = event.y \/\/ CELL_SIZE\n    \n    opponent_player = WHITE if current_player == BLACK else BLACK\n    \n    pieces_to_flip = is_valid_move(game_board, row, col, current_player, opponent_player)\n\n    if pieces_to_flip:\n        # \u6709\u52b9\u306a\u624b\u3067\u3042\u308c\u3070\u3001\u77f3\u3092\u7f6e\u304f\n        game_board&#091;row]&#091;col] = current_player\n        flip_pieces(game_board, pieces_to_flip, current_player)\n        \n        # \u30d7\u30ec\u30a4\u30e4\u30fc\u3092\u4ea4\u4ee3\n        current_player = opponent_player\n        pass_count = 0  # \u30d1\u30b9\u30ab\u30a6\u30f3\u30c8\u3092\u30ea\u30bb\u30c3\u30c8\n\n    else:\n        # \u7121\u52b9\u306a\u624b\u306e\u5834\u5408\u3001\u4f55\u3082\u3057\u306a\u3044\n        return\n        \n    draw_pieces()\n    \n    # \u76f8\u624b\u30d7\u30ec\u30a4\u30e4\u30fc\u306b\u6709\u52b9\u306a\u624b\u304c\u3042\u308b\u304b\u30c1\u30a7\u30c3\u30af\n    if not get_valid_moves(game_board, current_player, opponent_player):\n        print(f'{current_player}\u306f\u7f6e\u3051\u308b\u5834\u6240\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u30d1\u30b9\u3057\u307e\u3059\u3002')\n        pass_count += 1\n        current_player = opponent_player  # \u30d7\u30ec\u30a4\u30e4\u30fc\u3092\u518d\u5ea6\u4ea4\u4ee3\n        \n        # \u9023\u7d9a\u30d1\u30b9\u306e\u5834\u5408\u3001\u30b2\u30fc\u30e0\u7d42\u4e86\u30c1\u30a7\u30c3\u30af\n        if pass_count == 2:\n            end_game_check()\n        else:\n            # \u30d1\u30b9\u3057\u305f\u306e\u3067\u3001\u76e4\u9762\u3092\u518d\u63cf\u753b\u3057\u3066\u6b21\u306e\u30d7\u30ec\u30a4\u30e4\u30fc\u306e\u756a\n            draw_pieces()\n            \n    # \u30b2\u30fc\u30e0\u7d42\u4e86\u6761\u4ef6\u3092\u5e38\u306b\u30c1\u30a7\u30c3\u30af\n    if not end_game_check():\n        pass\n    else:\n        print(\"\u30b2\u30fc\u30e0\u304c\u7d42\u4e86\u3057\u307e\u3057\u305f\u3002\")\n\ndef create_gui_board():\n    \"\"\"\n    tkinter\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u3068\u30aa\u30bb\u30ed\u76e4\u306eGUI\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\n    \"\"\"\n    global game_board, canvas\n    \n    root = tk.Tk()\n    root.title(\"\u30aa\u30bb\u30ed\u30b2\u30fc\u30e0\")\n\n    canvas = tk.Canvas(root, width=BOARD_SIZE, height=BOARD_SIZE, bg=\"green\")\n    canvas.pack()\n    \n    canvas.bind(\"&lt;Button-1&gt;\", on_click)\n            \n    game_board = create_board()\n    draw_pieces()\n\n    root.mainloop()\n\n# \u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5b9f\u884c\nif __name__ == \"__main__\":\n    create_gui_board()<\/code><\/pre>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>\u30d7\u30ed\u30f3\u30d7\u30c8no4(AI\u5bfe\u6226\u76f8\u624b\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3068\u521d\u671f\u52d5\u4f5c)<\/summary>\n<pre class=\"wp-block-code\"><code>import tkinter as tk\nfrom tkinter import messagebox\nimport random # &lt;--- \u3053\u3053\u3092\u8ffd\u52a0\n\n# \u76e4\u9762\u3092\u8868\u3059\u305f\u3081\u306e\u5b9a\u6570\nEMPTY = '\u30fb'\nBLACK = '&#x26ab;'\nWHITE = '&#x26aa;'\n\n# \u30a6\u30a3\u30f3\u30c9\u30a6\u3068\u30ad\u30e3\u30f3\u30d0\u30b9\u306e\u30b5\u30a4\u30ba\nBOARD_SIZE = 400\nCELL_SIZE = BOARD_SIZE \/\/ 8\n\n# \u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570\u3068\u3057\u3066\u30dc\u30fc\u30c9\u306e\u72b6\u614b\u3092\u4fdd\u6301\ngame_board = None\ncanvas = None\ncurrent_player = BLACK\npass_count = 0\n\n# AI\u306e\u8a2d\u5b9a\nAI_PLAYER = WHITE # AI\u3092\u767d\u306e\u30d7\u30ec\u30a4\u30e4\u30fc\u306b\u8a2d\u5b9a\nIS_AI_TURN = False # AI\u306e\u30bf\u30fc\u30f3\u304b\u3069\u3046\u304b\u3092\u793a\u3059\u30d5\u30e9\u30b0\n\ndef create_board():\n    \"\"\"\n    8x8\u306e\u7a7a\u306e\u76e4\u9762\u3092\u4f5c\u6210\u3057\u3001\u521d\u671f\u914d\u7f6e\u306e\u77f3\u3092\u914d\u7f6e\u3057\u307e\u3059\u3002\n    \"\"\"\n    board = &#091;]\n    for _ in range(8):\n        row = &#091;EMPTY] * 8\n        board.append(row)\n    \n    board&#091;3]&#091;3] = WHITE\n    board&#091;3]&#091;4] = BLACK\n    board&#091;4]&#091;3] = BLACK\n    board&#091;4]&#091;4] = WHITE\n    return board\n\n# ----------------- AI\u30ed\u30b8\u30c3\u30af\u306e\u8ffd\u52a0 -----------------\ndef get_ai_move(valid_moves):\n    \"\"\"\n    \u6709\u52b9\u306a\u624b\u306e\u4e2d\u304b\u3089\u30e9\u30f3\u30c0\u30e0\u306b\u624b\u3092\u9078\u629e\u3057\u307e\u3059\u3002\n    \"\"\"\n    return random.choice(valid_moves)\n\ndef handle_ai_turn():\n    \"\"\"\n    AI\u306e\u30bf\u30fc\u30f3\u3092\u51e6\u7406\u3057\u307e\u3059\u3002\n    \"\"\"\n    global current_player, pass_count, IS_AI_TURN\n    \n    opponent_player = BLACK # AI\u306f\u767d\u306a\u306e\u3067\u3001\u76f8\u624b\u306f\u9ed2\n    \n    valid_moves = get_valid_moves(game_board, AI_PLAYER, opponent_player)\n\n    if not valid_moves:\n        pass_count += 1\n        print(\"AI\u306f\u7f6e\u3051\u308b\u5834\u6240\u304c\u3042\u308a\u307e\u305b\u3093\u3002\u30d1\u30b9\u3057\u307e\u3059\u3002\")\n        current_player = BLACK # \u30d7\u30ec\u30a4\u30e4\u30fc\u3092\u4ea4\u4ee3\n        IS_AI_TURN = False\n        end_game_check()\n        draw_pieces()\n    else:\n        pass_count = 0\n        \n        # AI\u304c\u30e9\u30f3\u30c0\u30e0\u306b\u624b\u3092\u9078\u629e\n        row, col = get_ai_move(valid_moves)\n        \n        # \u77f3\u3092\u7f6e\u304f\u51e6\u7406\n        pieces_to_flip = is_valid_move(game_board, row, col, AI_PLAYER, opponent_player)\n        game_board&#091;row]&#091;col] = AI_PLAYER\n        flip_pieces(game_board, pieces_to_flip, AI_PLAYER)\n        \n        current_player = BLACK # \u30d7\u30ec\u30a4\u30e4\u30fc\u3092\u4ea4\u4ee3\n        IS_AI_TURN = False\n        \n        draw_pieces()\n        \n        if not end_game_check():\n            pass\n        else:\n            print(\"\u30b2\u30fc\u30e0\u304c\u7d42\u4e86\u3057\u307e\u3057\u305f\u3002\")\n            \ndef on_click(event):\n    \"\"\"\n    \u30de\u30a6\u30b9\u304c\u30af\u30ea\u30c3\u30af\u3055\u308c\u305f\u3068\u304d\u306b\u547c\u3073\u51fa\u3055\u308c\u308b\u95a2\u6570\u3067\u3059\u3002\n    \"\"\"\n    global current_player, pass_count, IS_AI_TURN\n    \n    if IS_AI_TURN:\n        return # AI\u306e\u30bf\u30fc\u30f3\u4e2d\u306f\u30d7\u30ec\u30a4\u30e4\u30fc\u306e\u5165\u529b\u3092\u7121\u8996\n    \n    col = event.x \/\/ CELL_SIZE\n    row = event.y \/\/ CELL_SIZE\n    \n    opponent_player = WHITE # \u30d7\u30ec\u30a4\u30e4\u30fc\u306f\u9ed2\u306a\u306e\u3067\u3001\u76f8\u624b\u306f\u767d\n    \n    pieces_to_flip = is_valid_move(game_board, row, col, current_player, opponent_player)\n\n    if pieces_to_flip:\n        game_board&#091;row]&#091;col] = current_player\n        flip_pieces(game_board, pieces_to_flip, current_player)\n        \n        pass_count = 0\n        current_player = opponent_player\n        IS_AI_TURN = True # \u6b21\u306e\u30bf\u30fc\u30f3\u306fAI\n        \n        draw_pieces()\n        \n        if not end_game_check():\n            canvas.after(500, handle_ai_turn) # 0.5\u79d2\u5f8c\u306bAI\u3092\u52d5\u304b\u3059\n        else:\n            print(\"\u30b2\u30fc\u30e0\u304c\u7d42\u4e86\u3057\u307e\u3057\u305f\u3002\")\n    else:\n        print(\"\u305d\u306e\u5834\u6240\u306b\u306f\u7f6e\u3051\u307e\u305b\u3093\u3002\u6709\u52b9\u306a\u624b\u3092\u6253\u3063\u3066\u304f\u3060\u3055\u3044\u3002\")\n\n\n# ----------------- \u3053\u3053\u304b\u3089\u4e0b\u306e\u95a2\u6570\u306f\u5909\u66f4\u306a\u3057 -----------------\ndef is_valid_move(board, row, col, player, opponent):\n    if not (0 &lt;= row &lt; 8 and 0 &lt;= col &lt; 8) or board&#091;row]&#091;col] != EMPTY:\n        return None\n    directions = &#091;(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]\n    pieces_to_flip = &#091;]\n    for dr, dc in directions:\n        r, c = row + dr, col + dc\n        path = &#091;]\n        while 0 &lt;= r &lt; 8 and 0 &lt;= c &lt; 8 and board&#091;r]&#091;c] == opponent:\n            path.append((r, c))\n            r, c = r + dr, c + dc\n        if 0 &lt;= r &lt; 8 and 0 &lt;= c &lt; 8 and board&#091;r]&#091;c] == player and path:\n            pieces_to_flip.extend(path)\n    return pieces_to_flip if pieces_to_flip else None\n\ndef flip_pieces(board, pieces_to_flip, player):\n    for r, c in pieces_to_flip:\n        board&#091;r]&#091;c] = player\n\ndef get_valid_moves(board, player, opponent):\n    valid_moves = &#091;]\n    for r in range(8):\n        for c in range(8):\n            if board&#091;r]&#091;c] == EMPTY:\n                if is_valid_move(board, r, c, player, opponent):\n                    valid_moves.append((r, c))\n    return valid_moves\n\ndef count_pieces(board):\n    black_count = sum(row.count(BLACK) for row in board)\n    white_count = sum(row.count(WHITE) for row in board)\n    return black_count, white_count\n\ndef end_game_check():\n    global pass_count\n    black_count, white_count = count_pieces(game_board)\n    if pass_count == 2 or (black_count + white_count) == 64:\n        if black_count &gt; white_count:\n            message = f\"\u30b2\u30fc\u30e0\u7d42\u4e86\uff01\\n\u9ed2\u306e\u52dd\u3061\u3067\u3059\uff01\\n(\u9ed2: {black_count}, \u767d: {white_count})\"\n        elif white_count &gt; black_count:\n            message = f\"\u30b2\u30fc\u30e0\u7d42\u4e86\uff01\\n\u767d\u306e\u52dd\u3061\u3067\u3059\uff01\\n(\u9ed2: {black_count}, \u767d: {white_count})\"\n        else:\n            message = f\"\u30b2\u30fc\u30e0\u7d42\u4e86\uff01\\n\u5f15\u304d\u5206\u3051\u3067\u3059\uff01\\n(\u9ed2: {black_count}, \u767d: {white_count})\"\n        messagebox.showinfo(\"\u30b2\u30fc\u30e0\u7d42\u4e86\", message)\n        return True\n    return False\n\ndef draw_pieces():\n    canvas.delete(\"all\")\n    for i in range(8):\n        for j in range(8):\n            x1 = j * CELL_SIZE\n            y1 = i * CELL_SIZE\n            x2 = x1 + CELL_SIZE\n            y2 = y1 + CELL_SIZE\n            canvas.create_rectangle(x1, y1, x2, y2, outline=\"black\", fill=\"green\")\n    for row_idx in range(8):\n        for col_idx in range(8):\n            piece = game_board&#091;row_idx]&#091;col_idx]\n            if piece == BLACK:\n                color = \"black\"\n            elif piece == WHITE:\n                color = \"white\"\n            else:\n                continue\n            x1 = col_idx * CELL_SIZE + 5\n            y1 = row_idx * CELL_SIZE + 5\n            x2 = x1 + CELL_SIZE - 10\n            y2 = y1 + CELL_SIZE - 10\n            canvas.create_oval(x1, y1, x2, y2, fill=color, outline=\"black\")\n\ndef create_gui_board():\n    global game_board, canvas\n    root = tk.Tk()\n    root.title(\"\u30aa\u30bb\u30ed\u30b2\u30fc\u30e0\")\n    canvas = tk.Canvas(root, width=BOARD_SIZE, height=BOARD_SIZE, bg=\"green\")\n    canvas.pack()\n    canvas.bind(\"&lt;Button-1&gt;\", on_click)\n    game_board = create_board()\n    draw_pieces()\n    root.mainloop()\n\nif __name__ == \"__main__\":\n    create_gui_board()<\/code><\/pre>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>\u30d7\u30ed\u30f3\u30d7\u30c8no5(AI\u5bfe\u6226\u76f8\u624b\u306eGUI\u6539\u5584:\u30d2\u30f3\u30c8\u8868\u793a\u3068\u521d\u671f\u52d5\u4f5c)<\/summary>\n<pre class=\"wp-block-code\"><code>import tkinter as tk\nfrom tkinter import messagebox\nimport copy\nimport time \nimport sys\n\n# --- \u30b2\u30fc\u30e0\u5b9a\u6570 ---\nBOARD_SIZE = 8\nCELL_SIZE = 60\nWINDOW_SIZE = BOARD_SIZE * CELL_SIZE\nSIDE_PANEL_WIDTH = 150\nAI_PLAYER = 2 # 2: \u9ed2 (\u5f8c\u653b) \/ 1: \u767d (\u5148\u653b)\nSEARCH_DEPTH = 4 # AI\u306e\u63a2\u7d22\u6df1\u3055\n\n# --- \u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570 ---\nroot = None\ncanvas = None\nboard = None\ncurrent_player = 1 # 1:\u767d, 2:\u9ed2\ngame_running = True\nscore_label = None\nturn_label = None\nhistory = &#091;] \n\n# --- \u521d\u671f\u5316 ---\n\ndef create_initial_board():\n    \"\"\"\u521d\u671f\u76e4\u9762\u3092\u4f5c\u6210 (0:\u7a7a, 1:\u767d, 2:\u9ed2)\"\"\"\n    new_board = &#091;&#091;0] * BOARD_SIZE for _ in range(BOARD_SIZE)]\n    new_board&#091;3]&#091;3] = 1 # \u767d\n    new_board&#091;3]&#091;4] = 2 # \u9ed2\n    new_board&#091;4]&#091;3] = 2 # \u9ed2\n    new_board&#091;4]&#091;4] = 1 # \u767d\n    return new_board\n\n# --- \u30eb\u30fc\u30eb\u3068AI\u30ed\u30b8\u30c3\u30af ---\n\ndef is_valid_move(r, c, player, current_board):\n    \"\"\"\u6307\u5b9a\u3055\u308c\u305f\u30de\u30b9\u306b\u99d2\u3092\u7f6e\u3051\u308b\u304b\u30c1\u30a7\u30c3\u30af\u3057\u3001\u88cf\u8fd4\u305b\u308b\u99d2\u306e\u30ea\u30b9\u30c8\u3092\u8fd4\u3059\"\"\"\n    if current_board&#091;r]&#091;c] != 0:\n        return &#091;]\n\n    opponent = 3 - player\n    flips = &#091;]\n\n    # 8\u65b9\u5411\u3092\u30c1\u30a7\u30c3\u30af\n    directions = &#091;(-1, 0), (1, 0), (0, -1), (0, 1), (-1, -1), (-1, 1), (1, -1), (1, 1)]\n\n    for dr, dc in directions:\n        line_flips = &#091;]\n        rr, cc = r + dr, c + dc\n\n        # \u76f8\u624b\u306e\u99d2\u304c\u7d9a\u304f\u9650\u308a\u9032\u3080\n        while 0 &lt;= rr &lt; BOARD_SIZE and 0 &lt;= cc &lt; BOARD_SIZE and current_board&#091;rr]&#091;cc] == opponent:\n            line_flips.append((rr, cc))\n            rr, cc = rr + dr, cc + dc\n        \n        # \u7d42\u70b9\u304c\u81ea\u5206\u306e\u99d2\u3067\u3001\u9593\u306b\u88cf\u8fd4\u305b\u308b\u99d2\u304c\u3042\u308b\u5834\u5408\n        if line_flips and 0 &lt;= rr &lt; BOARD_SIZE and 0 &lt;= cc &lt; BOARD_SIZE and current_board&#091;rr]&#091;cc] == player:\n            flips.extend(line_flips)\n\n    return flips\n\ndef get_valid_moves(player, current_board):\n    \"\"\"\u5408\u6cd5\u624b\u306e\u4e00\u89a7\u3092 (r, c) \u306e\u30ea\u30b9\u30c8\u3067\u8fd4\u3059\"\"\"\n    valid_moves = &#091;]\n    for r in range(BOARD_SIZE):\n        for c in range(BOARD_SIZE):\n            if is_valid_move(r, c, player, current_board):\n                valid_moves.append((r, c))\n    return valid_moves\n\ndef apply_move(r, c, player, current_board):\n    \"\"\"\u5b9f\u969b\u306b\u99d2\u3092\u7f6e\u304d\u3001\u76e4\u9762\u3092\u66f4\u65b0\u3059\u308b (\u65b0\u3057\u3044\u76e4\u9762\u3092\u8fd4\u3059)\"\"\"\n    new_board = &#091;row&#091;:] for row in current_board]\n    flips = is_valid_move(r, c, player, current_board)\n    \n    if not flips:\n        return new_board # \u7121\u52b9\u306a\u624b\u306e\u5834\u5408\u306f\u5143\u306e\u76e4\u9762\u3092\u8fd4\u3059\n\n    new_board&#091;r]&#091;c] = player\n    for fr, fc in flips:\n        new_board&#091;fr]&#091;fc] = player\n        \n    return new_board\n\ndef evaluate_board(current_board, player):\n    \"\"\"\u8a55\u4fa1\u95a2\u6570: \u99d2\u306e\u6570\u306e\u5dee\u3092\u8a08\u7b97\"\"\"\n    p1_count = sum(row.count(1) for row in current_board)\n    p2_count = sum(row.count(2) for row in current_board)\n    \n    if player == 1:\n        return p1_count - p2_count\n    else:\n        return p2_count - p1_count\n\ndef minimax(current_board, depth, is_maximizing_player, alpha, beta):\n    \"\"\"Minimax with Alpha-Beta Pruning\"\"\"\n    current_player_minimax = 2 if is_maximizing_player else 1\n    \n    # \u7d42\u7aef\u6761\u4ef6\n    valid_moves = get_valid_moves(current_player_minimax, current_board)\n    if depth == 0 or (not valid_moves and not get_valid_moves(3 - current_player_minimax, current_board)):\n        return evaluate_board(current_board, 2), None # AI(\u9ed2=2)\u8996\u70b9\u306e\u8a55\u4fa1\u3092\u8fd4\u3059\n\n    best_move = None\n    \n    if is_maximizing_player: # AI (\u9ed2=2) \u306e\u624b\u756a\n        max_eval = -float('inf')\n        for r, c in valid_moves:\n            new_board = apply_move(r, c, 2, current_board)\n            current_eval, _ = minimax(new_board, depth - 1, False, alpha, beta)\n            \n            if current_eval &gt; max_eval:\n                max_eval = current_eval\n                best_move = (r, c)\n            \n            alpha = max(alpha, max_eval)\n            if beta &lt;= alpha:\n                break\n        return max_eval, best_move\n        \n    else: # \u30d7\u30ec\u30a4\u30e4\u30fc (\u767d=1) \u306e\u624b\u756a\n        min_eval = float('inf')\n        for r, c in valid_moves:\n            new_board = apply_move(r, c, 1, current_board)\n            current_eval, _ = minimax(new_board, depth - 1, True, alpha, beta)\n            \n            if current_eval &lt; min_eval:\n                min_eval = current_eval\n                best_move = (r, c)\n                \n            beta = min(beta, min_eval)\n            if beta &lt;= alpha:\n                break\n        return min_eval, best_move\n\ndef find_best_move(current_board, depth):\n    start_time = time.time()\n    _, best_move = minimax(current_board, depth, True, -float('inf'), float('inf'))\n    end_time = time.time()\n    print(f\"Minimax\u63a2\u7d22\u6642\u9593: {end_time - start_time:.2f}\u79d2 (\u6df1\u3055: {depth})\")\n    return best_move\n\n# --- UI\u3068\u63cf\u753b ---\n\ndef draw_board():\n    \"\"\"\u76e4\u9762\u3092\u63cf\u753b\u3057\u3001\u99d2\u3092\u914d\u7f6e\u3059\u308b\"\"\"\n    canvas.delete(\"all\")\n    \n    # \u76e4\u9762\u306e\u30b0\u30ea\u30c3\u30c9\u7dda\u3092\u63cf\u753b\n    for i in range(BOARD_SIZE + 1):\n        # \u5782\u76f4\u7dda\n        canvas.create_line(i * CELL_SIZE, 0, i * CELL_SIZE, WINDOW_SIZE, fill=\"black\")\n        # \u6c34\u5e73\u7dda\n        canvas.create_line(0, i * CELL_SIZE, WINDOW_SIZE, i * CELL_SIZE, fill=\"black\")\n\n    # \u99d2\u306e\u914d\u7f6e\n    for r in range(BOARD_SIZE):\n        for c in range(BOARD_SIZE):\n            player = board&#091;r]&#091;c]\n            if player != 0:\n                x1 = c * CELL_SIZE + 5\n                y1 = r * CELL_SIZE + 5\n                x2 = (c + 1) * CELL_SIZE - 5\n                y2 = (r + 1) * CELL_SIZE - 5\n                color = \"white\" if player == 1 else \"black\"\n                canvas.create_oval(x1, y1, x2, y2, fill=color, outline=\"black\")\n\n    update_score_display()\n\ndef update_score_display():\n    \"\"\"\u30b9\u30b3\u30a2\u3068\u30bf\u30fc\u30f3\u8868\u793a\u3092\u66f4\u65b0\u3059\u308b\"\"\"\n    p1_count = sum(row.count(1) for row in board)\n    p2_count = sum(row.count(2) for row in board)\n    \n    score_text = f\"\u767d: {p1_count}\\n\u9ed2: {p2_count}\"\n    turn_text = f\"\u73fe\u5728\u306e\u30bf\u30fc\u30f3: {'\u767d' if current_player == 1 else '\u9ed2'}\"\n    \n    if score_label and turn_label:\n        score_label.config(text=score_text)\n        turn_label.config(text=turn_text)\n\ndef show_hint():\n    \"\"\"\u5408\u6cd5\u624b\u304c\u3042\u308b\u30de\u30b9\u3092\u30cf\u30a4\u30e9\u30a4\u30c8\u8868\u793a\u3059\u308b\"\"\"\n    canvas.delete(\"hint\")\n    valid_moves = get_valid_moves(current_player, board)\n    \n    for r, c in valid_moves:\n        x1 = c * CELL_SIZE + 2\n        y1 = r * CELL_SIZE + 2\n        x2 = (c + 1) * CELL_SIZE - 2\n        y2 = (r + 1) * CELL_SIZE - 2\n        canvas.create_rectangle(x1, y1, x2, y2, outline=\"yellow\", width=3, tags=\"hint\")\n\n# --- \u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9 ---\n\ndef handle_click(event):\n    \"\"\"\u30de\u30a6\u30b9\u304c\u30af\u30ea\u30c3\u30af\u3055\u308c\u305f\u3068\u304d\u306e\u51e6\u7406\"\"\"\n    global board, current_player, game_running\n    \n    if not game_running or current_player == AI_PLAYER:\n        return\n\n    c = event.x \/\/ CELL_SIZE\n    r = event.y \/\/ CELL_SIZE\n    \n    if not (0 &lt;= r &lt; BOARD_SIZE and 0 &lt;= c &lt; BOARD_SIZE):\n        return\n\n    flips = is_valid_move(r, c, current_player, board)\n    \n    if flips:\n        save_state() # \u5c65\u6b74\u4fdd\u5b58\n        \n        board = apply_move(r, c, current_player, board)\n        \n        next_player = 3 - current_player\n        end_turn(next_player)\n    else:\n        messagebox.showinfo(\"\u7121\u52b9\u306a\u624b\", \"\u305d\u3053\u306b\u306f\u7f6e\u3051\u307e\u305b\u3093\u3002\")\n\ndef end_turn(next_player):\n    \"\"\"\u30bf\u30fc\u30f3\u7d42\u4e86\u6642\u306e\u51e6\u7406\"\"\"\n    global current_player, game_running\n    current_player = next_player\n    \n    draw_board()\n    \n    p1_moves = get_valid_moves(1, board)\n    p2_moves = get_valid_moves(2, board)\n    \n    if not p1_moves and not p2_moves:\n        # \u4e21\u8005\u3068\u3082\u7f6e\u3051\u306a\u3044 = \u30b2\u30fc\u30e0\u7d42\u4e86\n        game_running = False\n        p1_count = sum(row.count(1) for row in board)\n        p2_count = sum(row.count(2) for row in board)\n        \n        winner = \"\u5f15\u304d\u5206\u3051\"\n        if p1_count &gt; p2_count: winner = \"\u767d\u306e\u52dd\u5229\"\n        elif p2_count &gt; p1_count: winner = \"\u9ed2\u306e\u52dd\u5229\"\n            \n        messagebox.showinfo(\"\u30b2\u30fc\u30e0\u7d42\u4e86\", f\"\u6700\u7d42\u30b9\u30b3\u30a2 \u767d:{p1_count}, \u9ed2:{p2_count}\\n{winner}\")\n        return\n        \n    elif not get_valid_moves(current_player, board):\n        # \u30d1\u30b9 (\u5408\u6cd5\u624b\u304c\u7121\u3044\u5834\u5408\u306f\u76f8\u624b\u306e\u30bf\u30fc\u30f3\u306b\u623b\u308b)\n        messagebox.showinfo(\"\u30d1\u30b9\", f\"{'\u767d' if current_player == 1 else '\u9ed2'}\u306f\u7f6e\u304f\u5834\u6240\u304c\u306a\u3044\u305f\u3081\u30d1\u30b9\u3057\u307e\u3059\u3002\")\n        current_player = 3 - current_player\n        draw_board() # \u30d7\u30ec\u30a4\u30e4\u30fc\u304c\u5909\u308f\u3063\u305f\u3053\u3068\u3092\u8868\u793a\n\n    show_hint()\n    \n    if current_player == AI_PLAYER and game_running:\n        root.after(500, make_ai_move) # 0.5\u79d2\u5f8c\u306bAI\u3092\u8d77\u52d5\n\ndef make_ai_move():\n    \"\"\"AI\u304c\u6307\u3057\u624b\u3092\u6c7a\u5b9a\u3057\u3001\u5b9f\u884c\u3059\u308b\"\"\"\n    global board, current_player, game_running\n    \n    if not game_running or current_player != AI_PLAYER:\n        return\n\n    save_state() # \u5c65\u6b74\u4fdd\u5b58\n    \n    best_move = find_best_move(board, SEARCH_DEPTH)\n    \n    if best_move:\n        r, c = best_move\n        board = apply_move(r, c, AI_PLAYER, board)\n        \n        next_player = 3 - AI_PLAYER\n        end_turn(next_player)\n    else:\n        # AI\u304c\u7f6e\u3051\u306a\u3044\u5834\u5408\u3082\u30d1\u30b9\u51e6\u7406\u3067 end_turn \u304c\u5b9f\u884c\u3055\u308c\u308b\n        end_turn(3 - AI_PLAYER)\n\ndef save_state():\n    \"\"\"\u73fe\u5728\u306e\u30b2\u30fc\u30e0\u72b6\u614b\u3092\u5c65\u6b74\u306b\u4fdd\u5b58\u3059\u308b (Undo\u7528)\"\"\"\n    global history\n    state = (\n        &#091;row&#091;:] for row in board],\n        current_player\n    )\n    history.append(state)\n\ndef undo_move():\n    \"\"\"\u4e00\u624b\u524d\u306e\u72b6\u614b\u306b\u623b\u3059\"\"\"\n    global board, current_player, game_running, history\n    \n    if current_player == AI_PLAYER:\n        messagebox.showinfo(\"\u8b66\u544a\", \"AI\u306e\u624b\u756a\u4e2d\u306fUndo\u3067\u304d\u307e\u305b\u3093\u3002\")\n        return\n        \n    if len(history) &lt;= 1:\n        messagebox.showinfo(\"\u8b66\u544a\", \"\u521d\u671f\u72b6\u614b\u306e\u305f\u3081\u3001\u3053\u308c\u4ee5\u4e0a\u623b\u305b\u307e\u305b\u3093\u3002\")\n        return\n    \n    # \u30d7\u30ec\u30a4\u30e4\u30fc\u3068AI\u306e2\u624b\u5206\u3092\u623b\u3059\n    if len(history) &gt;= 2:\n        history.pop() # AI\u306e\u624b\n        history.pop() # \u30d7\u30ec\u30a4\u30e4\u30fc\u306e\u624b\n    else:\n        # \u521d\u671f\u76e4\u9762\u76f4\u5f8c\u306e\u5c65\u6b74\u306e\u5834\u5408\n        history.pop() \n\n    prev_board, prev_player = history&#091;-1]\n    \n    board = &#091;row&#091;:] for row in prev_board]\n    current_player = prev_player\n    game_running = True\n    \n    draw_board()\n    show_hint()\n    \n    if current_player == AI_PLAYER and game_running:\n        root.after(500, make_ai_move)\n        \n# --- GUI\u30e1\u30a4\u30f3\u95a2\u6570 ---\n\ndef create_board_ui():\n    global root, canvas, board, score_label, turn_label\n    \n    root = tk.Tk()\n    root.title(f\"\u30aa\u30bb\u30ed\u30b2\u30fc\u30e0 (AI\u6df1\u3055: {SEARCH_DEPTH})\")\n    \n    # --- UI\u4e2d\u592e\u914d\u7f6e\u306e\u305f\u3081\u306e\u6539\u5584 ---\n    \n    # 1. \u3059\u3079\u3066\u306e\u8981\u7d20\u3092\u4fdd\u6301\u3059\u308b\u30e1\u30a4\u30f3\u30d5\u30ec\u30fc\u30e0\u3092\u4f5c\u6210\n    main_frame = tk.Frame(root)\n    \n    # 2. main_frame\u3092\u89aa\u30a6\u30a3\u30f3\u30c9\u30a6\u306e\u4e2d\u592e\u306b\u914d\u7f6e\n    #    expand=True \u3067\u5229\u7528\u53ef\u80fd\u306a\u30b9\u30da\u30fc\u30b9\u3092\u5e83\u3052\u3001anchor='center' \u3067\u4e2d\u592e\u306b\u5bc4\u305b\u307e\u3059\u3002\n    main_frame.pack(expand=True, anchor='center') \n    \n    # --------------------------------\n\n    # 3. \u30dc\u30fc\u30c9\uff08\u30ad\u30e3\u30f3\u30d0\u30b9\uff09\u3092 main_frame \u306e\u4e2d\u306b\u914d\u7f6e (\u89aa\u3092 root \u304b\u3089 main_frame \u306b\u5909\u66f4)\n    canvas = tk.Canvas(main_frame, width=WINDOW_SIZE, height=WINDOW_SIZE, bg=\"green\")\n    canvas.pack(side=tk.LEFT)\n    \n    # 4. \u30b9\u30b3\u30a2\u30d1\u30cd\u30eb\uff08\u30b5\u30a4\u30c9\u30d1\u30cd\u30eb\uff09\u3092 main_frame \u306e\u4e2d\u306b\u914d\u7f6e (\u89aa\u3092 root \u304b\u3089 main_frame \u306b\u5909\u66f4)\n    score_frame = tk.Frame(main_frame, width=SIDE_PANEL_WIDTH)\n    score_frame.pack(side=tk.RIGHT, fill=tk.Y, padx=10, pady=10)\n    \n    # --- \u30b9\u30b3\u30a2\u3068\u30bf\u30fc\u30f3\u8868\u793a ---\n    \n    score_label = tk.Label(score_frame, text=\"\u30b9\u30b3\u30a2\", font=(\"Arial\", 16))\n    score_label.pack(pady=20)\n    \n    turn_label = tk.Label(score_frame, text=\"\u30bf\u30fc\u30f3\", font=(\"Arial\", 14))\n    turn_label.pack(pady=10)\n\n    # --- \u30dc\u30bf\u30f3 ---\n    \n    undo_button = tk.Button(score_frame, text=\"\u4e00\u624b\u623b\u308b (Undo)\", command=undo_move, \n                            height=2, bg=\"#B0C4DE\", fg=\"black\")\n    undo_button.pack(pady=20)\n    \n    hint_button = tk.Button(score_frame, text=\"\u30d2\u30f3\u30c8\u8868\u793a\", command=show_hint,\n                            height=2, bg=\"#FFFACD\", fg=\"black\")\n    hint_button.pack(pady=10)\n    \n    # --- \u30b2\u30fc\u30e0\u306e\u8d77\u52d5 ---\n    \n    board = create_initial_board()\n    canvas.bind(\"&lt;Button-1&gt;\", handle_click)\n    \n    # \u521d\u671f\u72b6\u614b\u3092\u5c65\u6b74\u306b\u4fdd\u5b58\n    save_state()\n    \n    draw_board()\n    show_hint()\n    \n    def on_closing():\n        root.destroy()\n        sys.exit()\n        \n    root.protocol(\"WM_DELETE_WINDOW\", on_closing)\n    root.mainloop()\n\nif __name__ == \"__main__\":\n    create_board_ui()<\/code><\/pre>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>\u30d7\u30ed\u30f3\u30d7\u30c8no6(AI\u5bfe\u6226\u76f8\u624b\u306e\u5b8c\u5168\u7248\u30d2\u30f3\u30c8\u8868\u793a\u306e\u9078\u629e\u6a5f\u80fd\u306e\u8ffd\u52a0\u3068\u521d\u671f\u52d5\u4f5c)<\/summary>\n<pre class=\"wp-block-code\"><code>import tkinter as tk\nfrom tkinter import messagebox\nimport copy\nimport time \nimport sys\n\n# --- \u30b2\u30fc\u30e0\u5b9a\u6570 ---\nBOARD_SIZE = 8\nCELL_SIZE = 60\nWINDOW_SIZE = BOARD_SIZE * CELL_SIZE\nSIDE_PANEL_WIDTH = 150\nAI_PLAYER = 2 # 2: \u9ed2 (\u5f8c\u653b) \/ 1: \u767d (\u5148\u653b)\nSEARCH_DEPTH = 4 # AI\u306e\u63a2\u7d22\u6df1\u3055\n\n# --- \u30b0\u30ed\u30fc\u30d0\u30eb\u5909\u6570 ---\nroot = None\ncanvas = None\nboard = None\ncurrent_player = 1 # 1:\u767d, 2:\u9ed2\ngame_running = True\nscore_label = None\nturn_label = None\nhistory = &#091;] \n\n# --- \u521d\u671f\u5316 ---\n\ndef create_initial_board():\n    \"\"\"\u521d\u671f\u76e4\u9762\u3092\u4f5c\u6210 (0:\u7a7a, 1:\u767d, 2:\u9ed2)\"\"\"\n    new_board = &#091;&#091;0] * BOARD_SIZE for _ in range(BOARD_SIZE)]\n    new_board&#091;3]&#091;3] = 1 # \u767d\n    new_board&#091;3]&#091;4] = 2 # \u9ed2\n    new_board&#091;4]&#091;3] = 2 # \u9ed2\n    new_board&#091;4]&#091;4] = 1 # \u767d\n    return new_board\n\n# --- \u30eb\u30fc\u30eb\u3068AI\u30ed\u30b8\u30c3\u30af ---\n\ndef is_valid_move(r, c, player, current_board):\n    \"\"\"\u6307\u5b9a\u3055\u308c\u305f\u30de\u30b9\u306b\u99d2\u3092\u7f6e\u3051\u308b\u304b\u30c1\u30a7\u30c3\u30af\u3057\u3001\u88cf\u8fd4\u305b\u308b\u99d2\u306e\u30ea\u30b9\u30c8\u3092\u8fd4\u3059\"\"\"\n    if current_board&#091;r]&#091;c] != 0:\n        return &#091;]\n\n    opponent = 3 - player\n    flips = &#091;]\n\n    # 8\u65b9\u5411\u3092\u30c1\u30a7\u30c3\u30af\n    directions = &#091;(-1, 0), (1, 0), (0, -1), (0, 1), (-1, -1), (-1, 1), (1, -1), (1, 1)]\n\n    for dr, dc in directions:\n        line_flips = &#091;]\n        rr, cc = r + dr, c + dc\n\n        # \u76f8\u624b\u306e\u99d2\u304c\u7d9a\u304f\u9650\u308a\u9032\u3080\n        while 0 &lt;= rr &lt; BOARD_SIZE and 0 &lt;= cc &lt; BOARD_SIZE and current_board&#091;rr]&#091;cc] == opponent:\n            line_flips.append((rr, cc))\n            rr, cc = rr + dr, cc + dc\n        \n        # \u7d42\u70b9\u304c\u81ea\u5206\u306e\u99d2\u3067\u3001\u9593\u306b\u88cf\u8fd4\u305b\u308b\u99d2\u304c\u3042\u308b\u5834\u5408\n        if line_flips and 0 &lt;= rr &lt; BOARD_SIZE and 0 &lt;= cc &lt; BOARD_SIZE and current_board&#091;rr]&#091;cc] == player:\n            flips.extend(line_flips)\n\n    return flips\n\ndef get_valid_moves(player, current_board):\n    \"\"\"\u5408\u6cd5\u624b\u306e\u4e00\u89a7\u3092 (r, c) \u306e\u30ea\u30b9\u30c8\u3067\u8fd4\u3059\"\"\"\n    valid_moves = &#091;]\n    for r in range(BOARD_SIZE):\n        for c in range(BOARD_SIZE):\n            if is_valid_move(r, c, player, current_board):\n                valid_moves.append((r, c))\n    return valid_moves\n\ndef apply_move(r, c, player, current_board):\n    \"\"\"\u5b9f\u969b\u306b\u99d2\u3092\u7f6e\u304d\u3001\u76e4\u9762\u3092\u66f4\u65b0\u3059\u308b (\u65b0\u3057\u3044\u76e4\u9762\u3092\u8fd4\u3059)\"\"\"\n    new_board = &#091;row&#091;:] for row in current_board]\n    flips = is_valid_move(r, c, player, current_board)\n    \n    if not flips:\n        return new_board # \u7121\u52b9\u306a\u624b\u306e\u5834\u5408\u306f\u5143\u306e\u76e4\u9762\u3092\u8fd4\u3059\n\n    new_board&#091;r]&#091;c] = player\n    for fr, fc in flips:\n        new_board&#091;fr]&#091;fc] = player\n        \n    return new_board\n\ndef evaluate_board(current_board, player):\n    \"\"\"\u8a55\u4fa1\u95a2\u6570: \u99d2\u306e\u6570\u306e\u5dee\u3092\u8a08\u7b97\"\"\"\n    p1_count = sum(row.count(1) for row in current_board)\n    p2_count = sum(row.count(2) for row in current_board)\n    \n    if player == 1:\n        return p1_count - p2_count\n    else:\n        return p2_count - p1_count\n\ndef minimax(current_board, depth, is_maximizing_player, alpha, beta):\n    \"\"\"Minimax with Alpha-Beta Pruning\"\"\"\n    current_player_minimax = 2 if is_maximizing_player else 1\n    \n    # \u7d42\u7aef\u6761\u4ef6\n    valid_moves = get_valid_moves(current_player_minimax, current_board)\n    if depth == 0 or (not valid_moves and not get_valid_moves(3 - current_player_minimax, current_board)):\n        return evaluate_board(current_board, 2), None # AI(\u9ed2=2)\u8996\u70b9\u306e\u8a55\u4fa1\u3092\u8fd4\u3059\n\n    best_move = None\n    \n    if is_maximizing_player: # AI (\u9ed2=2) \u306e\u624b\u756a\n        max_eval = -float('inf')\n        for r, c in valid_moves:\n            new_board = apply_move(r, c, 2, current_board)\n            current_eval, _ = minimax(new_board, depth - 1, False, alpha, beta)\n            \n            if current_eval &gt; max_eval:\n                max_eval = current_eval\n                best_move = (r, c)\n            \n            alpha = max(alpha, max_eval)\n            if beta &lt;= alpha:\n                break\n        return max_eval, best_move\n        \n    else: # \u30d7\u30ec\u30a4\u30e4\u30fc (\u767d=1) \u306e\u624b\u756a\n        min_eval = float('inf')\n        for r, c in valid_moves:\n            new_board = apply_move(r, c, 1, current_board)\n            current_eval, _ = minimax(new_board, depth - 1, True, alpha, beta)\n            \n            if current_eval &lt; min_eval:\n                min_eval = current_eval\n                best_move = (r, c)\n                \n            beta = min(beta, min_eval)\n            if beta &lt;= alpha:\n                break\n        return min_eval, best_move\n\ndef find_best_move(current_board, depth):\n    start_time = time.time()\n    _, best_move = minimax(current_board, depth, True, -float('inf'), float('inf'))\n    end_time = time.time()\n    print(f\"Minimax\u63a2\u7d22\u6642\u9593: {end_time - start_time:.2f}\u79d2 (\u6df1\u3055: {depth})\")\n    return best_move\n\n# --- UI\u3068\u63cf\u753b ---\n\ndef draw_board():\n    \"\"\"\u76e4\u9762\u3092\u63cf\u753b\u3057\u3001\u99d2\u3092\u914d\u7f6e\u3059\u308b\"\"\"\n    canvas.delete(\"all\")\n    \n    # \u76e4\u9762\u306e\u30b0\u30ea\u30c3\u30c9\u7dda\u3092\u63cf\u753b\n    for i in range(BOARD_SIZE + 1):\n        # \u5782\u76f4\u7dda\n        canvas.create_line(i * CELL_SIZE, 0, i * CELL_SIZE, WINDOW_SIZE, fill=\"black\")\n        # \u6c34\u5e73\u7dda\n        canvas.create_line(0, i * CELL_SIZE, WINDOW_SIZE, i * CELL_SIZE, fill=\"black\")\n\n    # \u99d2\u306e\u914d\u7f6e\n    for r in range(BOARD_SIZE):\n        for c in range(BOARD_SIZE):\n            player = board&#091;r]&#091;c]\n            if player != 0:\n                x1 = c * CELL_SIZE + 5\n                y1 = r * CELL_SIZE + 5\n                x2 = (c + 1) * CELL_SIZE - 5\n                y2 = (r + 1) * CELL_SIZE - 5\n                color = \"white\" if player == 1 else \"black\"\n                canvas.create_oval(x1, y1, x2, y2, fill=color, outline=\"black\")\n\n    update_score_display()\n\ndef update_score_display():\n    \"\"\"\u30b9\u30b3\u30a2\u3068\u30bf\u30fc\u30f3\u8868\u793a\u3092\u66f4\u65b0\u3059\u308b\"\"\"\n    p1_count = sum(row.count(1) for row in board)\n    p2_count = sum(row.count(2) for row in board)\n    \n    score_text = f\"\u767d: {p1_count}\\n\u9ed2: {p2_count}\"\n    turn_text = f\"\u73fe\u5728\u306e\u30bf\u30fc\u30f3: {'\u767d' if current_player == 1 else '\u9ed2'}\"\n    \n    if score_label and turn_label:\n        score_label.config(text=score_text)\n        turn_label.config(text=turn_text)\n\ndef show_hint():\n    \"\"\"\u5408\u6cd5\u624b\u304c\u3042\u308b\u30de\u30b9\u3092\u30cf\u30a4\u30e9\u30a4\u30c8\u8868\u793a\u3059\u308b\"\"\"\n    canvas.delete(\"hint\")\n    valid_moves = get_valid_moves(current_player, board)\n    \n    for r, c in valid_moves:\n        x1 = c * CELL_SIZE + 2\n        y1 = r * CELL_SIZE + 2\n        x2 = (c + 1) * CELL_SIZE - 2\n        y2 = (r + 1) * CELL_SIZE - 2\n        canvas.create_rectangle(x1, y1, x2, y2, outline=\"yellow\", width=3, tags=\"hint\")\n\n# --- \u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9 ---\n\ndef handle_click(event):\n    \"\"\"\u30de\u30a6\u30b9\u304c\u30af\u30ea\u30c3\u30af\u3055\u308c\u305f\u3068\u304d\u306e\u51e6\u7406\"\"\"\n    global board, current_player, game_running\n    \n    if not game_running or current_player == AI_PLAYER:\n        return\n\n    c = event.x \/\/ CELL_SIZE\n    r = event.y \/\/ CELL_SIZE\n    \n    if not (0 &lt;= r &lt; BOARD_SIZE and 0 &lt;= c &lt; BOARD_SIZE):\n        return\n\n    flips = is_valid_move(r, c, current_player, board)\n    \n    if flips:\n        save_state() # \u5c65\u6b74\u4fdd\u5b58\n        \n        board = apply_move(r, c, current_player, board)\n        \n        next_player = 3 - current_player\n        end_turn(next_player)\n    else:\n        messagebox.showinfo(\"\u7121\u52b9\u306a\u624b\", \"\u305d\u3053\u306b\u306f\u7f6e\u3051\u307e\u305b\u3093\u3002\")\n\ndef end_turn(next_player):\n    \"\"\"\u30bf\u30fc\u30f3\u7d42\u4e86\u6642\u306e\u51e6\u7406\"\"\"\n    global current_player, game_running\n    current_player = next_player\n    \n    draw_board()\n    \n    p1_moves = get_valid_moves(1, board)\n    p2_moves = get_valid_moves(2, board)\n    \n    if not p1_moves and not p2_moves:\n        # \u4e21\u8005\u3068\u3082\u7f6e\u3051\u306a\u3044 = \u30b2\u30fc\u30e0\u7d42\u4e86\n        game_running = False\n        p1_count = sum(row.count(1) for row in board)\n        p2_count = sum(row.count(2) for row in board)\n        \n        winner = \"\u5f15\u304d\u5206\u3051\"\n        if p1_count &gt; p2_count: winner = \"\u767d\u306e\u52dd\u5229\"\n        elif p2_count &gt; p1_count: winner = \"\u9ed2\u306e\u52dd\u5229\"\n            \n        messagebox.showinfo(\"\u30b2\u30fc\u30e0\u7d42\u4e86\", f\"\u6700\u7d42\u30b9\u30b3\u30a2 \u767d:{p1_count}, \u9ed2:{p2_count}\\n{winner}\")\n        return\n        \n    elif not get_valid_moves(current_player, board):\n        # \u30d1\u30b9 (\u5408\u6cd5\u624b\u304c\u7121\u3044\u5834\u5408\u306f\u76f8\u624b\u306e\u30bf\u30fc\u30f3\u306b\u623b\u308b)\n        messagebox.showinfo(\"\u30d1\u30b9\", f\"{'\u767d' if current_player == 1 else '\u9ed2'}\u306f\u7f6e\u304f\u5834\u6240\u304c\u306a\u3044\u305f\u3081\u30d1\u30b9\u3057\u307e\u3059\u3002\")\n        current_player = 3 - current_player\n        draw_board() # \u30d7\u30ec\u30a4\u30e4\u30fc\u304c\u5909\u308f\u3063\u305f\u3053\u3068\u3092\u8868\u793a\n\n    show_hint()\n    \n    if current_player == AI_PLAYER and game_running:\n        root.after(500, make_ai_move) # 0.5\u79d2\u5f8c\u306bAI\u3092\u8d77\u52d5\n\ndef make_ai_move():\n    \"\"\"AI\u304c\u6307\u3057\u624b\u3092\u6c7a\u5b9a\u3057\u3001\u5b9f\u884c\u3059\u308b\"\"\"\n    global board, current_player, game_running\n    \n    if not game_running or current_player != AI_PLAYER:\n        return\n\n    save_state() # \u5c65\u6b74\u4fdd\u5b58\n    \n    best_move = find_best_move(board, SEARCH_DEPTH)\n    \n    if best_move:\n        r, c = best_move\n        board = apply_move(r, c, AI_PLAYER, board)\n        \n        next_player = 3 - AI_PLAYER\n        end_turn(next_player)\n    else:\n        # AI\u304c\u7f6e\u3051\u306a\u3044\u5834\u5408\u3082\u30d1\u30b9\u51e6\u7406\u3067 end_turn \u304c\u5b9f\u884c\u3055\u308c\u308b\n        end_turn(3 - AI_PLAYER)\n\ndef save_state():\n    \"\"\"\u73fe\u5728\u306e\u30b2\u30fc\u30e0\u72b6\u614b\u3092\u5c65\u6b74\u306b\u4fdd\u5b58\u3059\u308b (Undo\u7528)\"\"\"\n    global history\n    state = (\n        &#091;row&#091;:] for row in board],\n        current_player\n    )\n    history.append(state)\n\ndef undo_move():\n    \"\"\"\u4e00\u624b\u524d\u306e\u72b6\u614b\u306b\u623b\u3059\"\"\"\n    global board, current_player, game_running, history\n    \n    if current_player == AI_PLAYER:\n        messagebox.showinfo(\"\u8b66\u544a\", \"AI\u306e\u624b\u756a\u4e2d\u306fUndo\u3067\u304d\u307e\u305b\u3093\u3002\")\n        return\n        \n    if len(history) &lt;= 1:\n        messagebox.showinfo(\"\u8b66\u544a\", \"\u521d\u671f\u72b6\u614b\u306e\u305f\u3081\u3001\u3053\u308c\u4ee5\u4e0a\u623b\u305b\u307e\u305b\u3093\u3002\")\n        return\n    \n    # \u30d7\u30ec\u30a4\u30e4\u30fc\u3068AI\u306e2\u624b\u5206\u3092\u623b\u3059\n    if len(history) &gt;= 2:\n        history.pop() # AI\u306e\u624b\n        history.pop() # \u30d7\u30ec\u30a4\u30e4\u30fc\u306e\u624b\n    else:\n        # \u521d\u671f\u76e4\u9762\u76f4\u5f8c\u306e\u5c65\u6b74\u306e\u5834\u5408\n        history.pop() \n\n    prev_board, prev_player = history&#091;-1]\n    \n    board = &#091;row&#091;:] for row in prev_board]\n    current_player = prev_player\n    game_running = True\n    \n    draw_board()\n    show_hint()\n    \n    if current_player == AI_PLAYER and game_running:\n        root.after(500, make_ai_move)\n        \n# --- GUI\u30e1\u30a4\u30f3\u95a2\u6570 ---\n\ndef create_board_ui():\n    global root, canvas, board, score_label, turn_label\n    \n    root = tk.Tk()\n    root.title(f\"\u30aa\u30bb\u30ed\u30b2\u30fc\u30e0 (AI\u6df1\u3055: {SEARCH_DEPTH})\")\n    \n    # --- UI\u4e2d\u592e\u914d\u7f6e\u306e\u305f\u3081\u306e\u6539\u5584 ---\n    \n    # 1. \u3059\u3079\u3066\u306e\u8981\u7d20\u3092\u4fdd\u6301\u3059\u308b\u30e1\u30a4\u30f3\u30d5\u30ec\u30fc\u30e0\u3092\u4f5c\u6210\n    main_frame = tk.Frame(root)\n    \n    # 2. main_frame\u3092\u89aa\u30a6\u30a3\u30f3\u30c9\u30a6\u306e\u4e2d\u592e\u306b\u914d\u7f6e\n    #    expand=True \u3067\u5229\u7528\u53ef\u80fd\u306a\u30b9\u30da\u30fc\u30b9\u3092\u5e83\u3052\u3001anchor='center' \u3067\u4e2d\u592e\u306b\u5bc4\u305b\u307e\u3059\u3002\n    main_frame.pack(expand=True, anchor='center') \n    \n    # --------------------------------\n\n    # 3. \u30dc\u30fc\u30c9\uff08\u30ad\u30e3\u30f3\u30d0\u30b9\uff09\u3092 main_frame \u306e\u4e2d\u306b\u914d\u7f6e (\u89aa\u3092 root \u304b\u3089 main_frame \u306b\u5909\u66f4)\n    canvas = tk.Canvas(main_frame, width=WINDOW_SIZE, height=WINDOW_SIZE, bg=\"green\")\n    canvas.pack(side=tk.LEFT)\n    \n    # 4. \u30b9\u30b3\u30a2\u30d1\u30cd\u30eb\uff08\u30b5\u30a4\u30c9\u30d1\u30cd\u30eb\uff09\u3092 main_frame \u306e\u4e2d\u306b\u914d\u7f6e (\u89aa\u3092 root \u304b\u3089 main_frame \u306b\u5909\u66f4)\n    score_frame = tk.Frame(main_frame, width=SIDE_PANEL_WIDTH)\n    score_frame.pack(side=tk.RIGHT, fill=tk.Y, padx=10, pady=10)\n    \n    # --- \u30b9\u30b3\u30a2\u3068\u30bf\u30fc\u30f3\u8868\u793a ---\n    \n    score_label = tk.Label(score_frame, text=\"\u30b9\u30b3\u30a2\", font=(\"Arial\", 16))\n    score_label.pack(pady=20)\n    \n    turn_label = tk.Label(score_frame, text=\"\u30bf\u30fc\u30f3\", font=(\"Arial\", 14))\n    turn_label.pack(pady=10)\n\n    # --- \u30dc\u30bf\u30f3 ---\n    \n    undo_button = tk.Button(score_frame, text=\"\u4e00\u624b\u623b\u308b (Undo)\", command=undo_move, \n                            height=2, bg=\"#B0C4DE\", fg=\"black\")\n    undo_button.pack(pady=20)\n    \n    hint_button = tk.Button(score_frame, text=\"\u30d2\u30f3\u30c8\u8868\u793a\", command=show_hint,\n                            height=2, bg=\"#FFFACD\", fg=\"black\")\n    hint_button.pack(pady=10)\n    \n    # --- \u30b2\u30fc\u30e0\u306e\u8d77\u52d5 ---\n    \n    board = create_initial_board()\n    canvas.bind(\"&lt;Button-1&gt;\", handle_click)\n    \n    # \u521d\u671f\u72b6\u614b\u3092\u5c65\u6b74\u306b\u4fdd\u5b58\n    save_state()\n    \n    draw_board()\n    show_hint()\n    \n    def on_closing():\n        root.destroy()\n        sys.exit()\n        \n    root.protocol(\"WM_DELETE_WINDOW\", on_closing)\n    root.mainloop()\n\nif __name__ == \"__main__\":\n    create_board_ui()<\/code><\/pre>\n<\/details>\n\n\n\n<p>\u6b21\u56de\u306f\u30ca\u30f3\u30d7\u30ec\uff08\u6570\u72ec\uff09\u306e\u30a2\u30d7\u30ea\u3092\u4f5c\u6210\u3068\u52d5\u4f5c\u78ba\u8a8d\u3092\u4e88\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002\u697d\u3057\u307f\u306b\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t\u30db\u30fc\u30e0\n\t\t<\/span><\/div>","protected":false},"excerpt":{"rendered":"<p>\u30ab\u30c6\u30b4\u30ea\u30fc\u306e\u5909\u66f4\u304b\u3089 \u30ab\u30c6\u30b4\u30ea\u30fc\u5909\u66f4\u306e\u8aac\u660e\u304c\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u5316\u3057\u3066\u3044\u308b\u70b9\u3001\u3054\u5bb9\u8d66\u304f\u3060\u3055\u3044\u3002\u4eca\u56de\u306f\u8131\u30b3\u30ed\u30ca\u3092\u30a4\u30e1\u30fc\u30b8\u3057\u3066\u306e\u5909\u66f4\u3067\u306f\u306a\u304f\u3001\u30b2\u30fc\u30e0\u306b\u95a2\u308f\u308b\u4e8b\u67c4\u3092\u6271\u3046\u65b0\u3057\u3044\u72ec\u7acb\u3057\u305f\u30ab\u30c6\u30b4\u30ea\u30fc\u3068\u3057\u3066\u300cGame Trial Log\u300d\u3092\u7acb &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/smilekabagon.com\/?p=3898\" class=\"more-link\"><span class=\"screen-reader-text\">&#8220;\u30dd\u30f3\u30b3\u30c4\u592b\u5a66\u306eGame Trial Log Vol.1&#8221; \u306e<\/span>\u7d9a\u304d\u3092\u8aad\u3080<\/a><\/p>\n","protected":false},"author":2,"featured_media":3919,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[280],"tags":[274],"class_list":["post-3898","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-game","tag-274"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/smilekabagon.com\/index.php?rest_route=\/wp\/v2\/posts\/3898","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/smilekabagon.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/smilekabagon.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/smilekabagon.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/smilekabagon.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3898"}],"version-history":[{"count":10,"href":"https:\/\/smilekabagon.com\/index.php?rest_route=\/wp\/v2\/posts\/3898\/revisions"}],"predecessor-version":[{"id":3918,"href":"https:\/\/smilekabagon.com\/index.php?rest_route=\/wp\/v2\/posts\/3898\/revisions\/3918"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/smilekabagon.com\/index.php?rest_route=\/wp\/v2\/media\/3919"}],"wp:attachment":[{"href":"https:\/\/smilekabagon.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3898"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/smilekabagon.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3898"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/smilekabagon.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3898"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}