專案代碼可以從Github下載:https://github.com/zhenl/ZL.Shudu ,代碼隨專案進度更新,
前面我們使用一個陣列保存預制的游戲,然后隨機從中抽取一個游戲作為新游戲,如果我們陣列中有10個游戲,那么很快就會遇到重復的游戲,有沒有辦法在現有的基礎上生成更多的游戲呢?我們看一下下面兩個游戲:
看上去是不同的游戲,但仔細分析一下就會發現如果從計算機角度看,其實是相同的游戲,如果我們仔細分析一下,就會發現,在數獨游戲中1-9的數字都是獨立的符號,沒有數學中數字的意義,如果將這些數字換成A-H的字母,同樣可以按照相同的規則進行游戲,或者換成九種水果、動物什么的,都可以,那么如果我們有九種局面,通過替換各種局面中的數字,就可以得到更多的游戲局面,對人類玩家是不太容易分辨出不同的,我們在現有演算法的基礎上進行改進,再取一個0到9的亂數,將這個數加到現有局面的每個數字上,如果所得大于9,就減去9,這樣就可以根據每個局面,產生9個不同的游戲,修改后的代碼如下:
private async Task SetNewGame()
{
int k,m;
var lst = chesses;
var leng = lst.GetLength(0);
if (ra == null)
{
ra = new Random();
}
k = ra.Next(0, leng);
m = ra.Next(0, 9);
var sudoku = lst[k].Sudoku;
var mychess = new int[9, 9];
for (var i = 0; i < 9; i++)
for (var j = 0; j < 9; j++)
{
mychess[i, j] = int.Parse(sudoku.Substring(i * 9 + j, 1)) > 0 ? int.Parse(sudoku.Substring(i * 9 + j, 1)) + m : 0;
if (mychess[i, j] > 9) mychess[i, j] = mychess[i, j] - 9;
}
SetGame(mychess);
}
上面演算法中k是從現有串列中隨機選擇一組資料,m是生成0到9的亂數,在現有的數字上加上m,如果大于9,就減去9,
下一步我們增加保存狀態的功能,
本文來自博客園,作者:尋找無名的特質,轉載請注明原文鏈接:https://www.cnblogs.com/zhenl/p/15848219.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/421844.html
標籤:其他
