CardGame猜牌小游戏

CardGame

新建项目CardGame

一直下一步完成创建工程。

 

首先新建一个drawable文件夹,将55张扑克牌放入文件夹中。


而后新建一个工具包:


创建一个工具类:Tools(在Tools中提供一些公共的静态方法供外部调用)

创建玩Tools工具类后,需要在string.xml中定义每一张扑克牌的名称:

    <stringname="p_1">大王</string>

    <stringname="p_2">小王</string>

    <stringname="p_b1">背面</string>

   

    <stringname="p_x_1">红心A</string>

    <stringname="p_x_2">红心2</string>

    <stringname="p_x_3">红心3</string>

    <stringname="p_x_4">红心4</string>

    <stringname="p_x_5">红心5</string>

    <stringname="p_x_6">红心6</string>

    <stringname="p_x_7">红心7</string>

    <stringname="p_x_8">红心8</string>

    <stringname="p_x_9">红心9</string>

    <stringname="p_x_10">红心10</string>

    <stringname="p_x_J">红心J</string>

    <stringname="p_x_Q">红心Q</string>

    <stringname="p_x_K">红心K</string>

   

    <stringname="p_f_1">方块A</string>

    <stringname="p_f_2">方块2</string>

    <stringname="p_f_3">方块3</string>

    <stringname="p_f_4">方块4</string>

    <stringname="p_f_5">方块5</string>

    <stringname="p_f_6">方块6</string>

    <stringname="p_f_7">方块7</string>

    <stringname="p_f_8">方块8</string>

    <stringname="p_f_9">方块9</string>

    <stringname="p_f_10">方块10</string>

    <stringname="p_f_J">方块J</string>

    <stringname="p_f_Q">方块Q</string>

    <stringname="p_f_K">方块K</string>

 

    <stringname="p_h_1">黑桃A</string>

    <stringname="p_h_2">黑桃2</string>

    <stringname="p_h_3">黑桃3</string>

    <stringname="p_h_4">黑桃4</string>

    <stringname="p_h_5">黑桃5</string>

    <stringname="p_h_6">黑桃6</string>

    <stringname="p_h_7">黑桃7</string>

    <stringname="p_h_8">黑桃8</string>

    <stringname="p_h_9">黑桃9</string>

    <stringname="p_h_10">黑桃10</string>

    <stringname="p_h_J">黑桃J</string>

    <stringname="p_h_Q">黑桃Q</string>

    <stringname="p_h_K">黑桃K</string>

   

    <stringname="p_m_1">梅花A</string>

    <stringname="p_m_2">梅花2</string>

    <stringname="p_m_3">梅花3</string>

    <stringname="p_m_4">梅花4</string>

    <stringname="p_m_5">梅花5</string>

    <stringname="p_m_6">梅花6</string>

    <stringname="p_m_7">梅花7</string>

    <stringname="p_m_8">梅花8</string>

    <stringname="p_m_9">梅花9</string>

    <stringname="p_m_10">梅花10</string>

    <stringname="p_m_J">梅花J</string>

    <stringname="p_m_Q">梅花Q</string>

    <stringname="p_m_K">梅花K</string>

首先在Tools类中创建一个方法public static StringgetCardName(Context mContext, String fileName),将文件名(图片的名称)传入,返回我们可以认得的扑克牌(string.xml中定义的扑克牌名称)。

public static String getCardName(Context mContext, String fileName) {

       Context context = mContext.getApplicationContext();

       String result = "null";

       switch (fileName) {

       case "p_1": // 大王

           result = context.getString(R.string.p_1);

           break;

       case "p_2": // 小王

           result = context.getString(R.string.p_2);

           break;

       case "p_x_1": // 红心A

           result = context.getString(R.string.p_x_1);

           break;

       case "p_x_2": // 红心2

           result = context.getString(R.string.p_x_2);

           break;

       case "p_x_3": // 红心3

           result = context.getString(R.string.p_x_3);

           break;

       case "p_x_4": // 红心4

           result = context.getString(R.string.p_x_4);

           break;

       case "p_x_5": // 红心5

           result = context.getString(R.string.p_x_5);

           break;

       case "p_x_6": // 红心6

           result = context.getString(R.string.p_x_6);

           break;

       case "p_x_7": // 红心7

           result = context.getString(R.string.p_x_7);

           break;

       case "p_x_8": // 红心8

           result = context.getString(R.string.p_x_8);

           break;

       case "p_x_9": // 红心9

           result = context.getString(R.string.p_x_9);

           break;

       case "p_x_10": // 红心10

           result = context.getString(R.string.p_x_10);

           break;

       case "p_x_11": // 红心J

           result = context.getString(R.string.p_x_J);

           break;

       case "p_x_12": // 红心Q

           result = context.getString(R.string.p_x_Q);

           break;

       case "p_x_13": // 红心K

           result = context.getString(R.string.p_x_K);

           break;

 

       case "p_h_1": // 黑桃A

           result = context.getString(R.string.p_h_1);

           break;

       case "p_h_2": // 黑桃2

           result = context.getString(R.string.p_h_2);

           break;

       case "p_h_3": // 黑桃3

           result = context.getString(R.string.p_h_3);

           break;

       case "p_h_4": // 黑桃4

           result = context.getString(R.string.p_h_4);

           break;

       case "p_h_5": // 黑桃5

           result = context.getString(R.string.p_h_5);

           break;

       case "p_h_6": // 黑桃6

           result = context.getString(R.string.p_h_6);

           break;

       case "p_h_7": // 黑桃7

           result = context.getString(R.string.p_h_7);

           break;

       case "p_h_8": // 黑桃8

           result = context.getString(R.string.p_h_8);

           break;

       case "p_h_9": // 黑桃9

           result = context.getString(R.string.p_h_9);

           break;

       case "p_h_10": // 黑桃10

           result = context.getString(R.string.p_h_10);

           break;

       case "p_h_11": // 黑桃J

           result = context.getString(R.string.p_h_J);

           break;

       case "p_h_12": // 黑桃Q

           result = context.getString(R.string.p_h_Q);

           break;

       case "p_h_13": // 黑桃K

           result = context.getString(R.string.p_h_K);

           break;

 

       case "p_m_1": // 梅花A

           result = context.getString(R.string.p_m_1);

           break;

       case "p_m_2": // 梅花2

           result = context.getString(R.string.p_m_2);

           break;

       case "p_m_3": // 梅花3

           result = context.getString(R.string.p_m_3);

           break;

       case "p_m_4": // 梅花4

           result = context.getString(R.string.p_m_4);

           break;

       case "p_m_5": // 梅花5

           result = context.getString(R.string.p_m_5);

           break;

       case "p_m_6": // 梅花6

           result = context.getString(R.string.p_m_6);

           break;

       case "p_m_7": // 梅花7

           result = context.getString(R.string.p_m_7);

           break;

       case "p_m_8": // 梅花8

           result = context.getString(R.string.p_m_8);

           break;

       case "p_m_9": // 梅花9

           result = context.getString(R.string.p_m_9);

           break;

       case "p_m_10": // 梅花10

           result = context.getString(R.string.p_m_10);

           break;

       case "p_m_11": // 梅花J

           result = context.getString(R.string.p_m_J);

           break;

       case "p_m_12": // 梅花Q

           result = context.getString(R.string.p_m_Q);

           break;

       case "p_m_13": // 梅花K

           result = context.getString(R.string.p_m_K);

           break;

 

       case "p_f_1": // 方块A

           result = context.getString(R.string.p_f_1);

           break;

       case "p_f_2": // 方块2

           result = context.getString(R.string.p_f_2);

           break;

       case "p_f_3": // 方块3

           result = context.getString(R.string.p_f_3);

           break;

       case "p_f_4": // 方块4

           result = context.getString(R.string.p_f_4);

           break;

       case "p_f_5": // 方块5

           result = context.getString(R.string.p_f_5);

           break;

       case "p_f_6": // 方块6

           result = context.getString(R.string.p_f_6);

           break;

       case "p_f_7": // 方块7

           result = context.getString(R.string.p_f_7);

           break;

       case "p_f_8": // 方块8

           result = context.getString(R.string.p_f_8);

           break;

       case "p_f_9": // 方块9

           result = context.getString(R.string.p_f_9);

           break;

       case "p_f_10": // 方块10

           result = context.getString(R.string.p_f_10);

           break;

       case "p_f_11": // 方块J

           result = context.getString(R.string.p_f_J);

           break;

       case "p_f_12": // 方块Q

           result = context.getString(R.string.p_f_Q);

           break;

       case "p_f_13": // 方块K

           result = context.getString(R.string.p_f_K);

           break;

       default:

           result = "error";

           break;

       }

       return result;

    }

而后在Tools继续添加一个通过id查找fileName的方法:

publicstaticString getFileNameById(Context mContext,int id)

public static String getFileNameById(Context mContext, int id) {

       Context context = mContext.getApplicationContext();

       String result = context.getResources().getResourceEntryName(id);

       return result;

    }

