FANDOM


Versión tradicional Editar

Option Explicit

Module Bacterias

  Private bCreadas As Boolean
  Private iColumnas As Byte
  Private iFilas As Byte
  Private abBacterias(,) As Boolean

  Public Sub BacteriasCrear( _
    ByVal Columnas As Byte, _
    ByVal Filas As Byte _
  )

    iColumnas = Columnas
    iFilas = Filas
    ReDim abBacterias( _
      iColumnas, _
      iFilas _
    )
    bCreadas = True

  End Sub

  Public Function BacteriasNacer( _
    ByVal Columna As Byte, _
    ByVal Fila As Byte _
  ) As Boolean

    BacteriasNacer = False
    If Not bCreadas Then Exit Function
    If FueraDeRango(Columna, Fila) Then
      Exit Function
    End If
    abBacterias(Columna - 1, Fila - 1) = True
    BacteriasNacer = True
  End Function

  Public Function BacteriasMorir( _
    ByVal Columna As Byte, _
    ByVal Fila As Byte _
  )
    BacteriasMorir = False
    If Not bCreadas Then Exit Function
    If FueraDeRango(Columna - 1, Fila - 1) Then
      Exit Function
    End If
    abBacterias(Columna - 1, Fila - 1) = False
    BacteriasMorir = True
  End Function

  Public Function BacteriasViva( _
   ByVal Columna As Byte, _
   ByVal Fila As Byte _
  ) As Boolean
    BacteriasViva = False
    If Not bCreadas Then Exit Function
    If FueraDeRango(Columna - 1, Fila - 1) Then
      Exit Function
    End If
    BacteriasViva = abBacterias(Columna - 1, Fila - 1)
  End Function

  Public Function BacteriasCreadas() As Boolean
    BacteriasCreadas = bCreadas
  End Function

  Public Function BacteriasColumnas() As Long
    BacteriasColumnas = iColumnas
  End Function

  Public Function BacteriasFilas() As Long
    BacteriasFilas = iFilas
  End Function

  Private Function FueraDeRango( _
    ByVal Columna As Byte, _
    ByVal Fila As Byte _
  ) As Boolean
    FueraDeRango = False
    If _
      Columna < 1 Or _
      Columna > iColumnas Or _
      Fila < 1 Or _
      Fila > iFilas _
    Then
      FueraDeRango = True
    End If
  End Function

End Module

Código para contar el número de bacterias Editar

...
Dim ab(,) As Boolean
ReDim ab( _
  BacteriasColumnas, _
  BacteriasFilas _
)

Dim i As Byte
Dim j As Byte
Dim iVecinas As Byte

For j = 1 To BacteriasFilas()
  For i = 1 To BacteriasColumnas()

    iVecinas = 0

    If BacteriasViva(i - 1, j - 1) Then
      iVecinas = iVecinas + 1
    End If
    If BacteriasViva(i - 0, j - 1) Then
      iVecinas = iVecinas + 1
    End If
    If BacteriasViva(i + 1, j - 1) Then
      iVecinas = iVecinas + 1
    End If

    If BacteriasViva(i - 1, j - 0) Then
      iVecinas = iVecinas + 1
    End If
    If BacteriasViva(i + 1, j - 0) Then
      iVecinas = iVecinas + 1
    End If

    If BacteriasViva(i - 1, j + 1) Then
      iVecinas = iVecinas + 1
    End If
    If BacteriasViva(i - 0, j + 1) Then
      iVecinas = iVecinas + 1
    End If
    If BacteriasViva(i + 1, j + 1) Then
      iVecinas = iVecinas + 1
    End If

    Select Case iVecinas
      Case 2
        ab(i, j) = BacteriasViva(i, j)
      Case 3
        ab(i, j) = True
      Case Else
        ab(i, j) = False
    End Select

  Next i
Next j
...

Código para actualizar el estado de la matriz de juego Editar

...
For j = 1 To BacteriasFilas()
  For i = 1 To BacteriasColumnas()
    If _
      ab(i, j) And _
      Not BacteriasViva(i, j) _
    Then
      Call BacteriasNacer(i, j)
    ElseIf _
      Not ab(i, j) And _
      BacteriasViva(i, j) _
    Then
      Call BacteriasMorir(i, j)
    End If
  Next i
Next j
...

Versión orientada a objetos Editar

Clase Bacteria Editar

Option Explicit On

Public Class Bacteria

  Private bViva As Boolean
  Private bCreada As Boolean
  Private iColumna As Byte
  Private iFila As Byte

  Sub Crear( _
    ByVal Columna As Byte, _
    ByVal Fila As Byte _
  )
    iColumna = Columna
    iFila = Fila
    bCreada = True
  End Sub

  Function Nacer() As Boolean
    Nacer = False
    If Not bCreada Then Exit Function
    bViva = True
    Nacer = True
  End Function

  Function Morir() As Boolean
    Morir = False
    If Not bCreada Then Exit Function
    bViva = False
    Morir = True
  End Function

  ReadOnly Property Viva() As Boolean
    Get
      Viva = bViva
    End Get
  End Property

  ReadOnly Property Creada() As Boolean
    Get
      Creada = bCreada
    End Get
  End Property

  Property Columna() As Byte
    Get
      Columna = iColumna
    End Get
    Set(ByVal iQueColumna As Byte)
      iColumna = iQueColumna
    End Set
  End Property

  Property Fila() As Byte
    Get
      Fila = iFila
    End Get
    Set(ByVal iQueFila As Byte)
      iFila = iQueFila
    End Set
  End Property

End Class

Probando la clase Bacteria Editar

Option Explicit On
Module Module1

  Sub Main()

    Dim MiBacteria As New Bacteria

    MiBacteria.Crear(1, 1)
    MiBacteria.Nacer()

    If MiBacteria.Viva Then
      MsgBox("¡Está viva!", , "Atención")
    End If

  End Sub

End Module

¡Interferencia de bloqueo de anuncios detectada!


Wikia es un sitio libre de uso que hace dinero de la publicidad. Contamos con una experiencia modificada para los visitantes que utilizan el bloqueo de anuncios

Wikia no es accesible si se han hecho aún más modificaciones. Si se quita el bloqueador de anuncios personalizado, la página cargará como se esperaba.