Unity3D对弈游戏:狼吃羊游戏
简介
中文名:狼与羊
英文名称:Wolves&Sheep
游戏类型:休闲/棋类
玩家人数:单人或双人
游戏描述:童年时与小伙伴常玩的一种游戏,游戏简单易懂而又变化多样。

第一节 游戏规则
棋盘可以用小石头在泥土里上随手就画出来了,棋子中的狼和羊可以用树枝或者小石子代替。
准备
找两块大点的石头当作狼,二十四块小石头是羊
狼和羊必须放置在网格的交叉点上
每个交叉点上最多有一个棋子
开局
两个狼分别放在上下两个脖子上,羊 8 个放在中间一圈的交叉点上,狼先走羊后走交替进行
狼跳过羊就把羊吃掉了,狼只能沿图上的直线跳且只能跳过一个点,不吃羊则只能走一格
羊是先放不能走,每次放一只,羊全部放完才能走,也是每次走一格
胜负
如果狼没地方可走了,羊赢得比赛
狼把羊吃光或羊认输,狼赢得比赛

图1-1 开局
第二节 程序设计
涉及本游戏核心逻辑的类库最先在 WPF 平台上完成编码和测试。
基础功能
棋盘表示:使用合适的数据结构表示棋盘
移动判断:检测用户走棋是否符合移动规则
用户视图:视图显示棋盘和检测用户的输入
对弈模式
人人对弈:支持双人轮流下棋
人机对弈:机器人难度级别可选
对弈功能
提示:由AI给出走棋提示
悔棋:可返回上一步局面
终止:立即终止比赛

图2-1 终止比赛
第三节 AI算法
AI 搜索算法借鉴中国象棋中成熟的深度优先搜索算法。
搜索算法
Alpha-Beta 剪枝
局面生成
基于规则逐步产生
局面评估
棋子基础子力:每个棋子具有一个基础价值
棋子位置估值:评估棋子在不同位置的价值
棋子关系估值:评估棋子间相互作用关系,例如对较多羊造成威胁的狼的价值较高

图3-1 搜索算法调试输出
第四节 Unity3D
使用 VisualStudio 开发的游戏核心逻辑类库可以编译为 DLL 文件,然后在 Unity3D 项目里引用它。
如何引用 .NET 类库
项目属性->应用程序->目标框架,下拉列表中选择 .NET Framework 3.5
成功编译后将输出目录下的文件全部复制到 Unity 项目的 Assets\Plugins 文件夹
Unity3D 将自动完成导入,最后,在 C# 脚本中导入上述类库项目的命名空间即可
若是 VB.NET 项目,需要手动编辑 .vbproj 文件以开启 VBRuntime Embed 编译模式
<PropertyGroup>
<VBRuntime>Embed</VBRuntime>
</PropertyGroup>
通用的游戏脚本
背景音乐:切换场景仍能够连续播放的音乐 点击查看代码
元素缩放:支持用户在游戏内缩放UI元素 点击查看代码
双人联机:支持局域网创建游戏房间进行联机游戏 点击查看代码

