安卓游戏开发之【扎金花游戏】(二)
2012-04-19 17:39
330 查看
现在开始正式地进入游戏的开发
进入游戏之前,首先得创建一个android工程,一个包和几个必须的类:
一、 创建安卓工程,工程名称为:ZhaJinHua
二、 创建一个包,包名称为:com.xxx.zjh,用于放置游戏中的类
三、 ZhaJinHuaActivity.java
游戏的主入口类,在这个类中我们需要:
1、设置游戏创建,暂停,继续,退出时需要处理的事件。
2、设置游戏全屏,去标题(在游戏创建时调用);
3、设置当前的显示界面,我们可以设置为GameView类,即游戏界面;
四、 ZhaJinHua.java
游戏的逻辑判断和牌的绘制类,在这个类中我们需要:
1、初始化52张牌;
2、对52张牌进行洗牌操作;
3、绘制52张已经被洗过的牌;
4、进行发牌操作,得到一副牌;
5、得到一张牌的牌值;
6、得到一张牌的花色;
7、对一副牌进行排序;
8、得到一副牌的类型(豹子,同花顺,同花,顺子,对子,单张,特殊);
9、进行两副牌的比较操作,分析两幅牌的大小,返回一个值;
五、 Person.java
玩家和电脑人的操作和牌的绘制类,在这个类中我们需要:
1、绘制玩家的牌;
2、设置并绘制玩家和电脑人的金币和投放的金币。
六、 PersonWithAI.java
电脑人的操作类,在这个类中我们需要:
1、判断玩家和电脑的牌值的大小;
2、设置电脑人出牌和放弃牌的几率。
七、 GameView.java
游戏界面的绘制类,在这个类中我们需要:
1、设置游戏线程的开关;
2、设置屏幕触摸事件;
3、图片资源的初始化;
4、图片和文字的绘制;
5、游戏的初始化:初始化牌值,然后进行洗牌,发牌,牌值的排序等操作;
6、初始化游戏的状态:游戏的初始化,自己下注的状态,电脑下注的状态,游戏结算状态。
ZhaJinHua.java
类的主入口,代码量并不多
ZhaJinHua.java
游戏的逻辑判断和牌的绘制类
1、首先,我们初始化52张牌,按从小到大的顺序:
// 存储52张牌
public
static int[] cards;
/**
* 52张牌的初始化
*/
public static void init()
{
cards =
new int[52];
for (int i = 0; i <
cards.length; i++)
{
cards[i] = i;
}
}
2、对52张牌进行洗牌操作;
/**
* 对52张牌进行洗牌操作
*/
public
static void xiPai()
{
// 创建随机类的实例和对象
Random random = new Random();
for (int i = 0; i <
cards.length; i++)
{
// 随机一张牌出来
int idx = random.nextInt(52);
// 让第i张牌与随机出来的牌进行对换
int temp =
cards[idx];
cards[idx] =
cards[i];
cards[i] = temp;
}
}
3、绘制52张已经被洗过的牌;
// 设置发牌的起始位置
public
static int[] faPaiStartIdx;
/**
* 绘制52张已经被洗过的牌
*/
public
static void drawSelf(Canvas canvas, Paintpaint,
Bitmap[] cardBitmap, int x,
int y)
{
for (int i = 0; i <
cards.length; i++)
{
if (i <
faPaiStartIdx)
{
continue;
}
int idx =
cards[i];
canvas.drawBitmap(cardBitmap[idx], x+ 15 * (i - faPaiStartIdx), y,
paint);
}
}
4、进行发牌操作,得到一副牌;
/**
* 进行发牌操作,得到一副牌
*/
public
static void faPai(Person[] persons)
{
int need = persons.length * 3;
// 如果人数超过规定的人数,那么牌数将不够,也就是当剩下的牌不够发了,那么将重新初始化和重新洗牌。
if (need >
faPaiStartIdx)
{
init();
xiPai();
// 別忘了把发牌位置变为零
faPaiStartIdx = 0;
}
for (int i = 0; i < persons.length; i++)
{
// 需在Person类中定义mycards[]数组变量,长度为3
persons[i].mycards[0] =
cards[faPaiStartIdx++];
persons[i].mycards[1] =
cards[faPaiStartIdx++];
persons[i].mycards[2] =
cards[faPaiStartIdx++];
}
}
7、对一副牌进行排序;
/**
* 对一副牌按从大到小进行排序;
*/
public
static void sort(int numbers[])
{
for (int i = 0; i < numbers.length; i++)
{
//设置是否存在交换
boolean exChangeExist =
false;
for (int j = 0; j < numbers.length - 1 - i; j++)
{
//得到一副牌的值
int v1 =
getValue(numbers[j]);
int v2 =
getValue(numbers[j + 1]);
if (v1 < v2)
{
int temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
//存在交换
exChangeExist = true;
}
}
//如果没有存在交换,并且循环还没有终止,就终止整个循环
if (exChangeExist ==
false)
{
break;
}
}
}
8、得到一副牌的类型(豹子,同花顺,同花,顺子,对子,单张,特殊);
/**
* 得到一副牌的类型豹子5,同花顺4,同花3,顺子2,对子1,单张0,特殊
*
*/
public
static int getCardType(int[] card)
{
// 得到这副牌的值
int v1 =
getValue(card[0]);
int v2 =
getValue(card[1]);
int v3 =
getValue(card[2]);
// 得到这副牌的花色
int c1 =
getColor(card[0]);
int c2 =
getColor(card[1]);
int c3 =
getColor(card[2]);
// 判断是否为豹子,是的话返回5
if (v1 == v2 && v2 == v3)
{
return 5;
}
// 判断是否为同花顺,是的话返回4
if (v1 - v2 == 1 && v2 - v3 == 1)
{
if (c1 == c2 && c2 == c3)
{
return 4;
}
// 判断是否为顺子
return 2;
}
// 判断是否为同花
if (c1 == c2 && c2 == c3)
{
return 3;
}
// 判断是否为对子
if (v1 == v2 || v2 == v3 || v1 == v3)
{
return 1;
}
return 0;
}
9、进行两副牌的比较操作,分析两幅牌的大小,返回一个值;
/**
* 进行两副牌的比较操作,分析两幅牌的大小,返回一个值;第一副牌大返回1,第二副牌大返回-1,否则返回0
*
* @return
*/
public
static int biJiao(int[] card1,
int[] card2)
{
// 先按从大到小的顺序排列两幅牌
sort(card1);
sort(card2);
// 获取两幅牌的牌型
int t1 =
getCardType(card1);
int t2 =
getCardType(card2);
// 比较两幅牌的牌型
if (t1 > t2)
{
return 1;
}
if (t1 < t2)
{
return -1;
}
// 如果牌型一样,逐一比较每张牌的值的大小
if (t1 == t2)
{
// 得到两副牌的牌值
int c1 =
getValue(card1[0]);
int c2 =
getValue(card1[1]);
int c3 =
getValue(card1[2]);
int s1 =
getValue(card2[0]);
int s2 =
getValue(card2[1]);
int s3 =
getValue(card2[2]);
// 比较两副牌的牌值
if (c1 > s1)
{
return 1;
}
if (c1 < s1)
{
return -1;
}
if (c2 > s2)
{
return 1;
}
if (c2 < s2)
{
return -1;
}
if (c3 > s3)
{
return 1;
}
if (c3 < s3)
{
return -1;
}
}
return 0;
}
进入游戏之前,首先得创建一个android工程,一个包和几个必须的类:
一、 创建安卓工程,工程名称为:ZhaJinHua
二、 创建一个包,包名称为:com.xxx.zjh,用于放置游戏中的类
三、 ZhaJinHuaActivity.java
游戏的主入口类,在这个类中我们需要:
1、设置游戏创建,暂停,继续,退出时需要处理的事件。
2、设置游戏全屏,去标题(在游戏创建时调用);
3、设置当前的显示界面,我们可以设置为GameView类,即游戏界面;
四、 ZhaJinHua.java
游戏的逻辑判断和牌的绘制类,在这个类中我们需要:
1、初始化52张牌;
2、对52张牌进行洗牌操作;
3、绘制52张已经被洗过的牌;
4、进行发牌操作,得到一副牌;
5、得到一张牌的牌值;
6、得到一张牌的花色;
7、对一副牌进行排序;
8、得到一副牌的类型(豹子,同花顺,同花,顺子,对子,单张,特殊);
9、进行两副牌的比较操作,分析两幅牌的大小,返回一个值;
五、 Person.java
玩家和电脑人的操作和牌的绘制类,在这个类中我们需要:
1、绘制玩家的牌;
2、设置并绘制玩家和电脑人的金币和投放的金币。
六、 PersonWithAI.java
电脑人的操作类,在这个类中我们需要:
1、判断玩家和电脑的牌值的大小;
2、设置电脑人出牌和放弃牌的几率。
七、 GameView.java
游戏界面的绘制类,在这个类中我们需要:
1、设置游戏线程的开关;
2、设置屏幕触摸事件;
3、图片资源的初始化;
4、图片和文字的绘制;
5、游戏的初始化:初始化牌值,然后进行洗牌,发牌,牌值的排序等操作;
6、初始化游戏的状态:游戏的初始化,自己下注的状态,电脑下注的状态,游戏结算状态。
ZhaJinHua.java
类的主入口,代码量并不多
ZhaJinHua.java
游戏的逻辑判断和牌的绘制类
1、首先,我们初始化52张牌,按从小到大的顺序:
// 存储52张牌
public
static int[] cards;
/**
* 52张牌的初始化
*/
public static void init()
{
cards =
new int[52];
for (int i = 0; i <
cards.length; i++)
{
cards[i] = i;
}
}
2、对52张牌进行洗牌操作;
/**
* 对52张牌进行洗牌操作
*/
public
static void xiPai()
{
// 创建随机类的实例和对象
Random random = new Random();
for (int i = 0; i <
cards.length; i++)
{
// 随机一张牌出来
int idx = random.nextInt(52);
// 让第i张牌与随机出来的牌进行对换
int temp =
cards[idx];
cards[idx] =
cards[i];
cards[i] = temp;
}
}
3、绘制52张已经被洗过的牌;
// 设置发牌的起始位置
public
static int[] faPaiStartIdx;
/**
* 绘制52张已经被洗过的牌
*/
public
static void drawSelf(Canvas canvas, Paintpaint,
Bitmap[] cardBitmap, int x,
int y)
{
for (int i = 0; i <
cards.length; i++)
{
if (i <
faPaiStartIdx)
{
continue;
}
int idx =
cards[i];
canvas.drawBitmap(cardBitmap[idx], x+ 15 * (i - faPaiStartIdx), y,
paint);
}
}
4、进行发牌操作,得到一副牌;
/**
* 进行发牌操作,得到一副牌
*/
public
static void faPai(Person[] persons)
{
int need = persons.length * 3;
// 如果人数超过规定的人数,那么牌数将不够,也就是当剩下的牌不够发了,那么将重新初始化和重新洗牌。
if (need >
faPaiStartIdx)
{
init();
xiPai();
// 別忘了把发牌位置变为零
faPaiStartIdx = 0;
}
for (int i = 0; i < persons.length; i++)
{
// 需在Person类中定义mycards[]数组变量,长度为3
persons[i].mycards[0] =
cards[faPaiStartIdx++];
persons[i].mycards[1] =
cards[faPaiStartIdx++];
persons[i].mycards[2] =
cards[faPaiStartIdx++];
}
}
7、对一副牌进行排序;
/**
* 对一副牌按从大到小进行排序;
*/
public
static void sort(int numbers[])
{
for (int i = 0; i < numbers.length; i++)
{
//设置是否存在交换
boolean exChangeExist =
false;
for (int j = 0; j < numbers.length - 1 - i; j++)
{
//得到一副牌的值
int v1 =
getValue(numbers[j]);
int v2 =
getValue(numbers[j + 1]);
if (v1 < v2)
{
int temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
//存在交换
exChangeExist = true;
}
}
//如果没有存在交换,并且循环还没有终止,就终止整个循环
if (exChangeExist ==
false)
{
break;
}
}
}
8、得到一副牌的类型(豹子,同花顺,同花,顺子,对子,单张,特殊);
/**
* 得到一副牌的类型豹子5,同花顺4,同花3,顺子2,对子1,单张0,特殊
*
*/
public
static int getCardType(int[] card)
{
// 得到这副牌的值
int v1 =
getValue(card[0]);
int v2 =
getValue(card[1]);
int v3 =
getValue(card[2]);
// 得到这副牌的花色
int c1 =
getColor(card[0]);
int c2 =
getColor(card[1]);
int c3 =
getColor(card[2]);
// 判断是否为豹子,是的话返回5
if (v1 == v2 && v2 == v3)
{
return 5;
}
// 判断是否为同花顺,是的话返回4
if (v1 - v2 == 1 && v2 - v3 == 1)
{
if (c1 == c2 && c2 == c3)
{
return 4;
}
// 判断是否为顺子
return 2;
}
// 判断是否为同花
if (c1 == c2 && c2 == c3)
{
return 3;
}
// 判断是否为对子
if (v1 == v2 || v2 == v3 || v1 == v3)
{
return 1;
}
return 0;
}
9、进行两副牌的比较操作,分析两幅牌的大小,返回一个值;
/**
* 进行两副牌的比较操作,分析两幅牌的大小,返回一个值;第一副牌大返回1,第二副牌大返回-1,否则返回0
*
* @return
*/
public
static int biJiao(int[] card1,
int[] card2)
{
// 先按从大到小的顺序排列两幅牌
sort(card1);
sort(card2);
// 获取两幅牌的牌型
int t1 =
getCardType(card1);
int t2 =
getCardType(card2);
// 比较两幅牌的牌型
if (t1 > t2)
{
return 1;
}
if (t1 < t2)
{
return -1;
}
// 如果牌型一样,逐一比较每张牌的值的大小
if (t1 == t2)
{
// 得到两副牌的牌值
int c1 =
getValue(card1[0]);
int c2 =
getValue(card1[1]);
int c3 =
getValue(card1[2]);
int s1 =
getValue(card2[0]);
int s2 =
getValue(card2[1]);
int s3 =
getValue(card2[2]);
// 比较两副牌的牌值
if (c1 > s1)
{
return 1;
}
if (c1 < s1)
{
return -1;
}
if (c2 > s2)
{
return 1;
}
if (c2 < s2)
{
return -1;
}
if (c3 > s3)
{
return 1;
}
if (c3 < s3)
{
return -1;
}
}
return 0;
}
相关文章推荐
- 安卓游戏开发之【扎金花游戏】(一)
- 安卓游戏开发之【扎金花游戏】(三)
- 安卓游戏开发之【扎金花游戏】(四)
- 2012.10.07 安卓游戏开发笔记(十二)_SurfaceView视图
- 安卓游戏开发之播放角色动画
- 2012.9.16 安卓游戏开发笔记(五)_ProgressBar&SeekBar
- 安卓surfaceview使用之游戏首页开发
- (二)安卓android游戏开发之2048游戏开发教程----深刻理解LinearLayout布局
- 安卓开发_数独游戏基础(二)
- 安卓游戏开发--策略地图游戏
- 2012.9.25 安卓游戏开发笔记(十)_横竖屏幕切换的三种处理模式
- Android安卓手机游戏开发
- 一个C语言开发的炸金花纸牌游戏附带vs性能分析报告
- 玩安卓的游戏开发 留着备查
- 2012.9.13 安卓游戏开发笔记(二)_ImageButton
- 《飞机大战》安卓游戏开发源码(终)
- Unity安卓VR游戏开发
- 【Cocos2d-x游戏开发】3.6 Win7打安卓包
- 使用Unity开发安卓游戏怎么进行性能优化?
- 安卓 自定义View来开发自己的游戏或应用