`
metaphy
  • 浏览: 339307 次
  • 性别: Icon_minigender_1
  • 来自: 大西洋底
社区版块
存档分类
最新评论

"生命游戏",VB

阅读更多

出差tmd累死,还用VB 做,还tmd这点米,无聊,写个小东西:


“生命游戏”

本世纪70年代,人们曾疯魔一种被称作“生命游戏”的小游戏,这种游戏相当简单。假设有一个像棋盘一样的方格网,每个方格中放置一个生命细胞,生命细胞只有两种状态:“生”或“死”。游戏规则如下:
1、如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生,即该细胞若原先为死,则转为生,若原先为生,则保持不变;
2、如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;
3、在其它情况下,该细胞为死,即该细胞若原先为生,则转为死,若原先为死,则保持不变。

依此规则进行迭代变化,使细胞生生死死,会得到一些有趣的结果。该游戏之所以被称为“生命游戏”,是因为其简单的游戏规则,反映了自然界中的生存规律:如果一个生命,其周围的同类生命太少的话,会因为得不到帮助而死亡;如果太多,则会因为得不到足够的资源而死亡。


VB project “生命游戏”
1.界面很简单,一个Start button,一个label
2.代码:

'by metaphy 
'2006-2-24
Option Explicit

Private AWIDTH As Integer
Private AHEIGHT As Integer
Private AX As Integer
Private AY As Integer
Private SIDELEN As Integer
Private orgStat As Variant      '细胞初始态
Private endStat As Variant      '结束态

'初始常量
Private Sub Form_Load()
'    mainfrm.BackColor = RGB(180, 180, 180)
    AX = 50
    AY = 50
    SIDELEN = 105
    AWIDTH = 100
    AHEIGHT = 70
    ReDim orgStat(100, 70) As Integer
    ReDim endStat(100, 70) As Integer
End Sub

'画布初始
Private Sub initCanvas()
    Dim i, j As Integer
    For i = 0 To AWIDTH
         Line (AX + i * SIDELEN, AY)-(AX + i * SIDELEN, AY + AHEIGHT * SIDELEN)
    Next
    
    For j = 0 To AHEIGHT
        Line (AX, AY + j * SIDELEN)-(AX + AWIDTH * SIDELEN, AY + j * SIDELEN)
    Next
End Sub

'画布重画
Private Sub reCanvas()
    Dim i, j As Integer
    
    For i = 0 To AWIDTH - 1
        For j = 0 To AHEIGHT - 1
            If endStat(i, j) = 1 Then
                'Line (AX + i * SIDELEN, AY + j * SIDELEN)-(AX + (i + 1) * SIDELEN, AY + (j + 1) * SIDELEN), RGB(255, 255, 0), BF
                Line (AX + i * SIDELEN + 1, AY + j * SIDELEN - 1)-(AX + (i + 1) * SIDELEN + 1, AY + (j + 1) * SIDELEN - 1), RGB(0, 0, 0), BF
            Else
                Line (AX + i * SIDELEN + 1, AY + j * SIDELEN - 1)-(AX + (i + 1) * SIDELEN + 1, AY + (j + 1) * SIDELEN - 1), RGB(255, 255, 255), BF
            End If
            
            If i = AWIDTH - 1 Then Line (AX, AY + j * SIDELEN)-(AX + AWIDTH * SIDELEN, AY + j * SIDELEN)
        Next
                
        Line (AX + i * SIDELEN, AY)-(AX + i * SIDELEN, AY + AHEIGHT * SIDELEN)

    Next
    
    i = AWIDTH
    j = AHEIGHT
    Line (AX + i * SIDELEN, AY)-(AX + i * SIDELEN, AY + AHEIGHT * SIDELEN)
    Line (AX, AY + j * SIDELEN)-(AX + AWIDTH * SIDELEN, AY + j * SIDELEN)
End Sub

'迭代,得到细胞状态
Private Sub changeState(times As Integer)
    Dim i, j, tim As Integer
    Dim lives As Integer
    
    For i = 0 To AWIDTH - 1
        For j = 0 To AHEIGHT - 1
            Randomize
            orgStat(i, j) = Int(2 * Rnd)
            endStat(i, j) = 0
        Next
    Next
    
    For tim = 0 To times - 1
        For i = 1 To AWIDTH - 2     '最外面一层不参与
            For j = 1 To AHEIGHT - 2
                lives = 0
                lives = orgStat(i - 1, j - 1) + orgStat(i, j - 1) + orgStat(i + 1, j - 1) _
                    + orgStat(i - 1, j) + orgStat(i + 1, j) _
                    + orgStat(i - 1, j + 1) + orgStat(i, j + 1) + orgStat(i + 1, j + 1)
                If lives = 2 Then
                    endStat(i, j) = orgStat(i, j)
                ElseIf lives = 3 Then
                    endStat(i, j) = 1
                Else
                    endStat(i, j) = 0
                End If
                
            Next
        Next
        
        For i = 0 To AWIDTH
            For j = 0 To AHEIGHT
                orgStat(i, j) = endStat(i, j)
            Next
        Next
    Next
    
End Sub

'显示部分信息
Private Sub someInfo(times As String)
    Label1.Caption = "迭代次数:" + times


End Sub
Private Sub Start_Click()
    Dim times As Integer
    Randomize
    times = Int(200 * Rnd + 1)
    Call someInfo(Str(times))
    
    Call changeState(times)
    Call reCanvas
    
End Sub

 

分享到:
评论

相关推荐

    康威生命游戏vb6源码

    康威生命游戏vb6源码,100*100格

    VB.NET 生命游戏

    用VB.NET编写的生命游戏,是一个很经典的程序!!! 希望大家支持

    用VB.NET编写的生命游戏,是一个很经典的程序!!!希望大家支持

    用VB.NET编写的生命游戏,是一个很经典的程序!!!希望大家支持

    tianwang.rar_vb 源码_天王_游戏数值_生命游戏

    天王游戏的修改源码,VB制作,可以锁定生命等等数值。

    生命游戏OPENGL

    基于openGL 的生命游戏源码,VB界面,VC DLL

    一款简单的VB赛车游戏源码.rar

    一款VB赛车游戏的源码,作者:星光,QQ:958796636  作者说明:这是我编的第一个游戏,注释很详细,不好玩的话就先将就吧……  原理:  1.用Photoshop抠图,制作透明突变,车!  2.图片移动实现车和子弹的移动...

    VB开发的坦克大战小游戏,源代码下载.rar

    VB写的坦克大战小游戏,小小的游戏,现在还称不上是单机,也算是学习使用VB编写游戏的一个练习版本吧。游戏控制方法:W,S,A,D控制坦克移动,空白键控制坦克发炮,碰到两个火墙会被烧死,敌军有5条生命,我方有2条...

    VB简单打飞机游戏源代码

    内容索引:VB源码,游戏编程,Vb游戏源码 游戏规则:  按w键是控制自己的飞机(天使)向上。  按S键向下,A键向左,D键向右,r键重来,e键退出  发弹:指着本程序介面按鼠标左键.  开始时:你的生命值只有3,而子弹数...

    VB写的坦克大战小游戏源代码

    摘要:VB源码,游戏编程,坦克大战,VB游戏源码 VB写的坦克大战小游戏,小小的游戏,现在还称不上是单机,也算是学习使用VB编写游戏的一个练习版本吧。游戏控制方法:W,S,A,D控制坦克移动,空白键控制坦克发炮,碰到两...

    VB编程资源大全(源码 其它4)

    g011.zip 生命游戏源程序(12KB) 588,g010.zip 一个精灵游戏源程序(33KB) 589,g009.zip 翻转棋游戏(64子, 每子正反面分别为黑白两色, 两人对弈)的源程序(29) 590,g008.zip 纸牌游戏源程序(45KB)...

    VB编程资源大全(源码 其它1)

    g011.zip 生命游戏源程序(12KB) 588,g010.zip 一个精灵游戏源程序(33KB) 589,g009.zip 翻转棋游戏(64子, 每子正反面分别为黑白两色, 两人对弈)的源程序(29) 590,g008.zip 纸牌游戏源程序(45KB)...

    VB课程设计俄罗斯方块

    为了怀念经典,也为了能够给大多的计算机用户在工作之余找到一个休闲、娱乐的一个方式,我们小组开始着手用VB语言开发一个经典的俄罗斯方块游戏。 工程概况 1.1 项目名称 俄罗斯方块游戏 1.2 设计平台 VB 全称...

    VB源码

    动画版是下一个大目标,在动画版做出来之前先慢慢丰富游戏内容,平衡游戏,增加游戏可玩度!之后的大目标的实现联网PVP对战,相信不久的将来,呈现给大家的是全新的《姓名大乐斗》!谢谢支持! 更新日期:2014.6.15...

    VB编写的格斗勇士游戏源代码免费放出.rar

     下面这段代码是延时代码,出现过很多次,作用是:让两张图片切换时能让我们看见,VB执行速度很快,不加入这个就会看不出来图片切换  Dim Savetime As Single  Savetime = Timer ‘记下开始的时间  While Timer ...

    VB游戏源码_姓名PK小游戏程序

    摘要:VB源码,数据库应用,PK游戏 VB编写的姓名PK小游戏源码,试玩时输入两个人的中文姓名,就可以模拟PK了。关于游戏的一些属性说明:  【生命】 当战斗时小于0时,战斗就失败并结束。当生命小于10时,有几率进行...

    VB编程资源大全(源码 其它3)

    g011.zip 生命游戏源程序(12KB) 588,g010.zip 一个精灵游戏源程序(33KB) 589,g009.zip 翻转棋游戏(64子, 每子正反面分别为黑白两色, 两人对弈)的源程序(29) 590,g008.zip 纸牌游戏源程序(45KB)...

    VB编程资源大全(源码 其它2)

    g011.zip 生命游戏源程序(12KB) 588,g010.zip 一个精灵游戏源程序(33KB) 589,g009.zip 翻转棋游戏(64子, 每子正反面分别为黑白两色, 两人对弈)的源程序(29) 590,g008.zip 纸牌游戏源程序(45KB)...

    生命游戏的实现:Conway的生命游戏以多种语言实现

    康威生活游戏的多语言实现 该项目的目标是以多种编程语言创建几乎相同的“ ”(GOL)实现。 我这样做是为了学习新的编程语言,并通过简单的实现粗略了解每种语言的语法差异和运行速度(没有特定语言的优化无法应用于...

    conway:康威生命游戏

    康威 Conway 在 clojure 中开发的元胞自动机游戏。 用法 整我 执照 版权所有 :copyright: 2015 FIXME 根据 Eclipse 公共许可证分发 1.0 版或(由您选择)任何更高版本。

Global site tag (gtag.js) - Google Analytics