请教各位前辈,老师布置的一个Android游戏项目,用的工具是eclipse编译。网上找了一个拼图游戏,它没有游戏菜单界面,我想自己添加一个menu界面,布局文件和逻辑代码简单写了下,运行后,从菜单点击进入游戏,可以进入到原来的游戏界面,但是按键无反应,游戏倒计时也无反应(如图)。
到底是缺少了啥语句导致的啊?
**如下为菜单代码:**
package hbsi.game.main;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class MainMenuView extends Activity implements OnClickListener{
private Button startBtn;
private Button exitBtn;
MainActivity mainActivity = new MainActivity();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.start_menu);
startBtn = (Button)findViewById(R.id.startBtn);
exitBtn = (Button)findViewById(R.id.exitBtn);
startBtn.setOnClickListener(this);
exitBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId() == startBtn.getId())
{
setContentView(R.layout.activity_main);
//Intent itent=new Intent();
//itent.setClass(MainMenuView.this, MainActivity.class);
//startActivity(itent);
//MainMenuView.this.finish();
}
if(v.getId() == exitBtn.getId())
{
}
}
}
如下为游戏界面逻辑代码:
package hbsi.game.main;
import java.util.Random;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;
import hbsi.game.main.R;
public class MainActivity extends Activity implements OnClickListener {
private ImageButton b00;
private ImageButton b01;
private ImageButton b02;
private ImageButton b10;
private ImageButton b11;
private ImageButton b12;
private ImageButton b20;
private ImageButton b21;
private ImageButton b22;
private TextView tv_time;
private TextView tv_step;
private Button btn_back;
private Button btn_reset;
private boolean timeSwitch=true;
private int step;
private int time;
private Handler mHandler=new Handler(){
public void handleMessage(Message msg) {
if(msg.what==1){
String time=(String) msg.obj;
tv_time.setText("已用时间:"+time);
}
};
};
private int imageX = 3;
private int imageY = 3;
private int imgCount = imageX * imageY;
private int length = imgCount;
private int blankSwap = length - 1;
private int blankImgId = R.id.ib_02_02;
// 声明一个图片数组的下标,随机排列这个数组
private int[] imageIndex = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
private int[] imageId = { R.drawable.img_xiaoxiong_00x00,
R.drawable.img_xiaoxiong_00x01, R.drawable.img_xiaoxiong_00x02,
R.drawable.img_xiaoxiong_01x00, R.drawable.img_xiaoxiong_01x01,
R.drawable.img_xiaoxiong_01x02, R.drawable.img_xiaoxiong_02x00,
R.drawable.img_xiaoxiong_02x01, R.drawable.img_xiaoxiong_02x02, };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
step = 0;
setContentView(R.layout.activity_main);
initUI();
Random();
new Thread(){public void run() {
time = 0;
while(timeSwitch==true){
String strTime=time+"";
Message msg = Message.obtain();
msg.what=1;
msg.obj=strTime;
mHandler.sendMessage(msg);
try {
//sleep以毫秒为单位
Thread.sleep(1000);
time++;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};}.start();
}
// 打乱顺序
private void Random() {
int ran1, ran2;
for (int i = 0; i < 20; i++) {
ran1 = new Random().nextInt(length - 1);
do {
ran2 = new Random().nextInt(length - 1);
if (ran1 != ran2) {
break;
}
} while (true);
Swap(ran1, ran2);
}
// 随机排序
b00.setImageDrawable(getResources().getDrawable(
imageId[imageIndex[0]]));
b01.setImageDrawable(getResources().getDrawable(
imageId[imageIndex[1]]));
b02.setImageDrawable(getResources().getDrawable(
imageId[imageIndex[2]]));
b10.setImageDrawable(getResources().getDrawable(
imageId[imageIndex[3]]));
b11.setImageDrawable(getResources().getDrawable(
imageId[imageIndex[4]]));
b12.setImageDrawable(getResources().getDrawable(
imageId[imageIndex[5]]));
b20.setImageDrawable(getResources().getDrawable(
imageId[imageIndex[6]]));
b21.setImageDrawable(getResources().getDrawable(
imageId[imageIndex[7]]));
b22.setImageDrawable(getResources().getDrawable(
imageId[imageIndex[8]]));
}
private void Swap(int ran1, int ran2) {
int temp = imageIndex[ran1];
imageIndex[ran1] = imageIndex[ran2];
imageIndex[ran2] = temp;
}
private void initUI() {
tv_time = (TextView) findViewById(R.id.tv_time);
tv_step = (TextView) findViewById(R.id.tv_step);
btn_reset = (Button) findViewById(R.id.btn_reset);
btn_back = (Button) findViewById(R.id.backBtn);
b00 = (ImageButton) findViewById(R.id.ib_00_00);
b01 = (ImageButton) findViewById(R.id.ib_00_01);
b02 = (ImageButton) findViewById(R.id.ib_00_02);
b10 = (ImageButton) findViewById(R.id.ib_01_00);
b11 = (ImageButton) findViewById(R.id.ib_01_01);
b12 = (ImageButton) findViewById(R.id.ib_01_02);
b20 = (ImageButton) findViewById(R.id.ib_02_00);
b21 = (ImageButton) findViewById(R.id.ib_02_01);
b22 = (ImageButton) findViewById(R.id.ib_02_02);
b00.setOnClickListener(this);
b01.setOnClickListener(this);
b02.setOnClickListener(this);
b10.setOnClickListener(this);
b11.setOnClickListener(this);
b12.setOnClickListener(this);
b20.setOnClickListener(this);
b21.setOnClickListener(this);
b22.setOnClickListener(this);
btn_reset.setOnClickListener(this);
btn_back.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ib_00_00:
btnMove(R.id.ib_00_00, 0);
break;
case R.id.ib_00_01:
btnMove(R.id.ib_00_01, 1);
break;
case R.id.ib_00_02:
btnMove(R.id.ib_00_02, 2);
break;
case R.id.ib_01_00:
btnMove(R.id.ib_01_00, 3);
break;
case R.id.ib_01_01:
btnMove(R.id.ib_01_01, 4);
break;
case R.id.ib_01_02:
btnMove(R.id.ib_01_02, 5);
break;
case R.id.ib_02_00:
btnMove(R.id.ib_02_00, 6);
break;
case R.id.ib_02_01:
btnMove(R.id.ib_02_01, 7);
break;
case R.id.ib_02_02:
btnMove(R.id.ib_02_02, 8);
break;
case R.id.btn_reset:
Random();
time = 0;
step = 0;
tv_step.setText("已用步数:"+String.valueOf(step));
break;
case R.id.backBtn:
setContentView(R.layout.start_menu);
break;
}
}
/**
* 点击的图片与空白区域的图片交换位置
*
* @param imageBtnId
* @param site
*/
public void btnMove(int imageBtnId, int site) {
// 相邻图片坐标
int sizeX = site / imageX;
int sizeY = site % imageY;
// 空白图片坐标
int blackX = blankSwap / imageX;
int blackY = blankSwap % imageY;
int x = Math.abs(sizeX - blackX);
int y = Math.abs(sizeY - blackY);
// 满足移动条件
if ((x == 0 && y == 1) || (x == 1 && y == 0)) {
// 点击图片的id
ImageButton clickButton = (ImageButton) findViewById(imageBtnId);
// 当前点击的图片设置为不可见状态
clickButton.setVisibility(View.INVISIBLE);
// 空白图片的id
ImageButton blankButton = (ImageButton) findViewById(blankImgId);
// 用点击图片覆盖空白图片
blankButton.setImageDrawable(getResources().getDrawable(
imageId[imageIndex[site]]));
// 将之前空白图片设置为可见
blankButton.setVisibility(View.VISIBLE);
// 交换标记
Swap(site, blankSwap);
// 让上面能够重新运算空白的位置
blankSwap = site;
// 交换两者的ID
blankImgId = imageBtnId;
step++;
tv_step.setText("已用步数:"+String.valueOf(step));
GameOver();
}
}
private void GameOver() {
boolean isloop=true;
for (int i = 0; i < 9; i++) {
if(imageIndex[i]!=i){
isloop=false;
}
}
if(isloop){
timeSwitch=false;
b00.setClickable(false);
b01.setClickable(false);
b02.setClickable(false);
b10.setClickable(false);
b11.setClickable(false);
b12.setClickable(false);
b20.setClickable(false);
b21.setClickable(false);
b22.setClickable(false);
b22.setImageDrawable(getResources().getDrawable(imageId[8]));
b22.setVisibility(View.VISIBLE);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setMessage("恭喜,拼图成功了!所用时间为:"+time +",共用步数为:"+step)
.setPositiveButton("确定", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create();
builder.show();
}
}
}