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