基于android環(huán)境的俄羅斯方塊畢業(yè)設(shè)計
《基于android環(huán)境的俄羅斯方塊畢業(yè)設(shè)計》由會員分享,可在線閱讀,更多相關(guān)《基于android環(huán)境的俄羅斯方塊畢業(yè)設(shè)計(52頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、基于android環(huán)境的俄羅斯方塊 一、 緒論 1.1. 項目背景 本題目將設(shè)計一個俄羅斯方塊(Tetris, 俄文:Тетрис)。它是一款風(fēng)靡全球的電視游戲機和掌上游戲機游戲,由俄羅斯人阿列克謝帕基特諾夫發(fā)明,故得此名。俄羅斯方塊的基本規(guī)則是移動、旋轉(zhuǎn)和擺放游戲自動輸出的各種方塊,使之排列成完整的一行或多行并且消除得分。由于上手簡單、老少皆宜,從而家喻戶曉,風(fēng)靡世界。 1.2. 開發(fā)平臺 此項目基于android 環(huán)境進行開發(fā),使用的編程工具為eclipse,它是以android語言作為其基本語言的一種可視化編程工具。 Android 是Google開發(fā)的基于Lin
2、ux平臺的開源手機操作系統(tǒng). Android四大基本組件分別是Activity,Service服務(wù),Content Provider內(nèi)容提供者,BroadcastReceiver廣播接收器。 應(yīng)用程序中,一個Activity通常就是一個單獨的屏幕,它上面可以顯示一些控件也可以監(jiān)聽并處理用戶的事件做出響應(yīng)。Activity之間通過Intent進行通信。 你的應(yīng)用可以使用它對外部事件進行過濾只對感興趣的外部事件(如當(dāng)電話呼入時,或者數(shù)據(jù)網(wǎng)絡(luò)可用時)進行接收并做出響應(yīng)。廣播接收器沒有用戶界面。然而,它們可以啟動一個activity或serice 來響應(yīng)它們收到的信息,或者用Notificatio
3、nManager 來通知用戶。 一個Service 是一段長生命周期的,沒有用戶界面的程序,可以用來開發(fā)如監(jiān)控類程序。 android平臺提供了Content Provider使一個應(yīng)用程序的指定數(shù)據(jù)集提供給其他應(yīng)用程序。 注:Activity生命周期 二、 項目規(guī)則及設(shè)計思路 1. 2. 2.1. 項目規(guī)則 玩家通過點觸虛擬鍵盤,左右控制方塊左右移動,按上代表旋轉(zhuǎn),按下代表加速向下移動,每滿一行消除,獲得相應(yīng)積分100,積分每增長2000,等級加1,游戲速度加快 2.2. 實現(xiàn)思路 1. 2. 2.1. 2.2. 2.2.1. 界面設(shè)計
4、 游戲菜單界面 游戲結(jié)束界面 游戲運行界面 排行榜 界面 幫助界面 注:游戲界面中,利用二維數(shù)組進行保存,其值為1代表該點有方塊占用,值為0代表空白,根據(jù)值繪制整張游戲窗口。 2.2.2. 功能設(shè)計 從游戲的基本玩法出發(fā),主要算法在于俄羅斯方塊的形狀和旋轉(zhuǎn)。在游戲設(shè)計中,方塊采用最基本的7種造型,包括長條型,正方型,正S型,反S型,正7型,反7型,T型,每種造型又可以通過逆時針旋轉(zhuǎn)變化出4種形狀,因此利用三維數(shù)組保存28種方塊形狀,并且編號為K~K+3(K=0,1…7)的四個形狀為一組。方塊采用4*4的二維數(shù)組的數(shù)據(jù)結(jié)構(gòu),以
5、此在界面中根據(jù)其數(shù)組對應(yīng)值進行方塊繪制。在旋轉(zhuǎn)過程進行之前,先判斷在該位置能否進行旋轉(zhuǎn),若能,則將其在三維數(shù)組中的編號K,編號為K+(K+1)%4的形狀即為旋轉(zhuǎn)結(jié)果。 游戲過程中,利用隨機函數(shù)在一個預(yù)覽窗體中提前展示形狀供用戶參考,然后將展示的形狀復(fù)制到游戲窗體中進行擺放,在游戲窗體中用戶就可以使用鍵盤的方向鍵來控制方塊的運動,然后對每一行進行判斷,如果有某行的方塊是滿的,則消除這行的方塊,并且使上面的方塊自由下落,其中,方塊向下的速度通過調(diào)用函數(shù)進行控制。同時用戶也可以使用向下鍵加快下落速度,定義一個變量,對消除的行數(shù)進行記錄,最后得出用戶的分數(shù),用條件語句對分數(shù)進行判斷,達到一定
6、的積分就可以升級到下一個等級。 三、 程序流程圖 1. 2. 3. 3.1. 總流程 到達底部部 到底游戲結(jié)束 到達底部部 結(jié)束 銷行操作 生成下一個下墜物 將新生的下墜物代替舊的“下一 個下墜物“ 將舊的“下一個下墜物”用作當(dāng)前 下墜物 銷行操作 游戲結(jié)束處理 下降一個單位 開始 3.2. 底部到達的判斷與銷行的實現(xiàn): 是 否 堆積方塊,判斷接觸面狀態(tài)及是否得分 2.統(tǒng)計分數(shù) 判斷是否過關(guān) 關(guān)數(shù)增加,游戲速度將變快。開始新的一關(guān),繼續(xù)游戲 游戲窗口重繪 1.判斷行滿、處理銷行、堆積方塊向下移動
7、 將新的下墜物放置到游戲區(qū)域中去,這時可能出現(xiàn)馬上到達底部的情況,因此需要對它進行判斷,如果是到達底部,則進行銷行處理,并且修改相應(yīng)的數(shù)據(jù)狀態(tài)。而判斷是否已經(jīng)到達了底部,可以通過當(dāng)前下墜物件所對應(yīng)的接觸面的方塊位置為被占用狀態(tài)來確定。 統(tǒng)計分數(shù):在消行處理里面有一個專門用來統(tǒng)計消行數(shù)的變量,然后根據(jù)變量的值決定分數(shù)的多少。如果總分數(shù)達到過關(guān)條件就過關(guān),改變游戲速度,開啟新的一關(guān),然后再加載方塊。沒有達到過關(guān)分數(shù)或者沒有滿行,則加載下一個方塊繼續(xù)游戲。 是 否 是 否 否 是 是 否 接上圖1點 底行 判斷當(dāng)前行是否為空 判斷當(dāng)前行是否為
8、滿 判斷是否有滿行 判斷移動行方塊是否為空 當(dāng)前行向上推動一行 將要移動行所有數(shù)據(jù)移至當(dāng)前行 將當(dāng)前行的所有數(shù)據(jù)初始化 統(tǒng)計連續(xù)幾行為滿 如果有銷行,則刷新游戲區(qū)域。接上圖2點 4. 5. 5.1. 5.2. 5.3. 隨機方塊的產(chǎn)生 是 否 7 6 5 4 3 2 1 隨機抽取一個數(shù) 隨機數(shù) 一字形 田字形 L 形 J 形 T 形 S 形 Z字形 型 游戲是否結(jié)束 保存當(dāng)前方塊坐標 顯示方塊于屏幕上 游戲結(jié)束 保存信息 關(guān)數(shù)初始化 返回開始界面 四、 部分截圖 5.1初始界面
9、 5.2游戲界面 5.3幫助界面 5.4排行界面 1. 2. 3. 4. 5. 五、 關(guān)鍵代碼 1. 2. 3. 4. 5. 6. 6.1. ActivityGame.java package com.HDU.tetris; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.AlertDialog.Builder; import android.c
10、ontent.Intent; import android.os.Bundle; import android.util.Log; import android.view.Window; public class ActivityGame extends Activity { //總游戲窗口 private static final String TAG = "ActivityGame"; TetrisView mTetrisView = null; //處理游戲進程的類 public void onCreate(Bundle saved) //創(chuàng)建活動
11、{ super.onCreate(saved); //啟動窗體的拓展特性 requestWindowFeature(Window.FEATURE_NO_TITLE); init(); } private void init() { mTetrisView = new TetrisView(this); Intent intent = getIntent(); //得到當(dāng)前的intent //獲取額外信息——等級 int level = intent.getIntExtra(ActivityMain.LEVEL,1); mT
12、etrisView.setLevel(level); //設(shè)置等級 int flag = intent.getFlags(); //得到當(dāng)前intent的標記符 if(flag == ActivityMain.FLAG_CONTINUE_LAST_GAME) {//當(dāng)遇到繼續(xù)上次游戲事件 mTetrisView.restoreGame(); //恢復(fù)上次游戲 } //得到當(dāng)前聲音設(shè)置 boolean isVoice = intent.getBooleanExtra(ActivityMain.VOICE,true); mTetris
13、View.setVoice(isVoice); //設(shè)置聲音 setContentView(mTetrisView); //設(shè)定當(dāng)前使用的視圖 } public void onPause() //暫?;顒? { mTetrisView.onPause(); super.onPause(); } public void onResume()//執(zhí)行活動 { super.onResume(); mTetrisView.onResume(); } public void onStop() //停止活動
14、{ super.onStop(); mTetrisView.saveGame(); //保存游戲 mTetrisView.freeResources(); //釋放游戲占用的資源 } } 6.2. ActivityHelp.java package com.HDU.tetris; import android.app.Activity; import android.os.Bundle; public class ActivityHelp extends Activity { //幫助窗口 public void onCreate
15、(Bundle saved) //開始 { super.onCreate(saved); setContentView(R.layout.help); //初始化幫助窗口的界面 } } 6.3. ActivityMain.java package com.HDU.tetris; // Author: HDU // 2010.3 import android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; impo
16、rt android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.CheckBox; import android.widget.TextView; public class ActivityMain extends Activity { public static final int FLAG_NEW_GAME = 0; //開始新游戲 public static final int FLAG_CONTINUE_LAST_GAME
17、 = 1; //繼續(xù)上一次的游戲 public static final String FILENAME = "settingInfo"; //文件名 public static final String LEVEL = "level"; //游戲級別 public static final String VOICE = "voice"; //游戲聲音 private int mLevel = 1; //當(dāng)前游戲等級 private Button btNewgame = null; //新游戲按鈕 private Button btCont
18、inue = null; //繼續(xù)游戲按鈕 private Button btHelp = null; //幫助按鈕 private Button btRank = null; //排名按鈕 private Button btPre = null; //等級下降按鈕 private Button btNext = null; //等級上升按鈕 private Button btExit = null; //退出按鈕 private TextView tvLevel = null; //等級編輯框 private CheckBox cbVoice =
19、null; //聲音選項 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { //創(chuàng)建,程序執(zhí)行時的第一步 super.onCreate(savedInstanceState); setContentView(R.layout.menu); //設(shè)置開始界面的菜單 btNewgame = (Button)findView
20、ById(R.id.bt_new); //通過ID查找新游戲按鈕在VIEW子控件 btContinue = (Button)findViewById(R.id.bt_continue);//繼續(xù)游戲按鈕控件 btHelp = (Button)findViewById(R.id.bt_help); //幫助按鈕控件 btRank = (Button)findViewById(R.id.bt_rank); //排名按鈕控件 btPre = (Button)findViewById(R.id.bt_pre); //等級下
21、降按鈕控件 btNext = (Button)findViewById(R.id.bt_next); //等級上升 按鈕控件 btExit = (Button)findViewById(R.id.bt_exit); //退出按鈕控件 tvLevel = (TextView)findViewById(R.id.tv_speed);//等級編輯框控件 cbVoice = (CheckBox)findViewById(R.id.cb_voice);//聲音選項框控件
22、 btNewgame.setOnClickListener(buttonListener); // 在新游戲按鈕上設(shè)置點擊監(jiān)聽器 btContinue.setOnClickListener(buttonListener);// 在繼續(xù)游戲按鈕上設(shè)置點擊監(jiān)聽器 btHelp.setOnClickListener(buttonListener); // 在幫助按鈕上設(shè)置點擊監(jiān)聽器 btRank.setOnClickListener(buttonListener); // 在排名按鈕上設(shè)置點擊監(jiān)聽器 btPre.
23、setOnClickListener(buttonListener); // 在等級下降按鈕設(shè)置點擊監(jiān)聽器 btNext.setOnClickListener(buttonListener); // 在等級上升按鈕上設(shè)置點擊監(jiān)聽器 btExit.setOnClickListener(buttonListener); // 在退出按鈕上設(shè)置點擊監(jiān)聽器 restoreSettings(); //恢復(fù)初始設(shè)置 } private Button.OnClickListener buttonListener = new
24、 Button.OnClickListener() { //按鈕上的點擊監(jiān)聽器類 @Override public void onClick(View v) { //按鈕點擊時的處理程序 if(v == btNewgame) //當(dāng)被點擊的按鈕為新游戲按鈕時 { Intent intent = new Intent(ActivityMain.this,ActivityGame.class);//在兩個Activity類之間傳輸數(shù)據(jù) intent.setFlags(FLAG_NEW_GAME); //設(shè)置標記符 intent
25、.putExtra(VOICE,cbVoice.isChecked()); //添加聲音的附加信息 intent.putExtra(LEVEL,mLevel); //添加等級的附加信息 startActivity(intent); //將此intent類傳入相應(yīng)的Activity中 return; } if(v == btContinue) //繼續(xù)游戲按鈕處理程序 { Intent intent = new Intent(ActivityMain.this,ActivityGame.class);//建立intent類
26、 intent.setFlags(FLAG_CONTINUE_LAST_GAME); //設(shè)置標記符 intent.putExtra(VOICE,cbVoice.isChecked()); //添加聲音選項的附加信息 startActivity(intent); //將此intent類傳入相應(yīng)的Activity中 return; } if(v == btHelp) //幫助按鈕的處理程序 { Intent intent = new Intent(ActivityMain.this,ActivityHelp.class);//建
27、立intent類 startActivity(intent); //將此intent類傳入相應(yīng)的Activity中 return; } if(v == btRank) //排名按鈕的處理程序 { Intent intent = new Intent(ActivityMain.this,ActivityRank.class);//建立intent類 startActivity(intent); //將此intent類傳入相應(yīng)的Activity中 return; } if(v == btPre) //等級下降
28、按鈕的才護理程序 { btPre.setBackgroundColor(0xffc0c0c0); //設(shè)置背景顏色 String s = tvLevel.getText().toString(); //從等級編輯框中獲取信息,傳入字符串中 int level = Integer.parseInt(s); //將獲取的字符串轉(zhuǎn)化為數(shù)字 --level; //等級減1 level = (level-1+TetrisView.MAX_LEVEL) % TetrisView.MAX_LEVEL;//避免等級益處標準范圍,形成循環(huán)設(shè)置
29、 ++level;//等級加1,從0~5 改為標準的1~6 s = String.valueOf(level); //將數(shù)字轉(zhuǎn)化為字符串,傳回 tvLevel.setText(s); //等級編輯框的內(nèi)容顯示為新的等級數(shù) mLevel = level; //當(dāng)前等級改為設(shè)置的等級 btPre.setBackgroundColor(0x80cfcfcf); //設(shè)置背景顏色 return; } if(v == btNext) //等級上升按鈕的處理程序 { btNext.setBackgroundColor(0
30、xffc0c0c0); //設(shè)置背景顏色 String s = tvLevel.getText().toString(); //從等級編輯框中獲取信息,傳入字符串中 int level = Integer.parseInt(s); //將獲取的字符串轉(zhuǎn)化為數(shù)字 --level;//等級減1 level = (level+1) % TetrisView.MAX_LEVEL; //避免等級益處標準范圍,形成循環(huán)設(shè)置 ++level;//等級加1,從0~5 改為標準的1~6 s = String.valueOf(level); //將數(shù)字
31、轉(zhuǎn)化為字符串,傳回 tvLevel.setText(s); //等級編輯框的內(nèi)容顯示為新的等級數(shù) mLevel = level; //當(dāng)前等級改為設(shè)置的等級 btNext.setBackgroundColor(0x80cfcfcf); //設(shè)置背景顏色 return; } if(v == btExit) //退出按鈕的處理程序 { ActivityMain.this.finish(); //結(jié)束該活動 } } }; private void saveSettings()
32、//保存設(shè)置方法 { //SharedPreferences是輕量級的存儲類,主要是保存一些常用的配置 SharedPreferences settings = getSharedPreferences(FILENAME,0);//得到當(dāng)前設(shè)置信息 settings.edit() .putInt(LEVEL,mLevel) .putBoolean(VOICE,cbVoice.isChecked()) .commit(); //將各種信息保存如settings中,完成更新設(shè)置 } p
33、rivate void restoreSettings() //恢復(fù)初始設(shè)置 { SharedPreferences settings = getSharedPreferences(FILENAME,0);//得到當(dāng)前設(shè)置信息 mLevel = settings.getInt(LEVEL,1); //等級恢復(fù)為1 boolean hasVoice = settings.getBoolean(VOICE,true); tvLevel.setText(String.valueOf(mLevel)); // 顯示初始等級到等級編輯框中
34、 cbVoice.setChecked(hasVoice); // 聲音設(shè)置為開啟 } public void onStop() //活動停止方法 { super.onStop(); saveSettings(); //保存當(dāng)前設(shè)置 } } 6.4. ActivityRank.java package com.HDU.tetris; import android.app.Activity; import android.os.Bundle; import android.widget.List
35、View; import android.widget.SimpleAdapter; import android.widget.SimpleCursorAdapter; public class ActivityRank extends Activity { //排名窗口 private RankDatabase mDatabase = null; //數(shù)據(jù)庫信息 //通過ListView控件,可將項目組成帶有或不帶有列標頭的列,并顯示伴隨的圖標和文本。 private ListView mListView = null; public void onCr
36、eate(Bundle saved) //創(chuàng)建該活動 { super.onCreate(saved); setTitle("排行榜"); //顯示標題 setContentView(R.layout.rank); //設(shè)置窗口初始化信息 } } 6.5. Court.java package com.HDU.tetris; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.
37、graphics.Paint; public class Court { //游戲窗口 public final static int COURT_WIDTH = 11; //窗口的寬度 public final static int COURT_HEIGHT = 23+4; //窗口的高度 public final static int BLOCK_WIDTH = 20; //每個格子的寬度 public final static int BLOCK_HEIGHT = 20; //每個格子的高度 public final static int AB
38、OVE_VISIBLE_TOP = 4; //允許顯示的最高點 public final static int BEGIN_DRAW_X = 0; //開始畫圖的坐標 public final static int BEGIN_DRAW_Y = TetrisView.SCREEN_HEIGHT - Court.BLOCK_WIDTH * Court.COURT_HEIGHT; private int[][] mCourt = new int[COURT_WIDTH][COURT_HEIGHT]; //保存窗口信息的數(shù)組 private Context mContex
39、t = null; //context的作用,就是android應(yīng)用連接service的橋梁。 private ResourceStore mRs = null; //應(yīng)用環(huán)境中的資源信息 public Court(Context context) { mContext = context; //保存應(yīng)用環(huán)境全局信息 mRs = new ResourceStore(context); //獲取應(yīng)用環(huán)境中的資源信息 clearCourt(); //清空游戲窗口 } public void clearCourt() //清除窗口信息
40、
{
int i,j;
for(i=0;i 41、] != 0)
return true;
}
return false;
}
public boolean isSpace(int posX,int posY) //判斷該點是否為空
{
if (posX < 0 || posX >= COURT_WIDTH) //超出行邊界線出錯
return false;
if (posY < 0 || posY >= COURT_HEIGHT) //超出列邊界線出錯
return false;
if(0 == mCourt[posX][posY]) //對應(yīng)數(shù)組的值為0 42、,即為空
return true;
return false;
}
public boolean availableForTile(int[][] tile,int x,int y) //判斷該格子能否放方塊
{
for (int i = 0; i < 4; i++) {//遍歷所有點
for (int j = 0; j < 4; j++) {
if (tile[i][j] != 0) {
if (!isSpace(x + i, y + j)) { //該點已經(jīng)有方塊占據(jù)
return false;
43、 }
}
}
}
return true;
}
public void placeTile(TileView tile) //放置方塊
{
int i,j;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
if (tile.mTile[i][j] != 0) //沒有被占據(jù)
{//窗口中該點的位置放置相應(yīng)的方塊
mCourt[tile.getOffsetX() + i][tile.getOffsetY() + j] = ti 44、le.getColor();
}
}
}
}
public int removeLines() //消除完成了的一整行
{
int high = 0;
int low = COURT_HEIGHT; // 初始最低點
high = highestFullRowIndex(); //得到可消除的最高行數(shù)
low = lowestFullRowIndex(); //得到可消除的最低行數(shù)
int lineCount = low - high +1; //可消除的總行數(shù)
if(lineCount > 0) //存 45、在可消除的行
{
eliminateRows(high,lineCount); //消除找到的可消除的行
return lineCount; //返回消除的行數(shù)
}
return 0;
}
private void eliminateRows(int highRow,int rowAmount)//消除已完成的行上的方塊
{
int i,j;
for(i = highRow+rowAmount-1;i >= rowAmount;i--)
{
for(j = 0;j < COURT_WIDTH;j++)
{/ 46、/將待消除行上方的方塊整體向下移動,覆蓋待消除的行
mCourt[j][i] = mCourt[j][i-rowAmount];
}
}
}
private int highestFullRowIndex() //查找已完成行的最高行數(shù)
{
int result = 0;
boolean removeable = true; //標記是否可以消除
int i,j;
for(i = 0;i < COURT_HEIGHT;i++) //從上往下遍歷
{
removeable = true;
for(j = 0; 47、j 48、T-1; //初始最低點
boolean removeable = true;
int i,j;
for(i = COURT_HEIGHT - 1;i >= 0;i--)//從下往上遍歷
{
removeable = true;
for(j = 0;j 49、oveable) //可消除,則找到結(jié)果,退出
break;
}
return result;
}
private void removeSingleLine(int lineIndex,int time) //消除單行
{
int t,i,j;
for(t = 0;t 50、i] = mCourt[j][i - 1];//上一行覆蓋下一行
}
}
}
}
public void paintCourt(Canvas canvas) //根據(jù)畫布信息畫游戲窗口
{
//Paint 中包含了很多方法對其屬性進行設(shè)置,繪制時所使用的畫筆
Paint paint = new Paint();
paint.setAlpha(0x60); // 設(shè)置Alpha值
//對圖片添加透明效果
canvas.drawBitmap(mRs.getCourtBackground(),0, 0, paint);
51、 paint.setAlpha(0xee);
for (int i = 0; i < Court.COURT_WIDTH; i++)
{
for (int j = 0; j < Court.COURT_HEIGHT; j++)
{
if (mCourt[i][j] != 0)
{//畫出各個小方格
canvas.drawBitmap(mRs.getBlock(mCourt[i][j] - 1), BEGIN_DRAW_X + i
* Court.BLOCK_WIDTH, BEGIN_DRAW_Y + j * Cou 52、rt.BLOCK_WIDTH, paint);
}
}
}
}
public int[][] getMatrix() //得到游戲窗口的數(shù)組
{
return mCourt;
}
}
6.6. DrawTool.java
package com.HDU.tetris;
import android.graphics.Bitmap;
import android.graphics.Canvas;
public class DrawTool
{
public static void paintIma 53、ge(Canvas canvas,Bitmap bitmap,int x,int y)
{
canvas.drawBitmap(bitmap,x,y,null); //在指定位置繪制圖象
}
}
6.7. MusicPlayer.java
package com.HDU.tetris;
import android.content.Context;
import android.media.MediaPlayer;
public class MusicPlayer {
private MediaPlayer mMoveVoice = nul 54、l; //創(chuàng)建移動時的聲音類
private MediaPlayer mBombVoice = null; //創(chuàng)建炸毀時的聲音類
private boolean mIsMute = false;
public MusicPlayer(Context context)
{
mMoveVoice = MediaPlayer.create(context,R.raw.move); //指定相應(yīng)的音樂
mBombVoice = MediaPlayer.create(context,R.raw.bomb);
}
public void playM 55、oveVoice()
{
if(mIsMute)
return;
mMoveVoice.start();//開始播放音樂
}
public void playBombVoice()
{
if(mIsMute)
{
return;
}
mBombVoice.start(); //開始播放音樂
}
public void setMute(boolean b) //設(shè)置變量的值
{
mIsMute = b;
}
public void free() //釋放
{
mMoveVoi 56、ce.release(); //結(jié)束該類的生命周期
mBombVoice.release();
}
}
6.8. RankDatabase.java
package com.HDU.tetris;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.data 57、base.sqlite.SQLiteDatabase.CursorFactory;
public class RankDatabase {
private static final String TAG = "RankDatabase"; //標記
private static final String DB_NAME = "rank.db"; //數(shù)據(jù)庫名
private static final String DB_TABLE = "table1"; //數(shù)據(jù)庫表格
private static final int DB_VERSION = 1; // 58、數(shù)據(jù)庫視圖
private static final String KEY_ID = "_id"; //id
public static final String KEY_RANK = "rank"; //排名
public static final String KEY_SCORE = "score"; //成績
public static final String KEY_NAME = "name"; //用戶名字
private static final String DB_CREATE = "CREATE TABLE "
+ DB_TABLE + 59、 " ("
+ KEY_ID + " INTEGER PRIMARY_KEY,"
+ KEY_RANK + " INTEGER,"
+ KEY_SCORE + " INTEGER"
+ KEY_NAME + " TEXT)"; //數(shù)據(jù)庫查詢語句
private Context mContext = null; //應(yīng)用環(huán)境全局信息
private SQLiteDatabase mDatabase = null; ////用于管理和操作SQLite數(shù)據(jù)庫
private DatabaseHelper mHelper = null; //數(shù)據(jù)庫連 60、接字符串
public void RankDatabase(Context context)
{
mContext = context; //保存應(yīng)用環(huán)境
}
private static class DatabaseHelper extends SQLiteOpenHelper
{
public DatabaseHelper(Context context)//管理相應(yīng)的數(shù)據(jù)庫
{
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public vo 61、id onCreate(SQLiteDatabase db) //創(chuàng)建活動
{
db.execSQL(DB_CREATE); //執(zhí)行數(shù)據(jù)庫語句
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)//數(shù)據(jù)庫升級
{
}
}
public void open() //打開數(shù)據(jù)庫
{
mHelper = new DatabaseHelper(mContext);//建立數(shù)據(jù)庫管理
mDatab 62、ase = mHelper.getWritableDatabase();//得到可寫數(shù)據(jù)庫
}
public void close() //關(guān)閉數(shù)據(jù)庫
{
mHelper.close();//關(guān)閉數(shù)據(jù)庫管理
}
}
6.9. RefreshHandle.java
package com.HDU.tetris;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
class RefreshHandler extends Handler
63、{
final static int MESSAGE_REFRESH = 0xeeeeeeee;
final static int DELAY_MILLIS = 100; //延遲時間
TetrisView mV = null; //游戲視圖
boolean mIsPaused = false; //暫停標記
public RefreshHandler(TetrisView v) //構(gòu)造函數(shù)
{
super();
mV = v;
}
public void handleMessage(Message ms) //信息處理
{
64、
if( !mIsPaused ) //不是暫停狀態(tài)
{
if(ms.what == MESSAGE_REFRESH) //消息編碼更新時
{
mV.logic(); //
mV.invalidate(); //重繪游戲窗口
}
}
}
public void pause() //暫?;顒?
{
mIsPaused = true; //標記為暫停
}
public void resume() //恢復(fù)運行
{
mIsPaused = false; //改變暫停標記
}
65、}
6.10. ResourceStore.java
package com.HDU.tetris;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
// Resou 66、rceStore是一個Singleton
public class ResourceStore {
private static Bitmap mBackground = null; //背景圖片
private static Bitmap[] mBlocks = null; //方塊圖片
private static Bitmap mMenuBackground = null; //菜單背景圖片
private static Bitmap mMenu = null; //菜單圖片
private static Bitmap mSpeed = null; //速度
private static Bitmap mLine = null; //
private static Bitmap mScore = null; //分數(shù)
private static Bitmap mGameover = null; //游戲結(jié)束
private Context mContext = null; //應(yīng)用環(huán)境全局信息
private R
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 24香港璀璨的明珠
- 第02講 第一章 綜合布線基礎(chǔ)知識
- 預(yù)防傳染病課件
- 【創(chuàng)新設(shè)計】2011屆高考生物一輪復(fù)習(xí) 第5章單元綜合提升 細胞增殖、分化、衰老和凋亡課件 蘇教版必修1
- 512防震減災(zāi)安全教育班會課件
- 2022年浙教初中數(shù)學(xué)八下《反證法》課件10
- 1山中訪友課后作業(yè)(A組-基礎(chǔ)篇)
- 產(chǎn)后出血完整版
- 質(zhì)量培訓(xùn)教材(2)
- 部編版一年級下冊語文課件第三單元語文園地三(完美版)
- 我最好老師課件
- 面向?qū)ο蟾呒墤?yīng)用及C-sharp-語法新特性課件
- 堿金屬元素課件
- 部編人教版六年級語文下冊14《文言文二則-》學(xué)-弈課件
- 部編版六年級上冊語文課件--宇宙生命之謎