MC新手入门(三十三)------ 数组

   在游戏设计中,我们常常要存放和读取游戏中的物品数量和名字,或者要读取不断变化的关卡数,这是我们就可以借助数组来实现。下面我们将对数组做详细的介绍。
       使用场景:实现 RPG 游戏中记录并显示物品栏中某物品的名称与数量
       目标:实现游戏道具名称和数量的存储和读取
       实例:

5-5-1.png



一维数组:

本案例实现的逻辑是:
             定义一维数组,
                 之后对数组进行赋值,记录道具的数量,
                    在点击物品时,读取数组的值,显示物品的数量。
实现的代码为:

                intitemNum[5];//定义一维数组itemNum,用来分别记录5种物品的数量   

                    int itemNum[5]  = 
                   {
                                           1,  // 魔法瓶的数量为 1
                                           3,  //  火柴的数量为 3
                                           5,  // 鞋子的数量为 5
                                           7,  // 石头的数量为 7
                                           9   // 剑的数量为 9
                  };
当鼠标点击鞋子后显示其数量 5-5-2.png 

代码为:

                  sprintf(txt.text1,"%d", itemNum[2]);


如此即可输出第三个物品鞋子的数量
从上面的例子可以得知:
                   数组的格式 :类型说明符    数组名 [ 常量表达式 ]       
                   数组的定义 :数组是有序数据 ( 必须是相同的数据类型结构 ) 的集合。
              例如 :
                        int itemNum[5];
一维数组的初始化
                 在对数组定义完毕后,我们将对数组进行初始化  
                 例如:

                         intitemNum[5]  =

                         {
                                               1,  // 魔法瓶的数量为 1
                                               3,  //  火柴的数量为 3
                                               5,  // 鞋子的数量为 5
                                               7,  // 石头的数量为 7
                                               9   // 剑的数量为 9
                         };

初始化完成后玩家就可对数组进行引用。
      数组的引用形式:
                         数组名 [ 下标 ]
数组必须先定义,后使用。只能逐个引用数组元素,而不能一次引用整个数组,其中,下标可以是整型常量也可以是整型表达式。

  但是我们会发现,鞋子的名字 “shoes” 无法显示,这时我们可以再定义一个
二维数组:
     实现的逻辑:
             定义二维数组,
                 之后对数组进行赋值,记录道具的名字,
    在点击物品时,读取数组的值,显示物品的名字。
   MC 中实现代码如下:

                              charitemName[5][6] ={  'm','a','n','a',' ',0,

                                                                     'm','a','t','c','h',0,
                                                                    
's','h','o','e','s',0,
                                                                    
's','t','o','n','e',0,
                                                                    
's','w','o','r','d',0
                                                                 }; // 定义二维数组 itemName, 用来分别记录 5 种物品的名字
当鼠标点击鞋子后显示其名字
              代码如下:

                                    for(i = 0; i< 6; i++)

                                    {

                                          sprintf(txt.text,"%c ", itemName[3]);

                                    }
如此即可输出第三个物品鞋子的名字
从上面的例子中可以知道,
       二维数组的格式  
                                  类型说明符    数组名 [ 常量表达式 1][ 常量表达式 2]  
       其中,表达式 1 表示:第一维下标的长度; 表达式 2 表示:第二维下标的长度;
注意:
二维数组在概念上是二维的 , 就是说其下标在两个方向上变化 , 数组元素在数组中的位置也处于一个平面中 , 并不向一维数组 , 所有的元素是线性的 , 但是 , 二维数组中的元素和一维数组中的元素一样 , 也是按线性存储的。
二维数组的初始化
二维数组定义完成后,需要对数组进行初始化如:

                                charitemName[5][6]={'m','a','n','a',' ',0,

                                                                        'm','a','t','c','h',0,
                                                                       
's','h','o','e','s',0,
                                                                       
's','t','o','n','e',0,
                                                                       
's','w','o','r','d',0
                                                                      
}
分别将: ‘mana’  ‘match’ ‘shoes’ ‘stone’ ‘ sword’ 5 个名称记录下来
二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可以按行分段赋值 , 也可以按行连续赋值。
1 、按行分段赋值

                      inta[2][3]={{1,2,3},{4,5,6}};

2 、按行连续赋值

                    inta[2][3]={1,2,3,4,5,6};

本节的实例就是使用连续赋值完成的
这两种赋值的结果是完全相同的;
说明 :
1 、可以只对部分元素赋值,未赋值的元素自动取 0
                  例如: int a[3][3]={{1},{2},{3}};
是对每行的第一列元素赋值 , 未赋值的元素自动取 0
2 、如果对所有的元素赋初值 , 则第一维的长度可以不给出;

      例如: inta[3][3]={1,2,3,4,5,6,7,8,9};

    可以改为: inta[][3]={1,2,3,4,5,6,7,8,9};

二维数组的引用
在数组初始化完毕后,即可进行引用如下:

                    for(i = 0; i <6; i++)

                           {

                          sprintf(txt.text,"%c ", itemName[3]);

                           }
使用for循环来为输出数组itemName[3][1] - itemName[3][6]的所有字符,即物品3的名称。
                引用形式:    数组名[下标][下标]
其中下标应该为整型常量或整型表达式:
                例如:

                     char itemName[3][4];

表示数组itemName的第三行第四列的元素为“s”。
注意:

        下标变量和数组说明在形式上有些相似,但这两者具有完全不同的含义。数组说明的方括号中给出的是某一维的长度;而数组元素中的下标是该元素在数组中的位置标识;数组说明中的方括号内只能是常量,而数组元素中方括号中的下标可以是常量,变量或表达式。

Demo下载地址:http://www.dongyo.cn/bbs/forum.php?mod=viewthread&tid=2501&extra=page%3D2%26filter%3Dauthor%26orderby%3Ddateline%26orderby%3Ddateline


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值