而后在Tools继续添加一个通过fileName查找id的方法:

publicstaticintgetIdByFileName(Context mContext, String fileName)

public static int getIdByFileName(Context mContext, String fileName) {

       Context context = mContext.getApplicationContext();

       int result = context.getResources().getIdentifier(fileName,

              "drawable", mContext.getPackageName());

       return result;

    }

接下来就是MainActivity的布局文件activity_main.xml,这里将根布局设置为LinearLayout,并添加一个Button。

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:background="#FFFFFFCC"

    android:orientation="vertical"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin">

 

    <Button

        android:id="@+id/single_card_mode"

        style="@android:style/Widget.Button.Inset"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:onClick="onClick"

        android:text="@string/single_card"/>

 

</LinearLayout>

之后在MainActivity类中删除不必要的代码,并添加一个onClick(View view)方法

package lyx.feng.cardgame;

 

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

 

public class MainActivity extends Activity {

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.activity_main);

    }

 

    public void onClick(View view) {

       switch (view.getId()) {

       case R.id.single_card_mode:

 

           break;

       }

    }

}

 

之后创建一个继承Activity的SingleCardModeActivity类,并添加布局文件:singlecardmode.xml

首先在singlecardmode.xml布局文件中添加一个Spinner、Button、ImageView这3个组件。

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:background="#FFFFFFCC"

    android:orientation="vertical">

 

    <LinearLayout

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal">

 

        <Spinner

            android:id="@+id/singlecardmode_spinner"

            android:layout_width="0dp"

            android:layout_height="wrap_content"

            android:layout_weight="1"/>

 

        <Button

            android:id="@+id/singlecardmode_btn"

            style="@android:style/Widget.Button.Inset"

            android:layout_width="0dp"

            android:layout_height="wrap_content"

            android:layout_margin="10dp"

            android:layout_weight="1"

            android:text="@string/showresult"/>

    </LinearLayout>

 

    <ImageView

        android:id="@+id/singlecardmode_imageview"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:layout_margin="12dp"

        android:gravity="center_horizontal"

        android:src="@drawable/p_b1"/>

 

</LinearLayout>

布局都比较简单,上面一个水平方向的LinearLayout,里面包裹的是Spinner和一个Button,下面则直接显示一个ImageView。

接着就是SingleCardModeActivity这个类。

import lyx.feng.cardgame.R;

import android.app.Activity;

import android.os.Bundle;

 

public class SingleCardModeActivityextends Activity {

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       super.setContentView(R.layout.singlecardmode);

    }

}

 

在MainActivity类的onClick()方法中添加跳转的操作

public void onClick(View view) {

       switch (view.getId()) {

       case R.id.single_card_mode:

           startActivity(new Intent(this, SingleCardModeActivity.class));

           break;

       }

    }

并在AndroidManifest.xml文件注册SingleCardModeActivity。

  <activityandroid:name=".SingleCardModeActivity"/>

接下来运行程序:

主界面:


点击单张猜牌按钮:

接下来就是修改SingleCardModeActivity代码:

这里首先获取singlecardmodeactivity.xml布局的Spinner、Button、ImageView这3个组件。

package lyx.feng.cardgame;

......

public class SingleCardModeActivity extends Activity {

    private ImageViewimageView = null;

    private Spinnerspinner = null;

    private Buttonbtn = null;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       super.setContentView(R.layout.singlecardmode);

 

        init();

    }

 

    private void init() {

 

        this.imageView = (ImageView)super

              .findViewById(R.id.singlecardmode_imageview);

       this.spinner = (Spinner)super

              .findViewById(R.id.singlecardmode_spinner);

       this.btn = (Button)super.findViewById(R.id.singlecardmode_btn);

    }

}

 

