CocosCreator实现UNO纸牌游戏

摘要

模仿4399小游戏UNO颜色纸牌,通过typescript语言开发,代码注释较多,适合学习。
游戏已打包为App,可以通过 百度网盘 提取码:9i4j 进行下载,源代码以上传cocos商店,希望感兴趣的小伙伴能够支持一下~~

正文

使用版本

CocosCreator2.4.5

游戏演示



玩法说明

UNO纸牌已经风靡全球数十年,被誉为是世界上最好玩的纸牌游戏,据说由意大利一个理发师发明,简单易学,版本众多,被加入许多新的功能,玩法更加刺激,而在此游戏中最考的是集中和反应,还有相互间的思维较量。 每副uno牌包括:108张牌和一张说明书(108 张纸牌中包括80张数字牌,28张特殊牌)。Uno由红黄蓝绿4种颜色,每种色牌有0~9号牌各两张,各种颜色还各有6张普通功能牌(“draw 2(加两张)”、“skip(跳过下家)”、“reverse(逆转方向)”各两张。 首先,每人发8张牌,胜利条件是谁的牌首先出完;可以出与上家颜色相同或数字相同的牌,或者wild牌。然后,可以出draw 2(+2) 或draw 4(+4)来陷害下家,让下家摸牌,下家可以出相应的牌来转移或累加要摸的牌,直到最后被陷害的玩家没有更大的牌时,就要摸相应的数量的牌,这样总有人要摸很多牌。然后,玩家在打完倒数第二张牌时要喊UNO(剩一张),捉住其他玩家忘了喊剩一张而罚他摸两张也是游戏的乐趣之一 每副游戏牌共有108张卡牌,游戏牌分四种颜色:红色、绿色、蓝色及黄色,每种颜色各有25张牌(合共100张),其中20张为数字牌(0-9有两张),其余6张(24张)为功能牌:“skip”(跳牌)、“draw two”(罚牌2张)及"reverse"(反转出牌方向),每种各2张。另有黑色特别牌2张:“wild”(转色)及"wild draw four"(转色及罚牌2张),每种各2张。

架构说明

游戏采用MVC架构,通过事件派发实现解耦合,通过controller层管理数据层和视图层,数据层关联卡牌数据,通过事件派发的形式进行视图层渲染,实现游戏的逻辑控制。其中prefab的渲染,控件的操作和脚本的绑定不依赖拖拽的方式,而是通过代码实现,尽量减少编辑器与游戏的耦合。

代码说明

  • View基类,所有视图相关的脚本都基于View类,通过show_ui_at方法加载prefab预制体并挂载对应的脚本,load_all_object方法获取视图的全部子节点,方便通过代码的方式来对node节点进行操作。
import OnEventMode from "./OnEventMode";
const { ccclass, property } = cc._decorator;@ccclass
export default class View extends OnEventMode {// 展示对应的UI(Prefab)protected show_ui_at(parent: cc.Node, ui_name: string, target?: any, isAnimation?: boolean, callbackEvent?: string, ...args: any) {let location = 'panel'let name = ui_nameif (isAnimation) {location = 'animations'name = 'UIAnimation'}cc.resources.load(`/prefab/${location}/${ui_name}`, cc.Prefab, (err, prefab) => {if (err) {console.warn(err)} else {let node = cc.instantiate(prefab as cc.Prefab)node.parent = parentnode.addComponent(name)if (target) node.getComponent(name).init(target, ...args)if (callbackEvent) {this.emit(callbackEvent, node)}}})}//    加载UI面板的全部childrenprotected load_all_object(root: cc.Node, path: string) {let view = {}view = this.loadObj(root, path, view)return view}private loadObj(root: cc.Node, path: string, view: any): any {let result = viewfor (let i = 0; i < root.childrenCount; i++) {view[path + root.children[i].name] = root.children[i]this.loadObj(root.children[i], path + root.children[i].name + '/', result)}return result}
}
  • GameEventListen类,继承cc.EventTarget,通过单例的方式用于事件派发。
const { ccclass, property } = cc._decorator;@ccclass
//继承cc.EventTarget,事件派发基类
export default class GameEventListen extends cc.EventTarget {private static _event: GameEventListen = nullpublic static ins() {if (!this._event) {this._event = new GameEventListen()}return this._event}
}
  • GameEventListen 类,重新封装了派发事件,方便子类继承与实现。
import GameEventListen from "./GameEventListen";const {ccclass, property} = cc._decorator;@ccclass
export default class OnEventMode extends cc.Component {protected on(type:string,callback:Function,target?:any,useCapture?:boolean){GameEventListen.ins().on(type,callback,target,useCapture)}protected emit(type:string,...args:any){GameEventListen.ins().emit(type,...args)}protected off(type:string,callback:Function,target?:any){GameEventListen.ins().off(type,callback,target)}
}

代码部分暂时展示到这,展示了主要的基类,而关于游戏逻辑部分的model层和view层,因为代码量较多,就不一一展示说明了,可以先去4399小游戏试玩下原版游戏,也可以通过app下载本游戏 (提取码:9i4j)进行试玩,感兴趣的小伙伴希望能够下载支持一下~~

CocosCreator实现UNO纸牌游戏相关推荐

  1. uno牌的玩法图解_UNO优诺纸牌游戏玩法详解 这些经验不可多得

    UNO纸牌已经风靡全球数十年,被誉为是世界上最好玩的纸牌游戏,特点是简单易学,不用动什么脑筋,适合各年龄层人士玩.而在此游戏中最考验的是集中和反应,还有相互间的思维较量. 玩法规则 01 UNO游戏的 ...

  2. UNO纸牌(信息安全算法设计实验)

    信息安全算法设计实验之一,只具有UNO纸牌的部分规则功能 //#include "stdafx.h" #include<iostream> #include<ve ...

  3. phaser.min.js_如何使用Phaser 3,Express和Socket.IO构建多人纸牌游戏

    phaser.min.js I'm a tabletop game developer, and am continually looking for ways to digitize game ex ...

  4. Facebook成功打破纸牌游戏Hanabi的AI系统得分纪录

    据外媒Venture Beat报道,Facebook人工智能研究院(Facebook AI Research,FAIR)称,他们推出了一个与纸牌游戏Hanabi相关的最新AI项目.AI系统的得分是24 ...

  5. 用计算机玩纸牌,《玩“纸牌”游戏》教学设计

    [教学目标] 知识目标:1.进一步认识窗口.对话框和菜单命令. 2.让学生掌握纸牌游戏的玩法,使学生从玩中学计算机知识. 3.使学生熟练掌握鼠标器的操作方法. 4.初步使用"帮助" ...

  6. NYOJ 614 纸牌游戏

    纸牌游戏 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 设2n张牌分别标记为1,2,-,n,n+l,-,2n,初始时这2n张牌按其标号从小到大排列. 经一次洗牌后,原来 ...

  7. NYOJ 721 纸牌游戏 简单题

    纸牌游戏CF 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 玩家1和玩家2各出一张牌,看谁大.如果两张牌都不是王牌花色或则都是王牌花色,则牌面大的牌大,如果牌面一样大则 ...

  8. java简单纸牌游戏_2020年最佳2人棋盘游戏:拼凑,Kingdomino等

    假期呆在房子里?这些是打发时间的完美游戏. 由于持续不断的 危机,今年的假期可能看起来要安静 得多.但是安静不一定意味着坏.我们中的大多数人都将放弃大型聚会,如果您要在家中聚会,那么 棋盘游戏 是打发 ...

  9. creator 跳跃弧线_(转)CocosCreator零基础制作游戏《极限跳跃》四、添加游戏主场景控制脚本...

    CocosCreator零基础制作游戏<极限跳跃>四.添加游戏主场景控制脚本 前面简单的实现了主界面的UI设置,现在我们开始制作游戏的控制脚本. 在资源管理器的Script文件夹中,点击右 ...

最新文章

  1. 2020 年最具潜力 44 个顶级开源项目,涵盖 11 类 AI 学习框架、平台(值得收藏)
  2. android_通过高级应用程序开发策略在Android中进行用户参与
  3. MS Vs.net 2003 Sp1发布!
  4. [20160223]检查redo日志的完整性.txt
  5. Linux操作系统六大优点
  6. Linux以及各大发行版介绍
  7. 关于数据库中的锁,你不知道的是...
  8. 服务器mysql_本地如何操作服务器的mysql,详细教程
  9. myeclipse 创建 maven项目的时候出现:invalid project description 解决方法
  10. ET框架——demo与自定义登录
  11. 新唐NUC980使用记录:向内核添加USB无线网卡驱动(基于RTL8188EUS)
  12. oracle 添加表权限不足,oracle 创建表空间报权限不足,引发的问题如下 | 学步园...
  13. cocos creator 学习随笔 day03 节点和组件属性
  14. contiki学习笔记 etimer部分
  15. 完全平方公式、平方差公式、一个数负次方
  16. kafka系列之kafka生产者与分区(3)
  17. Openstack-T 之Nova组件
  18. OpenLayers基础
  19. 国产主流中小型ERP软件选型价格对比
  20. 在PowerBuilder中利用OLE技术调用Excel

热门文章

  1. 乐视要死了,但贾跃亭却活了?
  2. CAD中怎么旋转光标?CAD旋转光标的方法步骤
  3. 打开的html文件不能放大缩小,IE浏览器网页无法缩放怎么办 解决IE浏览器网页无法缩放的方法...
  4. VMware 桥接网卡 VMnet0丢失问题解决办法
  5. 天刀服务器维护开服时间表,天刀8月26日服务器例行维护 师徒系统开放
  6. LOL根据用户段位进行匹配
  7. 第1章 天墉城状元郎,签到系统
  8. Edge浏览器兼容性问题,报错误代码:STATUS_INVALID_IMAGE_HASH的解决方法
  9. python 上传zip文件到服务器
  10. 雷军:我为什么会反击周鸿祎