我的改進版2048(2)
阿新 • • 發佈:2017-06-16
void 必須 number 內存 font return nbsp water pan
一個全局變量存儲全部存檔信息:
最後“後退一步”的功能。是通過用一個變量history存儲前十步的矩陣狀態來實現的。如果如果要實現無限制地後退,那就必須將全部經過的狀態壓入棧,每次後退就另棧頂出棧。可是考慮這樣占用了太多的內存空間,所以我限制了棧的大小,也就是最多能存10個值。
最多存十個記錄:
(假設有誰想要這個軟件的話,在評論中留一個郵箱吧。)
上篇解說了我的2048的基本設計過程。
一開始的時候初始化,隨機填上兩個數字。
每次按方向鍵。16個方格就隨之改變,每次疊加同樣數字,分數就會添加;疊加的同樣數字越大,分數越大。分數會實時刷新。
最後另一個問題,就是怎麽推斷是否game over。事實上也是比較簡單,略微想想就知道。首先推斷16個方格是否已滿,如不滿,則肯定不會game over。否則,推斷不論什麽相鄰的兩個數字是否都不一樣,如是,則game over!
假設16個方格都已滿。就進行一下函數的推斷
public bool canContinue()//推斷是否還可以繼續完下去 { for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { if (j + 1 < 4 && matrixValue[i, j] == matrixValue[i, j + 1]) return true; if (i + 1 < 4 && matrixValue[i + 1, j] == matrixValue[i, j]) return true; } } return false; }
接下來說說怎麽實現的存檔、讀檔和後退一步功能。
由於要存儲數據,所以程序中用xml文件來存全部信息。
每個存檔的存儲格式例如以下:
<?xml version="1.0" encoding="utf-8"?> <store> <record> <name>zwb4096new</name> <matrix>4096 2048 256 32 16 128 32 4 2 4 8 0 4 2 2 0</matrix> <score>33616</score> </record> </store>
public List<storeRecord> dataStoreRecord = new List<storeRecord>();//存儲全部存檔從文件裏獲取全部存檔信息:
public void refreshDataStoreRecord()//從文件裏又一次獲取存檔信息 { string storePath = System.Environment.CurrentDirectory + "\\record\\" + "store.xml"; XmlDocument doc = new XmlDocument(); doc.Load(storePath); XmlNodeList nodes = doc.SelectNodes("/store/record"); listBox1.Items.Clear(); dataStoreRecord.Clear(); listBox2.Items.Clear(); for (int i = 0; i < nodes.Count; i++) { storeRecord insert = new storeRecord(); string name = nodes[i].ChildNodes[0].InnerText;//第一個結點名字 string matrix = nodes[i].ChildNodes[1].InnerText;//第二個結點矩陣 string score = nodes[i].ChildNodes[2].InnerText;//第三個結點分數 insert.recordName = name; insert.recordScore = score; string[] numbers = matrix.Split(‘ ‘); for (int j = 0; j < numbers.Length; j++) { insert.recordMatrix[j / 4, j % 4] = Convert.ToInt32(numbers[j]); } dataStoreRecord.Add(insert); listBox1.Items.Add(name); listBox2.Items.Add(name + "(Enter刪除)"); } }
public List<int[,]> history = new List<int[,]>();//存近期10步操作
最多存十個記錄:
if (history.Count < 10)//最多存10個狀態 { history.Add(previous); } else { history.RemoveAt(0); history.Add(previous); }
我的改進版2048(2)