📄 harry.txt
字号:
http://www.5uflash.com/html/flashjiaocheng/Flashyingyongkaifa/20080329/1275.html 网址
/* 如果把我们真实中的牌规则转到游戏中用FLASH编写出来呢。如果用数字化表示牌规则呢?
我们就用一个2维数组来记录我们手中的牌。牌组原理[花色][大小]如 黑桃K就是[3][13] 方块10就是[0][10]
采用2维数组方便我们来判断牌的类型如花色,大小。排列规则等等。。 下面我们用斗地主来举例。 斗地主是52张牌,在游戏规则中虽然不判断花色,但我们同样写出花色算法。这样在写其他牌类用到花色的时候就直接调出来用为以后的通用方便, 下面先写一段斗地主的发牌。我们先分析原理和方法,源文件我贴到最后。
*/
// 首先我们建立一个函数,用来改变我们的牌的花色和大小。这样我们可以反复调用这个函数来完成所有牌的形态改变了 代码如下:
牌形 = function (对象, 点数, 花色) {
//trace("执行牌形 "+对象+" "+花色+" "+点数);
//传值
this[对象].值 = [点数, 花色];
//把数字花色换为字符花色
if (花色 == 0) {
花色 = "方块";
} else if (花色 == 1) {
花色 = "梅花";
} else if (花色 == 2) {
花色 = "红桃";
} else if (花色 == 3) {
花色 = "黑桃";
} else if (花色 == 4) {
花色 = "王";
}
this[对象].黑桃._visible = false;
this[对象].红桃._visible = false;
this[对象].梅花._visible = false;
this[对象].方块._visible = false;
this[对象].王._visible = false;
this[对象][花色]._visible = true;
this[对象][花色].gotoAndStop(点数);
};
/*因为我一直是以中文写程,所以省去了注释。这样一看就不需要多解释了,就是根据参数 改变对象牌的花色和大小 说明下:对象这个参数就是要执行改变的有牌型的那个MC名字,这样我们就能动态对某个MC发生改变
好了,我们下面来看如果完成一副54牌的洗牌函数,先贴出代码如下
*/
洗牌 = function () {
//动态设置总牌52张
var 总牌:Array = new Array();
for (var i = 0; i<4; i++) {
for (var j = 3; j<=15; j++) {
总牌.push([j, i]);
}
}
//追加双王
总牌.push([16, 4]);
总牌.push([17, 4]);
//设置玩家的牌组
//3个玩家
for (var i = 0; i<3; i++) {
this["牌组"+i] = new Array();
//发牌数据给玩家
for (var j = 0; j<17; j++) {
//随机抽总牌
var 随机值 = int(random(总牌.length));
//添进牌组
var 抽中值 = 总牌.splice(随机值, 1);
this["牌组"+i].push(抽中值[0]);
//让牌数据形象化
牌形(("玩家"+i+j), 抽中值[0][0], 抽中值[0][1]);
//this["玩家"+i+j].牌形(this["牌组"+i][0, this["牌组"+i][1]]);
}
}
//显示3张牌
for (var i = 0; i<3; i++) {
var 随机值 = int(random(总牌.length));
var 抽中值 = 总牌.splice(随机值, 1);
牌形(("剩"+i), 抽中值[0][0], 抽中值[0][1]);
}
/*
for (var i = 1; i<=4; i++) {
trace(this["牌组"+i]);
}
*/
};
/* OK 我们再来分析原理,因为我们采用的是2维数组来记录牌的表达方式,所以一开始用2个for循环,一个按花色 一个按点数 插入52张牌到总牌(用来记录全部牌的数组),因为在牌中有2张特殊的牌就是大小王牌,这2张点数分别为16 和17 为的是一般牌规则中 大小王 要高过其他牌值。 因为斗地主是3个玩家,每人17张牌。同理,还是需要2个for循环一个为人数,一个为每人数量。我们定义一个随机值,这个随机值就是从一开始增加的54张牌中插取。插取的同时并让这张牌从总牌数组里面清除,表示已经发了这张牌。该张不存了,我们根据玩家人数定义3个数组 用来放至每个玩家手中的牌值。 把插出来的牌追加到玩家牌数组里面。执行牌形,让这张牌形显示出来。 这样2个for循环完成后 就发完了3玩家的51张牌了。于了后面的3张同样方法取出来就成了斗地主的底牌。
每个玩家都拿到了自己的17张牌,因为牌是打乱顺序的。我们就用排序方式把2维数组牌重新排序,并显示牌形。这样我们就完成了发牌
*/
排序牌 = function () {
for (var i = 0; i<3; i++) {
this["牌组"+i].sortOn(0, 1 | 16);
for (var j = 0; j<=17; j++) {
牌形(("玩家"+i+j), this["牌组"+i][j][0], this["牌组"+i][j][1]);
}
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -