Unity3D学习(2)——GUI五子棋
来源:互联网 发布:python 论坛源码 编辑:程序博客网 时间:2024/06/05 15:13
第二节中,我们尝试利用GUI制作一个简易的五子棋游戏,棋盘大小为10*10。游戏需要两个玩家参与,游戏规则无需赘述。成品图如下:
首先,制作一个10*10棋盘需要用到GUI.Button方法,在参数内设置每一个格子为矩形。这里需要介绍一下Rect(x, y, width, height)方法中的四个参数:
- x: 矩形左侧边的横坐标,用于衡量矩形左侧边距屏幕左侧的距离
- y: 矩形上侧边的纵坐标,用于衡量矩形上侧边距屏幕顶端的距离
- width: 矩形的宽度,即矩形左、右侧边的距离
- height: 矩形的高度,即矩形上、下侧边的距离
在本游戏中,我们设置每一个格子的高度和宽度均为50px。
游戏进行的过程中,玩家点击按钮便视为落子,这时会根据玩家的身份对按钮进行标记。预设玩家1的标记是“O”,玩家2的标记是“X”。为了判定当前玩家的身份,游戏中使用了一个变量turn来保存当前回合的归属,在每一次玩家落子后,turn变量都会发生改变,表示着回合归属的切换。
此外,我们还需要一个10*10的数组用于记录棋盘上每一个格子的归属。玩家落子后,数组相应位置存储的变量会改变,记录当前格子的归属。在完成了记录之后,游戏会遍历全图进行判断,检测是否有连续5个格子上的棋子均为同一玩家所下的。如果有,则游戏结束;否则游戏继续。
最后是详细代码,运行时只需将其挂载在主摄像机上即可。
Chess.cs
using System.Collections;using System.Collections.Generic;using UnityEngine;public class Chess : MonoBehaviour { private int turn = 1; private int[,] state = new int [10, 10]; void Start() { turn = 1; for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++) state[i, j] = 0; } void OnGUI() { if (GUI.Button(new Rect(160, 550, 180, 50), "Reset")) Start(); int result = check(); if (result == 1) GUI.Label(new Rect(225, 520, 150, 75), "O wins!"); else if (result == 2) GUI.Label(new Rect(225, 520, 150, 75), "X wins!"); for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++) { if (state[i, j] == 1) GUI.Button(new Rect(i*50, j*50, 50, 50), "O"); if (state[i, j] == 2) GUI.Button(new Rect(i*50, j*50, 50, 50), "X"); if (GUI.Button(new Rect(i*50, j*50, 50, 50), "") && result == 0) { if (turn == 1) state[i, j] = 1; else state[i, j] = 2; turn = -turn; } } } int check() { for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++) { if (state[i, j] != 0 && j < 6) { if (state[i, j] == state[i, j+1] && state[i, j] == state[i, j+2] && state[i, j] == state[i, j+3] && state[i, j] == state[i, j+4]) return state[i, j]; } if (state[i, j] != 0 && i < 6) { if (state[i, j] == state[i+1, j] && state[i, j] == state[i+2, j] && state[i, j] == state[i+3, j] && state[i, j] == state[i+4, j]) return state[i, j]; } if (state[i, j] != 0 && i < 6 && j < 6) { if (state[i, j] == state[i+1, j+1] && state[i, j] == state[i+2, j+2] && state[i, j] == state[i+3, j+3] && state[i, j] == state[i+4, j+4]) return state[i, j]; } if (state[i, j] != 0 && i < 6 && j > 4) { if (state[i, j] == state[i+1, j-1] && state[i, j] == state[i+2, j-2] && state[i, j] == state[i+3, j-3] && state[i, j] == state[i+4, j-4]) return state[i, j]; } } return 0; }}
0 0
- Unity3D学习(2)——GUI五子棋
- Unity3d学习笔记2——GUI实现简单计算器
- unity3D—GUI基础
- unity3D——GUI基础2
- Unity3D学习笔记——GUI高级组件
- Unity3D学习笔记(2)——用GUI制作井字棋游戏
- 学习Unity3D之GUI基础2。
- Unity3D笔记第三天——GUI
- Unity3D入门篇——GUI控件
- Unity3D GUI—打字机风格脚本
- 学习Unity3D之GUI基础。
- 五子棋学习(2)
- GUI学习——初步了解GUI
- MATLAB GUI设计学习—GUI数据管理
- [ Unity3d] Unity3d的GUI排版教程-2
- Unity3D学习笔记4-五子棋实战项目知识点总结
- Unity3D学习笔记01:GUI自适应屏幕分辨率
- Unity3D学习历程之GUI函数
- C#中使用LuaInterface
- response与request
- 如何修改sublime3注释的颜色
- PHP register_shutdown_function() 函数
- 跟我学python之mysql操作详解 二、增删改操作
- Unity3D学习(2)——GUI五子棋
- idea 创建maven工程
- [LeetCode]226. Invert Binary Tree
- Solr所有的查询解析器Query Parsers(转:http://blog.csdn.net/jiangchao858/article/details/53859731)
- C++创建对象的三种方式
- ROS精华博客
- 【JZOJ5049】【GDOI2017模拟一试4.11】腐女的生日
- Android中SQLite应用详解
- Linux下使用CURL模拟用户提交post表单