Archive for January 2008

金山词霸,etc   2 comments

家里电脑:金山词霸2006
寝室电脑:金山词霸2007
笔记本:金山词霸2008
2008的界面我一看之下居然想到了MSN……不知道应该说是好还是说不好……
从字典词典方面居然能看到WEB2.0的影子,也真难为他们了。
 
明天要出去帮一位日本回来的亲戚看看她的电脑,据说两年没用突然就不能用了…………我都怀疑是不是两年下来灰把电脑给卡死了……
 
今天把自己的CityLegend的地图编辑器中的街道部分写完了。然后开始制定各种地图上的机关,比如银行什么的。结果居然构思出了50种不同的机关…………姚先生(你认为是姚明?去死吧)看了不知会做何感想…………
机关一多,突然发现许多SLG中的东西都跑了出来。不过我本来就打算打破TAB与SLG的界限的,所以也无妨。随后想啊想啊,又把RPG的要素放了进来。
现在感觉它比较像《英雄无敌》了。于是开始考虑是不是要做半战棋半即时的类型。这个比较有挑战,不过也已经想好了一种模式——奏不奏效要看做出来的东西来决定了。从现在的框架来说,不算是一个新鲜的东西,因为你可以从《轩辕剑》系列中看到影子——应该说是从我这看到它的影子……
VB6有一个缺陷,就是如果一个工程组中有两个工程,一个是DLL另一个是EXE,你用EXE去调用DLL,那么生成出来的EXE和DLL必须在编写环境目录下才能正常工作。事实上,你把EXE随便移位置无所谓,但是DLL的位置给限定死了。这个让人比较窝火。不知道有没有VB前辈研究过这个问题(以后有空我来研究下)。这个毛病导致的一个问题就是:我本来构思了一套非常好的XML+DLL的插件模式,但是由于DLL的位置给限定死了,这个方案就不能用了,于是以后游戏如果要拓展的话就不得不另写EXE了。如果这个问题解决掉的话,那我只要在EXE中写一个框架,然后所有的道具啊地图啊升级啊打仗啊都可以交给不同的DLL来处理了。所以可见,VB写大型工程存在着一定的局限性。VB.NET就没这个问题,但是我不想用.NET,因为.NET中对控件组的调用不如VB6那么方便——虽然早先已经想出了解决方案,不过还是不打算用.NET。

Posted January 29, 2008 by LostAbaddon in 世界叶

《宇宙涟漪中的星球》后   2 comments

作者谢云宁,在我看了一半的时候不得不出去找找他她的来历。
总结下来就是:不懂物理,特别是广义相对论。
不过这个没办法,他她到底不是物理系的学生(物理系的学生也不一定懂广义相对论……)。
比如,引力源不可能辐射偶极辐射——动量守恒要求的。但是他她的小说中所有的引力源信号发生器都是偶极辐射的…………(海因莱因的一篇小说中似乎也出现过这个问题)
再比如,质子构成的微型黑洞的引力效应和质子其实是相同的,只在视界附近的微小领域内不同,到他这一成黑洞就具有了无匹的威力…………
随后对超弦和宇宙学的狂想,完全是照着霍金老先生的书来的,不得不鄙视一下(崇拜也不是这么崇的),不但没有新意,而且极度不具备说服力。
小说后半部分似乎想用“终极关怀”的语气来叙述,不过显然失败了。导致的结果就是拖沓,让我直接想到了封建社会的裹脚布。
“终极关怀”自从刘慈欣的《三体》和学习失败的《深瞳》以后就一直充斥着中国科幻,不过没有一个是学得象样的。真是失望。

Posted January 26, 2008 by LostAbaddon in 思维测地线

雪·夜   2 comments

白雪纷下,思随落,雀飞沧横。
彩屏徐亮,情渐升,人走心随。
长夜共漫步,风冷,话白,人美。
此生同携手,无怨,无悔,无憾。

 

 

又是五分钟出品,果然可以当品牌用了……

Posted January 26, 2008 by LostAbaddon in 小词

计划   2 comments

虽然鄙人所立之放假计划基本就没实现过的先例,不过总要立个计划的,就算是为了以后哀悼自己有多么浪费时间,那也是好的。
 
2月以前,主要是写程序。名字都想好了,叫“CityLegend”。哇哈哈哈哈,不错吧~
类型嘛,是一个综合体。大家可以考虑把《仙剑》和《大富翁》搞在一起玩,然后时不时地还有《星际争霸》和《英雄无敌》的元素在里面胡搞瞎搞。
总之,具体效果要到做出来了才能知道。反正,是一款秉持我一贯风格的游戏,哦霍霍霍霍~
不过,别抱太大希望,因为图形图象部分我一点研究都没有。感觉如果是用Flash9+AS3的话应该能好不少,不过最后还是打算用VB6来写,于是图形图象方面暂时没想到什么好的解决方案。另一点,就是2月以前估计做不出什么大型的东西来,只能解决几个小问题。
2月以后,过年以前,做Flash贺卡。时间应该是够了。不过她应该收不到,因为已经回家了。
过年以后,开始看文献——这个时候已经没几天剩余了……
至于别的几个打算做而没做的东西,只能放到遥远的未来去做了…………
另,打算每天十点回自己房间,十二点睡觉,然后八点起床。——这个其实是本计划中最不可能实现的部分…………
 
 
PS:从计划表面看,无论如何都看不出我是搞物理的,于是感到很欣慰~~

Posted January 26, 2008 by LostAbaddon in 世界叶

回家啦,都回家啦   3 comments

这两天大家都回家了。
昨天去学校,官方说法是为了今天去见师兄,结果今天根本就没去见我那中科院的师兄——对师兄很不敬。
昨天去学校的理由嘛,是为了晚上的XX,不过真的到晚上以后发现问题多多。首先是我早到了,为了打消紧张的心情,于是出去走了圈,结果回来的时候发现她在等我了!!兵家大忌啊!!!!
随后,她第一句话就是让我猜见面的原因——这个立刻就让我慌了半截,感觉就和考试的时候发现题目都是我没看到过的问题时的心情是一样的。我支支吾吾,当然是答不出个所以然来——居然连蒙都没蒙出来,明显当时脑神经运转速度大减了。
然后她直接进入主题,让我在开始十分钟后就思考着现在怎么收场好。
原来大前天的时候就已经犯下不可饶恕的错误了——当时的想法是立刻让我中一个不可饶恕咒吧,比如钻心咒、夺魂咒和索命咒。
于是,剩下的近两个小时中满心都是沮丧和郁闷,导致的直接结果就是基本什么话都不会说,一晚上影响分大减。
今天起床后的心情也很郁闷。于是一天基本上都没联系她,算是在考虑怎么收拾这个残局吧。
28号她就走了,本来打算在学校呆到28号,但是算了算,估计有什么作为的话是不可能的,于是心丧若死下便回了家。
路上和元帅通行。打算8号线回去的,结果8号线浦东段由于施工而封站10天。临时改走454,结果多花了N个小时。气死我了。
冷静下来开始考虑这么几个很无聊的问题。比如为什么之类的。得到的答案是:这种问题别问,越问越想越郁闷。
于是,一晚上都在考虑这个假期干什么。总觉得源动力丧失了一样。

