Unity3d 游戏设计(一)井字棋
3D游戏设计(一)井字棋
运行效果:

实现过程
声明变量:
    public Texture2D O;
    public Texture2D X;
    GUIStyle myStyle;
    private int turn = 1;
    /*记录谁的回合:turn=1为,turn==2为×*/
    int[][] board = new int[3][] { new int[3], new int[3], new int[3] };
reset()函数:用于重新开始游戏
    /*重新开局*/
    void reset() {
        turn = 1;
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
                board[i][j] = 0;
            }
        }
        Debug.Log("game reset");
    }
check()函数:检查游戏是否结束:未结束返回0,O胜利返回1,X胜利返回2,平局返回3。
    /*检查胜利条件*/
    int check() {
        /*横线获胜*/
        for (int i = 0; i < 3; i++) {
            if (board[i][0] != 0 && board[i][0] == board[i][1] && board[i][1] == board[i][2]) {
                return board[i][0];
            }
        }
        /*纵线获胜*/
        for (int i = 0; i < 3; i++) {
            if (board[0][i] != 0 && board[0][i] == board[1][i] && board[1][i] == board[2][i]) {
                return board[0][i];
            }
        }
        /*斜线获胜*/
        if (board[1][1] != 0 &&
            board[0][0]== board[1][1] && board[2][2] == board[1][1] ||
            board[0][2] == board[1][1] && board[2][0] == board[1][1]) {
            return board[1][1];
        }
        /*对局还没结束*/
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
                if (board[i][j] == 0) return 0;
            }
        }
        /*平局*/
        return 3;
    }
display_result()函数:显示目前的游戏状态。
    /*显示对局情况*/
    void display_result(int res) {
        int m = Screen.width / 2;
        if (res == 0) {
            if (turn == 1)
                GUI.Box(new Rect(m - 50, 115, 100, 35), "O is going");
            else
                GUI.Box(new Rect(m - 50, 115, 100, 35), "X is going");
        }
        else if (res == 1) {
            GUI.Box(new Rect(m - 50, 115, 100, 35), "O WIN");
        }
        else if (res == 2) {
            GUI.Box(new Rect(m - 50, 115, 100, 35), "X WIN");
        }
        else if (res == 3) {
            GUI.Box(new Rect(m - 50, 115, 100, 35), "Draw");
        }
    }
OnGUI()函数:实时渲染,采用预设的O、X图片来表示O、X已经下过的棋子。
    void OnGUI() {
        int m = Screen.width / 2;
        GUI.Box(new Rect(m - 150, 80, 300, 420), "井字棋");
        /*如果reset被点击则重开*/
        if (GUI.Button(new Rect(m - 50, 160, 100, 35), new GUIContent("Reset", "点击重新开始"))) reset();
        GUI.Label(new Rect(m - 150, 170, 150, 35), GUI.tooltip);
        int res = check();
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
                if (board[i][j] == 1) {
                    GUI.Button(new Rect(m - 150 + i * 100, 200 + j * 100, 100, 100), O);
                }
                else if (board[i][j] == 2) {
                    GUI.Button(new Rect(m - 150 + i * 100, 200 + j * 100, 100, 100), X);
                }
                if(GUI.Button(new Rect(m - 150 + i * 100, 200 + j * 100, 100, 100), "")) {
                    if (res == 0) {
                        if (turn == 1) {
                            board[i][j] = turn;
                            turn = 2;
                        }
                        else {
                            board[i][j] = turn;
                            turn = 1;
                        }
                    }
                }
            }
        }
        display_result(res);
    }
