天天看點

從零開始開發Android版2048 (四) 分數、重置、結束一、分數的計算和儲存二、遊戲的重置三、遊戲結束的判斷

  這一篇的内容主要是在上一篇的基礎上,加入分數計算(包括目前分數和最高分數)、遊戲結束的判斷以及遊戲界面的重置這三個部分的功能。

         首先,2048這個遊戲的分數包括,兩個部分目前遊戲分數和最高分,目前的遊戲分數我們可以儲存在程式的變量中,因為它隻對目前這盤遊戲有用,遊戲結束就可以清空;而最高分則需要以一種方式儲存在手機中,這樣當我們下次再打開遊戲時,還能讀取到之前操作的最高分。

        目前分數的計算還是很簡單。我們隻需要在每次發生合并的時候,将産生的分數加到我們聲明的分數的變量中,然後更新一下用于顯示目前分數的控件即可。

        我參考了一下目前大多數2048遊戲的積分規則是,合并後格子的分數是多少,就增加多少分。比如2和2合并成4,那麼就加4分。

        最高分需要儲存在手機中,這樣即使我們把遊戲的程式關掉,最高分的資料也不會丢失。就我目前知道的android儲存資料的方式有這麼幾種:1、儲存在android自帶的sqlite這個資料庫中 2、通過java以檔案的形式儲存在手機存儲中 3、使用android提供的sharepreferences類來儲存 等等(當然實際可用的方法肯定不止這麼多,這隻是我目前了解到的)

    比較了幾種方式,我在這個2048程式中,選用了相對比較簡單的sharepreferences類來儲存最高分。sharepreferences是android提供的一個輕量級的用于資料儲存的類,它儲存的方式是以xml的格式儲存在\data\data\<package

name>\shared_prefs\目錄下面。我查了一下,大多數使用這個類的情景是用于儲存一些比如設定資訊之類的,不太适合儲存太複雜,或者太多的資料。但是對于我們來說,正好用來儲存最高分。

    參考了網上的一些寫法,最高分的類是這麼寫的:

     當我們執行個體化并調用了其中的讀取方法之後,會在手機目錄中生成一個xml檔案,下面是我在手機上截的圖:

從零開始開發Android版2048 (四) 分數、重置、結束一、分數的計算和儲存二、遊戲的重置三、遊戲結束的判斷
從零開始開發Android版2048 (四) 分數、重置、結束一、分數的計算和儲存二、遊戲的重置三、遊戲結束的判斷

然後,我在activity中寫了一個用于更新分數的方法,在合并的方法裡,調用這個方法就可以了。

        遊戲的重置很簡單,因為我在之前,把填充空白格,随機生産兩個數字格等初始化的操作都放在了init()方法裡了,是以如果遊戲需要重新開始,那我們隻需要将gridlayout中的view清空,并将一些全局變量再重置為初始的數值,然後調用init()方法就可以了。

   當一次滑動後,gridlayout中所有的空格上都有數字,而且沒有可以合并的數字時,我們就會判定遊戲結束。我這裡的邏輯處理是,如果在沒有空白格的情況下,周遊所有的數字格,如果在這個格子的上下左右(實際判斷是隻判斷右和下即可)都沒有相同的數字格的時候,就算作了結束。

      為了實作這個判斷,我在numberlist這個類中加入了兩個方法:

然後在确定遊戲結束之時,彈出對話框,供使用者選擇結束還是重新開始:

    到現在這個遊戲的主體内容就基本都完成,這個程式算是我學習android以來寫的第一個小程式,雖然還有很多不完善的地方,但是在開發的過程中還是學到了很多東西。果然看書看再多,還是不如自己寫上幾段代碼學習得更快。希望和我一樣,從頭開始學習android的朋友們,大家一起努力吧。

    之後我還會利用閑暇的時間來不斷完善和優化這個小遊戲。怎麼也算是第一個android的程式,不能這麼馬馬虎虎就結束掉。

最後附上本篇的源碼,歡迎大家指正: