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 井字棋的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flask多进程多线程配置
- 下一篇: spark学习五——归属地计算案例