一、准备工作

1. 安装微信开发者工具,并登录微信小程序账号;

2. 准备斗地主游戏的图片资源;

3. 准备斗地主游戏的音效资源;

二、创建小程序

1. 打开微信开发者工具,点击“新建小程序”,输入小程序名称,选择小程序的项目目录,点击“创建”;

2. 在小程序的项目目录中,新建文件夹“images”,将准备好的斗地主游戏的图片资源放入“images”文件夹中;

3. 在小程序的项目目录中,新建文件夹“sounds”,将准备好的斗地主游戏的音效资源放入“sounds”文件夹中;

三、编写代码

1. 在小程序的项目目录中,新建文件“game.js”,编写斗地主游戏的逻辑代码;

// game.js

// 定义游戏状态
const GAME_STATE = {
WAITING: 0, // 等待状态
PLAYING: 1, // 游戏中状态
END: 2 // 游戏结束状态
};

// 定义游戏类
class Game {
constructor() {
this.state = GAME_STATE.WAITING; // 初始化游戏状态
this.players = []; // 玩家列表
this.cards = []; // 扑克牌
this.landlordCards = []; // 地主牌
}

// 开始游戏
start() {
// 初始化游戏状态
this.state = GAME_STATE.PLAYING;
// 初始化玩家
this.players = [
new Player('张三'),
new Player('李四'),
new Player('王五')
];
// 初始化扑克牌
this.cards = this.initCards();
// 发牌
this.dealCards();
// 叫地主
this.callLandlord();
// 发地主牌
this.dealLandlordCards();
// 开始游戏
this.play();
}

// 初始化扑克牌
initCards() {
let cards = [];
// 生成54张扑克牌
for (let i = 0; i < 54; i++) {
cards.push(new Card(i));
}
// 打乱牌顺序
cards.sort(() => Math.random() - 0.5);
return cards;
}

// 发牌
dealCards() {
// 每人发17张牌
for (let i = 0; i < 17; i++) {
for (let j = 0; j < 3; j++) {
this.players[j].cards.push(this.cards.pop());
}
}
}

// 叫地主
callLandlord() {
// 玩家叫地主
for (let i = 0; i < 3; i++) {
let player = this.players[i];
let isCall = player.callLandlord();
if (isCall) {
// 叫地主成功,设置地主
this.landlord = player;
break;
}
}
}

// 发地主牌
dealLandlordCards() {
// 将剩余的牌发给地主
this.landlord.cards = this.landlord.cards.concat(this.cards);
// 将地主牌排序
this.landlord.cards.sort((a, b) => a.value - b.value);
// 记录地主牌
this.landlordCards = this.landlord.cards;
}

// 开始游戏
play() {
// 玩家出牌
for (let i = 0; i < 3; i++) {
let player = this.players[i];
let card = player.play();
console.log(`${player.name}出牌:${card.name}`);
}
// 游戏结束
this.state = GAME_STATE.END;
}
}

// 定义玩家类
class Player {
constructor(name) {
this.name = name; // 玩家名称
this.cards = []; // 玩家手牌
}

// 叫地主
callLandlord() {
// 随机叫地主
let isCall = Math.random() > 0.5;
console.log(`${this.name}${isCall ? '叫' : '不叫'}地主`);
return isCall;
}

// 出牌
play() {
// 随机出牌
let card = this.cards[Math.floor(Math.random() * this.cards.length)];
// 从手牌中移除出的牌
this.cards.splice(this.cards.indexOf(card), 1);
return card;
}
}

