基于安卓期中作业的要求,做一个图案竞猜小游戏,代码基础不是很好,谨慎借鉴!
(1) app首页启动后布局效果如图1-1所示,上方四个白色块不可点击;
(2) 在首页点击“开始竞猜”,上方四个按钮的随机生成四种图案的背景(图案是固定四种,显示位置必须要随机),界面底部为等待竞猜图案(一定是上方四个图案中的一个),竞猜结束前用图案展示。此时“开始竞猜”按钮文字变为“竞猜中…”,如图1-2所示;
(3) 手指点击上方四个图片中的一个,此时底部谜底图片区展示谜底图案,上方被选中图片若正确(与底部谜底图片一致),则在选中图片右上角显示打钩图案,如图1-3界面效果。反之,显示打叉图案则如图1-4效果,“竞猜中…”按钮文字变为“再来一次”。此时上面的色块都不可点击; (4) 点击“再来一次”按钮,将重新开始竞猜,与步骤(4)将要显示的效果相同。 从左至右为,图1-1 图1-2 图1-3 图1-4
1. 设计所需布局4+4+1+1(“4”即图1-1中所示位于布局上半部分的四个用于显示随机图片的ImageView控件,第二个“4”表示第一个“4”右上角用于显示竞猜结果对错图案的ImageView控件,“1”表示位于布局中部的Butto控件,“1”表示布局下半部分显示竞猜答案的ImageView控件); 2. 设计交互布局,设置好各个控件的具体功能。
首先,根据设定的4+4+1+1布局结构设计好整体布局,代码如下:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.administrator.pic123022016081.MainActivity"> <ImageView android:id="@+id/iv_pic1" android:layout_width="150dp" android:layout_height="100dp" android:layout_marginLeft="10dp" android:background="#dedbdb" android:scaleType="center"/> <ImageView android:id="@+id/iv_judge1" android:layout_width="40dp" android:layout_height="40dp" android:background="#dedbdb" android:layout_marginLeft="120dp" /> <ImageView android:id="@+id/iv_pic2" android:layout_width="150dp" android:layout_height="100dp" android:background="#dedbdb" android:layout_toRightOf="@+id/iv_pic1" android:layout_marginLeft="20dp" android:scaleType="center"/> <ImageView android:id="@+id/iv_judge2" android:layout_width="40dp" android:layout_height="40dp" android:background="#dedbdb" android:layout_marginLeft="290dp" /> <ImageView android:id="@+id/iv_pic3" android:layout_width="150dp" android:layout_height="100dp" android:layout_marginLeft="10dp" android:layout_below="@id/iv_pic1" android:layout_marginTop="20dp" android:background="#dedbdb" android:scaleType="center"/> <ImageView android:id="@+id/iv_judge3" android:layout_width="40dp" android:layout_height="40dp" android:background="#dedbdb" android:layout_below="@id/iv_pic1" android:layout_marginLeft="120dp" android:layout_marginTop="20dp" /> <ImageView android:id="@+id/iv_pic4" android:layout_width="150dp" android:layout_height="100dp" android:layout_below="@id/iv_pic2" android:layout_marginTop="20dp" android:layout_toRightOf="@id/iv_pic3" android:layout_marginLeft="20dp" android:background="#dedbdb" android:scaleType="center"/> <ImageView android:id="@+id/iv_judge4" android:layout_width="40dp" android:layout_height="40dp" android:background="#dedbdb" android:layout_marginLeft="290dp" android:layout_below="@id/iv_pic2" android:layout_marginTop="20dp" /> <Button android:id="@+id/btn_start" android:layout_width="320dp" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_below="@id/iv_pic3" android:layout_marginTop="10dp" android:background="#fab84c" android:text="开始竞猜" /> <ImageView android:id="@+id/iv_pic5" android:layout_width="320dp" android:layout_height="200dp" android:layout_marginLeft="10dp" android:background="#dedbdb" android:layout_below="@+id/btn_start" android:layout_marginTop="10dp"/> </RelativeLayout>效果显示: 再者,本程序重点在于随机函数,以下就有两个随机函数: 随机函数1,用于产生一定范围内的一个随机数,在此用来显示答案的图片:
public static int getNum(int endNum){ if(endNum > 0){ Random random = new Random(); return random.nextInt(endNum); } return 0; }随机函数2,用于产生一定范围内的一组随机数,例如(0,3,1,2),用来四个ImageView所要显示的图片:
public void get_RandomID() { //生成0-3之间的数组 for (int i = 0; i < 4; i++) { image_id[i] = i; } for (int i = 0; i < 4; i++) { Random random = new Random(); int tt = random.nextInt(4 - i) + i; int temp = image_id[i]; image_id[i] = image_id[tt]; image_id[tt] = temp; } }最后,设置各个控件的具体要求,完整代码如下:
package com.example.administrator.pic123022016081; import android.media.Image; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; import java.util.Random;public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private Button btn_one; private ImageView iv_pic11; private ImageView iv_pic22; private ImageView iv_pic33; private ImageView iv_pic44; private ImageView iv_jdg1; private ImageView iv_jdg2; private ImageView iv_jdg3; private ImageView iv_jdg4; private int image_id[] = new int[4]; private int t; int[] ImageArray = new int[]{R.drawable.deer,R.drawable.snowman,R.drawable.santa,R.drawable.tree}; //随机函数 public static int getNum(int endNum){ if(endNum > 0){ Random random = new Random(); return random.nextInt(endNum); } return 0; } public void get_RandomID() { //生成0-3之间的数组 for (int i = 0; i < 4; i++) { image_id[i] = i; } //开始随机 k 个不重复数出来 for (int i = 0; i < 4; i++) { Random random = new Random(); // t : i 至 4 的随机数 // 目的:不再随机出已置换出去 的数 的下标 int tt = random.nextInt(4 - i) + i; // 交换x[i],x[t]的值 int temp = image_id[i]; image_id[i] = image_id[tt]; image_id[tt] = temp; } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_one=(Button) findViewById(R.id.btn_start); btn_one.setOnClickListener(this); iv_pic11=(ImageView) findViewById(R.id.iv_pic1); iv_pic22=(ImageView) findViewById(R.id.iv_pic2); iv_pic33=(ImageView) findViewById(R.id.iv_pic3); iv_pic44=(ImageView) findViewById(R.id.iv_pic4); iv_pic11.setOnClickListener(this); iv_pic11.setEnabled(false); iv_pic22.setOnClickListener(this); iv_pic22.setEnabled(false); iv_pic33.setOnClickListener(this); iv_pic33.setEnabled(false); iv_pic44.setOnClickListener(this); iv_pic44.setEnabled(false); iv_jdg1=(ImageView) findViewById(R.id.iv_judge1); iv_jdg2=(ImageView) findViewById(R.id.iv_judge2); iv_jdg3=(ImageView) findViewById(R.id.iv_judge3); iv_jdg4=(ImageView) findViewById(R.id.iv_judge4); } @Override public void onClick(View v){ ImageView iv=(ImageView)findViewById(R.id.iv_pic5); ImageView iv1=(ImageView)findViewById(R.id.iv_pic1); ImageView iv2=(ImageView)findViewById(R.id.iv_pic2); ImageView iv3=(ImageView)findViewById(R.id.iv_pic3); ImageView iv4=(ImageView)findViewById(R.id.iv_pic4); switch (v.getId()){ case R.id.btn_start: iv_jdg1.setImageResource(0); iv_jdg2.setImageResource(0); iv_jdg3.setImageResource(0); iv_jdg4.setImageResource(0); btn_one.setText("竞猜..."); t=getNum(4); get_RandomID(); //答案图 iv.setImageResource(R.drawable.jingcai); // 在1-4处生成图片 iv1.setImageResource(ImageArray[image_id[0]]); iv2.setImageResource(ImageArray[image_id[1]]); iv3.setImageResource(ImageArray[image_id[2]]); iv4.setImageResource(ImageArray[image_id[3]]); iv_pic11.setEnabled(true); iv_pic22.setEnabled(true); iv_pic33.setEnabled(true); iv_pic44.setEnabled(true); break; case R.id.iv_pic1: iv.setImageResource(0); iv.setImageResource(ImageArray[t]);; btn_one.setText("再来一次."); if( image_id[0]==t) { iv_jdg1.setImageResource(R.drawable.dui); } else { iv_jdg1.setImageResource(R.drawable.cuowu); } break; case R.id.iv_pic2: iv.setImageResource(0); iv.setImageResource(ImageArray[t]); btn_one.setText("再来一次."); if( image_id[1]==t) { iv_jdg2.setImageResource(R.drawable.dui); } else { iv_jdg2.setImageResource(R.drawable.cuowu); } break; case R.id.iv_pic3: iv.setImageResource(0); iv.setImageResource(ImageArray[t]); btn_one.setText("再来一次."); if( image_id[2]==t) { iv_jdg3.setImageResource(R.drawable.dui); } else { iv_jdg3.setImageResource(R.drawable.cuowu); } break; case R.id.iv_pic4: iv.setImageResource(0); iv.setImageResource(ImageArray[t]); btn_one.setText("再来一次."); if( image_id[3]==t) { iv_jdg4.setImageResource(R.drawable.dui); } else { iv_jdg4.setImageResource(R.drawable.cuowu); } break; } } }######效果显示 首页显示: 开始竞猜: 竞猜正确: 竞猜错误:
代码还是不太成熟,有待加强!