c语言改u3d游戏,使用Unity3D怎么制作一个五子棋游戏
使用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怎么制作一个五子棋游戏相关推荐
- 使用h5制作一个五子棋游戏
思路解析 1.制作棋盘 2.绘制棋子 3.判定胜负 4.继续/停止 知识点总结 canvas.moveTo(x,y) 决定从线条绘制开始的地方 canvas.ineTo(x,y) 决定线条结束的地方 ...
- 用c语言做一个五子棋程序,C语言制作简单五子棋游戏
原标题:C语言制作简单五子棋游戏 C语言制作简单的五子棋游戏 学习C语言的人很多,但是用C语言很少,而用来为自己所用,来做游戏的人就更少了,很多人都是跟着学校学习,学校讲到哪就坐到哪,但是以后却还是不 ...
- python可视化迷宫求解_如何用 Python 制作一个迷宫游戏
相信大家都玩过迷宫的游戏,对于简单的迷宫,我们可以一眼就看出通路,但是对于复杂的迷宫,可能要仔细寻找好久,甚至耗费数天,然后可能还要分别从入口和出口两头寻找才能找的到通路,甚至也可能找不到通路. 虽然 ...
- 用python来做一个五子棋游戏,源码分享~
五子棋的规则大家肯定都了解,也是大家在百忙之中娱乐的一部分,也都在网上玩过五子棋的游戏,那么大家有没有想过自己编写一个五子棋游戏呢.很多人都感觉做"游戏"这个词汇听着就很难,不知道 ...
- 表白小游戏教程:制作一个小游戏送给喜欢的TA(不会编程也能学会哦)
大家好哇~ 欢迎翻开波波和阿菌的长篇故事~ 不过捏,今天我们不讲故事,今天将由阿菌和大家分享一个小教程:教大家制作一个小游戏,可以用来送给喜欢的人.无须任何计算机专业基础,只要能操作电脑,并在初一的数 ...
- 虚幻4学习笔记(8)动手制作一个小游戏
动手制作一个小游戏 新节点介绍 前期准备 搭建场景 门蓝图 灯蓝图 创建关卡蓝图 B站UP谌嘉诚课程:https://www.bilibili.com/video/BV164411Y732 新节点介绍 ...
- python制作五子棋_python制作简单五子棋游戏
python制作简单五子棋游戏 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: python制作简单五子棋游戏.txt ] (友情提示:右键点上行txt文档名->目标另存 ...
- python五子棋游戏from tkinter import_Python tkinter制作单机五子棋游戏
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 以下文章来源于Python家庭,作者Python家庭 实战项目:使用Python ...
- 五子棋游戏html5界面设计,HTML5制作黑白五子棋游戏教程
今天分享一个只用css和js代码开发的黑白五子棋游戏,我们把代码进行解析,希望对大家可以有所帮助 先看看效果图: HTML5制作黑白五子棋游戏教程 js代码: 定义canvas及黑白棋变量 var c ...
最新文章
- 使用VMware Workstation搭建基于Linux的Oracle 10g RAC
- 设计模式--模板方法(Template Method)模式
- ktor框架用到了netty吗_如何使用 Ktor 快速开发 Web 项目
- mongoclient php扩展,lnmp安装mongo扩展后,在实例化mongoClient()时出错
- C++17新特性之std::string_view
- 王建宙:中国移动还未与苹果就iPhone达成协议
- 从下往上看--新皮层资料的读后感 第一部分:皮层细胞
- move语句java_java 程序里 有几个地方不明白 1、angle 方法 前两个if 语句 2、movex 、movey 方法作用 3、rotate 方法...
- ELK详解(八)——Logstash收集系统日志实战
- Packet Tracer 思科模拟器入门教程 之一 初识Packet Tracer
- Donet.HighCharts
- 全志A64 Android6.0编译
- 9.进程间通信的方式有哪些?各自的优缺点及应用选择?
- 专注电池安全!华塑科技将持续深耕海内外储能市场
- FleaPHP 开发指南 - 4. 命名规范和目录结构
- Linux中vi命令编辑文件时显示行号
- STS (Spring Tool Suite) 目录和作用初级
- 用js实现点击切换+自动切换的轮播图
- tomcat启动没有反应以及不写日志解决方法
- 大学计算机实训报告,大学计算机实训报告.docx
热门文章
- python 海象运算符,Python3.8新特性-- 海象操作符
- JAVA定义一个多边形类_如何在每个数据类别中绘制多个多边形?
- input自适应_【正点原子FPGA连载】第十一章基于OV5640的自适应二值化实验-领航者ZYNQ之HLS 开发指南...
- windows下使用salt安装软件
- PHP使用swoole来实现实时异步任务队列
- python 常用算法学习(1)
- 阿里云ECS使用cloudfs4oss挂载OSS
- HDU 1372 Knight Moves
- actionscript3 事件类型
- .NET framework Library