mceychan102 2017-12-29 02:35 采纳率: 0%
浏览 1655
已结题

自己添加了个游戏菜单,进游戏界面后操作就无反应,缺少了啥语句?

请教各位前辈,老师布置的一个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();
    }

}

}

  • 写回答

2条回答 默认 最新

  • danielinbiti 2017-12-29 03:36
    关注
     1、你在start中,重新设置了界面,退出按钮绑定的时间已经不起作用了。看意思你应该是startActivity方式调用才对
     2、定时内容和你界面显示不符合,定时是tv_time.setText("已用时间:"+time);,应该是显示“已用时间”,但你界面显示"time",不知道哪来的。
    
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