接下来为Spinner初始化操作:在操作之前,先在strings.xml文件中添加一个数组,里面保存的是扑克牌的集合。

  <string-arrayname="allCards">

        <item>大王</item>

        <item>小王</item>

        <item>红桃A</item>

        <item>红桃1</item>

        <item>红桃2</item>

        <item>红桃3</item>

        <item>红桃4</item>

        <item>红桃5</item>

        <item>红桃6</item>

        <item>红桃7</item>

        <item>红桃8</item>

        <item>红桃9</item>

        <item>红桃10</item>

        <item>红桃J</item>

        <item>红桃Q</item>

        <item>红桃K</item>

       

        <item>黑桃A</item>

        <item>黑桃1</item>

        <item>黑桃2</item>

        <item>黑桃3</item>

        <item>黑桃4</item>

        <item>黑桃5</item>

        <item>黑桃6</item>

        <item>黑桃7</item>

        <item>黑桃8</item>

        <item>黑桃9</item>

        <item>黑桃10</item>

        <item>黑桃J</item>

        <item>黑桃Q</item>

        <item>黑桃K</item>

       

        <item>方块A</item>

        <item>方块1</item>

        <item>方块2</item>

        <item>方块3</item>

        <item>方块4</item>

        <item>方块5</item>

        <item>方块6</item>

        <item>方块7</item>

        <item>方块8</item>

        <item>方块9</item>

        <item>方块10</item>

        <item>方块J</item>

        <item>方块Q</item>

        <item>方块K</item>

       

        <item>梅花A</item>

        <item>梅花1</item>

        <item>梅花2</item>

        <item>梅花3</item>

        <item>梅花4</item>

        <item>梅花5</item>

        <item>梅花6</item>

        <item>梅花7</item>

        <item>梅花8</item>

        <item>梅花9</item>

        <item>梅花10</item>

        <item>梅花J</item>

        <item>梅花Q</item>

        <item>梅花K</item>

    </string-array>

 

而后是Spinner的初始化:

String allCards[] = getResources().getStringArray(R.array.allCards);

        ArrayAdapter<String> adapter = new ArrayAdapter<>(this,

              android.R.layout.simple_spinner_dropdown_item, allCards);

       this.spinner.setAdapter(adapter);

        this.spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

 

           @Override

           public void onItemSelected(AdapterView<?> parent, View view,

                  int position,long id) {

              imageView.setImageResource(R.drawable.cardbackground);

           }

 

           @Override

           public void onNothingSelected(AdapterView<?> parent) {

              // TODO Auto-generated method stub

 

           }

       });

效果:

而后是在54张牌中随机获取一张牌设置到ImageView中去。这里添加一个getRandomCard()方法随机获取一张扑克牌,返回一个id。

public int getRandomCard() {

       List<Integer> list = Tools.getAllCards("p_");

       int id = list.get(new Random().nextInt(list.size()));

       return id;

    }

Tools.getAllCards方法返回所有扑克牌的集合。

public static List<Integer> getAllCards(String startWith) {

       List<Integer> list = new ArrayList<Integer>();

       Field fields[] = R.drawable.class.getDeclaredFields();

       for (int i = 0; i < fields.length; i++) {

           if (fields[i].getName().startsWith(startWith)) {

              try {

                  list.add(fields[i].getInt(R.drawable.class));

              } catch (Exception e) {

                  e.printStackTrace();

              }

           }

       }

       return list;

    }

接着就是SingleCardModeActivity类的Button按钮操作。

this.btn.setOnClickListener(new OnClickListener() {

 

           @Override

           public void onClick(View v) {

 

              // 随机获取的一张扑克牌Id

              int randomCard = getRandomCard();

              // Spinner选择的内容

              String temp = spinner.getSelectedItem().toString();

              // Spinner选择的位置

              intselectItem = spinner.getSelectedItemPosition();

              // 显示的卡片名称

              String selectCardName = Tools.getCardName(

                     SingleCardModeActivity.this, Tools.getFileNameById(

                            SingleCardModeActivity.this, randomCard));

 

              imageView.setImageResource(randomCard);

              if (temp.equals(selectCardName)) {

                  Toast.makeText(SingleCardModeActivity.this,"猜对了",

                         Toast.LENGTH_SHORT).show();

              } else {

                  Toast.makeText(SingleCardModeActivity.this,

                         "你选择的是:" + temp +"\n显示的是:" + selectCardName,

                         Toast.LENGTH_SHORT).show();

              }

           }

       });

在Button按钮获取了选择的卡片和显示的卡片,然后对比显示对应的Toast提示内容。

在SingleCardModeActivity类新建2个Animation,一个显示ImageView进来的动画,一个显示ImageView出去的动画

public Animation getAlphaAnimation() {

       AlphaAnimation alpha = new AlphaAnimation(0.0f, 1.0f);

       alpha.setDuration(500);

       return alpha;

    }

 

    public Animation getInTransAnimation() {

       int height = getWindowManager().getDefaultDisplay().getHeight();

       int width = getWindowManager().getDefaultDisplay().getWidth();

       TranslateAnimation trans = new TranslateAnimation(width, 0, 0, 0);

       trans.setDuration(500);

       return trans;

    }

而后在相应的位置设置即可。

最后效果:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值