美文网首页
实现简单的斗地主在控制台中显示

实现简单的斗地主在控制台中显示

作者: LinDaiDai_霖呆呆 | 来源:发表于2017-08-17 16:32 被阅读31次

写一个三个人玩斗地主的游戏。实现随机发牌的功能。
使用面向对象的思路完成。
最后把每个玩家的牌在页面展示出来,只展示花色♣️♠️♥️♦️和点数即可。
提示:
a:游戏本身是个对象,比如有游戏名字、玩家、一副扑克等属性,
应该有开始游戏的功能。
b:每一副扑克本身也应该是个对象,有牌的数量的属性,
和存储每一张扑克的数组,洗牌等功能。
c:每张牌也应该是个对象,有花色和点数等属性。
d:每个玩家也应该是个对象,比如玩家的姓名,玩家手里的牌等属性。

步骤1.利用面向对象的思维,先确定一个整体的对象 即 game ,我们所有的功能都在这个对象中实现:

代码分析:

var game = {                //定义游戏这个对象
//  game属性1:对于游戏这个对象来说,游戏名称是必须的;
    name:"斗地主",         
//  game属性2:玩家,而玩家又是一个一个的对象,所以在此我们又可以给创建一个构造函数,用来创建每个玩家  
    players:[new Player("吕布"), new Player("貂蝉"), new Player("董卓")],         
//  game属性3:扑克牌组,扑克牌组也是一个对象,所以在此我们又可以给创建一个构造函数,用来创建扑克牌组
    poker: new Poker(),
//  game属性4:一个开始游戏的函数
    startGame: function (){}
//  game属性5:一个发牌的函数  
    sendCard : function (){}
//  game属性6:一个显示所有玩家所有牌的函数
    showAllCard : function (){}
}
具体代码如下:
var game = {
    //给游戏起名
    name: "斗地主",
    //调用步骤2中的构造函数创建三个玩家
    players: [new Player("吕布"), new Player("貂蝉"), new Player("董卓")],
    //调用步骤3中的构造函数创建一个牌组
    poker: new Poker(),
    //开始游戏的函数
    startGame: function (){
        // 调用分牌函数
        this.sendCard();
        // 调用在控制台显示牌的函数
        this.showAllCard();
    },
    //分牌的函数,用于在开始游戏中调用
    sendCard : function (){
        //牌组中54张牌,但我们要留3张作为底牌,所以循环51次
        for(var i = 0; i < 51; i++){
            var card = this.poker.cards[i];
            this.players[i % this.players.length].cards.push(card);
        }
    },
    //在控制台中显示牌的函数,用于在开始游戏中调用
    showAllCard : function (){
        for(var i = 0; i < this.players.length;i++){
            this.players[i].showCards();
        }
    }
}
//调用game对象中开始游戏的函数
game.startGame();

步骤2.定义一个构造函数用于创建每个玩家

代码分析:

function Player(name){
  this._init(name);
}
Player.prototype={                            //Player原型对象中的属性:
  _init:function(){},                                     初始化函数
  showCards:function(){},                                 用于显示每个玩家的牌的函数
}
具体代码如下:
function Player(name){
    this._init(name);
}
Player.prototype = {
//Player原型对象属性1:应该有一个用于初始化的函数
    _init:function(name){
      //对于每个玩家这个对象,它的属性A:每位玩家名字name
      this.name = name;
      //属性B:每位玩家手里的牌
      this.cards = [];
    }
//属性2:一个用于显示每一个玩家的牌的函数(这个函数我们可以在game对象中的showAllCard中直接调用它)
    showCards: function (){
        //调用了步骤4中的toString()函数用于将每个牌的花色还有数字用字符串的方式显示出来
      console.log(this.name + ":" + this.cards.toString());
    }
}

步骤3.定义一个构造函数用于创建一个牌组

代码分析:

function Poker(){
  this._init();
}
Poker.prototype={                 //Poker原型对象中的俩个属性:
  _init:function(){},                                         初始化函数
  shuffle:function(){},                                           打乱牌的函数
}
具体代码如下:
function Poker(){
    this._init();
}
Poker.prototype = {
  //Poker原型对象属性1:应该有一个用于初始化的函数
    _init: function (){
        //定义一个数组用来盛放所有的牌,可以把每张牌都当成是数组里的一个元素
        this.cards = [];
        // 初始化54张牌
        //花色数组中存放的是4种不同的花色
        var huases = ["♣", "♠", "♥", "♦"];
        //数字数组中存放的是13种不同的数字
        var points = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
        //利用俩个for循环将花色数组和数字数组组合成同一个数组(即cards这个数组)
        for (var i = 0; i < huases.length; i++){
            for (var j = 0; j < points.length; j++){
                //把每一张牌当成一个对象,这样我们又可以在步骤4中定义一个构造函数用于创建每一张牌
                var card = new Card(huases[i], points[j]);
               //把创建好的每一张牌都添加到数组cards中
                this.cards.push(card);
            }
        }
        //通过上面的俩个for循环,我们得到的是一个有52个元素(13种数字对应4种花色13*4=52)的数组
        //所以还要在添加上 大 小王;
        this.cards.push(new Card("", "大王"))
        this.cards.push(new Card("", "小王"))
        //以上步骤全执行完之后我们得到的是一个排序整齐的牌组,可以通过调用shuffle()方法来打乱它,
        //这样我们在给每位玩家发牌的时候发的就是打乱的牌
        this.shuffle();
    },
    //Poker原型对象属性2:一个用于打乱数组的函数
    shuffle: function (){
      this.cards.sort(function (a, b){
            return Math.random() > 0.5 ? 1 : -1
        })
    }
}

步骤4.定义一个构造函数用于创建每张牌

代码分析:

function Card(huase,point){
  this._init(huase,point);
}
Card.prototype = {                            //Card原型对象中的属性:
  _init:function(){},                                 初始化的函数
  toString:function(){},                              用于转换为字符串的函数
}
具体代码如下:
function Card(huase, point){
    this._init(huase, point);
}
Card.prototype = {
    //原型对象中的属性1:用于初始化的函数
    _init: function (huase, point){
        //对于每张牌这个对象,都有花色(如"♣", "♠"等等)
        this.huase = huase;
        //对于每张牌这个对象,都有数字(如 "A", "2","3"等等)
        this.point = point;
    },
    //属性2:用于转换为字符串的函数(可以用于在步骤2的showCards()函数中调用)
    toString : function (){
        return this.huase + this.point
    }
}

相关文章

网友评论

      本文标题:实现简单的斗地主在控制台中显示

      本文链接:https://www.haomeiwen.com/subject/nmovrxtx.html