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开发的第二款小游戏.此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿童欢迎. ...
随机推荐
- DML语言(数据操纵语言)
#DML语言/*数据操作语言:插入:insert修改:update删除:delete */ #一.插入语句#方式一:经典的插入/*语法:insert into 表名(列名,...) values(值1 ...
- iptables 表与链的对应关系
1)filter表——三个链:INPUT.FORWARD.OUTPUT作用:过滤数据包 内核模块:iptables_filter. 2)Nat表——三个链:PREROUTING.POSTROUTING ...
- rabbit rpm地址
rabbitmq 官方源: https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/ erlang 清华源(包含erlang所有版本): https:/ ...
- install-newton部署安装--------控制节点
#################################################################################################### ...
- Jenkins(1)—— 部署安装
最近有聊到接口自动化,持续集成这方面,所以想从持续集成工具Jenkins作为切入点来学习一下 一.jenkins概念 Jenkins是一个开源的.可扩展的持续集成.交付.部署(软件/代码的编译.打包. ...
- 怎么给Ubuntu Server安装GUI桌面
sudo apt update sudo apt upgrade sudo add-apt-repository universe sudo add-apt-repository multiverse ...
- java23种设计模式—— 二、单例模式
源码在我的github和gitee中获取 介绍 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...
- Vue基础(二)---- 常用特性
常用特性分类: 表单操作 自定义指令 计算属性 侦听器 过滤器 生命周期 补充知识(数组相关API) 案例:图书管理 1.表单操作 基于Vue的表单操作:主要用于向后台传递数据 Input 单行文本 ...
- OpenCV实现人脸检测
OpenCV实现人脸检测(转载) 原文链接:https://www.cnblogs.com/mengdd/archive/2012/08/01/2619043.html 本文介绍最基本的用OpenC ...
- vim编辑器 与etc目录
第1章 目录结构 1.1 vim vim故障 vim 是vi的升级版本 vi类似于文本文档 vim类似于notepad++ 编辑 必须先安装vim命令 yum -y insta ...
