您的位置:首页 > 其它

安卓游戏开发之【扎金花游戏】(二)

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: