1.js实现队列的数据结构(先进先出)

function Queue (array) {
if(Object.prototype.toString.call(array)!="[object Array]") {
throw "target is not an Array !"
} this.queue = array; this.pushQueue = function (ele) {
this.queue.push(ele)
}
this.delQueue = function () {
this.queue.shift()
}
this.getFirst = function () {
return this.queue[0]
}
this.getLast = function () {
return this.queue[this.queue.length]
}
this.isEmpty = function () {
return this.queue.length?false:true
}
this.getArray = function () {
return this.queue
}
// 出队列并获取出队列的元素
this.delGet = function () {
var last = this.getFirst();
this.delQueue();
return last;
}
}

2. js实现栈(先进后出)

function Stack (array) {
if(Object.prototype.toString.call(array)!="[object Array]") throw "target is not an Array !" this.stack = array; this.addStack = function (ele) {
this.stack.push(ele)
} this.delStack = function () {
this.stack.pop();
}
// 出栈并获取出栈的元素
this.delGet = function () {
var last = this.getLast();
this.delStack();
return last;
} this.getFirst = function () {
return this.stack[0]
} this.getLast = function () {
return this.stack[this.stack.length-1]
} this.getArray = function () {
return this.stack
}
}

***** 实现拉火车游戏

游戏约定如下:

1.首先给定相同数量的牌

2. 不同玩家轮流出牌

3.当出牌后,两张最近的相同牌之间的所有牌可以被当前玩家获取,获取后放在尾部

4.先出完牌的玩家输

*****定义玩家类

// name: 玩家名字  queue:队列数据结构   playGround:游戏台,用于存放玩家出的牌
function dragTrainPlayer (name, queue, playGround) {
if(Object.prototype.toString.call(array) !== "[object Array]") throw "target is not an Array !"
this.name = name;
this.cards = queue; this.getName = function () {
return this.name
} this.getArray = function () {
return this.cards.getArray();
}
// 每次出牌需检查一次
this.giveCard = function () {
if(this.cards.getArray().length==0) return 0
playGround.push(this.cards.delGet())
this.check() }
// 检查是否可获取牌
this.check = function () {
// 依次比对,最近相同牌之间的牌截取下来,与玩家当前手中的牌拼接
for (var i=playGround-1; i>0; i--) {
if(playGround[playGround.length-1] === playGround[i]) {
this.cards.getArray().concat(this.cards.slice(i))
return }
}
}
}

******* 定义游戏开始函数

function gameStart (player) {
var flag = 1;
// 如果没有出现玩家手中无牌的情况,则一直执行下去
while (flag) { for(var i = 0; i<arguments.length; i++) {
if(arguments[i].getArray().length === 0) {
flag = 0;
// 返回第一个出完牌的玩家的名字
return arguments[i].getName();
}
arguments[i].giveCard(); // 以下代码块用于每次出牌的测试
console.log("---------");
for(var i=0;i<arguments.length; i++) {
console.log(arguments[i].getName());
console.log(arguments[i].getArray());
console.log(playGround);
};
console.log("---------");
}
}
}

*******创建对象并执行

var playGround = [];
var stack1 = new Queue([5,8,6,9,8]);
var stack2 = new Queue([9,9,6,5,3]);
var stack3 = new Queue([7,4,2,5,1]); var player1 = new dragTrainPlayer("player1", stack1, playGround)
var player2 = new dragTrainPlayer("player2", stack2, playGround)
var player3 = new dragTrainPlayer("player3", stack2, playGround) console.log(gameStart(player1, player2, player3))

最新文章

  1. Arrays和Collection之间的转换
  2. jq 截取字符串
  3. linux增加根分区大小
  4. 优秀程序设计的Kiss原则(keep it simple,stupid)
  5. Java中的静态方法和单例模式比较
  6. [算法]Comparison of the different algorithms for Polygon Boolean operations
  7. 使用Obsolete特性来标记方法过时或弃用
  8. fork()函数详解
  9. opencv2.4.4 背景减除算法收集
  10. oracle 学习之DG的搭建
  11. 201521123069 《Java程序设计》第1周学习总结
  12. 汉诺塔python3函数编写和过程分析
  13. Node.js 流
  14. TensorFlow(2)Softmax Regression
  15. asp.net core WebApi 快速入门
  16. Shell脚本笔记(五)Shell函数
  17. pytorch基础
  18. BZOJ4200 NOI2015小园丁与老司机(动态规划+上下界网络流)
  19. @media screen and (max-width: 960px)与@media (max-width: 960px) 有screen与没有screen的区别
  20. 分享插件的使用加一个echart走数据

热门文章

  1. 漫谈Java IO之基础篇
  2. Jedis操作Redis
  3. linux小白成长之路8————访问Docker中的mysql
  4. java中的异常类型以及区别????
  5. Java基础学习笔记二十一 多线程
  6. Beta预备会议
  7. 20162323周楠《Java程序设计与数据结构》第八周总结
  8. 使用Putty连接Amazon EC2 Instance
  9. HTML 样式设计
  10. MySQL 主从复制那些事(一)