Unity 3D游戏开发日常笔记(C# 了解集合)
2019.7.29(一)
namespace 集合
{
class Item {
//服务器数据、表数据
//服务器数据:等阶 等级,所有玩家都可能不一样的数据称为服务器数据
//表数据: 所有玩家都一样的:
public int id;//唯一的
public string name;
public int count;
public Item(int id, string name, int count) {
this.id = id;
this.name = name;
this.count = count;
}
}
class BagDataManager {
private static BagDataManager instance;
public static BagDataManager Instance {
get {
if (instance == null) {
instance = new BagDataManager();
}
return instance;
}
}
private BagDataManager() { }
Item[] items = new Item[4];
int count = 0;
/// <summary>
/// 将装备放入数组,先判断是否已经存了同种装备
/// 如果已经有了同种装备,修改数量即可
/// </summary>
/// <param name="item"></param>
public void Add(Item item) {
//如果已经有了同种装备,修改数量即可
for (int i = 0; i < count; i++)
{
if (items[i].id == item.id) {
items[i].count += item.count;
return;
}
}
//如果能运行到这个地方,说明数组中没有当前添加的装备
if (count < items.Length)
{
items[count] = item;
count++;
}
else {
//数组装不下,需要拓展数组
ExtendArr();
Add(item);
}
}
/// <summary>
/// 数组长度拓展一倍
/// </summary>
void ExtendArr() {
Item[] myItems = new Item[items.Length * 2];
for (int i = 0; i < items.Length; i++)
{
myItems[i] = items[i];
}
items = myItems;
}
/// <summary>
/// 删除指定id的装备
/// 为什么不进行传对象删除
/// </summary>
/// <param name="id"></param>
public void Delete(int id) {
for (int i = 0; i < count; i++)
{
if (items[i].id == id) {
items[i] = null;
MoveItem(i);
count--;
}
}
}
/// <summary>
/// 根据传对象的id来进行删除
/// </summary>
/// <param name="item"></param>
public void Delete(Item item) {
for (int i = 0; i < count; i++)
{
if (items[i].id == item.id) {
items[i] = null;
MoveItem(i);
count--;
}
}
}
/// <summary>
/// 删除某个装备之后,后面的数据往前挪
/// </summary>
/// <param name="index"></param>
void MoveItem(int index) {
for (int i = index; i < count-1; i++)
{
items[i] = items[i + 1];
items[i + 1] = null;
}
}
/// <summary>
/// 针对某个id的装备进行数量增加
/// </summary>
/// <param name="item"></param>
public void Change(int id,int count) {
for (int i = 0; i < this.count; i++)
{
if (items[i].id == id) {
items[i].count += count;
}
}
}
/// <summary>
/// 根据装备的id查装备信息
/// </summary>
public Item Find(int id) {
Item item = null;
for (int i = 0; i < count; i++)
{
if (items[i].id == id) {
item = items[i];
}
}
return item;
}
/// <summary>
/// 将当前这个装备插入到某个位置
/// </summary>
/// <param name="item"></param>
/// <param name="index"></param>
public void Insert(Item item,int index) {
//1.当前数组中是否已经有了当前装备
for (int i = 0; i < count; i++)
{
if (items[i].id == item.id) {
items[i].count += item.count;
return;
}
}
//2.当前装备数组中没有当前装备item
if (count >= items.Length)
{
//数组长度不够,需要拓展数组
ExtendArr();
}
MoveItemBack(index);
items[index] = item;
count++;
}
/// <summary>
/// 插入数据时,数据元素往后挪位置
/// </summary>
void MoveItemBack(int index) {
for (int i = count-1; i >= index ; i--)
{
items[i + 1] = items[i];
}
}
/// <summary>
/// 显示当前背包中所有装备数据
/// </summary>
public void Show() {
for (int i = 0; i < count; i++)
{
if (items[i] == null)
continue;
Console.WriteLine("装备:{0},数量:{1}",items[i].name,items[i].count);
}
}
}
class Program
{
static void Main(string[] args)
{
//Item:id、 等级 level、数量:count、名字:name;
//增 删 插 改 查
Item i1 = new Item(101, "大刀1", 3);
Item i2 = new Item(102, "大刀2", 7);
Item i3 = new Item(103, "靴子", 5);
Item i4 = new Item(104, "大力丸", 2);
Item i5 = new Item(105, "大刀3", 3);
Item i6 = new Item(101, "大刀1",4);
BagDataManager.Instance.Add(i1);
BagDataManager.Instance.Add(i2);
BagDataManager.Instance.Add(i3);
//BagDataManager.Instance.Add(i4);
BagDataManager.Instance.Add(i5);
//BagDataManager.Instance.Add(i6);
BagDataManager.Instance.Show();
//Item item = BagDataManager.Instance.Find(101);
// Console.WriteLine("数量:"+item.count);
Console.WriteLine( "-------------------");
// BagDataManager.Instance.Delete(i6.id);
//BagDataManager.Instance.Change(105, 5);
//BagDataManager.Instance.Show();
BagDataManager.Instance.Insert(i4, 1);
BagDataManager.Instance.Show();
Console.ReadKey();
}
}
}