安卓”打地鼠“小游戏的实现 您所在的位置:网站首页 电脑打地鼠游戏推荐 安卓”打地鼠“小游戏的实现

安卓”打地鼠“小游戏的实现

2023-03-10 17:17| 来源: 网络整理| 查看: 265

文章目录 前言一、项目准备二、解决方案三、软件开发(源码展示)3.1 图片资源拷贝3.2 鼠洞布局文件activity_main.xml3.3 游戏关卡界面布局文件guanka_main.xml3.4 菜单按钮的布局3.5 values值的定义3.6 游戏图标变更AndroidMainfest.xml3.7 操控核心代码 四、总结及问题分析4.1 关于在Android开发中替换资源图片不起作用的问题 五、资源链接

前言

关注我论坛的可能知道,上期我提及要制作另一个Android程序的计划,经过我的努力和各位网友的帮助下,今日我终于完成了任务。现写下程序的制作过程,以及程序遇到的瓶颈和秘方,一来,与各位编程好友分享;其次就是,丰富我的日志,并提升我的编程水准,牢记问题的解决办法,但这一切都是次要的……

一、项目准备

资源准备工作:我们就要进入游戏的准备工作了,既然我们要让游戏生动形象就必然需要一些图片资源,我们就从百度上获取吧。

图片

我们选择划圈的这张图,用photoshop或者美图秀秀什么的扣两张图,记住背景一定是透明的(关于透明背景图片的制作我会专门撰写)效果如图所示: 图片

二、解决方案

首先,我简述一下程序要实现的功能:本程序非常简单,既然是打地鼠游戏,顾名思义地鼠会随机出现在屏幕的几个位置上,通过手指单击地鼠实现打地鼠的目的,打中一个地鼠会显示击中效果,并加分;打错会弹出错误提示,并扣分。游戏难度会随等级的提高而提高。

三、软件开发(源码展示)

最后就是最关键的代码编写了。

3.1 图片资源拷贝

将图片资源拷贝到res\drawable文件夹下,drawable文件夹自己新建的,我们这个程序对图片要求不高,采用统一的图片。 图片

3.2 鼠洞布局文件activity_main.xml

然后就是我们的布局了,我要初始化显示9个鼠洞,activity_main.xml(采用绝对布局,间距差值100dp)代码如下:

3.3 游戏关卡界面布局文件guanka_main.xml

游戏关卡界面布局文件guanka_main.xml代码如下:

3.4 菜单按钮的布局

接下来到菜单按钮的布局书写,其中关卡文件实现就是通过菜单按钮实现:

3.5 values值的定义

然后是values值的定义如下:

打地鼠 Settings 设置 打地鼠(春天的故事制作) 3.6 游戏图标变更AndroidMainfest.xml

游戏图标的更改在AndroidMainfest.xml文件夹:

android:icon="@drawable/icon_dds" 3.7 操控核心代码

以上都是编程的准备工作,是程序实现的前提,最后我们终于来到了最最关键的代码书写了,这里我只建立了一个主类,当然你们也可以拆分开来。

MainActivity.java代码:

