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开发的第二款小游戏.此游戏是大家想必大家小时候都玩过,因为玩它很简单,只需要一张草稿纸和一只笔就能开始游戏,所以广受儿童欢迎. ...
随机推荐
- SecureCRT 关键字高亮显示
grep命令红色高亮关键字 1. 左边侧栏 Session Manage 右键Sessions --Properties 2 Terminal--Appearance Current color s ...
- 02.RDB持久化配置与工作流程
一.如何配置RDB持久化机制 配置文件redis.conf save 60 1000 表示每隔60s,检查如果有超过1000个key发生了变更,那么就生成一个新的dump.rdb文件,就是当前redi ...
- 借助FRP反向代理实现内网穿透
一.frp 是什么? frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP.UDP.HTTP.HTTPS 等多种协议.可以将内网服务以安全.便捷的方式通过具有公网 IP 节点的中转暴露到公 ...
- python123期末四题编程题 -无空隙回声输出-文件关键行数-字典翻转输出-《沉默的羔羊》之最多单词
1. 无空隙回声输出 描述 获得用户输入,去掉其中全部空格,将其他字符按收入顺序打印输出. ...
- Struts+Servlet+JDBC网上手机销售系统
项目描述 Hi,大家好,今天给大家分享一个<网上手机销售系统>.本系统一共分为前台和后台两大模块,两个模块之间虽然在表面上是相互独立的,但是在对数据库的访问上是紧密相连的,各个模块访问的是 ...
- 启用和禁用warning
#pragma warning 启用和禁用warning https://www.cnblogs.com/Free-Thinker/p/5897678.html
- 移动开发中如何整合HTML 5和原生代码
移动开发中如何整合HTML 5和原生代码 https://blog.csdn.net/lvjin110/article/details/41038565
- Spine学习四 - 在动作上绑定回调事件
Spine事件特性: SpineEvent(string startsWith = "", string dataField = "", bool includ ...
- [BUUOJ记录] [BJDCTF2020]EasySearch
前面的突破点考察swp泄露以及md5截断认证,最后一步考察ssi注入 进入题目是一个登陆页面什么提示都没有,工具扫了一下发现swp泄露,得到登录验证页面的源码: <?php ob_start() ...
- openshift 4.3中安装helm3并通过helm方式部署应用
openshift 4.3中安装helm3并通过helm方式部署应用 简介 Helm是一个命令行界面(CLI)工具,可简化将应用程序和服务部署到OpenShift Container Platform ...