Posted January 25, 2008 by LostAbaddon in 世界叶

今天被打击了   8 comments

今天被严重打击了

Posted January 24, 2008 by LostAbaddon in 世界叶

双起点的Floyd算法的迷宫寻路应用   1 comment

这次做的是双起点的Floyd寻路算法
路径越复杂,它的优势越明显。30×30的0.3随机障碍中搜索路径,对角线的时候单起点平均用了55ms,而双起点平均32ms。从搜索面积上看,单起点搜索了差不多整张图,而双起点搜索了三分之二。对于简单的路径,由于双起点的代码比较多,因而速度上不占优势,有的时候甚至比单起点慢。
 
只给算法了:
 
Private Sub SeekRoadByTwoPoints(ByVal A As Integer, ByVal B As Integer, ByVal X As Integer, ByVal Y As Integer)
Dim ChainAX() As Integer, ChainAY() As Integer, ChainBX() As Integer, ChainBY() As Integer
Dim StickAX() As Integer, StickAY() As Integer, StickBX() As Integer, StickBY() As Integer
Dim I As Integer, N As Integer
Dim Found As Boolean
Dim TimeUsed As Single
TimeUsed = Timer
SelectionA(A, B) = 1
SelectionB(X, Y) = 1
N = 1
ReDim ChainAX(1)
ReDim ChainAY(1)
ReDim ChainBX(1)
ReDim ChainBY(1)
ReDim StickAX(1)
ReDim StickAY(1)
ReDim StickBX(1)
ReDim StickBY(1)
StickAX(1) = A
StickAY(1) = B
StickBX(1) = X
StickBY(1) = Y
Found = False
P = 0
Q = 0
Do While Not Found And UBound(ChainAX) > 0 And UBound(ChainBX) > 0
    N = N + 1
    ReDim ChainAX(0)
    ReDim ChainAY(0)
    ReDim ChainBX(0)
    ReDim ChainBY(0)
    For I = 1 To UBound(StickAX)
        If StickAX(I) < GridW Then
            If SelectionA(StickAX(I) + 1, StickAY(I)) = 0 And Not (Grids(StickAX(I) + 1, StickAY(I))) Then
                SelectionA(StickAX(I) + 1, StickAY(I)) = N
                ReDim Preserve ChainAX(UBound(ChainAX) + 1)
                ReDim Preserve ChainAY(UBound(ChainAY) + 1)
                ChainAX(UBound(ChainAX)) = StickAX(I) + 1
                ChainAY(UBound(ChainAY)) = StickAY(I)
            End If
        End If
        If StickAX(I) > 1 Then
            If SelectionA(StickAX(I) – 1, StickAY(I)) = 0 And Not (Grids(StickAX(I) – 1, StickAY(I))) Then
                SelectionA(StickAX(I) – 1, StickAY(I)) = N
                ReDim Preserve ChainAX(UBound(ChainAX) + 1)
                ReDim Preserve ChainAY(UBound(ChainAY) + 1)
                ChainAX(UBound(ChainAX)) = StickAX(I) – 1
                ChainAY(UBound(ChainAY)) = StickAY(I)
            End If
        End If
        If StickAY(I) < GridH Then
            If SelectionA(StickAX(I), StickAY(I) + 1) = 0 And Not (Grids(StickAX(I), StickAY(I) + 1)) Then
                SelectionA(StickAX(I), StickAY(I) + 1) = N
                ReDim Preserve ChainAX(UBound(ChainAX) + 1)
                ReDim Preserve ChainAY(UBound(ChainAY) + 1)
                ChainAX(UBound(ChainAX)) = StickAX(I)
                ChainAY(UBound(ChainAY)) = StickAY(I) + 1
            End If
        End If
        If StickAY(I) > 1 Then
            If SelectionA(StickAX(I), StickAY(I) – 1) = 0 And Not (Grids(StickAX(I), StickAY(I) – 1)) Then
                SelectionA(StickAX(I), StickAY(I) – 1) = N
                ReDim Preserve ChainAX(UBound(ChainAX) + 1)
                ReDim Preserve ChainAY(UBound(ChainAY) + 1)
                ChainAX(UBound(ChainAX)) = StickAX(I)
                ChainAY(UBound(ChainAY)) = StickAY(I) – 1
            End If
        End If
    Next
    ReDim StickAX(UBound(ChainAX))
    ReDim StickAY(UBound(ChainAY))
    For I = 1 To UBound(StickAX)
        StickAX(I) = ChainAX(I)
        StickAY(I) = ChainAY(I)
        If SelectionB(StickAX(I), StickAY(I)) > 0 Then Found = True: MidX = StickAX(I): MidY = StickAY(I)
    Next
    If Found Then Exit Do
    For I = 1 To UBound(StickBX)
        If StickBX(I) < GridW Then
            If SelectionB(StickBX(I) + 1, StickBY(I)) = 0 And Not (Grids(StickBX(I) + 1, StickBY(I))) Then
                SelectionB(StickBX(I) + 1, StickBY(I)) = N
                ReDim Preserve ChainBX(UBound(ChainBX) + 1)
                ReDim Preserve ChainBY(UBound(ChainBY) + 1)
                ChainBX(UBound(ChainBX)) = StickBX(I) + 1
                ChainBY(UBound(ChainBY)) = StickBY(I)
            End If
        End If
        If StickBX(I) > 1 Then
            If SelectionB(StickBX(I) – 1, StickBY(I)) = 0 And Not (Grids(StickBX(I) – 1, StickBY(I))) Then
                SelectionB(StickBX(I) – 1, StickBY(I)) = N
                ReDim Preserve ChainBX(UBound(ChainBX) + 1)
                ReDim Preserve ChainBY(UBound(ChainBY) + 1)
                ChainBX(UBound(ChainBX)) = StickBX(I) – 1
                ChainBY(UBound(ChainBY)) = StickBY(I)
            End If
        End If
        If StickBY(I) < GridH Then
            If SelectionB(StickBX(I), StickBY(I) + 1) = 0 And Not (Grids(StickBX(I), StickBY(I) + 1)) Then
                SelectionB(StickBX(I), StickBY(I) + 1) = N
                ReDim Preserve ChainBX(UBound(ChainBX) + 1)
                ReDim Preserve ChainBY(UBound(ChainBY) + 1)
                ChainBX(UBound(ChainBX)) = StickBX(I)
                ChainBY(UBound(ChainBY)) = StickBY(I) + 1
            End If
        End If
        If StickBY(I) > 1 Then
            If SelectionB(StickBX(I), StickBY(I) – 1) = 0 And Not (Grids(StickBX(I), StickBY(I) – 1)) Then
                SelectionB(StickBX(I), StickBY(I) – 1) = N
                ReDim Preserve ChainBX(UBound(ChainBX) + 1)
                ReDim Preserve ChainBY(UBound(ChainBY) + 1)
                ChainBX(UBound(ChainBX)) = StickBX(I)
                ChainBY(UBound(ChainBY)) = StickBY(I) – 1
            End If
        End If
    Next
    ReDim StickBX(UBound(ChainBX))
    ReDim StickBY(UBound(ChainBY))
    For I = 1 To UBound(StickBX)
        StickBX(I) = ChainBX(I)
        StickBY(I) = ChainBY(I)
        If SelectionA(StickBX(I), StickBY(I)) > 0 Then Found = True: MidX = StickBX(I): MidY = StickBY(I)
    Next
Loop
TimeUsed = Timer – TimeUsed
TxtMB.Text = TimeUsed * 1000
End Sub
Private Sub DrawTwoRoad()
Dim I As Integer, N As Integer, A As Integer, B As Integer
N = SelectionA(MidX, MidY)
ReDim RoadAX(N)
ReDim RoadAY(N)
RoadAX(1) = MidX
RoadAY(1) = MidY
For I = 2 To SelectionA(MidX, MidY)
    A = RoadAX(I – 1)
    B = RoadAY(I – 1)
    N = N – 1
    If A > 1 Then
        If SelectionA(A – 1, B) = N Then
            RoadAX(I) = A – 1
            RoadAY(I) = B
            GoTo NEXTSTEPA
        End If
    End If
    If A < GridW Then
        If SelectionA(A + 1, B) = N Then
            RoadAX(I) = A + 1
            RoadAY(I) = B
            GoTo NEXTSTEPA
        End If
    End If
    If B > 1 Then
        If SelectionA(A, B – 1) = N Then
            RoadAX(I) = A
            RoadAY(I) = B – 1
            GoTo NEXTSTEPA
        End If
    End If
    If B < GridH Then
        If SelectionA(A, B + 1) = N Then
            RoadAX(I) = A
            RoadAY(I) = B + 1
        End If
    End If
NEXTSTEPA:
Next
N = SelectionB(MidX, MidY)
ReDim RoadBX(N)
ReDim RoadBY(N)
RoadBX(1) = MidX
RoadBY(1) = MidY
For I = 2 To SelectionB(MidX, MidY)
    A = RoadBX(I – 1)
    B = RoadBY(I – 1)
    N = N – 1
    If A > 1 Then
        If SelectionB(A – 1, B) = N Then
            RoadBX(I) = A – 1
            RoadBY(I) = B
            GoTo NEXTSTEPB
        End If
    End If
    If A < GridW Then
        If SelectionB(A + 1, B) = N Then
            RoadBX(I) = A + 1
            RoadBY(I) = B
            GoTo NEXTSTEPB
        End If
    End If
    If B > 1 Then
        If SelectionB(A, B – 1) = N Then
            RoadBX(I) = A
            RoadBY(I) = B – 1
            GoTo NEXTSTEPB
        End If
    End If
    If B < GridH Then
        If SelectionB(A, B + 1) = N Then
            RoadBX(I) = A
            RoadBY(I) = B + 1
        End If
    End If
NEXTSTEPB:
Next
End Sub

Posted January 23, 2008 by LostAbaddon in 赛伯铁客

迷宫与寻路   2 comments

寻路用的是Floyd算法,还是我毕业课题时用的算法。
可以用双起点的Floyd,不过代码还没写。
 
迷宫制造:
VERSION 5.00
Begin VB.Form FrmMain
   Caption         =   "PuzzleMaze  MapMaker"
   ClientHeight    =   7155
   ClientLeft      =   120
   ClientTop       =   420
   ClientWidth     =   10800
   LinkTopic       =   "Form1"
   ScaleHeight     =   7155
   ScaleWidth      =   10800
   StartUpPosition =   3  ‘窗口缺省
   Begin VB.CommandButton CmdClean
      Caption         =   "Clean"
      Height          =   495
      Left            =   0
      TabIndex        =   8
      Top             =   2040
      Width           =   975
   End
   Begin VB.CommandButton CmdRandom
      Caption         =   "CmdRandom"
      Height          =   495
      Left            =   0
      TabIndex        =   7
      Top             =   2640
      Width           =   975
   End
   Begin VB.TextBox Text1
      Height          =   375
      Left            =   120
      TabIndex        =   6
      Text            =   "Text1"
      Top             =   4800
      Width           =   735
   End
   Begin VB.TextBox TxtH
      Height          =   270
      Left            =   480
      TabIndex        =   5
      Text            =   "1"
      Top             =   1560
      Width           =   500
   End
   Begin VB.TextBox TxtW
      Height          =   270
      Left            =   0
      TabIndex        =   4
      Text            =   "1"
      Top             =   1560
      Width           =   500
   End
   Begin VB.CommandButton CmdNew
      Caption         =   "New"
      Height          =   495
      Left            =   0
      TabIndex        =   3
      Top             =   1080
      Width           =   1000
   End
   Begin VB.CommandButton CmdLoad
      Caption         =   "Load"
      Height          =   495
      Left            =   0
      TabIndex        =   2
      Top             =   480
      Width           =   1000
   End
   Begin VB.PictureBox PicPuzzle
      BackColor       =   &H00FFFFFF&
      BorderStyle     =   0  ‘None
      Height          =   4095
      Left            =   3480
      ScaleHeight     =   4095
      ScaleWidth      =   5775
      TabIndex        =   1
      Top             =   1680
      Width           =   5775
   End
   Begin VB.CommandButton CmdSave
      Caption         =   "Save"
      Height          =   495
      Left            =   0
      TabIndex        =   0
      Top             =   0
      Width           =   1000
   End
