网络软件系统工具应用软件图形图像多媒体类免费游戏安全相关免费音乐网页素材 电子书籍考试考题建站源码
教育教学多媒体类编程开发操作系统游戏天地娱乐天地简历求职站长专区网页设计安全技术图形图像文学驿站
业界资讯 | 图形图像 | 操作系统 | 网络冲浪 | 工具软件 | 办公软件 | 媒体动画 | 精文荟萃 | 认证考试 | 网页设计 | 技术开发 | 专栏
当前位置:热点网络学院媒体动画Director【Director教程】lists的使用一则
精品推荐
热点TOP10
·Director生成文件减肥技巧
·用Director控制动画GIF
·Director怎样制作自定义光标
·利用director.ini调试应用程序
·director使用mui xtra创建对话框
·director应用技巧
·Director中控制声音音量的几种方法
·DIRECTOR去背技法步步高
·Director 3D 基础(之七)
·Director 3D 基础(之六)
·Director 3D 基础(之五)
·Director 3D 基础(之四)
·Director 3D 基础(之三)
·Director 3D 基础(之二)
·Director 3D 基础(之一)
·Director制作《七巧板》游戏
·【Director教程】lists的使用一则
·【Director教程】属性列表应用一则
·【Director教程】创建随机列表
·【Director教程】解析文本和列表
【Director教程】lists的使用一则
日期:2006年10月15日 作者: 查看:[大字体 中字体 小字体]
(只是想为多媒体在国内的发展尽一份力。以下是翻译director online 上的一篇关于lists的文章,觉得简单有用,所以给大家共享。动机单纯。-------alalala)


  问题
  我创建了一个d8的扑克游戏,我需要想出一个怎样随机洗牌的方法。我知道有一个random()的功能,但是它只能适用于数字。我的牌是用合适的字和一个决定它花色的字母来命名的,如下:

  heart(红心)-AH,2H,3H,4H,5H,6H,7H,8H,9H,TH,JH,QH,KH

  回答
  你的想法是正确的,你需要的只是将random()语句和以你的命名规则所作的列表联系起来。Lists,列表对于保存和处理数据是非常强大的工具。我们设计lists的时候要考虑到游戏的需要。当你做了一次充分的洗牌,第一张牌是在52中选一。第二张牌是在51中选一,并且不同于第一张(第一张牌已从lists中删除了)。接下来的牌将从越来越小的范围里选择。

  我们从一副完整的牌的lists开始。这个命令只需执行一次,因为我们不需要改变这个lists.


On makefulldeck
Global gfulldeck
--初始化列表—
set gfulldeck=[]
set valuelist=[“a”,”2”,”3”,”4”,”5”,”6”,”7”,”8”,”9”,”t”,”j”,”q”,”k”]
set suitlist=[“H”,”D”,”C”,”S”]
--即红桃,黑桃,梅花,方片
repeat with whichsuit = 1 to 4
set thissuit = getat(sutilist,whichsuit)
repeat with whichvalue = 1 to 13
set thisvalue= getat(valuelist,whichvalue)
set thiscard= thisvalue & thissuit
append (gfulldeck,thiscard)
end repeat
end repeat
end

  在运行完这个命令之后,全局变量 gfulldeck 就会生成一个有序的扑克的列表。重要的是,我们必须认识到这个列表是没有“洗牌的”。

  现在我们做一个列表的拷贝,作为游戏中的列表。这个是我们用来在游戏中发牌的列表,所以列表中的数据在我们发牌的时候就会从列表中删除。这样我们在开始心游戏的时候,只需从新设置游戏的列表=列表的拷贝。注意的是,我们不能简单的写set ggamedeck=gfulldeck


on startnewgame
global gfulldeck,ggamedeck
set ggamedeck=duplicate(gfiulldeck)
end

  这是我们需要解决的怎样从ggamedeck中抽出一张随机的牌,并且将这张牌从以后的选择集中去除。我们将使用 random(), getAt(), deleteAt(), and count() 这些命令。可以用count(ggamedeck)的命令查询多少张牌剩余。我们还要确认这些剩下的牌不会再洗。在选择了牌以后,我会将sprite 5 替换(作为例子)。


on dealcard
global ggamedeck
set cardsleft=count(ggamedeck)
if cardsleft=0 then
alert “no more cards”
end if
set whichpick= random(cardleft)
set selectedcard=getat(ggamedeck,whichpick)
deleteat(ggamedeck,whichpick)
set the member of sprite 5=member selectedcard
end

  注意,我只使用了一次random()命令。以下是容易犯的错误。


Set selectedcard=getat(ggamedeck,random(cardsleft))
Deleteat(ggamedeck,random(cardsleft))

  这种情况下,你选择的和在列表里删除的不是同一张牌。

(出处:http://www.xmsc.com.cn

关于我们 | 帮助(?) | 版权声明 | 友情连接 
Copyright 2005-2005 xmsc.com.cn All Rights Reserved.
Powered by:mesky