微信小程序| 做一款多人实时线上的五指棋联机游戏

news2024/9/22 19:38:05

📌个人主页:个人主页
​🧀 推荐专栏:小程序开发成神之路 --【这是一个为想要入门和进阶小程序开发专门开启的精品专栏!从个人到商业的全套开发教程,实打实的干货分享,确定不来看看? 😻😻】
📝作者简介从web开发,再到大数据算法,踩过了无数的坑,用心总结经验教训,助你在技术生涯一臂之力!若想获取更多精彩内容,敬请订阅专栏或者关注😁😂🤣😃😆😉😊😋😍😘🥰
⭐️您的小小关注是我持续输出的动力!⭐️


干货内容推荐

🥇入门和进阶小程序开发,不可错误的精彩内容🥇 :

  • 《小程序开发必备功能的吐血整理【个人中心界面样式大全】》
  • 《微信小程序 | 动手实现双十一红包雨》
  • 《微信小程序 | 人脸识别的最终解决方案》
  • 《来接私活吧?小程序接私活必备功能-婚恋交友【附完整代码】》
  • 《吐血整理的几十款小程序登陆界面【附完整代码】》

文章目录

  • 干货内容推荐
    • 一 、效果预览
    • 二、需求背景
    • 三、技术栈介绍
    • 四、搭建教程
    • 五、关键技术点
    • 六、完整源码


一 、效果预览

在这里插入图片描述


二、需求背景

对于五指棋游戏而言,其已经没有任何的技术新鲜度了!网络上各类的源码比比皆是,有java版、c#版、unity版、h5版等等。

尽管五指棋的内容如此之丰富,但是美中不足的是,这些资源都有一个弊端他们都是单机版,纯属于自嗨版本!

再者,进一步说有有的版本甚至配备了人工智能模拟阿法狗陪你下棋,让你有一种征服世界的感觉!还有就是自己搭建游戏通信服务器,通过定义复杂的socket通信服务器实现了多人联机游戏。这种种形式,大佬们可能会直呼内涵了!但是对于刚入手开发五指棋游戏或者多人联机通信功能的伙伴来说,上手可能性基本为零!

为此,本文基于最容易上手的技术,搭建了一套可以多人联机游戏的五指棋游戏,让大家每个人都能享受到游戏的乐趣!相信我,从中你可能能学到很多!


三、技术栈介绍

前端页面HTML+vue 2.0
前端框架uni-app (可以打包成任意小程序或者app源码)
游戏通信框架Go-Easy

四、搭建教程

  • 4.1 申请Go-Easy 的 AppId
    • (1) 访问并注册Go-Easy官网 Go-Easy管理平台地址
    • (2) 进入到控制台并穿件相应的应用
      在这里插入图片描述
  • (3) 获取并拷贝相应的AppID

  • 配置AppId到mail.js
    获取本文所配备源码,并导入到HBilder中打开,将刚才获取到的AppID粘贴到main.js文件中即可!
    在这里插入图片描述

  • 使用Builder打包或启动项目
    在这里插入图片描述


五、关键技术点

  • 绘制五指棋棋盘和棋子
    绘制五指棋的内容我们可以通过html中的Carvas技术来实现:
// ==== 五指棋控制逻辑  ===
			drawLine() {
				let s = uni.upx2px(730);
				let dis = Math.floor(s / 15);
				let w = dis * 14;
				for (let i = 1; i <= 14; i++) {
					this.game.ctx.moveTo(i * dis + 0.5, w);
					this.game.ctx.lineTo(i * dis + 0.5, dis);
					this.game.ctx.moveTo(dis, i * dis + 0.5);
					this.game.ctx.lineTo(w, i * dis + 0.5);
					this.game.ctx.setStrokeStyle('#a5aa6b');
					this.game.ctx.stroke();
				}
				this.game.ctx.draw();
				for (let i = 0; i <= 13; i++) {
					this.game.chess_Board[i] = [];
					this.game.lianz[i] = [];
					for (let j = 0; j <= 13; j++) {
						this.game.chess_Board[i][j] = 0;
						this.game.lianz[i][j] = 0;
					}
				}
			},
  • 实现落棋动作的实时同步
    要实现下棋点击事件的同步,我们借助于websocket的消息发布-订阅模式。在下棋时一方面发送事件,一方面又同时监听对方的下棋动作。
