Unity中国象棋(一)——初始化棋子
来源:互联网 发布:安卓6.0读取数据库 编辑:程序博客网 时间:2024/05/21 22:32
新建一个plane,作为背景,新建一个StoneManager脚本,挂在plane上
初始化32个棋子,每个棋子自带6个属性值:ID,x轴的坐标位置,y轴的坐标位置,是否为红子,是否死亡,棋子的类型。通过结构体Stone实现;
由于每个棋子的位置、类型难以通过ID区分,并且棋子的数量较少,故直接用结构体StonePos将其一一赋值;
利用其ID(也可利用其是否为红子的属性)和其类型,找到其对应的预制体,将其赋予给棋子并实现实例化
using UnityEngine;using System.Collections;using UnityEngine.UI;public class StoneManager : MonoBehaviour{ //初始化14种棋子的预制体 public GameObject che_black; public GameObject ma_black; public GameObject xiang_black; public GameObject shi_black; public GameObject jiang_black; public GameObject pao_black; public GameObject bing_black; public GameObject che_red; public GameObject ma_red; public GameObject xiang_red; public GameObject shi_red; public GameObject jiang_red; public GameObject pao_red; public GameObject bing_red; //初始化32个棋子 public static Stone[] s = new Stone[32]; public struct Stone { public enum TYPE { JIANG, CHE, PAO, MA, BING, SHI, XIANG }; //棋子的ID public int _id; //棋子是红子还是黑子,ID小于16的是红子,大于16是黑子 public bool _red; //棋子是否死亡 public bool _dead; //棋子在棋盘中的位置, public float _x; public float _y; //棋子的类型 public TYPE _type; //棋子初始化,赋予32个棋子对应的属性参数 public void init(int id) { _id = id; _red = id < 16; _dead = false; //每个点上的棋子的类型 StonePos[] pos = { new StonePos(-2.04f,2.25f,Stone.TYPE.CHE), new StonePos(-1.53f,2.25f,Stone.TYPE.MA), new StonePos(-1.02f,2.25f,Stone.TYPE.XIANG), new StonePos(-0.51f,2.25f,Stone.TYPE.SHI), new StonePos(0,2.25f,Stone.TYPE.JIANG), new StonePos(0.51f,2.25f,Stone.TYPE.SHI), new StonePos(1.02f,2.25f,Stone.TYPE.XIANG), new StonePos(1.53f,2.25f,Stone.TYPE.MA), new StonePos(2.04f,2.25f,Stone.TYPE.CHE), new StonePos(-1.53f,1.23f,Stone.TYPE.PAO), new StonePos(1.53f,1.23f,Stone.TYPE.PAO), new StonePos(-2.04f,0.72f,Stone.TYPE.BING), new StonePos(-1.02f,0.72f,Stone.TYPE.BING), new StonePos(0,0.72f,Stone.TYPE.BING), new StonePos(1.02f,0.72f,Stone.TYPE.BING), new StonePos(2.04f,0.72f,Stone.TYPE.BING), }; if (id < 16) { _x = pos[id].x; _y = pos[id].y; _type = pos[id].type; } else { _x = -pos[id - 16].x; _y = -pos[id - 16].y - 0.1f; _type = pos[id - 16].type; } } } /// <summary> /// 通过棋子的坐标,获得对应的类型,将三个值关联在一起 /// </summary> public struct StonePos { public float x, y; public Stone.TYPE type; public StonePos(float _x, float _y, Stone.TYPE _type) { x = _x; y = _y; type = _type; } } /// <summary> /// 通过棋子的ID和类型赋予棋子对应的预制体 /// </summary> /// <param name="id"></param> /// <param name="type"></param> /// <returns></returns> public GameObject GetPrefab(int id, StoneManager.Stone.TYPE type) { if (id < 16) { switch (type) { case StoneManager.Stone.TYPE.CHE: return che_red; case StoneManager.Stone.TYPE.MA: return ma_red; case StoneManager.Stone.TYPE.XIANG: return xiang_red; case StoneManager.Stone.TYPE.SHI: return shi_red; case StoneManager.Stone.TYPE.JIANG: return jiang_red; case StoneManager.Stone.TYPE.PAO: return pao_red; case StoneManager.Stone.TYPE.BING: return bing_red; } } else { switch (type) { case StoneManager.Stone.TYPE.CHE: return che_black; case StoneManager.Stone.TYPE.MA: return ma_black; case StoneManager.Stone.TYPE.XIANG: return xiang_black; case StoneManager.Stone.TYPE.SHI: return shi_black; case StoneManager.Stone.TYPE.JIANG: return jiang_black; case StoneManager.Stone.TYPE.PAO: return pao_black; case StoneManager.Stone.TYPE.BING: return bing_black; } } return bing_black; } /// <summary> /// 初始并实例化棋子 /// </summary> public void StoneInit() { for (int i = 0; i < 32; ++i) { s[i].init(i); } //实例化32个棋子 for (int i = 0; i < 32; ++i) { GameObject fabs = GetPrefab(i, s[i]._type); GameObject Stone = Instantiate(fabs, transform.localPosition, Quaternion.identity) as GameObject; Stone.name = i.ToString(); Stone.transform.position = new Vector3(s[i]._x, s[i]._y, 0); Stone.AddComponent<BoxCollider>(); } } void Awake() { StoneInit(); }}
0 0
- Unity中国象棋(一)——初始化棋子
- Unity中国象棋(三)——各类棋子规则
- Unity中国象棋(二)——走棋
- Unity独立开发——中国象棋
- (二)QT实现中国象棋(棋子实现)
- 中国象棋(一)
- Unity中国象棋(五)——网络对战的实现(服务端的基本功能)
- css练习007--中国象棋棋子
- 中国象棋对局软件设计(一)
- 中国象棋将帅问题(一)
- Unity中国象棋(四)——悔棋、判断胜负的实现,以及动画特效和代码的优化
- JAVA实践(一)————中国象棋打谱系统
- 中国象棋游戏Chess(1) - 棋盘绘制以及棋子的绘制
- C#中国象棋网络版源代码(二)-棋子类
- C#中国象棋代码-棋子移动类
- 无图片纯css实现中国象棋棋子
- Java实践(十二)——中国象棋
- 周赛(1)——中国象棋
- 匹配滤波器的物理解释
- 10.3.4
- Objective-C 内存管理
- 抽象工厂模式(13)
- 【NOIP2014模拟10.25A组】画矩形
- Unity中国象棋(一)——初始化棋子
- css精灵,滑动门
- Spark学习日记3
- 谷哥的小弟学前端(12)——JavaScript基础知识(3)
- 在结构体里设置字符串
- 这几天写链表版本的聊天室的感悟
- POJ 3414 Pots (BFS)
- 安卓页面跳转
- 改变您的HTTP服务器的缺省banner