Unity3d-简单井字棋
- 作业目的:熟悉IMGUI的使用,和基础的Unity3d操作
- 游戏玩法:选择两个模式,1.Player vs Player 2.Computer vs Player,当其中一种棋子连成三个则这个棋子的玩家获胜。
- 技术限制:仅允许使用IMGUI构成UI
游戏实现
首先搭建游戏菜单界面:
- 通过GUIStyle设置字体大小和颜色
使用GUI.Label创建文本,GUI.Label的第一个参数是Rect类型的位置,表示标签在屏幕上的矩形位置,Rect中的参数分别是:起点x坐标,起点y坐标,标签宽度,标签高度。第二个参数text类型是String,标签的内容,第三个参数style类型是GUIStyle,标签使用的样式。
使用GUI.Button来创建按钮,参数列表与GUI.Label类似,用if来判断Button是否被点击,若点击了则进入相应的游戏模式
GUIStyle fontStyle = new GUIStyle()
{
fontSize = 25
};
fontStyle.normal.textColor = new Color(255, 255, 255);
GUIStyle fontStyle1 = new GUIStyle()
{
fontSize = 30
};
fontStyle1.normal.textColor = new Color(255, 255, 255);
GUI.Label(new Rect(413, 50, 100, 50), "井字游戏", fontStyle1);
if(gamestate == GameState.end)
{
if (GUI.Button(new Rect(400, 200, 140, 50), "Player vs Player"))
{
gamestate = GameState.mode1;
isWin = false;
}
if (GUI.Button(new Rect(400, 280, 140, 50), "Player vs Computer"))
{
gamestate = GameState.mode2;
isWin = false;
}
}
- 不同游戏模式的游戏逻辑
- Player vs Player
- 使用循环建立3X3的棋盘,因为这段代码在OnGUI中,每一帧监控空白格子是否被按下,从而实现落子
- 陷阱:判断棋盘每一格的值从而建立Button的内容是X还是O,应该写在判断空白格子被点击前面,否则会造成看似已经落过子但是可以重新点击。(也可以在空白格子被点击的判断条件中加入判断棋盘board的值)
- Player vs Player
if(gamestate == GameState.mode1)
{
FixedUI(fontStyle);
bool full = true;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (board[i, j] =&#