public classMainActivity extends Activity { private long count = 0; private String stwcd="0%",stsmz="100%",strs=""; private boolean YesOrNo = true, sfdj = false; private boolean run = false; private Button btnKaiGuan; private TextView txtFen,txtwcd,txtsmz,txtdj; private TextView txtShiWu; private int num=0, td = 8,tt=0, tdtime = 500, fen = 0, sw = 0,wcd=0,smz=100,dj=1,i=0; private ImageView img1, img2, img3, img4, img5, img6, img7, img8, img9; private Handler handler = new Handler(); public void imggb() { // if(num==0){ // img1.setImageDrawable(getResources().getDrawable(R.drawable.img_ds0)); // img2.setImageDrawable(getResources().getDrawable(R.drawable.img_ds0)); // img3.setImageDrawable(getResources().getDrawable(R.drawable.img_ds0)); // img4.setImageDrawable(getResources().getDrawable(R.drawable.img_ds0)); // img5.setImageDrawable(getResources().getDrawable(R.drawable.img_ds0)); // img6.setImageDrawable(getResources().getDrawable(R.drawable.img_ds0)); // img7.setImageDrawable(getResources().getDrawable(R.drawable.img_ds0)); // img8.setImageDrawable(getResources().getDrawable(R.drawable.img_ds0)); // img9.setImageDrawable(getResources().getDrawable(R.drawable.img_ds0)); // } if (num == 1) { img1.setImageDrawable(getResources().getDrawable(R.drawable.img_ds1)); sfdj = true; }else{ img1.setImageDrawable(getResources().getDrawable( R.drawable.img_ds0)); } if (num == 2) { img2.setImageDrawable(getResources().getDrawable(R.drawable.img_ds1)); sfdj = true; }else{ img2.setImageDrawable(getResources().getDrawable( R.drawable.img_ds0)); } if (num == 3) { img3.setImageDrawable(getResources().getDrawable(R.drawable.img_ds1)); sfdj = true; }else{ img3.setImageDrawable(getResources().getDrawable( R.drawable.img_ds0)); } if (num == 4) { img4.setImageDrawable(getResources().getDrawable(R.drawable.img_ds1)); sfdj = true; }else{ img4.setImageDrawable(getResources().getDrawable( R.drawable.img_ds0)); } if (num == 5) { img5.setImageDrawable(getResources().getDrawable(R.drawable.img_ds1)); sfdj = true; }else{ img5.setImageDrawable(getResources().getDrawable( R.drawable.img_ds0)); } if (num == 6) { img6.setImageDrawable(getResources().getDrawable(R.drawable.img_ds1)); sfdj = true; }else{ img6.setImageDrawable(getResources().getDrawable( R.drawable.img_ds0)); } if (num == 7) { img7.setImageDrawable(getResources().getDrawable(R.drawable.img_ds1)); sfdj = true; }else{ img7.setImageDrawable(getResources().getDrawable( R.drawable.img_ds0)); } if (num == 8) { img8.setImageDrawable(getResources().getDrawable(R.drawable.img_ds1)); sfdj = true; }else{ img8.setImageDrawable(getResources().getDrawable( R.drawable.img_ds0)); } if (num == 9) { img9.setImageDrawable(getResources().getDrawable(R.drawable.img_ds1)); sfdj = true; }else{ img9.setImageDrawable(getResources().getDrawable( R.drawable.img_ds0)); // Toast.makeText(getApplicationContext(),"默认Toast样式", // Toast.LENGTH_SHORT).show(); } } private Runnable task = new Runnable() { @Override public void run() { // TODO Auto-generated method stub if (run) { handler.postDelayed(this, tdtime); count++; if (smz num = (int) (Math.random()* 9) + 1;//产生随机数 tt = 0; if (sfdj) { fen = fen - 5; sw++; smz=smz-10; } imggb(); smz=smz-5; } tt++; if(smz>=100){ smz=100; } strs=""; for(i=0;i strs=strs+"/"; } stwcd=strs+wcd/dj+"%"; if(wcd>=100*dj){ tdtime=tdtime*2/3; dj++; wcd=0; smz=100; } } txtFen.setText("得分: " + fen); txtShiWu.setText("失误:" + sw); txtdj.setText("等级:"+dj); txtsmz.setText("生命值:"+stsmz); txtwcd.setText("完成度:"+stwcd); } }; //程序创建方法 @Override public void onCreate(BundlesavedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); img1 = (ImageView)findViewById(R.id.img1); img2 = (ImageView)findViewById(R.id.img2); img3 = (ImageView)findViewById(R.id.img3); img4 = (ImageView)findViewById(R.id.img4); img5 = (ImageView)findViewById(R.id.img5); img6 = (ImageView)findViewById(R.id.img6); img7 = (ImageView)findViewById(R.id.img7); img8 = (ImageView)findViewById(R.id.img8); img9 = (ImageView)findViewById(R.id.img9); btnKaiGuan = (Button)findViewById(R.id.btnKaiGuan); txtFen = (TextView) this.findViewById(R.id.txtFen); txtShiWu = (TextView) this.findViewById(R.id.txtShiWu); txtsmz = (TextView) this.findViewById(R.id.txtsmz); txtwcd = (TextView) this.findViewById(R.id.txtwcd); txtdj=(TextView) this.findViewById(R.id.txtdj); btnKaiGuan.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (smz if (YesOrNo) { YesOrNo = false; run = true; handler.postDelayed(task, 1000); btnKaiGuan.setText("暂停"); }else{ YesOrNo = true; run = false; handler.post(task); btnKaiGuan.setText("开始"); } } } }); img1.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (num == 1) { if (sfdj) { fen = fen + 10; sfdj = false; smz=smz+10; wcd=wcd+10; img1.setImageDrawable(getResources().getDrawable( R.drawable.img_ds2)); } }else{ // 消息框弹出,失误信息 Toast.makeText(getApplicationContext(),"逗比", Toast.LENGTH_SHORT).show(); smz=smz-5; fen = fen - 5; sw++; } } }); img2.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (num == 2) { if (sfdj) { fen = fen + 10; sfdj = false; smz=smz+10; wcd=wcd+10; img2.setImageDrawable(getResources().getDrawable( R.drawable.img_ds2)); } }else{ // 消息框弹出,失误信息 Toast.makeText(getApplicationContext(),"逗比", Toast.LENGTH_SHORT).show(); fen = fen - 5; sw++; smz=smz-5; } } }); img3.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (num == 3) { if (sfdj) { fen = fen + 10; sfdj = false; smz=smz+10; wcd=wcd+10; img3.setImageDrawable(getResources().getDrawable( R.drawable.img_ds2)); } }else{ // 消息框弹出,失误信息 Toast.makeText(getApplicationContext(),"逗比", Toast.LENGTH_SHORT).show(); fen = fen - 5; sw++; smz=smz-5; } } }); img4.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (num == 4) { if (sfdj) { fen = fen + 10; sfdj = false; smz=smz+10; wcd=wcd+10; img4.setImageDrawable(getResources().getDrawable( R.drawable.img_ds2)); } }else{ // 消息框弹出,失误信息 Toast.makeText(getApplicationContext(),"逗比", Toast.LENGTH_SHORT).show(); fen = fen - 5; sw++; smz=smz-5; } } }); img5.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (num == 5) { if (sfdj) { fen = fen + 10; sfdj = false; smz=smz+10; wcd=wcd+10; img5.setImageDrawable(getResources().getDrawable( R.drawable.img_ds2)); } }else{ // 消息框弹出,失误信息 Toast.makeText(getApplicationContext(),"逗比", Toast.LENGTH_SHORT).show(); fen = fen - 5; sw++; smz=smz-5; } } }); img6.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (num == 6) { if (sfdj) { fen = fen + 10; sfdj = false; smz=smz+10; wcd=wcd+10; img6.setImageDrawable(getResources().getDrawable( R.drawable.img_ds2)); } }else{ // 消息框弹出,失误信息 Toast.makeText(getApplicationContext(),"逗比", Toast.LENGTH_SHORT).show(); fen = fen - 5; sw++; smz=smz-5; } } }); img7.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (num == 7) { if (sfdj) { fen = fen + 10; sfdj = false; smz=smz+10; wcd=wcd+10; img7.setImageDrawable(getResources().getDrawable( R.drawable.img_ds2)); } }else{ // 消息框弹出,失误信息 Toast.makeText(getApplicationContext(),"逗比", Toast.LENGTH_SHORT).show(); fen = fen - 5; sw++; smz=smz-5; } } }); img8.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (num == 8) { if (sfdj) { fen = fen + 10; sfdj = false; smz=smz+10; wcd=wcd+10; img8.setImageDrawable(getResources().getDrawable( R.drawable.img_ds2)); } }else{ // 消息框弹出,失误信息 Toast.makeText(getApplicationContext(),"逗比", Toast.LENGTH_SHORT).show(); fen = fen - 5; sw++; smz=smz-5; } } }); img9.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (num == 9) { if (sfdj) { fen = fen + 10; sfdj = false; smz=smz+10; wcd=wcd+10; img9.setImageDrawable(getResources().getDrawable( R.drawable.img_ds2)); } }else{ // 消息框弹出,失误信息 Toast.makeText(getApplicationContext(),"逗比", Toast.LENGTH_SHORT).show(); fen = fen - 5; sw++; smz=smz-5; } } }); } @Override public booleanonCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(final MenuItem item) { switch (item.getItemId()) { case R.id.menu_tg: item.setTitle("游戏关卡:"+dj); final AlertDialog alertDialog= newAlertDialog.Builder( MainActivity.this).create(); alertDialog.setIcon(R.drawable.icon_dds); LayoutInflaterfactory = LayoutInflater.from(this); View view = factory.inflate(R.layout.guanka_main, null);//布局文件夹下的关卡,guanka_main文件 final Button btn_up =(Button) view.findViewById(R.id.btn_up); final Button btn_next =(Button) view.findViewById(R.id.btn_next); final Button btn_null =(Button) view.findViewById(R.id.btn_null); btn_up.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if(dj==1){ AlertDialog.BuilderalertDialog = newAlertDialog.Builder(MainActivity.this); alertDialog.setTitle("警告!"); alertDialog.setMessage("已经是第一关了!"); alertDialog.setPositiveButton("取消", null); alertDialog.show(); }else{ dj--; tt=0;wcd=0;smz=100;fen=0;sw=0; tdtime=500; for(i=0;i @Override public void onClick(View v) { // TODO Auto-generated method stub dj++; tt=0;wcd=0;smz=100;fen=0;sw=0; tdtime=500; for(i=0;i @Override public void onClick(View arg0) { // TODO Auto-generated method stub alertDialog.dismiss(); } }); alertDialog.setView(view); alertDialog.show(); break; } return true; } } 四、总结及问题分析

看到这儿相信你的程序已经敲好了,下面的我将谈谈我编程时一直困扰我的一个问题,并给出我的心得。

4.1 关于在Android开发中替换资源图片不起作用的问题

现象: 在android开发中,经常会需要替换res\drawable中的图片,打开res\layout下的文件预览布局页面发现图片已经被替换,但在模拟器或者真实机器上运行时发现该图片并没有被替换,还是使用原来的图片。从注释掉的那段代码中可以看出我在这方面浪费了不少时间(文件重命名快捷键:F2)

原因:

在开发过程中,由于使用模拟器测试了程序,在首次运行后会将res文件夹下的图片资源文件(如drawable-hdpi、drawable-ldpi和drawable-mdpi)拷贝到bin文件夹下。在替换资源图片后,eclipse并不清楚是否有图片改变,所以会使用原来bin下的res文件夹中的资源文件进行打包,而图片用的还是第一次eclipse所拷贝进去的文件,所以当运行程序后会发现替换资源图片在程序中没起作用。

解决方法:

既然已经明白是由于eclipse没有把最新的资源文件拷贝过去,所以我们只需要把项目bin目录下的res目录删除(可连同bin下生成的.apk、.dex和.ap_等三个文件一并删除),然后再编译apk等文件会再次生成。

游戏效果图: 图片

图片

五、资源链接

游戏apk下载链接:http://pan.baidu.com/s/1mgoq8UO 希望能对大家有帮助,当然我的程序必然也有些瑕疵与不足,望各位能坚持己见,如果可以的话还望指出我的错误。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有