zoukankan      html  css  js  c++  java
  • JavaScript案例开发之扑克游戏

    随着时代的发展,知识也在日益更新,但是基础知识永远不会过时,它是新时代的基石,更是我们进一步学习的保障,下面带着大家用JavaScript开发一款真正的扑克游戏,和大家一起分享,希望你们能够喜欢;闲话不多说,现在开始引入我们的问题:当我们与朋友玩扑克牌的时候,每次开始前都会洗牌,然后按每人一张牌来循环的发牌,自己拿到一张牌都会按照大小的顺序将牌插入到对应的位置。 接下来让我们通过JavaScript的知识来实现一个模拟打牌的程序。

    大家可以看到这是一个扑克游戏的场景图,首先大家可以看到页面有五块区域分别代表玩家一,玩家二,玩家三,玩家四,牌堆和三个按钮创建,洗牌,发牌。

    当我们点击创建,会在牌堆创建一副完整的扑克牌带有花色和牌值:

     点击洗牌按钮执行洗牌操作,将牌组的顺序打乱展示出来。

     点击发牌将牌按照顺序循环的发给每个人,每个人拿到一张牌都会按照大小的顺序将牌插入到对应的位置中。直到牌组发完,停止发牌。

     发牌结束:

     

     当然我们想要成功开发这款游戏,就要规范的按照软件工程的开发思想进行开发,首先我们要做的当然是需求分析,下面就由我带着大家分析一遍这款游戏的需求:

      1)首先创建一副52张牌的牌组,实现在页面上以图形展示出纸牌

      2)实现纸牌的洗牌功能

      3)实现发牌功能, 玩家拿到一张牌按从小到大的顺序将牌插入到所应该在的位置

    这款游戏大致就是这些主要需求,那么下面我们就来设计一下如何进行开发:

    要实现这些需求,首先我们需要逻辑上建立一副扑克牌的数组存储52张牌,再在HTML页面上实现扑克牌的样式展示。然后我们需要对数组进行洗牌,就是对扑克牌数组进行随机排序。发牌将牌组从最上面的开始,循环的发给每个玩家,同时发出去的牌也要从扑克牌数组中删除,牌组没有牌的时候停止发牌。每个玩家也是一个数组,玩家拿到牌需要考虑下插入的位置,并插入形成新的顺序。

    1)根据上面的功能,一开始我们预计定义五个数组:

      var compeleteCards = new Array();

      var player1 = new Array();

      var player2 = new Array();

      var player3 = new Array();

      var player4 = new Array();

     

    2)从功能上我们需要几个函数:

     

         function CreatCompeleteCard() {}:创建一副扑克牌

         function SortCards() {}:对扑克牌进行洗牌

         function Show() {}:展示扑克牌

         function DealCards () {}:发牌

         function GetCards(CardObj) {}:玩家接受扑克牌CardObj插入自身的数组

         function InCardsIndex(arr, obj) {}:考虑下插入的位置,arr参数是当前玩家的数组,obj是插入的扑克牌,函数返回这张扑克牌应该所处的位置

    现在我们来看如何在逻辑上建立牌组模型,先观察每张牌都应该有两个属性牌值(number)和花色(type)

     而一副牌有52张牌(除去大小王)。我们可以把一张扑克牌看为一个对象,而一副扑克牌就是拥有52个扑克牌对象的数组。

    1
        var compeleteCards = new Array(扑克牌1,扑克牌2,...);
     

    当然我们不可能一个一个的去创建52张牌对象,我们使用构造函数的方法,将牌抽象成一个类,通过实例化生成牌对象,最后通过循环的方法生成52个牌对象存入数组。

    话不多说,我们上代码:

     HTML文件:

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     5         <title>Card</title>
     6         <style type="text/css">
     7             div#player1, div#player3 {
     8                 margin: 0 auto;
     9                 width: 460px;
    10                 height: 70px;
    11             }
    12             div#player4, div#player2 {
    13                 margin: 0 auto;
    14                 width: 70px;
    15                 height: 460px;
    16                 margin-left: 100px;
    17                 float: left;
    18             }
    19             div#player2 {
    20                 margin-right: 100px;
    21                 float: right;
    22             }
    23             div#footer, div#compeleteCards {
    24                 clear: both;
    25                 text-align: center;
    26                 margin-top: 10px;
    27             }
    28             #create,#sort,#deal{
    29                 font-size:18px;
    30                 font-weight:500;
    31             }
    32             .center {
    33                 height: 460px;
    34             }
    35             .card {
    36                 width: 30px;
    37                 height: 60px;
    38                 border: solid 0.5px black;
    39                 margin-left: 3px;
    40                 float: left;
    41                 -webkit-user-select: none;
    42             }
    43             .number {
    44                 text-align: center;
    45                 font-size: 18px;
    46                 margin-top: 3px;
    47             }
    48             
    49         </style>
    50     </head>
    51     <body>
    52         <div id="container">
    53 
    54             <div id="player1">
    55 
    56             </div>
    57             <div class="center">
    58                 <div id="player4">
    59 
    60                 </div>
    61 
    62                 <div id="player2">
    63 
    64                 </div>
    65             </div>
    66             <div id="player3">
    67 
    68             </div>
    69         </div>
    70         <div id="footer">
    71             <input id="create" type="button" value="创建"/>
    72             <input id="sort" type="button" value="洗牌"/>
    73             <input id="deal" type="button" value= "发牌" />
    74         </div>
    75         <div id="compeleteCards">
    76 
    77         </div>
    78     </body>
    79         <script type="text/javascript" src="js/poker.js"></script>
    80 </html>

    poker.js文件:

      1 var compeleteCards = new Array();
      2 var mytimer;
      3 var cardSequence = 1;
      4 var player1 = new Array();
      5 //储存玩家一的手牌
      6 var player2 = new Array();
      7 //储存玩家二的手牌
      8 var player3 = new Array();
      9 //储存玩家三的手牌
     10 var player4 = new Array();
     11 //储存玩家四的手牌
     12 
     13 function Cards(number,type){
     14     var card = {
     15         number: number,
     16         type: type
     17     }
     18     return card;
     19 }
     20 
     21 function CreatCompeleteCard() {
     22     var arr = new Array();
     23     for (var i = 3; i <= 15; i++) {
     24         for (var j = 1; j <= 4; j++) {
     25             var card = Cards(i, j);
     26             arr.push(card);
     27         }
     28     }
     29     return arr;
     30 }
     31 
     32 
     33 function Show() {
     34     function typeShow(type) {
     35         var t;
     36         switch(type) {
     37         case 1:
     38             t = "♠";
     39             break;
     40         case 2:
     41             t = "♣";
     42             break;
     43         case 3:
     44             t = "<font color='#FF0000'>♦</font>";
     45             break;
     46         case 4:
     47             t = "<font color='#FF0000'>♥</font>";
     48             break;
     49         }
     50         return t;
     51     };
     52 
     53     function numberShow(number) {
     54         var n = number;
     55         switch(number) {
     56         case 11:
     57             n = "J";
     58             break;
     59         case 12:
     60             n = "Q";
     61             break;
     62         case 13:
     63             n = "K";
     64             break;
     65         case 14:
     66             n = "A";
     67             break;
     68         case 15:
     69             n = "2";
     70             break;
     71         }
     72         return n;
     73     };
     74 
     75     function arrayToShow(array, id) {
     76         var html = "";
     77         for (var i = 0; i < array.length; i++) {
     78             html += "<div class='card'><b>" + typeShow(array[i].type) + "</b><div class='number'>" + numberShow(array[i].number) + "</div></div>";
     79         }
     80         document.getElementById(id).innerHTML = html;
     81     };
     82     arrayToShow(compeleteCards, "compeleteCards");
     83     arrayToShow(player1, "player1");
     84     arrayToShow(player2, "player2");
     85     arrayToShow(player3, "player3");
     86     arrayToShow(player4, "player4");
     87 }
     88 
     89 function SortCards() {
     90     if (compeleteCards.length == 52) {
     91         compeleteCards.sort(function(a, b) {
     92             return 0.5 - Math.random();
     93         });
     94     }
     95 }
     96 
     97 function DealCards() {
     98     if (compeleteCards.length == 52) {
     99         mytimer = setInterval("GetCards(compeleteCards.shift())", 100);
    100     }
    101 }
    102 
    103 function GetCards(CardObj) {
    104     switch(cardSequence) {
    105     case 1:
    106       var k = InCardsIndex(player1, CardObj);
    107       player1.splice(k, 0, CardObj);
    108       cardSequence = 2;
    109       break;
    110     case 2:
    111       var k = InCardsIndex(player2, CardObj);
    112       player2.splice(k, 0, CardObj);
    113       cardSequence = 3;
    114       break;
    115     case 3:
    116       var k = InCardsIndex(player3, CardObj);
    117       player3.splice(k, 0, CardObj);
    118       cardSequence = 4;
    119       break;
    120     case 4:
    121       var k = InCardsIndex(player4, CardObj);
    122       player4.splice(k, 0, CardObj);
    123       cardSequence = 1;
    124       break;
    125 }
    126         
    127 
    128     if (compeleteCards.length == 0) {
    129         window.clearTimeout(mytimer);
    130     }
    131     Show();
    132 }
    133 
    134 //在此添加代码
    135 function InCardsIndex(arr, obj) {
    136   var len = arr.length;
    137   if (len == 0) {
    138       return 0;
    139   } else if (len == 1) {
    140     if (obj.number >= arr[0].number) {
    141         return 1;
    142     } else {
    143         return 0;
    144     }
    145 }   else {
    146     var backi = -1;
    147     for (var i = 0; i < len; i++) {
    148       if (obj.number <= arr[i].number) {
    149         backi = i;
    150         break;
    151       }
    152     }
    153     if (backi == -1) {
    154         backi = len;
    155     }
    156     return backi;
    157 }   
    158 }
    159 document.getElementById("create").onclick = function() {
    160     compeleteCards = CreatCompeleteCard();
    161     Show();
    162 };
    163 document.getElementById("sort").onclick = function() {
    164     SortCards();
    165     Show();
    166 };
    167 document.getElementById("deal").onclick = function() {
    168     DealCards();
    169 }; 

    以上就是我们的JavaScript案例开发之扑克游戏,欢迎大家来浏览指正!

  • 相关阅读:
    [ECNU 1624] 求交集多边形面积
    [转] Java之ACM速成
    [swustoj 191] 迷宫逃离
    [Swustoj 24] Max Area
    PICK定理模板
    [HDU 1007] Quoit Design
    [转] 最近点对距离问题
    [POJ 2184] Cow Exhibition
    SGU 144.Meeting
    SGU 143.Long Live the Queen(女王万岁)
  • 原文地址:https://www.cnblogs.com/ldw-blogs/p/7566702.html
Copyright © 2011-2022 走看看