End
Attribute VB_Name = "FrmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim Grids() As Boolean
Dim GridW As Integer, GridH As Integer
Dim Selection() As Boolean
Dim ClkBtn As Integer, ClkX As Integer, ClkY As Integer, ClkStat As Boolean, ClkOn As Boolean
Private Sub Form_Load()
PicPuzzle.Top = 0
PicPuzzle.Left = 1000
GridW = 30
GridH = 30
InitialMaze GridW, GridH
TxtW.Text = GridW
TxtH.Text = GridH
End Sub
Private Sub Form_Resize()
PicPuzzle.Width = Me.ScaleWidth – 1000
PicPuzzle.Height = Me.ScaleHeight
DrawMaze GridW, GridH
End Sub
Private Sub PicPuzzle_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim W As Single, H As Single
W = PicPuzzle.ScaleWidth / GridW
H = PicPuzzle.ScaleHeight / GridH
Text1.Text = Int(X / W + 1) & "," & Int(Y / H + 1)
ClkX = Int(X / W + 1)
ClkY = Int(Y / H + 1)
If ClkOn Then
    PicPuzzle_Click
End If
End Sub
Private Sub PicPuzzle_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
ClkOn = False
End Sub
Private Sub PicPuzzle_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim W As Single, H As Single
W = PicPuzzle.ScaleWidth / GridW
H = PicPuzzle.ScaleHeight / GridH
Text1.Text = Int(X / W + 1) & "," & Int(Y / H + 1)
ClkX = Int(X / W + 1)
ClkY = Int(Y / H + 1)
ClkBtn = Button
ClkStat = Grids(ClkX, ClkY)
ClkOn = True
End Sub
Private Sub PicPuzzle_Click()
On Error GoTo ERR
ClkStat = Grids(ClkX, ClkY)
If ClkBtn = 1 Then
    DrawGrid ClkX, ClkY
ElseIf ClkBtn = 2 Then
    DrawGrid ClkX, ClkY, True
End If
ERR:
End Sub
Private Sub PicPuzzle_DblClick()
Dim I As Integer, J As Integer
Dim W As Single, H As Single
W = PicPuzzle.Width / GridW
H = PicPuzzle.Height / GridH
Grids(ClkX, ClkY) = ClkStat
FillField ClkX, ClkY
PicPuzzle.AutoRedraw = True
For I = 0 To GridW
    For J = 0 To GridH
        If Selection(I, J) Then
            If ClkBtn = 1 And ClkStat = False Then
                PicPuzzle.Line (W * I – W, H * J – H)-(W * I, H * J), vbBlue, BF
                Grids(I, J) = True
            End If
            If ClkBtn = 2 And ClkStat = True Then
                PicPuzzle.Line (W * I – W, H * J – H)-(W * I, H * J), vbWhite, BF
                Grids(I, J) = False
            End If
            PicPuzzle.Line (W * I – W, H * J – H)-(W * I, H * J), vbBlack, B
        End If
    Next
Next
PicPuzzle.AutoRedraw = False
End Sub
Private Sub CmdSave_Click()
Dim FileName As String
Dim ST As String
Dim I As Integer, J As Integer
FileName = InputBox("FileName:", "Maze Map Maker", "Maze")
FileName = App.Path & "Map" & FileName & ".maze"
ST = ""
For I = 1 To GridW
    For J = 1 To GridH
        If Grids(I, J) Then
            ST = ST & "1"
        Else
            ST = ST & "0"
        End If
    Next
    ST = ST & ";"
Next
Open FileName For Output As #1
Print #1, ST
Close #1
End Sub
Private Sub CmdLoad_Click()
Dim FileName As String
Dim ST As String, STS() As String
Dim I As Integer, J As Integer
FileName = InputBox("FileName:", "Maze Map Maker", "Maze")
FileName = App.Path & "Map" & FileName & ".maze"
Open FileName For Input As #1
Input #1, ST
Close #1
STS = Split(ST, ";")
GridH = Len(STS(0))
GridW = UBound(STS)
ReDim Grids(GridW, GridH)
For I = 0 To GridW – 1
    For J = 1 To GridH
        If Mid(STS(I), J, 1) = "0" Then
            Grids(I + 1, J) = False
        Else
            Grids(I + 1, J) = True
        End If
    Next
Next
DrawMaze GridW, GridH
TxtW.Text = GridW
TxtH.Text = GridH
End Sub
Private Sub CmdNew_Click()
GridW = Int(Val(TxtW.Text))
GridH = Int(Val(TxtH.Text))
InitialMaze GridW, GridH
DrawMaze GridW, GridH
End Sub
Private Sub CmdClean_Click()
Dim I As Integer, J As Integer
For I = 1 To GridW
    For J = 1 To GridH
        Grids(I, J) = False
    Next
Next
DrawMaze GridW, GridH
End Sub
Private Sub CmdRandom_Click()
Dim I As Integer, J As Integer
Dim Seed As Single
Seed = Val(InputBox("Input Seed Number:", "Maze Map Maker", 0.5))
Randomize
For I = 1 To GridW
    For J = 1 To GridH
        If Rnd > Seed Then
            Grids(I, J) = True
        End If
    Next
Next
DrawMaze GridW, GridH
End Sub
Private Sub TxtH_Change()
TxtH.Text = Int(Val(TxtH.Text))
End Sub
Private Sub TxtW_Change()
TxtW.Text = Int(Val(TxtW.Text))
End Sub
Private Sub InitialMaze(ByVal X As Integer, ByVal Y As Integer)
Dim I As Integer, J As Integer
ReDim Grids(X, Y)
For I = 1 To X
    For J = 1 To Y
        Grids(I, J) = False
    Next
Next
End Sub
Private Sub DrawMaze(ByVal X As Integer, ByVal Y As Integer)
Dim I As Integer
Dim PX As Single, PY As Single
Dim W As Single, H As Single
W = PicPuzzle.Width / X
H = PicPuzzle.Height / Y
PicPuzzle.AutoRedraw = True
PicPuzzle.Cls
ReDrawGrid
For I = 0 To X – 1
    PicPuzzle.Line (W * I, 0)-(W * I, PicPuzzle.Height), vbBlack
Next
For I = 0 To Y – 1
    PicPuzzle.Line (0, H * I)-(PicPuzzle.Width, H * I), vbBlack
Next
PicPuzzle.AutoRedraw = False
End Sub
Private Sub DrawGrid(ByVal X As Integer, ByVal Y As Integer, Optional ByVal IsClean As Boolean = False)
Dim W As Single, H As Single
W = PicPuzzle.Width / GridW
H = PicPuzzle.Height / GridH
PicPuzzle.AutoRedraw = True
If IsClean Then
    PicPuzzle.Line (W * X – W, H * Y – H)-(W * X, H * Y), vbWhite, BF
Else
    PicPuzzle.Line (W * X – W, H * Y – H)-(W * X, H * Y), vbBlue, BF
End If
PicPuzzle.Line (W * X – W, H * Y – H)-(W * X, H * Y), vbBlack, B
PicPuzzle.AutoRedraw = False
Grids(X, Y) = Not (IsClean)
End Sub
Private Sub ReDrawGrid()
Dim I As Integer, J As Integer
Dim W As Single, H As Single
W = PicPuzzle.Width / GridW
H = PicPuzzle.Height / GridH
PicPuzzle.Line (0, 0)-(PicPuzzle.Width, PicPuzzle.Height), vbWhite, B
For I = 0 To GridW
    For J = 0 To GridH
        If Grids(I, J) Then
            PicPuzzle.Line (W * I – W, H * J – H)-(W * I, H * J), vbBlue, BF
        End If
    Next
Next
End Sub
Private Function FillField(ByVal X As Integer, ByVal Y As Integer)
Dim I As Integer, J As Integer
Dim Stat As Boolean
Stat = Grids(X, Y)
ReDim Selection(GridW, GridH)
For I = 0 To GridW
    For J = 0 To GridH
        Selection(I, J) = False
    Next
Next
FindNext X, Y, Stat
End Function
Private Sub FindNext(ByVal X As Integer, ByVal Y As Integer, ByVal Stat As Boolean)
Selection(X, Y) = True
If X > 1 And X < GridW Then
    If Grids(X – 1, Y) = Stat And Selection(X – 1, Y) = False Then FindNext X – 1, Y, Stat
    If Grids(X + 1, Y) = Stat And Selection(X + 1, Y) = False Then FindNext X + 1, Y, Stat
ElseIf X = 1 Then
    If Grids(X + 1, Y) = Stat And Selection(X + 1, Y) = False Then FindNext X + 1, Y, Stat
ElseIf X = GridW Then
    If Grids(X – 1, Y) = Stat And Selection(X – 1, Y) = False Then FindNext X – 1, Y, Stat
End If
If Y > 1 And Y < GridH Then
    If Grids(X, Y – 1) = Stat And Selection(X, Y – 1) = False Then FindNext X, Y – 1, Stat
    If Grids(X, Y + 1) = Stat And Selection(X, Y + 1) = False Then FindNext X, Y + 1, Stat
ElseIf Y = 1 Then
    If Grids(X, Y + 1) = Stat And Selection(X, Y + 1) = False Then FindNext X, Y + 1, Stat
ElseIf Y = GridH Then
    If Grids(X, Y – 1) = Stat And Selection(X, Y – 1) = False Then FindNext X, Y – 1, Stat
End If
End Sub
 
寻路:
VERSION 5.00
Begin VB.Form FrmGame
   Caption         =   "迷宫寻路"
   ClientHeight    =   7230
   ClientLeft      =   120
   ClientTop       =   420
   ClientWidth     =   10965
   LinkTopic       =   "Form1"
   ScaleHeight     =   7230
   ScaleWidth      =   10965
   StartUpPosition =   3  ‘窗口缺省
   Begin VB.CommandButton CmdShow
      Caption         =   "ShowRange"
      Height          =   500
      Left            =   3120
      TabIndex        =   3
      Top             =   0
      Width           =   1095
   End
   Begin VB.CommandButton CmdExit
      Caption         =   "Exit"
      Height          =   500
      Left            =   1560
      TabIndex        =   2
      Top             =   0
      Width           =   1095
   End
   Begin VB.CommandButton CmdLoad
      Caption         =   "LoadMaze"
      Height          =   500
      Left            =   0
      TabIndex        =   1
      Top             =   0
      Width           =   1095
   End
   Begin VB.PictureBox PicPuzzle
      BackColor       =   &H00FFFFFF&
      BorderStyle     =   0  ‘None
      Height          =   4095
      Left            =   3120
      ScaleHeight     =   4095
      ScaleWidth      =   5775
      TabIndex        =   0
      Top             =   1680
      Width           =   5775
   End
End
Attribute VB_Name = "FrmGame"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim Grids() As Boolean
Dim GridW As Integer, GridH As Integer
Dim Selection() As Integer
Dim SelectionA() As Integer, SelectionB() As Integer
Dim RoadX() As Integer, RoadY() As Integer
Dim FX As Integer, FY As Integer, TX As Integer, TY As Integer
Private Sub Form_Load()
PicPuzzle.Top = 500
PicPuzzle.Left = 0
GridW = 30
GridH = 30
InitialMaze GridW, GridH
FX = 1
FY = 1
End Sub
Private Sub Form_Resize()
PicPuzzle.Width = Me.ScaleWidth
PicPuzzle.Height = Me.ScaleHeight – 500
DrawMaze GridW, GridH
End Sub
Private Sub PicPuzzle_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim W As Single, H As Single
Dim I As Integer
On Error GoTo ERR
W = PicPuzzle.ScaleWidth / GridW
H = PicPuzzle.ScaleHeight / GridH
TX = Int(X / W + 1)
TY = Int(Y / H + 1)
ReDim Selection(GridW, GridH)
If Grids(TX, TY) = False Then
    SeekRoad FX, FY, TX, TY
    If Selection(TX, TY) = 0 Then
        FX = TX
        FY = TY
        Exit Sub
    End If
    DrawRoad TX, TY
    PicPuzzle.Cls
    For I = UBound(RoadX) To 1 Step -1
        DrawGrid RoadX(I), RoadY(I), 3
    Next
    DrawGrid TX, TY, 2
    FX = TX
    FY = TY
End If
ERR:
End Sub
Private Sub CmdLoad_Click()
Dim FileName As String
Dim ST As String, STS() As String
Dim I As Integer, J As Integer
FileName = InputBox("FileName:", "Maze Map Maker", "Maze")
FileName = App.Path & "Map" & FileName & ".maze"
Open FileName For Input As #1
Input #1, ST
Close #1
STS = Split(ST, ";")
GridH = Len(STS(0))
GridW = UBound(STS)
ReDim Grids(GridW, GridH)
For I = 0 To GridW – 1
    For J = 1 To GridH
        If Mid(STS(I), J, 1) = "0" Then
            Grids(I + 1, J) = False
        Else
            Grids(I + 1, J) = True
        End If
    Next
Next
DrawMaze GridW, GridH
FX = 1
FY = 1
End Sub
Private Sub CmdShow_Click()
Dim I As Integer, J As Integer, S As Integer
Dim W As Single, H As Single
W = PicPuzzle.ScaleWidth / GridW
H = PicPuzzle.ScaleHeight / GridH
PicPuzzle.Cls
For I = 1 To GridW
    For J = 1 To GridH
        S = Selection(I, J) / Selection(TX, TY) * 255
        If Not Grids(I, J) Then PicPuzzle.Line ((I – 1) * W, (J – 1) * H)-(I * W, J * H), RGB(S, S, S), BF
    Next
Next
For I = UBound(RoadX) To 1 Step -1
    DrawGrid RoadX(I), RoadY(I), 3
Next
DrawGrid TX, TY, 2
End Sub
Private Sub CmdExit_Click()
End
End Sub
 
Private Sub InitialMaze(ByVal X As Integer, ByVal Y As Integer)
Dim I As Integer, J As Integer
ReDim Grids(X, Y)
For I = 1 To X
    For J = 1 To Y
        Grids(I, J) = False
    Next
Next
End Sub
Private Sub DrawMaze(ByVal X As Integer, ByVal Y As Integer)
Dim I As Integer
Dim PX As Single, PY As Single
Dim W As Single, H As Single
W = PicPuzzle.Width / X
H = PicPuzzle.Height / Y
PicPuzzle.AutoRedraw = True
PicPuzzle.Cls
ReDrawGrid
For I = 0 To X – 1
    PicPuzzle.Line (W * I, 0)-(W * I, PicPuzzle.Height), vbBlack
Next
For I = 0 To Y – 1
    PicPuzzle.Line (0, H * I)-(PicPuzzle.Width, H * I), vbBlack
Next
PicPuzzle.AutoRedraw = False
End Sub
Private Sub DrawGrid(ByVal X As Integer, ByVal Y As Integer, Optional ByVal IsClean As Integer = 1)
Dim W As Single, H As Single
W = PicPuzzle.Width / GridW
H = PicPuzzle.Height / GridH
If IsClean < 2 Then PicPuzzle.AutoRedraw = True
If IsClean = 1 Then
    PicPuzzle.Line (W * X – W, H * Y – H)-(W * X, H * Y), vbWhite, BF
ElseIf IsClean = 0 Then
    PicPuzzle.Line (W * X – W, H * Y – H)-(W * X, H * Y), vbBlue, BF
ElseIf IsClean = 2 Then
    PicPuzzle.Line (W * X – W, H * Y – H)-(W * X, H * Y), vbGreen, BF
ElseIf IsClean = 3 Then
    PicPuzzle.Line (W * X – W, H * Y – H)-(W * X, H * Y), vbRed, BF
End If
PicPuzzle.Line (W * X – W, H * Y – H)-(W * X, H * Y), vbBlack, B
If IsClean < 2 Then PicPuzzle.AutoRedraw = False
If IsClean < 2 Then Grids(X, Y) = Not (IsClean)
End Sub
Private Sub ReDrawGrid()
Dim I As Integer, J As Integer
Dim W As Single, H As Single
W = PicPuzzle.Width / GridW
H = PicPuzzle.Height / GridH
PicPuzzle.Line (0, 0)-(PicPuzzle.Width, PicPuzzle.Height), vbWhite, B
For I = 0 To GridW
    For J = 0 To GridH
        If Grids(I, J) Then
            PicPuzzle.Line (W * I – W, H * J – H)-(W * I, H * J), vbBlue, BF
        End If
    Next
Next
End Sub
Private Sub SeekRoad(ByVal A As Integer, ByVal B As Integer, ByVal X As Integer, ByVal Y As Integer)
Dim ChainX() As Integer, ChainY() As Integer
Dim StickX() As Integer, StickY() As Integer
Dim I As Integer, N As Integer
Selection(A, B) = 1
N = 1
ReDim ChainX(1)
ReDim ChainY(1)
ReDim StickX(1)
ReDim StickY(1)
StickX(1) = A
StickY(1) = B
Do While Selection(X, Y) = 0 And UBound(ChainX) > 0
    N = N + 1
    ReDim ChainX(0)
    ReDim ChainY(0)
    For I = 1 To UBound(StickX)
        If StickX(I) < GridW Then
            If Selection(StickX(I) + 1, StickY(I)) = 0 And Not (Grids(StickX(I) + 1, StickY(I))) Then
                Selection(StickX(I) + 1, StickY(I)) = N
                ReDim Preserve ChainX(UBound(ChainX) + 1)
                ReDim Preserve ChainY(UBound(ChainY) + 1)
                ChainX(UBound(ChainX)) = StickX(I) + 1
                ChainY(UBound(ChainY)) = StickY(I)
            End If
        End If
        If StickX(I) > 1 Then
            If Selection(StickX(I) – 1, StickY(I)) = 0 And Not (Grids(StickX(I) – 1, StickY(I))) Then
                Selection(StickX(I) – 1, StickY(I)) = N
                ReDim Preserve ChainX(UBound(ChainX) + 1)
                ReDim Preserve ChainY(UBound(ChainY) + 1)
                ChainX(UBound(ChainX)) = StickX(I) – 1
                ChainY(UBound(ChainY)) = StickY(I)
            End If
        End If
        If StickY(I) < GridH Then
            If Selection(StickX(I), StickY(I) + 1) = 0 And Not (Grids(StickX(I), StickY(I) + 1)) Then
                Selection(StickX(I), StickY(I) + 1) = N
                ReDim Preserve ChainX(UBound(ChainX) + 1)
                ReDim Preserve ChainY(UBound(ChainY) + 1)
                ChainX(UBound(ChainX)) = StickX(I)
                ChainY(UBound(ChainY)) = StickY(I) + 1
            End If
        End If
        If StickY(I) > 1 Then
            If Selection(StickX(I), StickY(I) – 1) = 0 And Not (Grids(StickX(I), StickY(I) – 1)) Then
                Selection(StickX(I), StickY(I) – 1) = N
                ReDim Preserve ChainX(UBound(ChainX) + 1)
                ReDim Preserve ChainY(UBound(ChainY) + 1)
                ChainX(UBound(ChainX)) = StickX(I)
                ChainY(UBound(ChainY)) = StickY(I) – 1
            End If
        End If
    Next
    ReDim StickX(UBound(ChainX))
    ReDim StickY(UBound(ChainY))
    For I = 1 To UBound(StickX)
        StickX(I) = ChainX(I)
        StickY(I) = ChainY(I)
    Next
Loop
End Sub
Private Sub DrawRoad(ByVal X As Integer, ByVal Y As Integer)
Dim I As Integer, N As Integer, A As Integer, B As Integer
N = Selection(X, Y)
ReDim RoadX(N)
ReDim RoadY(N)
RoadX(1) = X
RoadY(1) = Y
For I = 2 To N
    A = RoadX(I – 1)
    B = RoadY(I – 1)
    N = N – 1
    If A > 1 Then
        If Selection(A – 1, B) = N Then
            RoadX(I) = A – 1
            RoadY(I) = B
            GoTo NEXTSTEP
        End If
    End If
    If A < GridW Then
        If Selection(A + 1, B) = N Then
            RoadX(I) = A + 1
            RoadY(I) = B
            GoTo NEXTSTEP
        End If
    End If
    If B > 1 Then
        If Selection(A, B – 1) = N Then
            RoadX(I) = A
            RoadY(I) = B – 1
            GoTo NEXTSTEP
        End If
    End If
    If B < GridH Then
        If Selection(A, B + 1) = N Then
            RoadX(I) = A
            RoadY(I) = B + 1
        End If
    End If
NEXTSTEP:
Next
End Sub

Posted January 20, 2008 by LostAbaddon in 赛伯铁客

这两天(很没创意地有较这个名字)   4 comments

一放假就感觉没了动力——希望以后时刻都能保有动力。

大前天,在Flash8里看到了不少牛人,于是研究了一天的Flash AS(2和3),感觉有了不少的感悟。

Flash比我们想象得都要强大。Macromedia将AS引入Flash,使得Flash的动画和网络互动能力上升了不少。而Adobe将AS3引入Flash则大大提高了Flash的能力。现在的Flash已经可以和C#、J2相提并论了(某些方面)。当然,Flash不支持外调Dll,这样限制了它的部分功能。不过Flash与生俱来的图形图像能力却是它的一大优点。也难怪Microsoft会推出Sliverlight,Google会推出Gears了。富媒体的内容比我们想象地要广阔啊。就好比去年和前年我们还在想Web2会是什么,现在则发现Web2比我们想象的还要丰富。

上面这段话说得像是工作汇报一样,恶心。

随后,前天小龙来了。让人很无奈的,是第三次了,说要出去K歌的,结果他们都在寝室里Dota。让人很无奈。

从小龙那了解了不少关于架构的概念。架构师的工作感觉就像是战场上的指挥官,企业里的经理。他负责总体统筹软件的开发和结构,具体怎么做和做什么他则不管。他提出一个概念,别人按照他的感念来做。

不过,任何事情都有正反两面,CPU和内存要同时兼顾是几乎不可能的。对于小软件来说,一个很宏大的架构并不适合。任何架构都有自己的适用空间。现在的许多架构不适合小型企业和小型软件。事实上,正如汇编牛人从来不知接口为何物一样,不用架构也能完成不少工作。架构使得以后的管理和维护变得更顺利,更新需要的开销减小,分工合作的时候更加和谐,但是架构也使得一些很容易完成的事情变得复杂。比如AS2中两三行的代码,在AS3中需要十多行——虽然看上去更结构紧凑意图清晰了,但是从开发的角度说不见得,因为原本举手就能完成的工作现在需要多调用不少东西——都从原来的东西上“掉落”了下来。同样的情况在VB6和VB.NET中也有。VB6中的控件数组很实用,在VB.NET中则需要动不少脑经。难道控件数组就不是OOP了?显然不是。

因而,架构现在走的一条路是:把原本整合的东西都分拆了出来,以至于一些东西分拆得过分了。

用我导师的话说,这是西方文明的典型行为。从语言就能看出来:他们把东西不断地分啊分啊,最后期望的是把各个最小组件都了解清楚了,就把整个世界了解清楚了——这个在物理中也是如此。问题是,还原论不一定正确——事实上,我们几乎可以说这种观念是错的。

同样的,有没有一种架构是可以让开发者自由选择哪些要哪些不要。给你一个功能充足的模型,随后你可以从上面拨东西下来,也可以把东西加上去。

从某种程度上说,这个就需要C++中的多重继承来实现了。

这种想法和不断把东西搭起来并不相同。我把一个本来有的东西禁掉,和去调用另一个东西,这是两种不同的方法。至少从开发的角度说,这样的方式适合小型软件的开发,而且能保证效率。

如果以后有机会让我接触到编译原理,并且自己有时间开发编译器的话,我一定会走这条路。合有的时候比分好。

昨天,小龙走了,XM来了——中学等于是放假了,当老师的XM现在就处于放假状态了。于是,他过来Dota。

随后,今天元帅生日。中午接受了建议打算去邀请XXX,结果把明天打算说的话提前了。现在心里挺乱的。

这两天看到了不少Flash大师的作品,顿时战斗欲无限。

今天看到有人在研究Flash中的寻路算法。我想起了我以前做的一个寻路的东东,最变态的就是里面是用一张图片来保存地图信息的,包括房子、商店等等地图信息,都是用颜色来分辨的,感觉很不错。不过这个算法后来没深入下去,今天打算深入一下。

Posted January 20, 2008 by LostAbaddon in 世界叶

Flash雷电算法~~   2 comments

终于完成了分叉算法,于是雷电整体算是做完了——下面的事情就是参数细调了。
这个算法是用来生成静态雷电的。动态的(就是一闪而过然后消失)的也差不多,只不过是把内容分散到帧里而已。最简单的做法就是生成好静态的以后用Mask来动态显示,很方便的。
下面要开始研究烟火的算法了,哇哈哈哈哈。
以下是雷电主要算法:
依旧分四帧,一、二、四为关键帧。
第一帧:
var D:Number=1.5;//每段间距
var SMin:Number=10;//每段最小
var SMax:Number=20;//每段最大
var Layers:Number=0;//记录当前雷电数
var LayerMax:Number=500;//记录雷电最大数
var WQ:Number=10;//记录雷电的弯曲程度
var wq:Number=0;//记录每小段的长度
var w:Number=0;//记录每小段的位
var CD:Number=120;//记录每小段弯曲程度
var PMin:Number=0;//最低概率
var PMax:Number=2;//最大底部放大倍率
var X:Number=0;
var Y:Number=200;
var DMin:Number=10;
var FolkLength:Number=100;//分叉雷电长度
var FolkDis:Number=10;//分叉雷电生成间隔
var FolkHeight:Number=50;//分叉雷电产生高度下限
var FolkShift:Number=100;//分叉雷电横移量
var FolkSize:Number=0.5;//分叉雷电大小比率
var FolkAng:Number=0.6;//分叉雷电变化角度比率
function Initial(X:Number,Y:Number,LayerName:String,Layers:Number,LayerMax:Number){
 var i:Number;
 BallA._height=SMin*0.37;
 BallA._width=SMin*0.37;
 BallB._height=SMin;
 BallB._width=SMin;
 BallA._x=X;
 BallA._y=Y;
 BallB._x=X;
 BallB._y=Y;
 for(i=0;(i<=Layers)||(i<=LayerMax);i++){
  removeMovieClip(LayerName add "A" add i);
  removeMovieClip(LayerName add "B" add i);
 }
}
function MainLight(FX:Number,FY:Number,TX:Number,TY:Number){
 var i:Number;
 var wq:Number;
 var Ang:Number;
 var Beta:Number;
 var S:Number;
 var I:Number=1;
 var f:Number=0;
 var F:Number=FolkDis*Math.random();
 for(i=1;(BallA._y<=TY)&&(i<=LayerMax);){
  wq=WQ*Math.random();
  Beta=Math.pow(Math.random(),2);
  if(Math.random()>0.5)Beta=-Beta;
  Beta=Beta*(Math.pow(Math.abs((BallA._y-Y)/Y),0.5)+PMin);
  Ang=-Math.atan2(BallA._y-Y,X-BallA._x)+CD/180*Math.PI*Beta;
  for(w=0;(w<wq)&&(BallA._y<=Y)&&(i<=LayerMax);w++,i++,I++){
   duplicateMovieClip("BallA","BallA" add I,10005+I);
   duplicateMovieClip("BallB","BallB" add I,5+I);
   S=SMin+(SMax-SMin)*Math.random()*(1+PMax*(1-Math.abs((BallA._y-Y)/Y)));
   setProperty("BallA",_height,S*0.37);
   setProperty("BallA",_width,S*0.37);
   setProperty("BallB",_height,S);
   setProperty("BallB",_width,S);
   setProperty("BallA",_x,BallA._x+D*Math.cos(Ang));
   setProperty("BallA",_y,BallA._y+D*Math.sin(Ang));
   setProperty("BallB",_x,BallB._x+D*Math.cos(Ang));
   setProperty("BallB",_y,BallB._y+D*Math.sin(Ang));
  }
  f++;
  if((f>=F)&&(BallA._y<=TY-FolkHeight)){
   f=0;
   F=FolkDis*Math.random();
   if(Math.random()>0.5){
    I=FolkLight(BallA._x,BallA._y,BallB._x,BallB._y,BallA._x+FolkShift+100*Math.random(),BallA._y+100*Math.random(),I);
   }else{
    I=FolkLight(BallA._x,BallA._y,BallB._x,BallB._y,BallA._x-FolkShift-100*Math.random(),BallA._y+100*Math.random(),I);
   }
  }
  I+=2;
 }
 return I;
}
function FolkLight(FX:Number,FY:Number,BX:Number,BY:Number,TX:Number,TY:Number,Sts:Number){
 var i:Number;
 var wq:Number;
 var Ang:Number;
 var Beta:Number;
 var S:Number;
 var I:Number=Sts;
 var Length:Number=FolkLength*Math.random();
 var R:Number=Math.sqrt(Math.pow(FX-TX,2)+Math.pow(FY-TY,2));
 var r:Number=Math.sqrt(Math.pow(BallA._x-TX,2)+Math.pow(BallA._y-TY,2));
 for(i=1;(r>=DMin)&&(i<=Length);){
  wq=WQ*Math.random();
  Beta=Math.pow(Math.random(),2);
  if(Math.random()>0.5)Beta=-Beta;
  Beta=Beta*(Math.pow(r/R,0.5)+PMin);
  Ang=-Math.atan2(BallA._y-TY,TX-BallA._x)+CD*FolkAng/180*Math.PI*Beta;
  for(w=0;(w<wq)&&(r<=Dmin)&&(i<=Length);w++,i++,I++){
   duplicateMovieClip("BallA","BallA" add I,10005+I);
   duplicateMovieClip("BallB","BallB" add I,5+I);
   S=SMin+(SMax-SMin)*Math.random();
   S*=FolkSize;
   setProperty("BallA",_height,S*0.37);
   setProperty("BallA",_width,S*0.37);
   setProperty("BallB",_height,S);
   setProperty("BallB",_width,S);
   setProperty("BallA",_x,BallA._x+D*FolkSize*Math.cos(Ang));
   setProperty("BallA",_y,BallA._y+D*FolkSize*Math.sin(Ang));
   setProperty("BallB",_x,BallB._x+D*FolkSize*Math.cos(Ang));
   setProperty("BallB",_y,BallB._y+D*FolkSize*Math.sin(Ang));
   setProperty("BallA" add I,_alpha,200*Math.min((r-DMin)/R,(Length-i)/Length));
   setProperty("BallB" add I,_alpha,200*Math.min((r-DMin)/R,(Length-i)/Length));
   r=Math.sqrt(Math.pow(BallA._x-TX,2)+Math.pow(BallA._y-TY,2));
  }
  I+=2;
 }
 BallA._x=FX;
 BallA._y=FY;
 BallB._x=BX;
 BallB._y=BY;
 return I;
}
 
第四帧:
X=X+10*(2*Math.random()-1);
removeMovieClip("Point");
this.createEmptyMovieClip("Point",1);
this.Point.lineStyle(1,0xffffff,100);
this.Point.moveTo(X,Y);
this.Point.lineTo(X,Y-10);
Initial(0,0,"Ball",Layers,LayerMax);
Layers=MainLight(0,0,X,200);
removeMovieClip("Over");

Posted January 16, 2008 by LostAbaddon in 赛伯铁客