基於JS的21點紙牌游戲系統


適合正在學習JS的小白瀏覽

利用JS編寫一個簡單的21點紙牌游戲系統

設計一款以21點玩法為主的紙牌類游戲,該程序是一個21點的撲克牌游戲,玩家一共可以要5張牌,如果牌的點數超過21,則暴了,自動出局;在不超過21點的情況下,玩家與庄家(計算機)比較牌點數的大小,大者為贏。

一、功能要求

1)程序中一共有52張撲克牌可以隨機抽取,大於10的點數全部為半點;

2)高級玩家可以查看下一張牌,點擊隱藏位置多次看牌,並決定是否要牌。當然,在游戲規則上不能泄露這個秘密;

3)可以編寫作弊程序,點擊某個特殊位置多次,去查看計算機的牌面,並根據計算機所得的牌來輸入自己想要的牌,當然,在界面上不能顯示這點秘密

4)每次要牌后可以設定下注值,即如果開始下的是10金幣的注,如果牌好,你可以要求再下注,當然不能超過你所有的總錢數

二、簡單操作

1.動態生成卡組的函數
 1 // 生成卡組
 2 function createCardArray(){
 3     var type = ["方塊","梅花","紅桃","黑桃"];
 4     var MAXNUM = 13;
 5     var cardArray = new Array();
 6     for(i=0;i<type.length;++i) {
 7         for(num=1;num<=MAXNUM;++num) {
 8             var card = type[i]+num;
 9             cardArray.splice(cardArray.length,0,card);
10             // Array.splice("需要操作的數組下標","需要刪除的元素個數","需要添加的元素1","需要添加的元素2"...)
11         }
12     }
13     return cardArray;
14 };
15 
16 var cardArray = createCardArray();
17 console.log(cardArray); // Array(52) [ "方塊1", "方塊2", "方塊3", "方塊4", "方塊5", "方塊6", "方塊7", "方塊8", "方塊9", "方塊10", … ]
生成卡組

 

2.隨機抽出一張牌並獲得點數
 1 // 隨機生成卡牌
 2 function randomCard(){
 3     var cardArrayIndex = Math.floor(Math.random() * cardArray.length);
 4     // 數組長度 = 數組最大下標值 + 1,利用Math.floor()向下取整函數正好取到數組的下標
 5     var card = cardArray[cardArrayIndex];
 6     cardArray.splice(cardArrayIndex,1); // 從卡組中取出(刪除)
 7     return card;
 8 }
 9 
10 // 得到卡牌的點數
11 function getCardNum(card){
12     var RegExp = /\d{1,2}/; // 匹配1到2為數字
13     var num = card.match(RegExp);// 如果匹配到返回匹配到的字符串,沒有則返回null
14     return parseInt(num); // 轉化成int型然后返回
15 }
16 
17 var card = randomCard(); // 如果是 "紅桃8"
18 console.log(cardArray); // 51張牌,缺少"紅桃8"
19 var num = getCardNum(card); 
20 console.log("card:"+card+",num:"+(num+0)); // card:紅桃8,num:8 
抽取一張牌並獲得點數

 

3.把卡牌圖片添加到指定的id下
 1 // 把牌添加到指定的id中
 2 function addCard(idName, card, type) {
 3     // idName是被添加的id,card是卡牌的信息,type為true添加卡牌正面、false添加卡牌背面
 4     var src; // 保存圖片路徑
 5     if(type)
 6         src = "img/背面.jpg";
 7     else
 8         src = "img/" + card + ".jpg";
 9     var imgElement = document.createElement("img"); // 生成一個img節點
10     imgElement.src = src; // 為img節點添加圖片路徑
11     idName.appendChild(imgElement); // 為指定id添加剛剛生成的img節點
12 }
13 
14 window.onload = function() { // 如果HTML標簽還沒有加載就獲取DOM元素會報錯,解決方法是把JS代碼放到HTML標簽后面,但為了方便我們等待瀏覽器加載完畢后在執行操作。
15     var card1 = randomCard();
16     var card2 = randomCard();
17     var idName = document.getElementById("cardArea");
18     addCard(idName, card, true);
19     addCard(idName, card, false);
20 }
把牌添加到指定的id中
4.移除電腦卡背
 1 window.onload = function() {
 2     // 把電腦卡背移除,並添加相應卡牌正面
 3     var computerCard = ["方塊1", "方塊2", "方塊3"];
 4     var computerArea = document.getElementById("computerArea");
 5     for(i = 0; i < computerCard.length; ++i) {
 6         var card = computerCard[i];
 7         addCard(computerArea, card, true);
 8     }
 9     
10     // 方法一:利用removeChild() 刪除電腦卡背 
11 //    var childNodes = computerArea.childNodes;
12 //    console.log(childNodes);
13 //    for(i=childNodes.length-1;i>=0;--i) {
14 //        computerArea.removeChild(childNodes[i]);
15 //    }
16     
17     // 方法二:利用innerHTML覆蓋HTTML 刪除電腦卡背
18     computerArea.innerHTML = "";
19     
20 }
兩種方法移除電腦卡背
5.事件的添加與移除
 1 // 事件的添加與移除
 2 window.onload = function() {
 3     var buttonDOM = document.getElementById("button");
 4     var e1 = function() {
 5         alert("點擊事件1");
 6     };
 7     var e2 = function() {
 8         alert("點擊事件2");
 9         buttonDOM.removeEventListener("click", e1);
10     };
11     buttonDOM.addEventListener("click", e1);
12     buttonDOM.addEventListener("click", e2);
13 }
事件添加與移除

三、游戲源碼

GitHub:https://github.com/lemon-Xu/21-point-card-game

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM