国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Android的2048小游戲的簡單實現(xiàn)

2017-07-05 20:02翟亞靜成麗君
電子技術與軟件工程 2017年12期
關鍵詞:實現(xiàn)益智游戲

翟亞靜++成麗君

摘 要2048是目前比較流行的一款適用于各類人群的益智小游戲,在原來設計基礎上市場上推出了它的各種新玩法,比如與俄羅斯方塊、消消樂、連連看等游戲的結合令2048小游戲在一定程度上增添了更多趣味性。本文采用Java語言和Android平臺實現(xiàn)了 2048經(jīng)典模式的運行,描寫了游戲的簡單實現(xiàn)。

【關鍵詞】游戲 益智 實現(xiàn)

1 引言

Android 智能手機目前擁有最多的用戶使用群體,隨著它的不斷更新與進步,基于Android的手機游戲也正在經(jīng)歷從簡單到復雜的進化過程。通過與俄羅斯方塊、消消樂、連連看等游戲思想的結合,使2048小游戲在經(jīng)典模式的玩法上推出了形式和趣味更強大的眾多新玩法。本文采用Java語言,通過Android平臺實現(xiàn)了 2048經(jīng)典模式的運行,描寫了游戲的簡單實現(xiàn),以方便實現(xiàn)2048小游戲的后續(xù)升級開發(fā)。

2 設計

2.1 算法設計

(1)2048游戲界面為一個4*4的方形格子,在格子上方顯示當前分數(shù),其下方為最高分。右上角可選擇模式,分小裙裙和經(jīng)典模式。開始時隨機出現(xiàn)兩個數(shù)字,出現(xiàn)的數(shù)字僅可能為2或4,設置出現(xiàn)2的概率大于4。

(2)用戶可以上下左右四個方向用手指滑動方塊,若方塊移動方向上有相同的數(shù)字則合并,支持同時合并但不支持連續(xù)合并,合并消去的格子之和即為所得分數(shù)。

(3)每次移動一步,空格上隨機出現(xiàn)一個數(shù)字(可能為2或者4)。

(4)若格子被數(shù)字填滿,則游戲結束,用戶可以選擇重新開始或者退出游戲。

2.2 程序流程圖

如圖1所示。

2.3 界面實現(xiàn)

如圖2所示。

3 核心代碼及相關算法解釋

setOnTouchListener(new View.OnTouchListener() {

//設置位置起始點和偏移點

//算法邏輯:由于手指在滑動方向會有偏差,一般不會精準的向四個方向滑動,//所以判斷是水平方向還是垂直方向的意圖,當水平方向偏移量大于垂直方向時表明用戶是水//平滑動意圖。同時我們只需要知道兩點,即:用戶手指按下的坐標點和手指離開時的坐標點,

//通過進行比對,從而識別出用戶的意圖。

private float startX, startY, offsetX, offsetY;

@Override

public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) {

//手指按下

case MotionEvent.ACTION_DOWN:

//按下時的x,y坐標

startX = event.getX();

startY = event.getY();

break;

//手指離開

case MotionEvent.ACTION_UP:

//計算手指離開時的偏移量(離開時坐標點-按下時坐標點),從而判斷方塊是往哪個方向移動

offsetX = event.getX() - startX;

offsetY = event.getY() - startY;

//識別移動方向,若offsetX的絕對值大于offsetY的,則水平移動

if(Math.abs(offsetX) > Math.abs(offsetY)){

//為避免誤差,將范圍設置為<-5

if(offsetX < -5){

toLeft();

}

else if(offsetX > 5){

toRight();

}

}

else {

if(offsetY < -5){

toUp();

}

else if(offsetY > 5){

toDown();

}

}

break;

default:

break;

}

return true;

}

});

}

//隨機數(shù)

private void addRandomNum(){

//新建一個list存放空的方塊,操作之前清空

Points.clear();

//對所有位置進行遍歷

for (int i = 0; i < 4; i++) {

for (int j = 0; j < 4; j++) {

//空方塊此時才可以添加值,有值時不進行添加

if (cardsMap[j][i].getNum() <= 0){

Points.add(new Point(j, i));

}

}

}

//取方塊。用Math.random()返回一個0-1的數(shù),當大于0.3時,值是2否則為4

Point p = Points.remove((int)(Math.random() * Points.size()));

cardsMap[p.x][p.y].setNum(Math.random()> 0.3 ? 2 : 4);

}

//給出方塊向左移動時的三種情況,其余三個移動方向同理

// 1)左邊為空

//2)左邊碰到的第一個數(shù)值相等,則相加

//3)左邊碰到的第一個數(shù)值不相等,則將其靠左

private void toLeft(){

boolean addFlag = false;

for (int y = 0; y < 4; y++) {

for (int x = 0; x < 4; x++) {

for (int x1 = x + 1; x1 < 4; x1++){

if (cardsMap[x1][y].getNum() > 0){

//如果當前位置上為0,就放在該位置上

if(cardsMap[x][y].getNum() <= 0){

cardsMap[x][y].setNum(cardsMap[x1][y].getNum());

//將原來位置上的值清除

cardsMap[x1][y].setNum(0);

//繼續(xù)遍歷

x--;

addFlag = true;

}

//有值且相同時,合并

else if (cardsMap[x][y].getNum() == cardsMap[x1][y].getNum()){

cardsMap[x][y].setNum(cardsMap[x][y].getNum()*2);

//將原來位置上的值清除

cardsMap[x1][y].setNum(0);

MainActivity.getMainActivity().addScore(cardsMap[x][y].getNum());

addFlag = true;

}

break;

}

}

}

}

if(addFlag == true){

addRandomNum();

endCheck();

}

}

4 結語

本文描述了2048小游戲采用Java語言+Eclipse+ADT+JDK開發(fā)的關鍵算法,不僅游戲玩法簡單易操作,實現(xiàn)也相對簡單,程序開發(fā)僅需要平常使用的安卓操作系統(tǒng)手機進行測試,適合我們初學者提高對Android知識及算法的掌握與應用。

參考文獻

[1]Android實訓案例(四).https://wenku.baidu.com/view/5e77b1c8ac51f01dc281e53a580216fc700a5373.html.2016-10-17/2017-05-06.

[2]郭霖.第一行代碼[Android(第2版)[M].人民郵電出版社,2012.

作者簡介

翟亞靜(1995-),女,山西省長治市人。山西農(nóng)業(yè)大學軟件學院2014級在讀本科生。主要研究方向為軟件工程。

作者單位

山西農(nóng)業(yè)大學軟件學院 山西省晉中市 030801

猜你喜歡
實現(xiàn)益智游戲
益智故事會
辦公室人員尚需制定個人發(fā)展規(guī)劃
淺析鐵路通信傳輸?shù)臉嫵杉皩崿F(xiàn)方法
爆笑游戲