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开发的第二款小游戏.此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿童欢迎. ...
随机推荐
- appium配置
前言 最近报了个班,学习关于全栈自动化相关内容.学归学.培训就像敲门砖,领人入门,同时可以比较系统性的给学习到关于这块的基础知识(比较好的培训机构).其次想着总结一些培训知识和遇到的一些问题,以供自己 ...
- 【小白学AI】XGBoost推导详解与牛顿法
文章来自微信公众号:[机器学习炼丹术] 目录 1 作者前言 2 树模型概述 3 XGB vs GBDT 3.1 区别1:自带正则项 3.2 区别2:有二阶导数信息 3.3 区别3:列抽样 4 XGB为 ...
- Java枚举简述
Java 枚举(enum) Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等. Java 枚举类使用 enum 关键 ...
- SpringBoot启动注解源码流程学习总结
- 网站会不会因为同IP网站被K而受到惩罚
http://www.wocaoseo.com/thread-289-1-1.html 使用虚拟主机的网站会不会因为同一个IP或同一台服务器上有其他网站作弊被处罚而受连累,也被惩罚? 复制代码 百度官 ...
- 焦大:seo思维光年(下)seo操作如何度量化
http://www.wocaoseo.com/thread-57-1-1.html 如果不能度量就无法进行改进,所以度量化或数据化是网站分析和网站研究必须进行的一个方面,seo也不能例外.我在上篇文 ...
- python+opencv 打开网络摄像头
python+opencv 打开网络摄像头(手机)(转) #以下是最常用的读取视频流的方法import cv2url = 'rtsp://admin:admin@192.169.5.2:554/'#根 ...
- redis的集群搭建(很详细很详细)
说在前面的话 之前有一节说了redis单机版的搭建和使用jedis管理redis单机版和集群版, 本节主要讲一下redis的集群搭建. 跳转到jedis管理redis的使用 认识redis集群 首先我 ...
- linux下使用split命令分割文件且文件号从1开始
Linux里切割大文件的命令如下: split [OPTION] [INPUT [PREFIX]] 选项如下: -a : 指定后缀长度 -b : 每个文件多少字节 -d : 使用数字后缀而不是字母 - ...
- Excel-时间函数将时间换成小时
问题场景 用考勤打卡时间算员工饱和度. 场景 计算员工实际工作时长,需要算出打卡时长再减去午休时长1.5小时. 目标 算出实际工作时长. 解决方案 利用单元格格式设置进行简单计算. 第一步:在F2单元 ...