图4-1 外部类库项目属性
附录
象棋百科全书:计算机博弈
GitHub(WPF):WolfGame.NET
GitHub(Unity3D):WolfGame.Unity
Unity3D对弈游戏:狼吃羊游戏的更多相关文章
- html+css+js实现狼吃羊小游戏
html+css+js实现狼吃羊小游戏 一.总结 一句话总结:给动的元素下标记,这里表现为将要活动的标签动态增加class,这是一种很好的思想. 1.如何实现棋子走动的时候简单精确定位? 用重构坐标系 ...
- 洛谷P2598 [ZJOI2009]狼和羊的故事
题目描述 “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干! Orez的羊狼圈 ...
- 【Unity3D】Unity3D之 注册表动态存取游戏存档——PlayerPrefs类
[Unity3D]Unity3D之 注册表动态存取游戏存档--PlayerPrefs类 1.Unity3D提供了一个用于本地持久化保存与读取的类--PlayerPrefs.工作原理非常简单,以键值对的 ...
- Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条
Unity3D研究院之异步加载游戏场景与异步加载游戏资源进度条 异步任务相信大家应该不会陌生,那么本章内容MOMO将带领大家学习Unity中的一些异步任务.在同步加载游戏场景的时候通常会使用方法 Ap ...
- Unity 4.2.0 官方最新破解版(Unity3D 最新破解版,3D游戏开发工具和游戏引擎套件)
Unity是一款跨平台的游戏开发工具,从一开始就被设计成易于使用的产品.作为一个完全集成的专业级应用,Unity还包含了价值数百万美元的功能强大的游戏引擎.Unity作为一个游戏开发工具,它的设计主旨 ...
- 基于unity3d和leap motion的拼图游戏
近期用unity3d引擎做了一个拼图游戏,会分几次写完,以此作为总结. 本文基本查找了网上能查到的全部资料作为參考.也算是大家节省了时间. 眼下仅仅完毕了拼图部分,leap motion手势控制部分会 ...
- 为什么MOBA、“吃鸡”游戏不推荐用tcp协议——实测数据
欢迎大家前往云加社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯云游戏行业资深架构师 余国良 MOBA类和"吃鸡"游戏为什么对网络延迟要求高? 我们知道,不同类型的游戏因为玩法. ...
- 3D位置语音,引领吃鸡游戏体验升级
欢迎大家前往云加社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯游戏云 导语:在刚刚结束的首届腾讯用户开放日上,腾讯音视频实验室带着3D位置音效解决方案,向所有用户亮相,为用户提供360度立体空间的 ...
- tcp没用吗?为什么MOBA、“吃鸡”游戏不推荐用tcp协议
本文由云+社区发表 作者:腾讯云游戏行业资深架构师 余国良 MOBA类和"吃鸡"游戏为什么对网络延迟要求高? 我们知道,不同类型的游戏因为玩法.竞技程度不一样,采用的同步算法不一样 ...
随机推荐
- 【吐血整理】SVN命令行,Subversion的正确使用姿势,让版本控制更简单~
一.写在前面 前面一直博主一直用svn的桌面版本,但看项目经理一直都用的命令行方式,不为性能,还能直接装逼呀!在这里先感谢赵哥,也把它分享给感兴趣的你们~ 二.直接上干货 1. svn checkou ...
- windows下搭建Nexus3私服和基于IDEA15的Maven学习笔记
搭建Nexus私服. 首先去官网下载window下用的zip文件.https://www.sonatype.com/download-oss-sonatype. 解压之后包含下面两个文件 进入nexu ...
- 关于Android中为什么主线程不会因为Looper.loop()里的死循环卡死?引发的思考,事实可能不是一个 epoll 那么 简单。
( 转载请务必标明出处:http://www.cnblogs.com/linguanh/, 本文出自:[林冠宏(指尖下的幽灵)的博客]) 前序 本文将会把一下三个问题阐述清楚以及一个网上的普遍观点的补 ...
- js获取浮动(float)元素的style.left值为空的解决办法
解决办法: 1.使用行内样式设置元素的top和left值; 2.or直接获取元素的offsetLeft得到相关数值,还不需要parseInt 问题原因: 如果父div的position定义为relat ...
- API模板
#include <windows.h> #include <windowsx.h> #define DIVISIONS 5 LRESULT CALLBACK WndProc ...
- 《C++ Primer》读书笔记—第一章 开始
声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程. 1.一个函数的定义包含四个部分:返回类型(retur ...
- 【java基础之jdk源码】Object
最新在整体回归下java基础薄弱环节,以下为自己整理笔记,若有理解错误,请批评指正,谢谢. java.lang.Object为java所有类的基类,所以一般的类都可用重写或直接使用Object下方法, ...
- WIn7下Ubuntu 14.04 安装
1. 在Windows下下载Ubuntu14.04的ISO镜像,解压 2. 打开wubi.exe,填写用户名,密码等相关信息,在这里需要注意的是,磁盘空间最好选到最大(30G),执行安装 3. 按照提 ...
- 开发过程中常用到的git命令
将git上项目下载到本地 1.将项目下载到本地 git clone (git项目地址) 2.进入项目文件夹中(cd 某文件夹) 切换到要使用的分支 git checkout develop 3.抓取远 ...
- 线上问题debug过程(cat,grep,tr,awk,sort,uniq,comm等工具的综合使用)
问题:发现线上到货单的数量,小于实际到货的数量. 怀疑一些隐藏的条件,将部分唯一码进行了过滤,导致数量变少. 开展了如下的跟踪流程: 1.找到其中一个明细的唯一码 grep 6180e-4b09f p ...