Tải bản đầy đủ (.doc) (11 trang)

Lập trình Android: Game lật hình pot

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (143.99 KB, 11 trang )

Trung tâm Tin học – ĐH KHTN
Game đếm số
Project name: GameHinhCuaDac
Build Target: Android 2.3.3
Application name: GameHinhCuaDac
Package name: com.dac
Create Activity: GameHinhCuaDacActivity
Trong file main.xml:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:background="@drawable/bgmemory"
xmlns:android="
android:id="@+id/TableLayout03">
<TableRow android:id="@+id/TableRow01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:visibility="visible"
android:textSize="30sp"
android:paddingTop="20sp"
android:textColor="#EEFFAA"
android:id="@+id/mainTitle" />
</TableRow>
<TableRow android:id="@+id/TableRow02"
android:layout_width="wrap_content"


android:layout_height="wrap_content"
android:gravity="center">
<TextView android:layout_width="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:typeface="normal"
android:bufferType="normal"
android:textColor="#FFEEAA" />
</TableRow>
<TableRow android:id="@+id/TableRow03"
Lập trình Android – Page 1
Trung tâm Tin học – ĐH KHTN
android:paddingTop="30px"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center">
<LinearLayout android:id="@+id/LinearLayout01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center">
<ImageView android:id="@+id/ImageView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" />

</LinearLayout>

</TableRow>


<TableLayout android:id="@+id/tableLayout1"
android:gravity="bottom"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="match_parent">

<TableRow android:id="@+id/tableRow1"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

<Button android:id="@+id/btnnew"
android:background="@drawable/iconhome"
android:layout_width="40px"
android:layout_height="40px">
</Button>

</TableRow>

</TableLayout>
</TableLayout>
Trong Class Card.Java:
package com.dac;
import android.widget.Button;
public class Card {
public int x;
public int y;
Lập trình Android – Page 2
Trung tâm Tin học – ĐH KHTN
public Button button;

public Card(Button button, int x, int y){
this.x = x;
this.y = y;
this.button = button;
}
}

Trong file Activity:
package com.dac;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.drawable.Drawable;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;

import android.widget.Button;
import android.widget.TableLayout;
import android.widget.TableRow;
public class GamHinhCuaDacActivity extends Activity {
private static int ROW_COUNT = -1;
private static int COL_COUNT = -1;
private Context context;
private Drawable backImage;
private int [] [] cards;
private List<Drawable> images;
private Card firstCard;
private Card seconedCard;
private ButtonListener buttonListener;
private static Object lock = new Object();
Lập trình Android – Page 3
Trung tâm Tin học – ĐH KHTN
private TableLayout mainTable;
private UpdateCardsHandler handler;
private static final int NEW_MENU_ID = Menu.FIRST;
private static final int EXIT_MENU_ID = Menu.FIRST+1;
private int count =0;
private MediaPlayer mp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
progressDialog();
handler = new UpdateCardsHandler();
loadImages();
setContentView(R.layout.main);
Button btnnew = (Button)findViewById(R.id.btnnew);

btnnew.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
clickSound();
singleChoiceDialog();
}
});
backImage = getResources().getDrawable(R.drawable.iconfruit);
buttonListener = new ButtonListener();
mainTable = (TableLayout)findViewById(R.id.TableLayout03);
context = mainTable.getContext();
newGame(4,4);
}