// 定义扑克牌类
class Card {
constructor(id) {
this.id = id; // 牌的id
this.name = this.getNameById(id); // 牌的名称
this.value = this.getValueById(id); // 牌的大小
}

// 根据id获取牌的名称
getNameById(id) {
let type = Math.floor(id / 13);
let number = id %!;(MISSING)
let types = ['黑桃', '红桃', '梅花', '方块'];
let numbers = ['A', '2', '3', '4','5', '6', '7','8', '9', '10','J', 'Q', 'K']

微信小程序斗地主完整代码及步骤相关推荐

  1. 微信小程序星星评分代码片段(含半星)

    微信小程序星星评分代码片段(含半星) 代码思路 完整代码 代码片段 图片资源 写代码时需要一个点击星星评分的功能 安卓直接用RatingBar非常轻松的解决了 到了小程序,没有现成的封装方法可以用了, ...

  2. 石头剪刀布php源码,微信小程序 石头剪刀布实例代码

    搜索热词 微信小程序 石头剪刀布 昨天看有个石头剪刀布的练习,就拿出来做了一下,布局的代码浪费了很多时间,果然CSS这块的还不是很熟练,下面直接上图上代码了. .js: //获取数组中用户的,石头剪刀 ...

  3. 微信小程序—微信小程序端支付代码

    只有微信小程序端的代码,如下 Page({data: {},onLoad: function (options) {// 页面初始化 options为页面跳转所带来的参数var that = this ...

  4. 微信小程序-登录-页面-代码-实现-峯-推荐

    学习目标 1.掌握 JAVA入门到进阶知识(持续写作中--) 2.学会Oracle数据库用法(创作中--) 3.手把手教你vbs脚本制作(完善中--) 4.强大的 IDEA编程利器(编写中--) 5. ...

  5. uniapp开发的微信小程序如何上传至微信小程序平台-完整简单步骤

    一.选中代码进行发行 二.填入微信小程序appid在hbuilderx中点发行 这个id请登录微信小程序号   设置中查看 三.进入微信小程序工具点上传 成功上传. 四.遇到资源超过2M报错 mess ...

  6. 爬去微信小程序服务器代码,Python爬取微信小程序通用方法代码实例详解

    背景介绍 最近遇到一个需求,大致就是要获取某个小程序上的数据.心想小程序本质上就是移动端加壳的浏览器,所以想到用Python去获取数据.在网上学习了一下如何实现后,记录一下我的实现过程以及所踩过的小坑 ...

  7. 从微信小程序看前端代码安全

    原文链接:https://share.whuboy.com/weapp.html 感觉写的很好,学习了,转载保存. 起初在研究对移动网络传输进行功耗优化,在一次意外的监听网络传输包中截获了微信小程序的 ...

  8. 600多个微信小程序源码_点餐系统的开发,java后台+微信小程序 实现完整的餐厅点餐系统。微信扫码点餐小程序源码讲解...

    今天来给大家讲解一个完整的微信扫码点餐项目.java后台+微信小程序实现点餐系统. 后台技术选型: JDK8 MySQL(需要5.6以上) Spring-boot Spring-data-jpa Lo ...

  9. 微信小程序网络请求代码片段

    在微信小程序根目录建立/static/js/lsk.js.输入以下代码 function dopost(api,params,callback){var webhost="http://ne ...

最新文章

  1. Python 从入门到精通:一个月就够了?真的能行嘛?
  2. 如何创建高性能、可扩展的Node.js应用?
  3. hdu 2191 多重背包
  4. Windons Server2008R2_向域中批量创建用户
  5. 【word2vec】篇三:基于Negative Sampling 的 CBOW 模型和 Skip-gram 模型
  6. Java集合从菜鸟到大神演变
  7. Linux磁盘及文件系统(二)Linux下磁盘命名和分区
  8. 按clear按钮清空两个文本框的内容,按copy按钮时将Source文本框的内容复制到Target文本框,按close按钮结束程序的运行
  9. 视频+案例,玩转LightGBM
  10. java生成可执行文件_关于打包java文件并生成可执行文件的问题
  11. meltdown漏洞解释_“ Meltdown” CPU漏洞的简化解释
  12. The import com. cannot be resolved
  13. VSCode换行快捷方式及键盘快捷键重置
  14. Oracle数据库学习教程
  15. 推荐个免费ppt模板下载网站
  16. c语言月份判断季节 switch,C语言编程基础(7页)-原创力文档
  17. Page size must not be less than onePage 1 of 1 containing UNKNOWN instances
  18. java 多线程 map_多线程Map并发读后修改
  19. 修改centos终端提示符背景色
  20. 推荐系统实践读书笔记

热门文章

  1. X5跨端移动开发框架开源项目简介
  2. TCP粘包,拆包及解决方法、丢包的原因及解决办法
  3. 25个即将上线Coming soon网页创意设计
  4. NAT ALG技术白皮书
  5. 【R生态】普鲁克分析(Procrustes Analysis)
  6. CSDN大会后参观微软亚洲研究院
  7. 无参考图像质量评价之可察觉模糊程度方法(JNB)
  8. R语言近期记录(201911)
  9. 什么是vps?vps和代理ip的本质区别?
  10. 亚马逊六页纸的理解与思考