CardGame猜牌小游戏
2016-03-06 21:29
387 查看
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> |
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; } |
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; } |
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; } |
<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> |
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; } } } |
首先在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> |
接着就是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); } } |
public void onClick(View view) { switch (view.getId()) { case R.id.single_card_mode: startActivity(new Intent(this, SingleCardModeActivity.class)); break; } } |
<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); } } |
<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; } |
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; } |
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(); } } }); |
在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; } |
最后效果:
相关文章推荐
- 降低项目失败率的三个原则
- rails创建应用程序实例
- 使用nodejs开发cli项目实例
- jQuery 选择器项目实例分析及实现代码
- 项目实践之javascript技巧
- asp.net编程获取项目根目录实现方法集合
- Android项目中引用本地aar文件的方法
- Android编程入门之HelloWorld项目目录结构分析
- Android Studio项目中导入开源库的方法
- 使用ASP.NET.4.5.1+MVC5.0 搭建一个包含 Ninject框架 项目
- Asp.Net MVC3.0如何项目部署到Win7 64位系统
- 学Java做项目需要学习的一些技能
- JAVAWEB实现简单的商城项目(一)实例代码解析
- Django在Win7下的安装及创建项目hello word简明教程
- Android studio 使用心得(三)---从Eclipse迁移到Android studio
- myeclipse项目工程总是进入debug状态的修改
- 在iPhone项目中使用讯飞语音SDK实现语音识别和语音合成
- android每次运行项目有时需要重新启动一个新的模拟器的解决办法
- 手机测试项目时报INSTALL_FAILED_INSUFFICIENT_STORAGE