Unity3D学习——井字棋游戏
Unity3D学习——井字棋游戏成品展示实现OnGUIOnGUI()函数可以在每帧调用,就像Update( )函数一样。Button使用GUI.Button()方法添加按钮,当该方法返回true时,表示按钮被按下了,这样我们就可以在按钮点击后作出相应记录和显示操作。思路每一帧都用button渲染出3x3的棋盘,用一个3x3数组记录落子状态。在OnGUI函数中先检测游戏状态,若未分胜负,则根据
·
成品展示
实现
-
OnGUI
- OnGUI()函数可以在每帧调用,利用它不断渲染button构造3x3棋盘并且判断游戏状态。 Button
- 使用GUI.Button()方法添加按钮,当该方法返回true时,表示按钮被按下了,这样我们就可以在按钮点击后作出相应记录和显示操作。 思路
- 每一帧都用button渲染出3x3的棋盘,用一个3x3数组记录落子状态。
- 在OnGUI函数中先检测游戏状态,若未分胜负,则根据数组记录继续渲染出button以及button应该显示的棋子(空表示未下子,O或√分别表示两个玩家)。
- 游戏状态判断,3行3列2斜行,直接遍历棋盘判断,有3个棋子相同则分出胜负,若下子数目达到9而还不出胜负则平局。
完整代码如下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class playGame : MonoBehaviour {
private static int player;
private static int count;//落子数目
private int winner;//记录胜者
private int[,] chessBoard = new int[3, 3];//3x3棋盘
void Start () {
Restart();
}
void OnGUI()
{
GUI.Box(new Rect(225, 25, 200, 300), "");
if (GUI.Button(new Rect(275, 250, 100, 50), "Restart")) Restart();
if (!GameOver())
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (chessBoard[i, j] == 0 && GUI.Button(new Rect(250 + j * 50, 50 + i * 50, 50, 50), ""))
{
chessBoard[i, j] = player;
player = 3 - player;
count++;
}
else if (chessBoard[i, j] == 1) GUI.Button(new Rect(250 + j * 50, 50 + i * 50, 50, 50), "O");
else if (chessBoard[i, j] == 2) GUI.Button(new Rect(250 + j * 50, 50 + i * 50, 50, 50), "X");
}
}
}
}
void Restart()
{
player = 1;//默认玩家1先下
winner = 0;
count = 0;
for(int i = 0; i < 3; i++)//清空棋盘
for(int j = 0; j < 3; j++)
chessBoard[i, j] = 0;
}
bool GameOver()
{
for(int i = 0; i < 3; i++)
{
//行
if (chessBoard[i, 0] != 0
&& chessBoard[i, 0] == chessBoard[i, 1] && chessBoard[i, 0] == chessBoard[i, 2]) winner = chessBoard[i, 0];
//列
if (chessBoard[0, i] != 0
&& chessBoard[0, i] == chessBoard[1, i] && chessBoard[0, i] == chessBoard[2, i]) winner = chessBoard[0, i];
}
//对角
if (chessBoard[0, 0] != 0 && chessBoard[0, 0] == chessBoard[1, 1] && chessBoard[0, 0] == chessBoard[2, 2]) winner = chessBoard[0, 0];
if (chessBoard[0, 2] != 0 && chessBoard[0, 2] == chessBoard[1, 1] && chessBoard[0, 2] == chessBoard[2, 0]) winner = chessBoard[0, 2];
if (count < 9 && winner == 0) return false;
//有人赢了
if (winner != 0)
GUI.Box(new Rect(235, 35, 180, 200), "\n\n\nCongratulations!\n Player "+winner+" has won.\nPress Restart to start again.");
else//平局
GUI.Box(new Rect(235, 35, 180, 200), "\n\n\nA draw.\nPress Restart to start again.");
return true;
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)