成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

通過JavaScript實(shí)現(xiàn)撲克牌游戲的示例代碼

3403771864 / 600人閱讀

  我們說下想要實(shí)現(xiàn),一副牌里有54張,我們可以知道 3 - 2 的牌總共有13張,這分為4個(gè)花色是 ?? ?? ?? ?? 另外加上2個(gè)大小王!第一步:形成一個(gè)數(shù)組, 就要寫一個(gè)函數(shù),利用牌數(shù)量和花色,這樣可以用來形成一個(gè)雙重循環(huán)將 number 里面的內(nèi)容 和 flower 里面的內(nèi)容 進(jìn)行一個(gè)循環(huán)嵌入?最后在用 push 生成一個(gè)對象放到數(shù)組的后面?再到最后放入 大小王 。

  const number = ['3', '4', '5', '6', '7', '8', '9', '10', "J", "Q", "K", "A", '2'];
  const flower = ["??", "??", "??", "??"]; // 黑桃 < 紅心 < 梅花 < 方塊
  /**
  生成一個(gè)撲克牌,然后分發(fā)3副牌,1副牌中有17張牌,然后有四種顏色,底牌留三張。按照大小進(jìn)行排序
  * 54 張
  * 大小王
  * 張三: 17
  * 李四: 17
  * 王五: 17
  * 底牌: 3
  *
  * 排序 方塊3 黑桃3 升序 黑桃3-方塊3 如果點(diǎn)數(shù)相同,按花色排
  */

  語法:

  //系統(tǒng)牌
  const number = ['3', '4', '5', '6', '7', '8', '9', '10', "J", "Q", "K", "A", '2'];
  const flower = ["??", "??", "??", "??"]; // 黑桃 < 紅心 < 梅花 < 方塊
  //牌組
  let arr = [];
  //生成牌的函數(shù)
  poker();
  //生成一副牌
  function poker() {
  for (let n = 0; n < number.length; n++) {
  for (let j = 0; j < flower.length; j++) {
  arr.push({ name: flower[j] + number[n]})
  }
  }
  arr.push({ name: "小王" }, { name: "大王" })
  }

  輸出效果圖:

  都知道牌要隨機(jī),那我們在進(jìn)行一個(gè)打亂??梢蕴砑右粋€(gè)隨機(jī)生成的函數(shù)和一個(gè)去重生成下標(biāo)的數(shù)組。

  語法:

 

 //系統(tǒng)牌
  const number = ['3', '4', '5', '6', '7', '8', '9', '10', "J", "Q", "K", "A", '2'];
  const flower = ["??", "??", "??", "??"]; // 黑桃 < 紅心 < 梅花 < 方塊
  //牌組
  let arr = [];
  //生成牌的函數(shù)
  poker();
  //打亂后的拆開后的牌組
  let [zhangsan, wangwu, lisi, d] = create();
  //打印輸出
  console.log(zhangsan);
  console.log(wangwu);
  console.log(lisi);
  console.log(d);
  //生成一副牌
  function poker() {
  for (let n = 0; n < number.length; n++) {
  for (let j = 0; j < flower.length; j++) {
  arr.push({ name: flower[j] + number[n]})
  }
  }
  arr.push({ name: "小王" }, { name: "大王" })
  }
  //生成一個(gè)隨機(jī)數(shù)
  function random(min, max) {
  if (max == undefined) {
  max = min;
  min = 0;
  }
  if (min > max) {
  [min, max] = [max, min];
  }
  let number = parseInt(Math.random() * (max - min + 1) + min)
  return number;
  }
  //打亂
  function create() {
  let a = new Set();
  while (a.size < 54) {
  a.add(random(0, 53));
  }
  let arrindex = [...a];
  arr = arrindex.map(item => arr[item]);
  let zhangsan = arr.slice(0, 17);
  let wangwu = arr.slice(17, 34);
  let lisi = arr.slice(34, 51);
  let d = arr.slice(51);
  return [zhangsan, wangwu, lisi, d];
  }

  詳解:可以隨機(jī)54張牌,這里就是不重復(fù)的下標(biāo)需要用到 Set 來曬重,但我們知道需要隨機(jī)機(jī)數(shù)的時(shí)候需要主要辨別。那就要用到map map的用意:通過指定函數(shù)處理數(shù)組(遍歷數(shù)組)的每個(gè)元素,并操作數(shù)組的元素或者下標(biāo),并返回處理后的數(shù)組。 下標(biāo),我們可以用 arr 里面的元素進(jìn)行找到,然后并將進(jìn)行返回出來,然后再使用 slice slice的用意:用于把數(shù)組中的字符串元素轉(zhuǎn)換成數(shù)字?jǐn)?shù)組,元素是通過指定的分隔符進(jìn)行分隔的。進(jìn)行一個(gè)返回接收 我們知道 zhangsan、wangwu、lisi 是有 17 張牌的 而底牌只有三張可以得到手牌。并將函數(shù)里面的內(nèi)容返回出去進(jìn)行一個(gè)接收輸出。

  輸出效果圖:

  在到最后我們需要一個(gè)排序。當(dāng) 3 和 3 比肯定是沒有辦法比的是不是?我們首先會對牌定義花色,再去對比數(shù)組。那我們要寫一個(gè)函數(shù)進(jìn)行一個(gè)排序。排序需要用到 sort sort的用意:對數(shù)組的元素進(jìn)行排序,不是真實(shí)按照數(shù)字排列去排序的,按照字符進(jìn)行一個(gè)比較。當(dāng)需要比較數(shù)字需要重寫。例如sort((a,b)=> a-b)升序 sort((a,b)=> b-a) 降序! 在生成牌組里面需要添加 花色的大小 和 數(shù)字 的大小 ,最后進(jìn)行一些列的優(yōu)化代碼如下:

  語法:

  const number = ['3', '4', '5', '6', '7', '8', '9', '10', "J", "Q", "K", "A", '2'];
  const flower = ["??", "??", "??", "??"]; // 黑桃 < 紅心 < 梅花 < 方塊
  let arr = [];
  poker();
  let [zhangsan, wangwu, lisi, d] = create();
  sort(zhangsan);
  sort(wangwu);
  sort(lisi);
  sort(d);
  console.log("張三:",zhangsan);
  console.log("王五:",wangwu);
  console.log("王五:",lisi);
  console.log("底牌:",d);
  //排序
  function sort(arr) {
  arr.sort((a,b)=>{if (a.number == b.number) {</p>
  <p>
  return a.flower - b.flower;</p>
  <p>
  }else{
  return a.number - b.number;
  }})
  }
  //生成一個(gè)隨機(jī)數(shù)
  function random(min, max) {
  if (max == undefined) {
  max = min;
  min = 0;
  }
  if (min > max) {
  [min, max] = [max, min];
  }
  let number = parseInt(Math.random() * (max - min + 1) + min)
  return number;
  }
  //打亂
  function create() {
  let a = new Set();
  while (a.size < 54) {
  a.add(random(0, 53));
  }
  let arrindex = [...a];
  arr = arrindex.map(item => arr[item]);
  let zhangsan = arr.slice(0, 17);
  let wangwu = arr.slice(17, 34);
  let lisi = arr.slice(34, 51);
  let d = arr.slice(51);
  return [zhangsan, wangwu, lisi, d];
  }
  //生成一副牌
  function poker() {
  for (let n = 0; n < number.length; n++) {
  for (let j = 0; j < flower.length; j++) {
  arr.push({ name: flower[j] + number[n],flower:j,number:n})
  }
  }
  arr.push({ name: "小王" ,number:53}, { name: "大王" ,number:54})
  }

  請關(guān)注我們其它相關(guān)文章!

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/127822.html

