NRE的编程笔记

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

格子类的原理

在制作推箱子,五子棋,消消乐等游戏时,我们一般会用到格子类的思想。因为这类游戏的地图都很类似网格,非常有规律。

格子类的原理有以下几点很重要

1、所有游戏物体的坐标一定是正整数且类似网格有规律的排列。我们可以通过游戏物体的坐标(x,y),去对应二维数组的索引器[a,b],也就是说我们我们可以通过游戏物体的坐标找到二维数组中对应的对象,也可以通过二维数组中的对象找到对应的游戏物体在世界坐标轴中的位置。

2、使用格子类做游戏,一定要明白我们其实搭建了两层地图,一层给玩家看,一层给电脑看。游戏画面这一层是给玩家看的,二维数组这一层才是给电脑看的,程序员和玩家都是看不见的。然后通过第一点将这两层地图关联起来。

3、二维数组中每个对象身上一般都会有一个变量,我们就是通过每个对象身上变量的值不同,来进行我们需要的一系列判断,来维持游戏的运行、操作等。

格子类的搭建如下图所示:(下图代码只是单纯的搭建格子类,没有和游戏物体相结合。和游戏物体相结合只需要改动一下即可,毕竟原理一致。)

复制代码
 1 public enum GridType//格子类型枚举
 2 {
 3     gridType1,
 4     gridType2
 5 }
 6 
11 public class Grid//单个格子类
12 {
13     private GridType _gridType;
14     public GridType gridType
15     {
16         get { return _gridType; }
17         set { _gridType = value; }
18     }
19 }
20 
21 public class Grids//总的格子类
22 {
23     public static Grid[,] grids = new Grid[10, 10];//建立一个 Grid 类型的二维数组,用来存放 Grid 类型的对象。
24 
25     public static void CreateMap()//通过 for 循环,将 grids 二维数组中的每个元素都赋值,完成格子类的初始化。
26     {
27         for (int i = 0; i < grids.GetLength(0); i++)
28         {
29             for (int j = 0; j < grids.GetLength(1); j++)
30             {
31                 grids[i, j] = new Grid();
32             }
33         }
34     }
35 
36     //通过坐标找到 grids 数组中对应的 Grid 对象。
37     public static Grid GetGrid(Vector3 pos)
38     {
39         return grids[(int)pos.x, (int)pos.y];
40     }
41 
42     //通过坐标对 Grid 对象的 gridType 变量进行赋值。
43     public static void SetGrid(Vector3 pos, GridType type)
44     {
45         GetGrid(pos).gridType = type;
46     }
47 }
复制代码

 

在进行坐标和索引之间的转换时,我们需要注意一点:由于程序在运行时,会出现误差,有时候的计算不会刚刚好,所以我们需要想清楚是用int进行数据的转换,还是用四舍五入的方法进行数据转换。例如我想要的是2,但是电脑由于误差,计算为1.999,用int转,这个值就会变成1,但是用四舍五入转就会是2,这点差别需要搞清楚。

posted on   NRE  阅读(618)  评论(0编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示