可能存在的问题及解决方案:
可能存在井字棋显示不全的问题,此时把视野调至标准的1024*768即可。
Unity3d 游戏设计(一)井字棋的更多相关文章
- JavaFX 井字棋游戏
		利用JavaFX设计一个井字棋游戏,其中包括了能够与玩家对战的AI.AI的实现相比五子棋来说要简单得多,可以保证AI在后手情况下绝对不会输,具体实现如下: /* * To change this li ... 
- [LeetCode] 348. Design Tic-Tac-Toe 设计井字棋游戏
		Design a Tic-tac-toe game that is played between two players on a n x n grid. You may assume the fol ... 
- 井字棋游戏升级版 - TopTicTacToe项目 简介
		一.游戏简介 井字棋是一款世界闻名的游戏,不用我说,你一定知道它的游戏规则. 这款游戏简单易学,玩起来很有意思,不过已经证明出这款游戏如果两个玩家都足够聪明的话, 是很容易无法分出胜负的,即我们得到的 ... 
- [CareerCup] 17.2 Tic Tac Toe 井字棋游戏
		17.2 Design an algorithm to figure out if someone has won a game oftic-tac-toe. 这道题让我们判断玩家是否能赢井字棋游戏, ... 
- [C++] 井字棋游戏源码
		TicTac.h #define EX 1 //该点左鼠标 #define OH 2 //该点右鼠标 class CMyApp : public CWinApp { public: virtual B ... 
- [游戏学习22] MFC 井字棋 双人对战
		>_<:太多啦,感觉用英语说的太慢啦,没想到一年做的东西竟然这么多.....接下来要加速啦! >_<:注意这里必须用MFC和前面的Win32不一样啦! >_<:这也 ... 
- [HTML5实现人工智能]小游戏《井字棋》发布,据说IQ上200才能赢
		一,什么是TicTacToe(井字棋) 本 游戏 为在下用lufylegend开发的第二款小游戏.此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿 ... 
- python 游戏(井字棋)
		1. 游戏思路和流程图 实现功能,现实生活中的井字棋玩法 游戏流程图 2. 使用模块和游戏提示 import random def game_info(): print('欢迎来到井字棋游戏') pr ... 
- 『HTML5实现人工智能』小游戏《井字棋》发布,据说IQ上200才能赢【算法&代码讲解+资源打包下载】
		一,什么是TicTacToe(井字棋) 本游戏为在下用lufylegend开发的第二款小游戏.此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿童欢迎. ... 
随机推荐
- 详解Python中的__init__和__new__
			转载:https://my.oschina.net/liuyuantao/blog/747164 1.__init__ 方法是什么? 使用Python写过面向对象的代码的同学,可能对 __init__ ... 
- 使用分区挂载 ftp 目录
			ftp挂载分区上去后无法识别的问题困扰了我好几天,今天有时间把它研究了一下,拿出来与大家分享一下. ftp目录挂载分区前与挂载分区后的区别[root@localhost ~]# ls -Zd /var ... 
- Ubuntu 磁盘满了处理方法。
			Ubuntu 磁盘满了处理方法: 1. 如果是虚拟机安装ubuntu,直接给虚拟机安装ubuntu 系统所在的盘符动态分配一点磁盘容量,就可以了. 2. 如果不是虚拟机安装ubuntu,那么有两个办法 ... 
- asp.net Core3.1自定义权限体系-菜单和操作按钮权限
			我们在做项目项目,经常会碰到权限体系,权限体系属于系统架构的一个最底层的功能,也是非常重要的功能,几乎在每个项目都会用到.那么我们该如何设计一个比较合理的且扩展性较强的权限体系呢? 经过多天的摸索,参 ... 
- Java类库以及它的基本组织结构
			Java 类库概念: Java 的应用程序编程接口 (API (Application Programming Interface) )以包的形式来组织,每个包提供了大量的相关类.接口和异常处理类, ... 
- docker-compose 官网下载特别慢怎么办?
			docker compose 官放推荐的下载方式是这样的: sudo curl -L "https://github.com/docker/compose/releases/download ... 
- Tensorflow2(一)深度学习基础和tf.keras
			代码和其他资料在 github 一.tf.keras概述 首先利用tf.keras实现一个简单的线性回归,如 \(f(x) = ax + b\),其中 \(x\) 代表学历,\(f(x)\) 代表收入 ... 
- Python 到底是强类型语言,还是弱类型语言?
			0.前言 我在上一篇文章中分析了 为什么 Python 没有 void 类型 的话题,在文章发布后,有读者跟我讨论起了另一个关于类型的问题,但是,我们很快就出现了重大分歧. 我们主要的分歧就在于:Py ... 
- Selenium多浏览器处理
			当我们在执行自动化测试过程中,往往会针对不同的浏览器做兼容性测试,那么我们在代码中,可以针对执行命令传过来的参数,选择对应的浏览器来执行测试用例 代码如下: 在终端中执行命令如上图红框中所示: bro ... 
- Namomo Cockfight Round 5
			AC代码 A. Number 假设\(n_i\)为十进制数\(n\)的第\(i\)位上的数字,那么\(\max_{i}n_i\)即为答案. B. Mod 用BFS的方法计算可以以\(O(p)\)的复杂 ... 
 
			
		