// 监听新消息
			listenNewMessage(){
				// 监听当前聊天室的消息
				let self = this;
				let roomId = this.currentRoom.roomId;
				pubSub.subscribe({
					channel: roomId,
					onMessage : function (message) {
						let messageContent = "";
						let content = JSON.parse(message.content);
						//聊天消息
						if(content.type === self.MessageType.CHAT) {
							messageContent = content.content;
						}
						//道具消息
						if(content.type === self.MessageType.PROP) {
							if (content.content === self.Prop.ROCKET) {
								messageContent = "送出了一枚大火箭";
							}
							if (content.content === self.Prop.HEART) {
								messageContent = "送出了一个大大的比心";
							}
						}
						
						 console.log("监听消息成功==",content)
						if(content.type === self.MessageType.CHESS){
														
							self.canvasClick(content.body,content.chessRole)
							self.userInfo.roundFlag = true
						}
						//添加消息
						let newMessage = {
							content: messageContent,
							senderUserId: content.senderUserId,
							senderNickname: content.senderNickname,
							type: self.MessageType.CHAT
						};
						self.currentRoom.messages.push(newMessage);
						if (content.type === self.MessageType.PROP) {
							self.propAnimation(parseInt(content.content))
						}
						self.scrollToBottom();
					},
					onSuccess : function () {
					  console.log("监听新消息成功")
					},
					onFailed : function(error) {
						console.log("订阅消息失败, code:"+error.code+ ",错误信息:"+error.content);
					}
				})
			},

sendMessage(messageType, content) {
				//发送消息
				if (content === "" && messageType === this.MessageType.CHAT) {
					return;
				}
				var message = {
					senderNickname: this.currentRoom.currentUser.nickname,
					senderUserId: this.currentRoom.currentUser.id,
					type: messageType,
					content: content
				};
				
				if(messageType === this.MessageType.CHESS){
					this.chessMassage.body = content
					this.chessMassage.chessRole = this.userInfo.chessRole
					let userNum=this.currentRoom.onlineUsers.users.length
					
					message = {
						senderNickname: this.currentRoom.currentUser.nickname,
						senderUserId: this.currentRoom.currentUser.id,
						type: messageType,
						body:content,
						playerA:'',
						playerB:'',
						chessRole:this.userInfo.chessRole,
						mode:1,
						userNum:userNum
					}
				}
				console.log("发送==",message);
				pubSub.publish({
					channel : this.currentRoom.roomId,
					message : JSON.stringify(message),
					onSuccess : function () {
						console.log("发送成功");
					},
					onFailed : function (error) {
						console.log("消息发送失败,错误编码:" + error.code + " 错误信息:" + error.content);
					}
				});
				this.newMessageContent = "";
			},

六、完整源码

需要项目源码的小伙伴请自取(项目的运行步骤请根据教程一起食用,有任何疑惑欢迎随时私信!😁):项目完整源码地址【基于小程序的多人联机五指棋游戏实现完整源码】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/57668.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计新能源汽车租赁Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]计算机毕业设计疫情物资管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

微信支付商户平台-配置密钥/API安全教程

我们在做小程序获取微信开发时&#xff0c;难免会用到微信支付&#xff0c;我们做微信支付时&#xff0c;商户id和密匙是必不可少的。商户id很容易就能获取到。但是这个密匙的配置就相对而言麻烦了一点。今天就来教大家如何配置位置支付的密匙。 先我们要去注册微信支付的账号…

Lattice库联合ModelSim仿真FIFO

Lattice联合ModelSim仿真FIFO前言一、添加IP二、库文件添加&#xff08;一&#xff09;方式一&#xff1a;添加器件库到ModelSim&#xff08;二&#xff09;方法二&#xff1a;直接添加器件库到Libray,和tb.v在同一个目录下仿真三、仿真&#xff08;一&#xff09;仿真文件&…

JAVA社区疫情防控系统毕业设计,社区疫情防控管理系统设计与实现,毕设作品参考

功能清单 【后台管理员功能】 关于我们设置&#xff1a;设置学校简介、联系我们、加入我们、法律声明、学校详情 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支持删除 会员列表&#xff1a;查看所有注册会员信…

b站黑马JavaScript的Ajax案例代码——新闻列表案例

目录 目标效果&#xff1a; 重点原理&#xff1a; 1.js中art-template标准语法的循环输出 2.js中split方法——转换字符串为数组 3.js中art-template标准语法的过滤器 4.js中Date内置对象——getFullYear() 5.js中Date内置对象——getMonth() 6.js中Date内置对象——ge…

简单认识一下HotSpot 垃圾收集器

前言 HotSpot 虚拟机提供了多种垃圾收集器&#xff0c;每种收集器都有各自的特点&#xff0c;虽然我们要对各个收集器进行比较&#xff0c;但并非为了挑选出一个最好的收集器。我们选择的只是对具体应用最合适的收集器。 新生代垃圾收集器 Serial 垃圾收集器&#xff08;单线…

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver解决方案

&#x1f31f;问题解析 首先&#xff0c;此报错会出现在两种情况&#xff0c;并且有各自的解决方法。 如果在Java程序中报错&#xff0c;那么我们就参考方法1&#xff08;单Java程序&#xff09;&#xff1a; 如果你是在Tomcat中报错&#xff0c;那么我们可以参考方法2&#…

[附源码]JAVA毕业设计交通事故档案管理系统(系统+LW)

