用到知識點:
1.工廠方式創(chuàng)建對象
2.js數(shù)組sort()方法
代碼如下:
var testArr = [1, 3, 4, 2];
testArr.sort(function (a,b) {
return a - b;
})
alert(testArr.toString());//1,2,3,4
testArr.sort(function (a, b) {
return b- a;
})
alert(testArr.toString());//4,3,2,1
3.js-Math.radom()隨機數(shù)
Math.random();//0-1 取得的隨機數(shù)大于等于0且小于1
4.js數(shù)組splice用法
代碼如下:
//第一個參數(shù)是插入的起始位置
//第二個參數(shù)是從起始位置開始刪除元素的個數(shù)
//第三個參數(shù)是在起始位置開始插入的元素
//例子
var testArr = [1, 3, 4, 2];
testArr.splice(1, 0, 8);
alert(testArr.toString());//1,8,3,4,2
var testArr1 = [1, 3, 4, 2];
testArr1.splice(1, 1, 8);
alert(testArr1.toString());//1,8,3,4,2
5.js數(shù)組shift用法
代碼如下:
//取出數(shù)組中的首個元素返回,數(shù)組刪除第一個元素
//例子
var testArr = [1, 3, 4, 2];
var k= testArr.shift();
alert(testArr.toString());//3,4,2
alert(k);//1
有了這些基礎知識,咱們可以開始打牌了,假設就一個人摸牌,底牌是隨機的,我們每次摸來一張牌的時候就要把他插到手上的牌中,保證順序是從小到大!
第一步:首先我們要寫一個生產(chǎn)撲克牌對象的方法:
代碼如下:
/*工廠模式創(chuàng)建各種牌
*number:牌上的數(shù)字
*type:牌的花色
*/
var Cards = (function () {
var Card = function (number, type) {
this.number = number;
this.type = type;
}
return function (number, type) {
return new Card(number, type);
}
})()
第二步:創(chuàng)建撲克牌,洗牌,存儲
代碼如下:
var RadomCards = [];//隨機牌存儲數(shù)組
var MyCards = [];//存儲摸過來的牌
//花色0-黑桃 1-梅花 2-方塊 3-紅桃 4-大鬼 5-小鬼
//數(shù)值0-13代表 鬼,1,2,3,4,5,6,7,8,9,10,J,Q,K;
function CreatCompeleteCard() {
var index = 2;
var arr = [];
for (var i = 0; i <= 13; i++) {
if (i == 0) {
arr[0] = new Cards(i, 4);
arr[1] = new Cards(i, 5);
} else {
for (var j = 0; j <= 3; j++) {
arr[index] = new Cards(i, j);
index++;
}
}
}
RadomCards = SortCards(arr);
Show();//在頁面上顯示當前的牌
}
//洗牌
function SortCards(arr) {
arr.sort(function (a, b) {
return 0.5 - Math.random();
})
return arr;
}
第三步:開始摸牌,摸牌的時候我們首先要判斷插入的位置,然后把新牌插入到指定位置,形成新的整齊的順序
代碼如下:
//摸牌方法
function GetCards(CardObj) {
var k = InCardsIndex(MyCards, CardObj);//考慮下插入的位置
MyCards.splice(k, 0, CardObj); // 插入形成新的順序
}
/*【獲取牌應該插入的位置】
*arr:當前手里的牌
*obj:新摸到的牌
*/
function InCardsIndex(arr, obj) {
var len = arr && arr.length || 0;
if (len == 0) {
return 0;
}else if (len == 1) {
if (obj.number >= arr[0].number) {
return 1;
} else {
return 0;
}
} else {
var backi = -1;
for (var i = 0; i < len; i++) {
if (obj.number <= arr[i].number) {
backi = i;
break;
}
}
if (backi == -1) {
backi = len;
}
return backi;
}
}
好啦!通過html上的button按鈕出發(fā)Start來摸牌,點一次摸一張牌!并展示出來
代碼如下:
function Start() {//摸牌方法,一次摸一張
if (RadomCards.length > 0) {
GetCards(RadomCards.shift());
Show();
} else {
alert("沒有了");
}
}
//該show方法是用來在頁面展示當前牌的動向
function Show() {
var lenOld = RadomCards.length;
var lenNew = MyCards.length;
var html = "";
for (var i = 0; i < lenOld; i++) {
html += "" + RadomCards[i].type + "-" + RadomCards[i].number + "";
}
document.getElementById("old").innerHTML=html;
html = "";
for (var i = 0; i < lenNew; i++) {
html += "" + MyCards[i].type + "-" + MyCards[i].number + "";
}
document.getElementById("new").innerHTML=html;
}
上html和css的代碼
代碼如下:
聲明:本網(wǎng)頁內容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com