android小程序--猜猜红桃A在哪儿

ImageView单击事件与透明度处理

范例说明

在还是黑白屏幕的时候手机游戏就有了,相信许多人都曾经有过利用手机里的小游戏来消磨时间吧!现在这个范例就简单的利用AndroidImageView对象来实现一个手机小游戏!

有看过别人赌扑克牌吗?一张小桌子,放上三张牌,红桃A、黑桃2与梅花3,庄家先把三张牌都亮出来,让玩家看清楚红桃A在哪里,之后庄家将牌翻面,并随意变换牌的顺序后,玩家开始下注,猜测红桃A是哪一张?如果猜中了,玩家就赢得两倍的下注金;如果猜错了,下注金就被庄家赢走了!

本范例将制作一个猜牌游戏的简化版,游戏一开始并不直接亮出三张牌,而是翻面洗牌之后直接请玩家来猜猜看红桃A是哪一张,游戏过程绝对公平透明,绝对不会有诈赌的情形发生。

范例中使用TextViewButton及三个ImageView对象,一开始三个ImageView都默认显示扑克牌背面,当用户选择了其中一张牌时,三个ImageView同时翻面,程序并依照选择的对错,在TextView中显示结果,并可通过“再玩一次”的Button来重新开始游戏。

实现本范例前需先准备四张图片:红桃A、黑桃2、梅花3及扑克牌背面,并将这四张图片文件存入/res/drawable/文件夹中。以本范例而言,四张图片文件的路径如下:

 

/res/drawable/p01.png:红桃A

/res/drawable/p02.png:黑桃2

/res/drawable/p03.png:梅花3

/res/drawable/p04.png:扑克牌背面

 

当游戏一开始,User便从三张扑克牌当中单击一张,然后程序会一次翻开所有牌面,并将User未选择的牌面以灰暗效果处理,在这个范例练习里,将学习ImageViewonClickListener()事件与设置透明度的技巧。

范例程序

src/irdc.ex04_16/EX04_16.java

首先将三张图片文件的id存入数组s1中,randon()这个方法会将s1中的id顺序作随机的调换,以制造洗牌的效果,三个ImageView默认加载图片都为扑克牌背面。

当用户单击其中一张图片时,会触发该ImageViewonClick事件,程序将判断此张牌是否为红心A,再依猜对与否决定TextView的显示内容。

“再玩一次”Button中的onClick事件,会将三个ImageView显示的图片文件都重新设置为扑克牌背面,并做一次重新洗牌的动作(自定义的randon()方法)。

 

/* import程序略 */

 

public class EX04_16 extends Activity

{

  /*声明对象变量*/

  private ImageView mImageView01;

  private ImageView mImageView02;

  private ImageView mImageView03;

  private Button mButton;

  private TextView mText;

  /*声明长度为3int数组,并将三张牌的id放入

    R.drawable.p01:红桃A

    R.drawable.p02:黑桃2

    R.drawable.p03:梅花3

    R.drawable.p04:扑克牌背面*/

  private static int[] s1=

    new int[]{R.drawable.p01,R.drawable.p02,R.drawable.p03};

 

  /** Called when the activity is first created. */

  @Override

  public void onCreate(Bundle savedInstanceState)

  {

    super.onCreate(savedInstanceState);

    /*加载main.xml Layout */

    setContentView(R.layout.main);

    /* 取得相关对象 */

    mText=(TextView)findViewById(R.id.mText);

    mImageView01=(ImageView)findViewById(R.id.mImage01);

    mImageView02=(ImageView)findViewById(R.id.mImage02);

    mImageView03=(ImageView)findViewById(R.id.mImage03);

    mButton=(Button)findViewById(R.id.mButton);

    /* 运行洗牌程序 */

    randon();

    /* mImageView01添加onClickListener*/

    mImageView01.setOnClickListener(new View.OnClickListener()

    {

      public void onClick(View v)

      {

        /* 三张牌同时翻面,并将未选择的两张牌变透明 */

        mImageView01.setImageDrawable(getResources()

                            .getDrawable(s1[0]));

        mImageView02.setImageDrawable(getResources()

                            .getDrawable(s1[1]));

        mImageView03.setImageDrawable(getResources()

                            .getDrawable(s1[2]));

        mImageView02.setAlpha(100);

        mImageView03.setAlpha(100);

        /* 依有没有猜对来决定TextView要显示的信息 */

        if(s1[0]==R.drawable.p01)

        {

          mText.setText("!你猜对了喔!!拍拍手!");

        }

        else

        {

          mText.setText("你猜错了喔!!要不要再试一次?");

        }

      }

    });

   

    /* mImageView02添加onClickListener*/

    mImageView02.setOnClickListener(new View.OnClickListener()

    {

      public void onClick(View v)

      {

        /* 三张牌同时翻面,并将未选择的两张牌变透明 */

        mImageView01.setImageDrawable(getResources()

                            .getDrawable(s1[0]));

        mImageView02.setImageDrawable(getResources()

                            .getDrawable(s1[1]));

        mImageView03.setImageDrawable(getResources()

                            .getDrawable(s1[2]));

        mImageView01.setAlpha(100);

        mImageView03.setAlpha(100);

        /* 依有没有猜对来决定TextView要显示的信息 */

        if(s1[1]==R.drawable.p01)

        {

          mText.setText("!你猜对了喔!!拍拍手!");

        }

        else

        {

          mText.setText("你猜错了喔!!要不要再试一次?");

        }

      }

    });

   

    /* mImageView03添加onClickListener*/

    mImageView03.setOnClickListener(new View.OnClickListener()

    {

      public void onClick(View v)

      {

        /* 三张牌同时翻面,并将未选择的两张牌变透明 */

        mImageView01.setImageDrawable(getResources()

                            .getDrawable(s1[0]));

        mImageView02.setImageDrawable(getResources()

                            .getDrawable(s1[1]));

        mImageView03.setImageDrawable(getResources()

                            .getDrawable(s1[2]));

        mImageView01.setAlpha(100);

        mImageView02.setAlpha(100);

        /* 依有没有猜对来决定TextView要显示的信息 */

        if(s1[2]==R.drawable.p01)

        {

          mText.setText("!你猜对了喔!!拍拍手!");

        }

        else

        {

          mText.setText("你猜错了喔!!要不要再试一次?");

        }

      }

    });

   

    /* 单击Button后三张牌都翻为背面且重新洗牌*/  

    mButton.setOnClickListener(new Button.OnClickListener()

    {

      public void onClick(View v)

      {

        mText.setText("猜猜看红桃A是哪一张?");

        mImageView01.setImageDrawable(getResources()

                .getDrawable(R.drawable.p04));

        mImageView02.setImageDrawable(getResources()

                .getDrawable(R.drawable.p04));

        mImageView03.setImageDrawable(getResources()

                .getDrawable(R.drawable.p04));

        mImageView01.setAlpha(255);

        mImageView02.setAlpha(255);

        mImageView03.setAlpha(255);

        randon();

      }

    });   

  }

  /*重新洗牌的程序*/

  private void randon()

  {

    for(int i=0;i<3;i++)

    {

      int tmp=s1[i];

      int s=(int)(Math.random()*2);

      s1[i]=s1[s];

      s1[s]=tmp;

    }

  }

}

 

扩展学习

本范例仅运用ImageViewonClick事件,就实现出一个简单的猜牌小游戏,其中洗牌的randon()方法为众多随机洗牌方式的其中一种,各位也可以尝试用其他的方法来改写。

程序中为了视觉的效果,使用了ImageViewsetAlpha(int alpha)方法,将没选到的两张牌设置透明度为100,没选到的牌变透明了,选到的那一张牌自然就突显了出来,其中alpha255即为没有透明度的意思,所以,才会在“再玩一次”按钮的onClick事件中将三张牌的alpha值都重设为255

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值