相關(guān)文章

  • 從零到一,擼一個(gè)在線斗地主(上篇)

    摘要:原文從零到一,擼一個(gè)在線斗地主上篇作者背景朋友來深圳玩,若說到在深圳有什么好玩的,那當(dāng)然是宅在家里斗地主了可是天算不如人算,撲克牌丟了幾張不全大熱天的,誰愿意出去買牌啊。 原文:從零到一,擼一個(gè)在線斗地主(上篇) | AlloyTeam作者:TAT.vorshen 背景:朋友來深圳玩,若說到在深圳有什么好玩的,那當(dāng)然是宅在家里斗地主了!可是天算不如人算,撲克牌丟了幾張不全……大熱天的,...

    raoyi 評論0 收藏0
  • 基于狀態(tài)機(jī)模型斗地主游戲(NodeJs&SocketIO)

    摘要:系統(tǒng)結(jié)構(gòu)系統(tǒng)考慮使用和實(shí)現(xiàn)服務(wù)器端邏輯,前端使用。邏輯流程主要邏輯包括用戶進(jìn)入游戲等待對家進(jìn)入游戲游戲過程結(jié)束統(tǒng)計(jì)這個(gè)過程。 1. 系統(tǒng)結(jié)構(gòu) 系統(tǒng)考慮使用Nodejs和SocketIo實(shí)現(xiàn)服務(wù)器端邏輯,前端使用HTML5。showImg(https://segmentfault.com/img/remote/1460000007643089); 2. 邏輯流程 1 . 主要邏輯包括用戶...

    NoraXie 評論0 收藏0
  • 基于狀態(tài)機(jī)模型斗地主游戲(NodeJs&SocketIO)

    摘要:系統(tǒng)結(jié)構(gòu)系統(tǒng)考慮使用和實(shí)現(xiàn)服務(wù)器端邏輯,前端使用。邏輯流程主要邏輯包括用戶進(jìn)入游戲等待對家進(jìn)入游戲游戲過程結(jié)束統(tǒng)計(jì)這個(gè)過程。 1. 系統(tǒng)結(jié)構(gòu) 系統(tǒng)考慮使用Nodejs和SocketIo實(shí)現(xiàn)服務(wù)器端邏輯,前端使用HTML5。showImg(https://segmentfault.com/img/remote/1460000007643089); 2. 邏輯流程 1 . 主要邏輯包括用戶...

    xcold 評論0 收藏0
  • 從零到一,擼一個(gè)在線斗地主(下篇)

    摘要:原文從零到一,擼一個(gè)在線斗地主下篇作者上篇回顧我們說了斗地主游戲的渲染展示部分,最后也講了下中交互的情況,下篇的重點(diǎn)就是游戲邏輯。 原文:從零到一,擼一個(gè)在線斗地主(下篇) | AlloyTeam作者:TAT.vorshen 上篇回顧:我們說了斗地主游戲的渲染展示部分,最后也講了下canvas中交互的情況,下篇的重點(diǎn)就是游戲邏輯。 邏輯主要分成兩塊:流程邏輯和撲克牌對比邏輯。 gith...

    CloudDeveloper 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<