欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > php >内容正文

php

php 井字棋,Unity3D 井字棋

发布时间:2023/12/20 php 35 豆豆
生活随笔 收集整理的这篇文章主要介绍了 php 井字棋,Unity3D 井字棋 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

Unity3D 井字棋

今天第一次Unity实战,先用GUI写个井字棋的小游戏。先上成品图:

首先创建c#脚本,添加GUI方法。此时考虑到要记录九宫格每个位置的状态以及此时是谁在点击,所以创建两个私有变量。

private int count = 0;

private int[,] map = new int[3, 3];

OnGUI函数在每帧被调用,每次调用OnGUI函数时,先调用Check()函数判断是否有胜利者,如果有就显示出胜利者的名称。然后再判断游戏是否和棋,如果前两种情况均未发生,再绘出主要游戏界面。

void OnGUI()

{

int winner = Check();

if (winner == 1)

{

GUI.Label(new Rect(300, 350, 90, 50), "X wins!");

}

else if (winner == 2)

{

GUI.Label(new Rect(300, 350, 90, 50), "O wins!");

}

else if (count == 9)

{

GUI.Label(new Rect(280, 350, 100, 50), "Dead Game! Please Restart!");

}

else

{

for (int i = 0; i < 3; i += 1)

{

for (int j = 0; j < 3; j += 1)

{

if (map[i, j] == 0)

{

if (GUI.Button(new Rect(250 + i * 50, 250 + j * 50, 50, 50), ""))

{

if (count%2 == 0) map[i, j] = 1;

else map[i, j] = 2;

count = count + 1;

}

}

if (map[i, j] == 1)

{

GUI.Button(new Rect(250 + i * 50, 250 + j * 50, 50, 50), "X");

}

if (map[i, j] == 2)

{

GUI.Button(new Rect(250 + i * 50, 250 + j * 50, 50, 50), "O");

}

}

}

}

if (GUI.Button(new Rect(275, 400, 100, 50), "Restart"))

{

reset();

}

}

Check()函数用于判断是否有胜利者,并返回代指胜利者的数字。

private int Check()

{

//横向连线

for (int i = 0; i < 3; ++i)

{

if (map[i, 0] != 0 && map[i, 0] == map[i, 1] && map[i, 1] == map[i, 2])

{

return map[i, 0];

}

}

//纵向连线

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

{

if (map[0, j] != 0 && map[0, j] == map[1, j] && map[1, j] == map[2, j])

{

return map[0, j];

}

}

//斜向连线

if (map[1, 1] != 0 &&map[0, 0] == map[1, 1] && map[1, 1] == map[2, 2] ||map[0, 2] == map[1, 1] && map[1, 1] == map[2, 0])

{

return map[1, 1];

}

return 0;

}

游戏开始时start()函数调用reset()函数进行初始化,以下是完整代码:

using System;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class NewBehaviourScript : MonoBehaviour

{

private int count = 0;

private int[,] map = new int[3, 3];

private void Start()

{

reset();

}

void OnGUI()

{

int winner = Check();

if (winner == 1)

{

GUI.Label(new Rect(300, 350, 90, 50), "X wins!");

}

else if (winner == 2)

{

GUI.Label(new Rect(300, 350, 90, 50), "O wins!");

}

else if (count == 9)

{

GUI.Label(new Rect(280, 350, 100, 50), "Dead Game! Please Restart!");

}

else

{

for (int i = 0; i < 3; i += 1)

{

for (int j = 0; j < 3; j += 1)

{

if (map[i, j] == 0)

{

if (GUI.Button(new Rect(250 + i * 50, 250 + j * 50, 50, 50), ""))

{

if (count%2 == 0) map[i, j] = 1;

else map[i, j] = 2;

count = count + 1;

}

}

if (map[i, j] == 1)

{

GUI.Button(new Rect(250 + i * 50, 250 + j * 50, 50, 50), "X");

}

if (map[i, j] == 2)

{

GUI.Button(new Rect(250 + i * 50, 250 + j * 50, 50, 50), "O");

}

}

}

}

if (GUI.Button(new Rect(275, 400, 100, 50), "Restart"))

{

reset();

}

}

private void reset()

{

for (int i = 0; i < 3; i += 1)

{

for (int j = 0; j < 3; j += 1)

{

map[i, j] = 0;

}

}

count = 0;

}

private int Check()

{

//横向连线

for (int i = 0; i < 3; ++i)

{

if (map[i, 0] != 0 && map[i, 0] == map[i, 1] && map[i, 1] == map[i, 2])

{

return map[i, 0];

}

}

//纵向连线

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

{

if (map[0, j] != 0 && map[0, j] == map[1, j] && map[1, j] == map[2, j])

{

return map[0, j];

}

}

//斜向连线

if (map[1, 1] != 0 &&map[0, 0] == map[1, 1] && map[1, 1] == map[2, 2] ||map[0, 2] == map[1, 1] && map[1, 1] == map[2, 0])

{

return map[1, 1];

}

return 0;

}

}

总结

以上是生活随笔为你收集整理的php 井字棋,Unity3D 井字棋的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。