使用Unity3D怎么制作一个五子棋游戏

发布时间:2021-04-17 17:56:36

来源:亿速云

阅读:106

作者:Leah

本篇文章为大家展示了使用Unity3D怎么制作一个五子棋游戏,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。using UnityEngine;

using System.Collections;

public class chess : MonoBehaviour

{

//四个锚点位置,用于计算棋子落点

public GameObject LeftTop;

public GameObject RightTop;

public GameObject LeftBottom;

public GameObject RightBottom;

//主摄像机

public Camera cam;

//锚点在屏幕上的映射位置

Vector3 LTPos;

Vector3 RTPos;

Vector3 LBPos;

Vector3 RBPos;

Vector3 PointPos;//当前点选的位置

float gridWidth = 1; //棋盘网格宽度

float gridHeight = 1; //棋盘网格高度

float minGridDis; //网格宽和高中较小的一个

Vector2[,] chessPos; //存储棋盘上所有可以落子的位置

int[,] chessState; //存储棋盘位置上的落子状态

enum turn { black, white };

turn chessTurn; //落子顺序

public Texture2D white; //白棋子

public Texture2D black; //黑棋子

public Texture2D blackWin; //白子获胜提示图

public Texture2D whiteWin; //黑子获胜提示图

int winner = 0; //获胜方,1为黑子,-1为白子

bool isPlaying = true; //是否处于对弈状态

void Start()

{

chessPos = new Vector2[15, 15];

chessState = new int[17, 16];/*原来定义是new int[15, 15],这里将原来数组chessState上、下和右边各加一排数据,

也就相当于在棋盘的上、下和右边各填加一排隐形的棋道。原因后面解释*/

chessTurn = turn.black;

//计算锚点位置

LTPos = cam.WorldToScreenPoint(LeftTop.transform.position);

RTPos = cam.WorldToScreenPoint(RightTop.transform.position);

LBPos = cam.WorldToScreenPoint(LeftBottom.transform.position);

RBPos = cam.WorldToScreenPoint(RightBottom.transform.position);

//计算网格宽度

gridWidth = (RTPos.x - LTPos.x) / 14;

gridHeight = (LTPos.y - LBPos.y) / 14;

minGridDis = gridWidth

//计算落子点位置

for (int i = 0; i

{

for (int j = 0; j

{

chessPos[i, j] = new Vector2(LBPos.x + gridWidth * j, LBPos.y + gridHeight * i);//这里和源程序定义稍有不同,这里i定位行,j为列

}

}

}

void Update()

{

//检测鼠标输入并确定落子状态

if (isPlaying && Input.GetMouseButtonDown(0))

{

PointPos = Input.mousePosition;

for (int i = 0; i

{

for (int j = 0; j

{

//找到最接近鼠标点击位置的落子点,如果空则落子

if (Dis(PointPos, chessPos[i, j])

因为上、下和右边各多加了一排,要空出来,chessPos的i行对应chessState的i+1行*/

{

//根据下棋顺序确定落子颜色

chessState[i + 1, j] = chessTurn == turn.black ? 1 : -1;//同理

//落子成功,更换下棋顺序

chessTurn = chessTurn == turn.black ? turn.white : turn.black;

}

}

}

//调用判断函数,确定是否有获胜方

int re = result();

if (re == 1)

{

Debug.Log("黑棋胜");

winner = 1;

isPlaying = false;

}

else if (re == -1)

{

Debug.Log("白棋胜");

winner = -1;

isPlaying = false;

}

}

//按下空格重新开始游戏

if (Input.GetKeyDown(KeyCode.Space))

{

for (int i = 0; i

{

for (int j = 0; j

{

chessState[i + 1, j] = 0;//同理

}

}

isPlaying = true;

chessTurn = turn.black;

winner = 0;

}

}

//计算平面距离函数

float Dis(Vector3 mPos, Vector2 gridPos)

{

return Mathf.Sqrt(Mathf.Pow(mPos.x - gridPos.x, 2) + Mathf.Pow(mPos.y - gridPos.y, 2));

}

void OnGUI()

{

//绘制棋子

for (int i = 0; i

{

for (int j = 0; j

{

if (chessState[i + 1, j] == 1)//同理

{

GUI.DrawTexture(new Rect(chessPos[i, j].x - gridWidth / 2, Screen.height - chessPos[i, j].y - gridHeight / 2, gridWidth, gridHeight), black);

}

if (chessState[i + 1, j] == -1)//同理

{

GUI.DrawTexture(new Rect(chessPos[i, j].x - gridWidth / 2, Screen.height - chessPos[i, j].y - gridHeight / 2, gridWidth, gridHeight), white);

}

}

}

//根据获胜状态,弹出相应的胜利图片

if (winner == 1)

{

GUI.DrawTexture(new Rect(Screen.width * 0.25f, Screen.height * 0.25f, Screen.width * 0.5f, Screen.height * 0.25f), blackWin);

}

if (winner == -1)

GUI.DrawTexture(new Rect(Screen.width * 0.25f, Screen.height * 0.25f, Screen.width * 0.5f, Screen.height * 0.25f), whiteWin);

}

//改写result函数

/*解释:C语言中,这样的表达式:chessState[i]&&chessState[i+1]&&chessState[i+2]&&chessState[i+3]&&chessState[i+4],如果

* chessState[i]为False,则不管B是真是假或者是异常都不会运行,利用这一点,在chessState的右边、上边和下边各加一行为0的数据,

* 这样在判断连续五个棋子的状态时,就不用担心chessState数组的索引值超出范围。例如:chessState[i+4]的索引值i+4刚好超出范围,

* 通过在原来数组chessState的上、下和右边个添加一排为0的数,这样chessState[i+3]==0,于是就可以避免引起异常,从而简化代码*/

int result()

{

int flag = 0;

if (chessTurn == turn.white)

{

for (int i = 1; i <= 15; i++)//这里的i从1开始

{

for (int j = 0; j <= 14; j++)//j不用变

{

if ((chessState[i, j] == 1 && chessState[i, j + 1] == 1 && chessState[i, j + 2] == 1 && chessState[i, j + 3] == 1 && chessState[i, j + 4] == 1)//向右横向

|| (chessState[i, j] == 1 && chessState[i + 1, j] == 1 && chessState[i + 2, j] == 1 && chessState[i + 3, j] == 1 && chessState[i + 4, j] == 1)//向上横向

|| (chessState[i, j] == 1 && chessState[i + 1, j + 1] == 1 && chessState[i + 2, j + 2] == 1 && chessState[i + 3, j + 3] == 1 && chessState[i + 4, j + 4] == 1)//向右上斜向

|| (chessState[i, j] == 1 && chessState[i - 1, j + 1] == 1 && chessState[i - 2, j + 2] == 1 && chessState[i - 3, j + 3] == 1 && chessState[i - 4, j + 4] == 1))//向右下斜向

{

flag = 1;

}

}

}

}

else if (chessTurn == turn.black)

{

for (int i = 1; i <= 15; i++)//这里的i从1开始

{

for (int j = 0; j <= 14; j++)

{

if ((chessState[i, j] == -1 && chessState[i, j + 1] == -1 && chessState[i, j + 2] == -1 && chessState[i, j + 3] == -1 && chessState[i, j + 4] == -1)

|| (chessState[i, j] == -1 && chessState[i + 1, j] == -1 && chessState[i + 2, j] == -1 && chessState[i + 3, j] == -1 && chessState[i + 4, j] == -1)

|| (chessState[i, j] == -1 && chessState[i + 1, j + 1] == -1 && chessState[i + 2, j + 2] == -1 && chessState[i + 3, j + 3] == -1 && chessState[i + 4, j + 4] == -1)

|| (chessState[i, j] == -1 && chessState[i - 1, j + 1] == -1 && chessState[i - 2, j + 2] == -1 && chessState[i - 3, j + 3] == -1 && chessState[i - 4, j + 4] == -1))

{

flag = -1;

}

}

}

}

return flag;

}

}

上述内容就是使用Unity3D怎么制作一个五子棋游戏,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

c语言改u3d游戏,使用Unity3D怎么制作一个五子棋游戏相关推荐

  1. 使用h5制作一个五子棋游戏

    思路解析 1.制作棋盘 2.绘制棋子 3.判定胜负 4.继续/停止 知识点总结 canvas.moveTo(x,y) 决定从线条绘制开始的地方 canvas.ineTo(x,y) 决定线条结束的地方 ...

  2. 用c语言做一个五子棋程序,C语言制作简单五子棋游戏

    原标题:C语言制作简单五子棋游戏 C语言制作简单的五子棋游戏 学习C语言的人很多,但是用C语言很少,而用来为自己所用,来做游戏的人就更少了,很多人都是跟着学校学习,学校讲到哪就坐到哪,但是以后却还是不 ...

  3. python可视化迷宫求解_如何用 Python 制作一个迷宫游戏

    相信大家都玩过迷宫的游戏,对于简单的迷宫,我们可以一眼就看出通路,但是对于复杂的迷宫,可能要仔细寻找好久,甚至耗费数天,然后可能还要分别从入口和出口两头寻找才能找的到通路,甚至也可能找不到通路. 虽然 ...

  4. 用python来做一个五子棋游戏,源码分享~

    五子棋的规则大家肯定都了解,也是大家在百忙之中娱乐的一部分,也都在网上玩过五子棋的游戏,那么大家有没有想过自己编写一个五子棋游戏呢.很多人都感觉做"游戏"这个词汇听着就很难,不知道 ...

  5. 表白小游戏教程:制作一个小游戏送给喜欢的TA(不会编程也能学会哦)

    大家好哇~ 欢迎翻开波波和阿菌的长篇故事~ 不过捏,今天我们不讲故事,今天将由阿菌和大家分享一个小教程:教大家制作一个小游戏,可以用来送给喜欢的人.无须任何计算机专业基础,只要能操作电脑,并在初一的数 ...

  6. 虚幻4学习笔记(8)动手制作一个小游戏

    动手制作一个小游戏 新节点介绍 前期准备 搭建场景 门蓝图 灯蓝图 创建关卡蓝图 B站UP谌嘉诚课程:https://www.bilibili.com/video/BV164411Y732 新节点介绍 ...

  7. python制作五子棋_python制作简单五子棋游戏

    python制作简单五子棋游戏 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: python制作简单五子棋游戏.txt ] (友情提示:右键点上行txt文档名->目标另存 ...

  8. python五子棋游戏from tkinter import_Python tkinter制作单机五子棋游戏

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于Python家庭,作者Python家庭 实战项目:使用Python ...

  9. 五子棋游戏html5界面设计,HTML5制作黑白五子棋游戏教程

    今天分享一个只用css和js代码开发的黑白五子棋游戏,我们把代码进行解析,希望对大家可以有所帮助 先看看效果图: HTML5制作黑白五子棋游戏教程 js代码: 定义canvas及黑白棋变量 var c ...

最新文章

  1. 使用VMware Workstation搭建基于Linux的Oracle 10g RAC
  2. 设计模式--模板方法(Template Method)模式
  3. ktor框架用到了netty吗_如何使用 Ktor 快速开发 Web 项目
  4. mongoclient php扩展,lnmp安装mongo扩展后,在实例化mongoClient()时出错
  5. C++17新特性之std::string_view
  6. 王建宙:中国移动还未与苹果就iPhone达成协议
  7. 从下往上看--新皮层资料的读后感 第一部分:皮层细胞
  8. move语句java_java 程序里 有几个地方不明白 1、angle 方法 前两个if 语句 2、movex 、movey 方法作用 3、rotate 方法...
  9. ELK详解(八)——Logstash收集系统日志实战
  10. Packet Tracer 思科模拟器入门教程 之一 初识Packet Tracer
  11. Donet.HighCharts
  12. 全志A64 Android6.0编译
  13. 9.进程间通信的方式有哪些?各自的优缺点及应用选择?
  14. 专注电池安全!华塑科技将持续深耕海内外储能市场
  15. FleaPHP 开发指南 - 4. 命名规范和目录结构
  16. Linux中vi命令编辑文件时显示行号
  17. STS (Spring Tool Suite) 目录和作用初级
  18. 用js实现点击切换+自动切换的轮播图
  19. tomcat启动没有反应以及不写日志解决方法
  20. 大学计算机实训报告,大学计算机实训报告.docx

热门文章

  1. python 海象运算符,Python3.8新特性-- 海象操作符
  2. JAVA定义一个多边形类_如何在每个数据类别中绘制多个多边形?
  3. input自适应_【正点原子FPGA连载】第十一章基于OV5640的自适应二值化实验-领航者ZYNQ之HLS 开发指南...
  4. windows下使用salt安装软件
  5. PHP使用swoole来实现实时异步任务队列
  6. python 常用算法学习(1)
  7. 阿里云ECS使用cloudfs4oss挂载OSS
  8. HDU 1372 Knight Moves
  9. actionscript3 事件类型
  10. .NET framework Library