ボディーシャツの数独

画像

前のhabratopikaから、私はhabrazhitelが実際に彼らのボディーシャツのサッパーを好んだので、あえて数独という別のゲームを書くことに気付きました 。 そして再び、彼らのボディシャツに。

マインスイーパと同様に、Sudoku for cmd.exeにはいくつかの利点があります。

全体として、これは本物の男性の数独です。 これらのリンクを使用して、この素晴らしいゲームを今すぐダウンロードできます。 Googleドキュメント



画像

一般的に、数独ゲームは実装が最も難しいものの1つです。 問題は通常のテーブルの生成です。 したがって、9x9 = 81セルのフィールドがあります。 各セルには、9つの数字のいずれかを入力できます。 総当たりで解決する非常に多くのバリエーション。 代わりに、既製のテーブルが使用されます。 その本質を説明します。

数字の代わりに文字が使用されるいくつかのテーブルを作成できます(ラテン方格:-))。 9文字のみ-abcdefghi。 文字「a」は、9、8、7などに置き換えることができます。 その結果、1つのテーブルから9!= 362880のバリエーションを取得できます。 悪くない? そして、これがコード自体であり、これが数値を妨害します。



  REM数独テーブルの9!= 362880バリエーションを提供する神秘的なアルゴリズム。
 for / L %% i in(1,1,9)do set replmap %% i = %% i
 replcounter = 0に設定
 :replcycle
設定temp1 =%ランダム:〜-1%
 if%temp1%== 0 goto replcycle
 temp2 =%ランダムを設定:〜-1%
 if%temp2%== 0 goto replcycle
セット/リカウンター+ = 1
コールセットtemp = %% replmap%temp1 %%%
コールセットreplmap%temp1%= %% replmap%temp2 %%%
コールセットreplmap%temp2%=%temp%
 「temp =」を設定します
 if%replcounter%LSS 504 goto replcycle
レムエンドサイクル:replcycle 


アルゴリズムの概要:変数replmap1-replmap9の1から9までの数字はランダムな順序で入力されます。 これらの変数に含まれる数字で文字を置き換えた後。 たとえば、replma1の番号は5です。その後、文字「a」は番号「5」に置き換えられます。 変数マップには、ランダムに選択されたマップが含まれます。

 呼び出し:replacestr map a%replmap1%
呼び出し:replacestr map b%replmap2%
呼び出し:replacestr map c%replmap3%
呼び出し:replacestr map d%replmap4%
呼び出し:replacestr map e%replmap5%
呼び出し:replacestr map f%replmap6%
呼び出し:replacestr map g%replmap7%
呼び出し:replacestr map h%replmap8%
呼び出し:replacestr map i%replmap9%

 REM ...多くの興味深い、あまりコードではない... 

 :replacestr
 REM文字列置換関数。
コールセットtemp = %%% 1 %%
コールセットtemp = %% temp:%2 =%3 %%
 set%1 =%temp%
 goto:eof




テーブルから数十桁を削除する必要がありますが、これは特に問題ではありません。 また、マインスイーパから大々的に盗まれ、わずかに変更されたUIには問題はありません。 時間カウント機能も盗まれました。



Sudokuの実装における2番目の課題は、最終チェックでした。ユーザーは勝ちましたか? あなたは、各行、列、正方形のデュース、トリプル、その他の数を愚かに数えることができますが、これはあまりにも退屈です。 単純に数字の合計と積を数えることにしました。 地獄を変えたシンプルでエレガントな方法は何を知っています。 ちなみに、このメソッドを使用して、行/列/正方形内でのみ、後者が完全に満たされた場合にのみ、エラーの正確な位置を特定することが可能です。



繰り返しますが、ここから数独をダウンロードできます。   Googleドキュメント



All Articles