Excelで人生ゲームを作るにはどうすればよいですか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/511835

  •  21-08-2019
  •  | 
  •  

質問

私は Excel でマクロを作成する方法をほとんど知りません。

役に立ちましたか?

解決

は長い時間前にこれを行っている必要がありますが、ここでは、Excelでコンウェイの人生の私のバージョンです。

ここでは、コードのハックです。何のことで完璧なソリューションを意味しません(これに年齢を費やすことはありませんでした)しかし、あなたはいくつかのビットを取り出すことができるかもしれません。

Private arrGrid(100, 100) As Boolean
Private arrGridNextGeneration(100, 100) As Boolean

Private Sub PopulateParentArrayData()

For k = 1 To Sheet1.Range("C2:AM20").Cells.Count

If Sheet1.Range("C2:AM20").Cells(k).Interior.Color = Sheet1.Range("A1").Interior.Color Then

    arrGrid(Sheet1.Range("C2:AM20").Cells(k).Row, Sheet1.Range("C2:AM20").Cells(k).Column) = True
Else
    arrGrid(Sheet1.Range("C2:AM20").Cells(k).Row, Sheet1.Range("C2:AM20").Cells(k).Column) = False
End If
DoEvents
Next
End Sub

Private Sub ApplyParentArrayData()

For k = 1 To Sheet1.Range("C2:AM20").Cells.Count

If arrGrid(Sheet1.Range("C2:AM20").Cells(k).Row, Sheet1.Range("C2:AM20").Cells(k).Column) Then

    Sheet1.Range("C2:AM20").Cells(k).Interior.Color = Sheet1.Range("A1").Interior.Color
Else
    Sheet1.Range("C2:AM20").Cells(k).Interior.Color = Sheet1.Range("B1").Interior.Color
End If
    DoEvents
Next

End Sub

Private Sub ApplyNextGenerationArrayData()

For k = 1 To Sheet1.Range("C2:AM20").Cells.Count

    If arrGridNextGeneration(Sheet1.Range("C2:AM20").Cells(k).Row, Sheet1.Range("C2:AM20").Cells(k).Column) Then

        Sheet1.Range("C2:AM20").Cells(k).Interior.Color = Sheet1.Range("A1").Interior.Color
    Else
        Sheet1.Range("C2:AM20").Cells(k).Interior.Color = Sheet1.Range("B1").Interior.Color
    End If
    DoEvents
Next

End Sub

Private Function GetNeighbourCount(ByVal pintRow As Integer, ByVal pintColumn As Integer) As Integer

Dim intCount As Integer

intCount = 0

For r = pintRow - 1 To pintRow + 1

For c = pintColumn - 1 To pintColumn + 1

If r <> pintRow Or c <> pintColumn Then
If arrGrid(r, c) Then

    intCount = intCount + 1
End If
End If
Next c
Next r

GetNeighbourCount = intCount

End Function

Private Sub PopulateNextGenerationArray()

Dim intNeighbours As Integer

For r = 0 To 100
For c = 0 To 100

If r > Sheet1.Range("C2:AM20").Rows(0).Row Then
If r <= Sheet1.Range("C2:AM20").Rows(Sheet1.Range("C2:AM20").Rows.Count).Row Then
If c > Sheet1.Range("C2:AM20").Columns(0).Column Then
If c <= Sheet1.Range("C2:AM20").Columns(Sheet1.Range("C2:AM20").Columns.Count).Column Then



 intNeighbours = GetNeighbourCount(r, c)
If arrGrid(r, c) Then
    'A1 cell
    If intNeighbours < 2 Or intNeighbours > 3 Then
        arrGridNextGeneration(r, c) = False
    Else
        arrGridNextGeneration(r, c) = True
    End If

Else
    'B1 cell
    If intNeighbours = 3 Then
        arrGridNextGeneration(r, c) = True
    Else
        arrGridNextGeneration(r, c) = False
    End If
End If
End If
End If
End If
End If
DoEvents
Next c
Next r

End Sub

Private Sub ActionLogic()


'Application.ScreenUpdating = False

PopulateParentArrayData
PopulateNextGenerationArray
ApplyNextGenerationArrayData

'Application.ScreenUpdating = True
End Sub

この作業を取得するには、単にセルB1の背景が白、セルA1の背景を黒にし、その後、範囲C2のいくつかの黒の背景を追加します。AM20をしてActionLogicメソッドを実行します。

他のヒント

は、Googleを通じて多くの例を見つけることができます。

非常に最初の結果は、循環参照数式や反復(関与なしVBA)について教えるためにライフゲームを使用していますデビッド・ゲイナーさんのブログからの投稿です。

http://blogs.office.com / 2007/11月2日/反復-conwaysゲーム・オブ・ライフ

2 つのマクロが必要になります。最初のものは、セルが正方形になるようにゲームシートをフォーマットする必要があります。

ユーザーにこのマクロを実行してもらいます。その後、生きているセルごとに 1 を入力する必要があります。条件付き書式を使用してセルを完全に黒にします (値 != 0 の場合、背景 = 黒)。

次に、バックグラウンド シート (別のシート) で次のステップを計算する 2 番目のマクロを作成します。相対セル位置 (ActiveCell を基準とした) と 2 つのネストされたループを使用します。これが完了したら、すべての値を背景シートからゲーム シートにコピーします。

それを検索し、そのコードを見て。人々が充実していますが、それExcelで完全なゲームを作るために趣味なりました。

例: http://www.geocities.jp/nchikada/pac/する

なぜあなたは、Excelが間違った選択であると言うのですか?

私は、Excelは、この問題を解決するための最良の方法だと思います:

Excelは、1行でこれを解決します。 IF(OR(SUM(B2:D4)-C3 = 3、AND(SUM(B2:D4)-C3 = 2、C3 = 1))、1,0)

※上記は、セルC3のための次世代の値を返す式である。

ここでのデモです: https://docs.google.com/open?id=0B4FcWULw3iQidlZSdG9GRDh0TXMする

あなたは最初から物事のこの種を実装する必要が状況にいる場合は、

、その後、関数型プログラミングは行くための最良の方法です。そうでない場合、Excelは本当によく働きます。どうして? Excelは純関数のみを入力するように強制するシステムであるため。あなたは人生のこのゲームをシミュレートするための鍵は、セルの各状態が以前の状態のPURE FUNCTIONであることを認識することがある、参照してください。 Excelが自然にあなたがこの方法を考えることを強制します。

Excelの循環参照に別のチュートリアルでは、ここで見つけることができます:<のhref = "http://chandoo.org/wp/2009/01/08/timestamps-excel-formula-help/" のrel = "nofollowをnoreferrer 「> http://chandoo.org/wp/2009/01/08/timestamps-excel-formula-help/ の

この1つはあなたが循環参照を使用してタイムスタンプを挿入する方法について説明します。

Excelは間違いなく、この種の問題のために間違った選択です。それは可能でしょうかに関しては:まず、その後の人生のとのゲームについて学びます< href = "http://en.wikipedia.org/wiki/Visual_Basic" のrel = "nofollowをnoreferrer"> Excelで使用するためのVisual Basicするます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top