[附源码]JAVA毕业设计交通事故档案管理系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目…

微信小程序实现微信支付的相关操作设置

本文不涉及相关API的实现&#xff0c;旨在记录实现微信支付需要在微信公众平台和微信支付的商户平台需要进行的操作。 1.首先需要用户申请了微信小程序和入驻微信商户平台 2.获取小程序的appid 设置AppSecre小程序密钥 3.微信支付获取商户号&#xff0c;在认证的时候设置操…

基于JavaSwing的员工工资管理系统

开发环境 eclipsejdk1.8mysql5.7 系统简介 本项目是主要功能有员工信息管理&#xff0c;部门信息管理&#xff0c;员工工资设定&#xff0c;系统设置等&#xff0c;员工不需要登录系统&#xff0c;可以直接查询自己的工资&#xff0c;具体项目操作及项目结构请看演示视频&am…

架构解析:Dubbo3 应用级服务发现如何应对双 11 百万集群实例

继业务全面上云后&#xff0c;今年双 11&#xff0c;阿里微服务技术栈全面迁移到以 Dubbo3 为代表的云上开源标准中间件体系。在业务上&#xff0c;基于 Dubbo3 首次实现了关键业务不停推、不降级的全面用户体验提升&#xff0c;从技术上&#xff0c;大幅提高研发与运维效率的同…

【POJ No. 1019】数字序列 Number Sequence

【POJ No. 1019】数字序列 Number Sequence 北大OJ 题目地址 【题意】 给出单个正整数i &#xff0c;编写程序以找到位于数字组S 1 , S 2 , …, Sk 序列中第i 位上的数字。每个组Sk 都由一系列正整数组成&#xff0c;范围为1&#xff5e;k &#xff0c;一个接一个地写入。 序…

Sass扫码点餐源码 单门店多门店餐饮连锁扫码点餐外卖自提系统源码

智慧餐厅扫码点餐小程序系统源码 1. 开发语言&#xff1a;JAVA 2. 数据库&#xff1a;MySQL 3. 原生小程序 4. Sass 模式 5. 带调试视频 本套扫码点餐小程序系统支持多店铺&#xff0c;支持外卖&#xff0c;堂食&#xff0c;扫码点餐、预约桌号、订单语音提醒、会员营销、…

viewport视口的概念

viewport视口的概念 概念详见 MDN&#xff0c;我摘出来对比了下&#xff0c;如下图&#xff1a; 总结&#xff1a; viewport就是当前窗口的可视部分Visual Viewport 视觉视口 就是视口viewport中的可见部分 比如在mobile浏览器中&#xff0c;输入时&#xff0c;弹出的键盘&am…

屏幕开发学习 -- 迪文串口屏

一 前言 最近学习了一款基于图形化开发的屏幕&#xff0c;在摸索一周后&#xff0c;基本熟悉了这款产品的一个开发过程&#xff0c;今天给大家分享一下迪文串口屏和STM32如何建立通讯&#xff0c;有不足之处&#xff0c;还请见谅&#x1f601; 二 迪文屏介绍 1.选型 我用到的…

Ubuntu 20.04 安装NVIDIA显卡驱动+cuda 11.7+cudnn

Ubuntu 18.04 安装NVIDIA显卡驱动cuda 10.2cudnn本机环境1 相关查询命令一、Ubuntu 18.04 安装NVIDIA显卡驱动1、查看本机显卡能够配置的驱动信息2、安装显卡驱动3、测试nvidia driver是否安装成功二、Ubuntu 20.04 安装cuda 11.71、安装显卡驱动检查2、安装CUDA10.23、配置CUD…

了解世界杯赔率,让您运气更‘好‘(个人分享)

足球世界杯买球赢面计算前言理论基础实际计算用例&#xff1a;代码实现真实数据前言 此文是个人关于世界杯的一些浅显的看法&#xff0c;实际统计结果和计算方法有出入&#xff0c;可能原因&#xff1a;1&#xff09;数据量不够。2&#xff09;比赛双方差距够大导致的。但在双…

前端如何实现网页变灰功能?

今天来从前端的角度看看网页置灰是如何实现的&#xff0c;以及相关使用技巧&#xff01; 实现思路 先来看看一些主流网站是如何实现置灰的&#xff1a; BiliBili&#xff1a;淘宝&#xff1a;京东&#xff1a;掘金&#xff1a;可以看到&#xff0c;这些网站实现置灰的方式都…

计算机网络学习笔记(Ⅰ):计算机网络体系结构

目录 1 概述 1.1 基础概念 1.计算机网络 2.功能 3.组成 4.分类 1.2 标准化工作及相关组织 1.标准化工作 2.相关组织 1.3 性能指标 1.速率 2.带宽 3.吞吐量 4.时延 5.时延带宽积 6.往返时延RTT 7.利用率 2 计算机网络结构 2.1 分层结构 1.分层原则 2.分层结…