「猜小球」是一個簡單的愉悅身心的小遊戲,它的功能結構如圖a-1所示。java
在開發本遊戲時,首先須要下載安裝Android SDK 4.3,設置系統屬性環境變量,啓動Eclipse,建立和配置AVD模擬器,建立Android應用程序。android
在實現本遊戲前,首先須要準備遊戲中所需的圖片資源,包括遊戲背景圖片、圖標、默認顯示的杯子、有小球的杯子和沒有小球的杯子5張圖片,如圖a-2所示。把它們放置在項目根目錄的res/drawable-mdpi文件夾中。git
background.png cup_default.png cup_ok.png cup_sorry.png ic_launcher.pnggithub
以後系統將自動在gen目錄下的com.example_game包中的R.java文件中添加對應的圖片和id。打開R.java文件,能夠看到下面圖片id。數組
public static final int background=0x7f020000; public static final int cup_default=0x7f020001; public static final int cup_ok=0x7f020002; public static final int cup_sorry=0x7f020003; public static final int ic_launcher=0x7f020004;
當玩家開始遊戲時,屏幕將顯示3個杯子,單擊其中的任意一個杯子,程序判斷該杯子中是否有小球,而且打開杯子顯示結果,有小球顯示猜對了,沒有則顯示猜錯了詢問是否再玩一次,此時可經過單擊「再玩一次」按鈕從新開始遊戲。具體系統流程如圖a-3所示。dom
實現過程this
實現遊戲規則的代碼所有編寫在主活動的MainActivity中:spa
(1) 在主活動MainActivity中,定義一個保存所有圖片ID的數組、3個ImageView類型的對象和一個TextView類型的對象。具體代碼以下:調試
//顯示結果 private TextView text; // ImageView組件 private ImageView pic0; private ImageView pic1; private ImageView pic2; //定義一個保存所有圖片ID的數組 int[] imageIds = new int[]{R.drawable.cup_ok, R.drawable.cup_sorry,R.drawable.cup_sorry};
(2) 編寫一個無返回值的方法replay(),用於隨機指定小球所在的杯子。具體代碼以下:code
public void replay() { for (int i = 0; i < 3; i++) { // 將數組元素i保存到臨時變量中 int temp = imageIds[i]; // 生成2之內的隨機整數 int index = (int) (Math.random() * 2); // 將隨機數指定的數組元素的內容賦給數組元素i imageIds[i] = imageIds[index]; // 將臨時變量的值賦值給隨機數組指定的那個數組元素 imageIds[index] = temp; } }
(3) 編寫Drawable資源對應的XML文件button_state.xml,用於設置當鼠標按下時顯示的圖片,以及鼠標沒有按下時顯示的圖片。具體代碼以下:
//獲取ImageView組件 pic0 = (ImageView) findViewById(R.id.pic0); pic1 = (ImageView) findViewById(R.id.pic1); pic2 = (ImageView) findViewById(R.id.pic2); //獲取TextView組件 text = (TextView) findViewById(R.id.text); //開局先將杯子順序打亂 replay();
(4) 爲3個顯示杯子的ImageView組件添加單擊事件監聽器,用於將杯子打開,並顯示猜猜看的結果。具體代碼以下:
//爲杯子添加單擊事件監聽 pic0.setOnClickListener(this); pic1.setOnClickListener(this); pic2.setOnClickListener(this);
(5) 編寫onClick()方法,用於顯示打開的杯子,並顯示判斷結果。具體代碼以下:
public void onClick(View view) { switch (view.getId()) { //設置已打亂順序的杯子圖片 case R.id.pic0: pic0.setImageDrawable(getResources().getDrawable(imageIds[0]));
pic1.setImageDrawable(getResources().getDrawable(imageIds[1]));
pic2.setImageDrawable(getResources().getDrawable(imageIds[2])); //判斷是否猜中有小球的杯子 if (imageIds[0] == R.drawable.cup_ok) { text.setText("恭喜你,猜對了,祝你幸福!"); } else text.setText("很抱歉,猜錯了,要不要再試一次?"); break; case R.id.pic1:
pic0.setImageDrawable(getResources().getDrawable(imageIds[0]));
pic1.setImageDrawable(getResources().getDrawable(imageIds[1]));
pic2.setImageDrawable(getResources().getDrawable(imageIds[2])); if (imageIds[1] == R.drawable.cup_ok) { text.setText("恭喜你,猜對了,祝你幸福!"); } else text.setText("很抱歉,猜錯了,要不要再試一次?"); break; case R.id.pic2:
pic0.setImageDrawable(getResources().getDrawable(imageIds[0]));
pic1.setImageDrawable(getResources().getDrawable(imageIds[1])); pic2.setImageDrawable(getResources().getDrawable(imageIds[2])); if (imageIds[2] == R.drawable.cup_ok) { text.setText("恭喜你,猜對了,祝你幸福!"); } else text.setText("很抱歉,猜錯了,要不要再試一次?"); break; case R.id.butplay: replay(); default: break; } }
(6) 獲取「再玩一次」按鈕,併爲該按鈕添加單擊事件監聽器。在其單擊事件中,將標題和3個ImageView的圖像恢復爲默認值。具體代碼以下:
//獲取「再玩一次」按鈕 Button butplay = (Button) findViewById(R.id.butplay); //爲「再玩一次」按鈕添加事件監聽器 butplay.setOnClickListener(this); public void replay() { //點擊再玩一次,恢復原有標題和杯子圖片 text.setText(R.string.cup);
pic0.setImageDrawable(getResources().getDrawable(R.drawable.cup_default));
pic1.setImageDrawable(getResources().getDrawable(R.drawable.cup_default));
pic2.setImageDrawable(getResources().getDrawable(R.drawable.cup_default)); }
(7) 在AndroidManifest.xml中設置activity讓遊戲橫屏顯示。具體代碼以下:
android:screenOrientation="landscape"
運行調試
項目開發完成後,就能夠在模擬器中運行該項目了。成功運行後將顯示如圖a-4遊戲主界面。單擊其中的任意一個杯子,將打開杯子顯示裏面是否有小球,根據單擊的杯子裏面是否有小球顯示對應的結果。
圖a-4
例如單擊中間的杯子,若是小球在這個杯子裏,將顯示如圖a-5所示的運行結果;不然,將顯示如圖a-6所示的效果。單擊「再玩一次」按鈕,從新開始遊戲。
圖a-5 圖a-6
參考文獻
[1]李文琴,李翠霞編著.Android開發與實踐.2014.8.