陸毅軍 黃俊 彭巧珍
【摘要】本文基于Android操作系統(tǒng),根據(jù)軟件工程的設(shè)計思想,以Androidstudio等為開發(fā)工具,設(shè)計出一款能夠開發(fā)青少年智力并對其進(jìn)行海洋生物知識科普的拼圖游戲。本游戲包括游戲設(shè)置界面,海洋生物圖片導(dǎo)讀及選擇頁面,并能顯示玩家的當(dāng)前游戲所用時間和步數(shù)。本軟件以培養(yǎng)興趣及科普知識為主。
【關(guān)鍵詞】Android ? 拼圖游戲 ?知識科普
一、引言
目前隨著智能手機(jī)的全面深入普及,青少年也成為手機(jī)app開發(fā)的新興對象。對于青少年而言,寓教于樂的app非常有助于其的智力開發(fā)與興趣培養(yǎng)。實(shí)現(xiàn)一款海洋生物科普類的趣味拼圖app便是本次的課題。
二、需求分析
在這個迅猛發(fā)展的互聯(lián)網(wǎng)時代,智能手機(jī)的普及已經(jīng)涉及青少年,對此我們設(shè)想設(shè)計一款能讓青少年在游戲過程中學(xué)到科普知識并且得到智力開發(fā)與興趣培養(yǎng)的app。由此,我們設(shè)計了此款趣味拼圖,使青少年在游戲的過程中學(xué)習(xí)到海洋生物科普知識。
此款app面向的用戶為7歲到14歲間的青少年,其基本功能:(1)能對一些海洋生物的基本圖片進(jìn)行瀏覽。(2)展示頁面根據(jù)海洋生物的棲息深度進(jìn)行不同的歸類。(3)當(dāng)點(diǎn)擊對應(yīng)的海洋生物的圖片后,將進(jìn)入新的頁面,此頁面將展示此海洋生物的相關(guān)科普信息,青少年可以自由瀏覽并進(jìn)行記憶熟悉。(4)可以根據(jù)情況進(jìn)行游戲困難度的選擇。
三、系統(tǒng)設(shè)計與實(shí)現(xiàn)
(一)游戲設(shè)置
用戶通過游戲設(shè)置按鈕進(jìn)入后,可選擇難度設(shè)置和背景音樂的設(shè)置,難度設(shè)置分為3X3、4X4、5X5等適應(yīng)不同層次用戶的選擇,給用戶帶來不同的難度挑戰(zhàn)。背景音樂可以試聽,在試聽后選擇自己喜歡的音樂作為背景音樂。
(二)知識展示
用戶在海洋生物分類中選擇了自己感興趣的生物后,點(diǎn)擊圖片即可跳轉(zhuǎn)到有關(guān)該動物的科普知識展示頁面,用戶可以在這個頁面自由瀏覽或者記錄,了解和學(xué)習(xí)相關(guān)的知識。
(三)拼圖游戲
用戶瀏覽完科普知識后可選擇進(jìn)入游戲,游戲環(huán)節(jié)中的圖片就是我們知識展示頁面中的生物圖片,而用戶進(jìn)入游戲后圖片已被智能分塊,在游戲過程中用戶發(fā)揮自己的智慧,通過移動方塊,將智能分塊并打亂的圖片拼成它原來的模樣即為成功,當(dāng)然在游戲過程中可點(diǎn)擊查看原圖協(xié)助游戲。
(四)核心功能
//判斷分割的數(shù)據(jù)是否能還原成原圖
public static boolean canSolve(List
//獲取空格Id
int blankId = mBlankItemBean.getmItemId();
// 可行性原則
if (data.size() % 2 == 1)
return getInversions(data) % 2 == 0;
else {
// 從底往上數(shù),空格位于奇數(shù)行
if (((blankId - 1) / PuzzleActivity.TYPE) % 2 == 1)
return getInversions(data) % 2 == 0;
else // 從底往上數(shù),空位位于偶數(shù)行
return getInversions(data) % 2 == 1;
}
}
//計算倒置和算法
public static int getInversions(List
int inversions = 0;
int inversionCount = 0;
for (int i = 0; i < data.size(); i++) {
for (int j = i + 1; j < data.size(); j++) {
int index = data.get(i);
if (data.get(j) != 0 && data.get(j) < index)
inversionCount++;
}
inversions += inversionCount;
inversionCount = 0;
}
return inversions;
}
//判斷拼圖是否成功復(fù)原
public static boolean isSuccess() {
for (ImageItemBean tempBean : mItemBeans) {
if(tempBean.getmItemId() != 0 && tempBean.getmItemId() == tempBean.getmBitmapId()
continue;
else if(tempBean.getmBitmapId() == 0 &&tempBean.getmItemId() == PuzzleActivity.TYPE * PuzzleActivity.TYPE)
continue;
else ?return false;
}
return true;
}
}
四、相關(guān)知識
核心算法:計算倒置和算法。拼圖的實(shí)現(xiàn)是將一張完整的圖片切成n等分,如果隨機(jī)切割排列會導(dǎo)致圖片無法還原,使用計算倒置和算法得到圖片生成的情況,然后判斷拼圖是否有解。
五、小結(jié)
本文利用Android studio 等開發(fā)工具設(shè)計了一款立足于青少年智力開發(fā)及海洋知識科普的趣味拼圖游戲。由于經(jīng)驗不足,該應(yīng)用仍存在一些不足的地方,功能方面還可以后續(xù)拓展。
參考文獻(xiàn):
[1]郭霖.第一行代碼Android(第2版)人民郵電出版社,2016.
[2]李興華.名師講壇——Java開發(fā)實(shí)戰(zhàn)經(jīng)典(第2版),2018.
基金項目:課題資助:南昌航空大學(xué)第14屆“三小”課題。