{"id":60,"date":"2008-04-27T13:05:31","date_gmt":"2008-04-27T13:05:31","guid":{"rendered":"https:\/\/hostadm.lithium.selfhost.de\/?p=60"},"modified":"2020-09-09T19:39:03","modified_gmt":"2020-09-09T19:39:03","slug":"minesweeper-loseprogramm","status":"publish","type":"post","link":"https:\/\/martin-seewaldt.de\/?p=60","title":{"rendered":"Minesweeper L\u00f6seprogramm"},"content":{"rendered":"<p><b><\/b><b>Gestelltes Problem<\/b><br \/>\nIch glaube, ich bin ein komischer Typ. Komisch hier im Sinne von merkw\u00fcrdig. Ich denke mir n\u00e4mlich gern L\u00f6sungen f\u00fcr Probleme aus. So kam mir unl\u00e4ngst in einer R\u00e4tselzeitschrift meiner Mutter ein &#8220;Finde die zehn Unterschiede&#8221;-Bilderr\u00e4tsel unter. Das habe ich dann mit der Digiknipse fotografiert. Jetzt m\u00fcssten, in der einfachen L\u00f6sungsvariante, nur beide Bilder aus dem Gesamtbild ausgeschnitten und dann abwechselnd angezeigt werden. Dabei w\u00fcrden dann die Unterschiede &#8220;blinken&#8221;. Die etwas fortgeschrittenere Variante w\u00fcrde direkt eine Bildsubtraktion durchf\u00fchren.<br \/>\nMeine Mutter fand diesen rechnergest\u00fctzten L\u00f6sungsansatz unmoralisch und vielleicht bewegt mich auch Faulheit dazu, Probleme abschliessend l\u00f6sen zu wollen.<br \/>\nDieses Mal war es Minesweeper. Mir ging schon l\u00e4nger im Kopf herum, dass und wie man da etwas machen k\u00f6nnte. Ich wollte ein Programm schreiben, welches Minesweeper fernsteuert.<\/p>\n<p><b>Algorithmus<\/b><br \/>\nZun\u00e4chst musste ich ein Minesweeperfenster finden und mir das Spielfeld kopieren. Dieses wurde dann nach diesen Bitmaps:<br \/>\n<img decoding=\"async\" src=\"https:\/\/martin-seewaldt.de\/Programme\/Zu.bmp\" \/>\u00a0<img decoding=\"async\" src=\"https:\/\/martin-seewaldt.de\/Programme\/B0.bmp\" \/>\u00a0<br \/>\n<img decoding=\"async\" src=\"https:\/\/martin-seewaldt.de\/Programme\/B1.bmp\" \/>\u00a0<img decoding=\"async\" src=\"https:\/\/martin-seewaldt.de\/Programme\/B2.bmp\" \/>\u00a0<br \/>\n<img decoding=\"async\" src=\"https:\/\/martin-seewaldt.de\/Programme\/B3.bmp\" \/>\u00a0<img decoding=\"async\" src=\"https:\/\/martin-seewaldt.de\/Programme\/B4.bmp\" \/>\u00a0<br \/>\n<img decoding=\"async\" src=\"https:\/\/martin-seewaldt.de\/Programme\/B5.bmp\" \/>\u00a0<img decoding=\"async\" src=\"https:\/\/martin-seewaldt.de\/Programme\/B6.bmp\" \/>\u00a0<br \/>\n<img decoding=\"async\" src=\"https:\/\/martin-seewaldt.de\/Programme\/B7.bmp\" \/>\u00a0<img decoding=\"async\" src=\"https:\/\/martin-seewaldt.de\/Programme\/B8.bmp\" \/>\u00a0<br \/>\n<img decoding=\"async\" src=\"https:\/\/martin-seewaldt.de\/Programme\/Mine.bmp\" \/><br \/>\ndurchsucht. Damit hatte ich also in meinem Programm ein Abbild der aktuellen Spielsituation. Diese wurde auf zwei verschiedene Weisen analysiert.<br \/>\n1. Dumm<br \/>\nDabei wird nach Zahlen-Zellen gesucht, die genau so viele geschlossene Zellen in ihrer Umgebung haben, wie es ihrem Zahlenwert entspricht. Wenn also eine 1er-Zelle nur ein geschlossenes Feld in ihrer Umgebung hat, wird dieses markiert. Das Markieren geschieht, indem ein rechter Mausklick mit den passenden Koordinaten an das Minesweeper-Fenster geschickt wird. Danach wird f\u00fcr alle Zahlenzellen ein Klick mit beiden Maustasten, der alle offensichtlich gel\u00f6sten Felder aufdeckt, geschickt.<br \/>\n2. Schlau<br \/>\nHier wird ein Ausschnitt von 4&#215;4 Zellen \u00fcber das Spielfeld bewegt. Es werden dann f\u00fcr alle geschlossenen Zellen alle Belegungsm\u00f6glichkeiten durchiteriert. Die Iteration sieht so aus:<br \/>\nint NextIt( int pos )<br \/>\n{<br \/>\nif ( pos &gt;= ITW * ITW )<br \/>\nreturn false;<\/p>\n<p>if ( IterationsZellen[ pos \/ ITW ][ pos % ITW ].ZelleOrig == CVALZU )<br \/>\n{<br \/>\n\/\/ Wenn sie 0 ist, auf 1 und raus<br \/>\nif ( IterationsZellen[ pos \/ ITW ][ pos % ITW ].AktWert == 0 )<br \/>\n{<br \/>\nIterationsZellen[ pos \/ ITW ][ pos % ITW ].AktWert = 1;<\/p>\n<p>return true;<br \/>\n}<br \/>\n\/\/ Sonst auf 0 und n\u00e4chsth\u00f6here erh\u00f6hen<br \/>\nIterationsZellen[ pos \/ ITW ][ pos % ITW ].AktWert = 0;<br \/>\n}<\/p>\n<p>return NextIt( pos + 1 );<br \/>\n}<br \/>\nRekursion muss nicht immer sein, aber hier ist sie echt lecker. Es werden dann alle m\u00f6glichen Belegungen anhand der Zahlenfelder bewertet, wobei entschieden wird, ob sie eine g\u00fcltige Minenverteilung darstellen. Wenn ein Feld bei allen g\u00fcltigen Minenverteilungen leer ist, wird es ge\u00f6ffnet. Ein Feld, welches bei allen g\u00fcltigen Minenverteilungen eine Mine hat, wird markiert.<\/p>\n<p>Tja, trotz der Massen an Mausklicks und der vielen Bildschirmabz\u00fcge ist das Programm dann doch relativ schnell. Wieder ein Problem gel\u00f6st&#8230;<\/p>\n<p><b>Screenshots:<\/b><br \/>\n<img decoding=\"async\" src=\"https:\/\/martin-seewaldt.de\/Programme\/mssolver2.gif\" \/><br \/>\n<img decoding=\"async\" src=\"https:\/\/martin-seewaldt.de\/Programme\/mssolver.gif\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gestelltes Problem Ich glaube, ich bin ein komischer Typ. Komisch hier im Sinne von merkw\u00fcrdig. Ich denke mir n\u00e4mlich gern L\u00f6sungen f\u00fcr Probleme aus. So kam mir unl\u00e4ngst in einer R\u00e4tselzeitschrift meiner Mutter ein &#8220;Finde die zehn Unterschiede&#8221;-Bilderr\u00e4tsel unter. Das habe ich dann mit der Digiknipse fotografiert. Jetzt m\u00fcssten, in der einfachen L\u00f6sungsvariante, nur beide [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[3],"tags":[],"class_list":["post-60","post","type-post","status-publish","format-standard","hentry","category-programme_apps"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Minesweeper L\u00f6seprogramm - Martin Seewaldt<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/martin-seewaldt.de\/?p=60\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Minesweeper L\u00f6seprogramm - Martin Seewaldt\" \/>\n<meta property=\"og:description\" content=\"Gestelltes Problem Ich glaube, ich bin ein komischer Typ. Komisch hier im Sinne von merkw\u00fcrdig. Ich denke mir n\u00e4mlich gern L\u00f6sungen f\u00fcr Probleme aus. So kam mir unl\u00e4ngst in einer R\u00e4tselzeitschrift meiner Mutter ein &#8220;Finde die zehn Unterschiede&#8221;-Bilderr\u00e4tsel unter. Das habe ich dann mit der Digiknipse fotografiert. Jetzt m\u00fcssten, in der einfachen L\u00f6sungsvariante, nur beide [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/martin-seewaldt.de\/?p=60\" \/>\n<meta property=\"og:site_name\" content=\"Martin Seewaldt\" \/>\n<meta property=\"article:published_time\" content=\"2008-04-27T13:05:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-09-09T19:39:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/martin-seewaldt.de\/Programme\/Zu.bmp\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/martin-seewaldt.de\\\/?p=60#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/martin-seewaldt.de\\\/?p=60\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\\\/\\\/martin-seewaldt.de\\\/#\\\/schema\\\/person\\\/a1a6571321f54991629bb99be16f5e5f\"},\"headline\":\"Minesweeper L\u00f6seprogramm\",\"datePublished\":\"2008-04-27T13:05:31+00:00\",\"dateModified\":\"2020-09-09T19:39:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/martin-seewaldt.de\\\/?p=60\"},\"wordCount\":427,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/martin-seewaldt.de\\\/?p=60#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/martin-seewaldt.de\\\/Programme\\\/Zu.bmp\",\"articleSection\":[\"Programme\\\/Apps\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/martin-seewaldt.de\\\/?p=60#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/martin-seewaldt.de\\\/?p=60\",\"url\":\"https:\\\/\\\/martin-seewaldt.de\\\/?p=60\",\"name\":\"Minesweeper L\u00f6seprogramm - Martin Seewaldt\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/martin-seewaldt.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/martin-seewaldt.de\\\/?p=60#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/martin-seewaldt.de\\\/?p=60#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/martin-seewaldt.de\\\/Programme\\\/Zu.bmp\",\"datePublished\":\"2008-04-27T13:05:31+00:00\",\"dateModified\":\"2020-09-09T19:39:03+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/martin-seewaldt.de\\\/#\\\/schema\\\/person\\\/a1a6571321f54991629bb99be16f5e5f\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/martin-seewaldt.de\\\/?p=60#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/martin-seewaldt.de\\\/?p=60\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/martin-seewaldt.de\\\/?p=60#primaryimage\",\"url\":\"https:\\\/\\\/martin-seewaldt.de\\\/Programme\\\/Zu.bmp\",\"contentUrl\":\"https:\\\/\\\/martin-seewaldt.de\\\/Programme\\\/Zu.bmp\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/martin-seewaldt.de\\\/?p=60#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/martin-seewaldt.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Minesweeper L\u00f6seprogramm\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/martin-seewaldt.de\\\/#website\",\"url\":\"https:\\\/\\\/martin-seewaldt.de\\\/\",\"name\":\"Martin Seewaldt\",\"description\":\"Einige meiner Projekte\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/martin-seewaldt.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/martin-seewaldt.de\\\/#\\\/schema\\\/person\\\/a1a6571321f54991629bb99be16f5e5f\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8c382657803c93429dee7a228c33968728e6adc9a850a0b0488abd4e9c466179?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8c382657803c93429dee7a228c33968728e6adc9a850a0b0488abd4e9c466179?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8c382657803c93429dee7a228c33968728e6adc9a850a0b0488abd4e9c466179?s=96&d=mm&r=g\",\"caption\":\"admin\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Minesweeper L\u00f6seprogramm - Martin Seewaldt","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/martin-seewaldt.de\/?p=60","og_locale":"en_US","og_type":"article","og_title":"Minesweeper L\u00f6seprogramm - Martin Seewaldt","og_description":"Gestelltes Problem Ich glaube, ich bin ein komischer Typ. Komisch hier im Sinne von merkw\u00fcrdig. Ich denke mir n\u00e4mlich gern L\u00f6sungen f\u00fcr Probleme aus. So kam mir unl\u00e4ngst in einer R\u00e4tselzeitschrift meiner Mutter ein &#8220;Finde die zehn Unterschiede&#8221;-Bilderr\u00e4tsel unter. Das habe ich dann mit der Digiknipse fotografiert. Jetzt m\u00fcssten, in der einfachen L\u00f6sungsvariante, nur beide [&hellip;]","og_url":"https:\/\/martin-seewaldt.de\/?p=60","og_site_name":"Martin Seewaldt","article_published_time":"2008-04-27T13:05:31+00:00","article_modified_time":"2020-09-09T19:39:03+00:00","og_image":[{"url":"https:\/\/martin-seewaldt.de\/Programme\/Zu.bmp","type":"","width":"","height":""}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/martin-seewaldt.de\/?p=60#article","isPartOf":{"@id":"https:\/\/martin-seewaldt.de\/?p=60"},"author":{"name":"admin","@id":"https:\/\/martin-seewaldt.de\/#\/schema\/person\/a1a6571321f54991629bb99be16f5e5f"},"headline":"Minesweeper L\u00f6seprogramm","datePublished":"2008-04-27T13:05:31+00:00","dateModified":"2020-09-09T19:39:03+00:00","mainEntityOfPage":{"@id":"https:\/\/martin-seewaldt.de\/?p=60"},"wordCount":427,"commentCount":0,"image":{"@id":"https:\/\/martin-seewaldt.de\/?p=60#primaryimage"},"thumbnailUrl":"https:\/\/martin-seewaldt.de\/Programme\/Zu.bmp","articleSection":["Programme\/Apps"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/martin-seewaldt.de\/?p=60#respond"]}]},{"@type":"WebPage","@id":"https:\/\/martin-seewaldt.de\/?p=60","url":"https:\/\/martin-seewaldt.de\/?p=60","name":"Minesweeper L\u00f6seprogramm - Martin Seewaldt","isPartOf":{"@id":"https:\/\/martin-seewaldt.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/martin-seewaldt.de\/?p=60#primaryimage"},"image":{"@id":"https:\/\/martin-seewaldt.de\/?p=60#primaryimage"},"thumbnailUrl":"https:\/\/martin-seewaldt.de\/Programme\/Zu.bmp","datePublished":"2008-04-27T13:05:31+00:00","dateModified":"2020-09-09T19:39:03+00:00","author":{"@id":"https:\/\/martin-seewaldt.de\/#\/schema\/person\/a1a6571321f54991629bb99be16f5e5f"},"breadcrumb":{"@id":"https:\/\/martin-seewaldt.de\/?p=60#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/martin-seewaldt.de\/?p=60"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/martin-seewaldt.de\/?p=60#primaryimage","url":"https:\/\/martin-seewaldt.de\/Programme\/Zu.bmp","contentUrl":"https:\/\/martin-seewaldt.de\/Programme\/Zu.bmp"},{"@type":"BreadcrumbList","@id":"https:\/\/martin-seewaldt.de\/?p=60#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/martin-seewaldt.de\/"},{"@type":"ListItem","position":2,"name":"Minesweeper L\u00f6seprogramm"}]},{"@type":"WebSite","@id":"https:\/\/martin-seewaldt.de\/#website","url":"https:\/\/martin-seewaldt.de\/","name":"Martin Seewaldt","description":"Einige meiner Projekte","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/martin-seewaldt.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/martin-seewaldt.de\/#\/schema\/person\/a1a6571321f54991629bb99be16f5e5f","name":"admin","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/8c382657803c93429dee7a228c33968728e6adc9a850a0b0488abd4e9c466179?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/8c382657803c93429dee7a228c33968728e6adc9a850a0b0488abd4e9c466179?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8c382657803c93429dee7a228c33968728e6adc9a850a0b0488abd4e9c466179?s=96&d=mm&r=g","caption":"admin"}}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/martin-seewaldt.de\/index.php?rest_route=\/wp\/v2\/posts\/60","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/martin-seewaldt.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/martin-seewaldt.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/martin-seewaldt.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/martin-seewaldt.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=60"}],"version-history":[{"count":4,"href":"https:\/\/martin-seewaldt.de\/index.php?rest_route=\/wp\/v2\/posts\/60\/revisions"}],"predecessor-version":[{"id":458,"href":"https:\/\/martin-seewaldt.de\/index.php?rest_route=\/wp\/v2\/posts\/60\/revisions\/458"}],"wp:attachment":[{"href":"https:\/\/martin-seewaldt.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=60"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/martin-seewaldt.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=60"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/martin-seewaldt.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=60"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}