public void progressDialog(){
final ProgressDialog progressDialog =
ProgressDialog.show(GamHinhCuaDacActivity.this, "",
"Loading ", true);
new Thread(new Runnable(){
public void run(){
try {
Thread.sleep(300);
progressDialog.dismiss();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}


private void newGame(int c, int r) {
ROW_COUNT = r;
COL_COUNT = c;
count =0;
Lập trình Android – Page 4
Trung tâm Tin học – ĐH KHTN

cards = new int [COL_COUNT] [ROW_COUNT];

mainTable.removeView(findViewById(R.id.TableRow01));
mainTable.removeView(findViewById(R.id.TableRow02));

TableRow tr = ((TableRow)findViewById(R.id.TableRow03));
tr.removeAllViews();

mainTable = new TableLayout(context);
tr.addView(mainTable);

for (int y = 0; y < ROW_COUNT; y++) {
mainTable.addView(createRow(y));
}

firstCard=null;
loadCards();

}

private void loadImages() {
images = new ArrayList<Drawable>();


images.add(getResources().getDrawable(R.drawable.card1));
images.add(getResources().getDrawable(R.drawable.card2));
images.add(getResources().getDrawable(R.drawable.card3));
images.add(getResources().getDrawable(R.drawable.card4));
images.add(getResources().getDrawable(R.drawable.card5));
images.add(getResources().getDrawable(R.drawable.card6));
images.add(getResources().getDrawable(R.drawable.card7));
images.add(getResources().getDrawable(R.drawable.card8));
images.add(getResources().getDrawable(R.drawable.card9));
images.add(getResources().getDrawable(R.drawable.card10));
images.add(getResources().getDrawable(R.drawable.card11));
images.add(getResources().getDrawable(R.drawable.card12));
images.add(getResources().getDrawable(R.drawable.card13));
images.add(getResources().getDrawable(R.drawable.card14));
images.add(getResources().getDrawable(R.drawable.card15));
images.add(getResources().getDrawable(R.drawable.card16));
images.add(getResources().getDrawable(R.drawable.card17));
images.add(getResources().getDrawable(R.drawable.card18));
images.add(getResources().getDrawable(R.drawable.card19));
images.add(getResources().getDrawable(R.drawable.card20));
images.add(getResources().getDrawable(R.drawable.card21));
}
private void loadCards(){
int size = ROW_COUNT*COL_COUNT;

Lập trình Android – Page 5
Trung tâm Tin học – ĐH KHTN
Log.i("loadCards()","size=" + size);


ArrayList<Integer> list = new ArrayList<Integer>();

for(int i=0;i<size;i++){
list.add(new Integer(i));
}
Random r = new Random();

for(int i=size-1;i>=0;i ){
int t=0;

if(i>0){
t = r.nextInt(i);
}

t=list.remove(t).intValue();
cards[i%COL_COUNT][i/COL_COUNT]=t%(size/2);

Log.i("loadCards()", "card["+(i%COL_COUNT)+
"]["+(i/COL_COUNT)+"]=" + cards[i%COL_COUNT]
[i/COL_COUNT]);
}
}

private TableRow createRow(int y){
TableRow row = new TableRow(context);
row.setHorizontalGravity(Gravity.CENTER);

for (int x = 0; x < COL_COUNT; x++) {
row.addView(createImageButton(x,y));
}

return row;
}

private View createImageButton(int x, int y){
Button button = new Button(context);
button.setBackgroundDrawable(backImage);
button.setId(100*x+y);
button.setOnClickListener(buttonListener);
return button;
}

class ButtonListener implements OnClickListener {
@Override
public void onClick(View v) {
synchronized (lock) {
if(firstCard!=null && seconedCard != null){
return;
Lập trình Android – Page 6
Trung tâm Tin học – ĐH KHTN
}
int id = v.getId();
int x = id/100;
int y = id%100;
turnCard((Button)v,x,y);
}
}
private void turnCard(Button button,int x, int y) {
button.setBackgroundDrawable(images.get(cards[x][y]));
//playSelectedSound();
if(firstCard==null){

firstCard = new Card(button,x,y);
}
else{
if(firstCard.x == x && firstCard.y == y){
return;
}
seconedCard = new Card(button,x,y);
TimerTask tt = new TimerTask() {
@Override
public void run() {
//try{
synchronized (lock) {
handler.sendEmptyMessage(0);
}
//}
//catch (Exception e) {
// Log.e("E1", e.getMessage());
//}
}
};
Timer t = new Timer(false);
t.schedule(tt, 800);
}
}
}

class UpdateCardsHandler extends Handler{
Lập trình Android – Page 7
Trung tâm Tin học – ĐH KHTN


@Override
public void handleMessage(Message msg) {
synchronized (lock) {
checkCards();
}
}
public void checkCards(){

if(cards[seconedCard.x][seconedCard.y] == cards[firstCard.x]
[firstCard.y]){
playCorrectSound();
firstCard.button.setVisibility(View.INVISIBLE);
seconedCard.button.setVisibility(View.INVISIBLE);

count ++;
if(count == (ROW_COUNT*COL_COUNT)/2){
winDialog();
}
}
else {
seconedCard.button.setBackgroundDrawable(backImage);
firstCard.button.setBackgroundDrawable(backImage);
}

firstCard=null;
seconedCard=null;
}
}

public void playSelectedSound(){

//mp = MediaPlayer.create(this, R.raw.click2);
mp.start();
}
public void playCorrectSound(){
mp = MediaPlayer.create(this, R.raw.correct);
mp.start();
}
public void playInCorrectSound(){
mp.start();
}
public void stopSound(){
if(mp != null){
mp.stop();
mp.release();
mp = null;

}
}
public void clickSound(){
stopSound();
Lập trình Android – Page 8
Trung tâm Tin học – ĐH KHTN
mp = MediaPlayer.create(this, R.raw.brickogg);
mp.start();
}
private void winDialog(){
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Ban co muon choi tiep ko");
alert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override

public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
singleChoiceDialog();
}
})
.setNegativeButton("Thoat", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.cancel();
}
})
.show();
}
public void singleChoiceDialog(){
final CharSequence[] items = {"DE", "Medium", "Hard", "Exelent"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Chon muc do choi");
builder.setSingleChoiceItems(items, -1, new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
// TODO Auto-generated method stub
//Toast.makeText(getApplicationContext(), items[item],
Toast.LENGTH_SHORT).show();
switch(item){
case 0:
newGame(4,4);
break;
case 1:

newGame(4,5);
break;
case 2:
newGame(4,6);
break;
case 3:
newGame(4,7);
}
Lập trình Android – Page 9
Trung tâm Tin học – ĐH KHTN
}
}).setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
Ngoài ra còn 1 số file hình ảnh, âm thanh khác các bạn download Project để tìm hiểu
thêm.
Lập trình Android – Page 10
Trung tâm Tin học – ĐH KHTN
Mọi ý kiến đóng góp các bạn vui lòng gữi bài về forum: www.forum.laptrinhdidong.vn .
Rất mong nhận được sự phản hồi từ các bạn.
Lập trình Android – Page 11

×