質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

1回答

1930閲覧

processing pythonにてセルオートマトンゲーム作成

humihumiko

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

1グッド

0クリップ

投稿2021/07/27 16:17

前提・実現したいこと

BNN社出版の「generative art」を学習中で
Java(processing)で書かれたコードをpython(processing)に翻訳中です。
独自のクラスを使用しつつセールオートマトンゲームを作成したいです。

発生している問題・エラーメッセージ

エラーは吐かれないのですが、セルの色が変遷しません。

該当のソースコード

python

1_cellArray = [] 2_cellSize = 10 3_numX = 0 4_numY = 0 5 6def setup(): 7 global _numX, _numY, _cellSize 8 size(500, 300) 9 _numX = floor(width / _cellSize) 10 _numY = floor(height / _cellSize) 11 frameRate(10) 12 restart() 13 14def draw(): 15 global _numX, _numY, _cellArray,_cellSize 16 17 background(255) 18 19 for x in range(0, _numX): 20 for y in range(0, _numY): 21 _cellArray[x][y].calcNextState() 22 23 translate(_cellSize / 2, _cellSize / 2) 24 25 for x in range(0, _numX): 26 for y in range(0, _numY): 27 _cellArray[x][y].drawMe() 28 29 30 31def restart(): 32 global _numX, _numY, _cellArray, _cellSize 33 _cellArray = [['' for j in range(0, _numY + 1)]for i in range(0, _numX + 1)] 34 35 for x in range(0, _numX): 36 for y in range(0, _numY): 37 newCell = Cell(x, y) 38 _cellArray[x][y] = newCell 39 40 for x in range(0, _numX): 41 for y in range(0, _numY): 42 above = y - 1 43 below = y + 1 44 left = x - 1 45 right = x + 1 46 47 if above < 0: 48 above = _numY - 1 49 if below == _numY: 50 below = 0 51 if left < 0: 52 left = _numX - 1 53 if right == _numX: 54 right = 0 55 56 _cellArray[x][y].addNeighbour(_cellArray[left][above].state) 57 _cellArray[x][y].addNeighbour(_cellArray[left][y].state) 58 _cellArray[x][y].addNeighbour(_cellArray[left][below].state) 59 _cellArray[x][y].addNeighbour(_cellArray[x][below].state) 60 _cellArray[x][y].addNeighbour(_cellArray[x][above].state) 61 _cellArray[x][y].addNeighbour(_cellArray[right][above].state) 62 _cellArray[x][y].addNeighbour(_cellArray[right][y].state) 63 _cellArray[x][y].addNeighbour(_cellArray[right][below].state) 64 65 66def mousePressed(): 67 restart() 68 69 70class Cell: 71 72 def __init__(self, ex, why): 73 self.x = ex * _cellSize 74 self.y = why * _cellSize 75 if random(2) > 1: 76 self.nextState = True 77 else: 78 self.nextState = False 79 self.state = self.nextState 80 self.neighbours = [] 81 self.neighbours.append(self.state) 82 83 def addNeighbour(self, state): 84 self.neighbours.append(state) 85 86 def calcNextState(self): 87 liveCount = 0 88 for i in range(0, len(self.neighbours)): 89 if self.neighbours[i] == True: 90 liveCount += 1 91 if self.state == True: 92 if liveCount == 2 or liveCount == 3: 93 nextState = False 94 else: 95 nextState = True 96 else: 97 if liveCount == 1: 98 nextState = True 99 else: 100 nextState = False 101 102 def drawMe(self): 103 self.state = self.nextState 104 stroke(0) 105 if self.state == True: 106 fill(0) 107 else: 108 fill(255) 109 ellipse(self.x, self.y, _cellSize, _cellSize)

試したこと

draw関数は正常に動き、セルも意図した形に初期生成できているので
生死フラグがうまく読み込まれない、もしくは動作してない可能性があるのですが、
技術が未熟で判断できません。

補足情報(FW/ツールのバージョンなど)

processing 3.5.4
python mode

TN8001👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

BNN社出版の「generative art」を学習中で

書籍は持っていないのですが、原著のページからダウンロードできるコードと同じと考えていいでしょうか?(listing7_2)
Manning | Generative Art

エラーは吐かれないのですが、セルの色が変遷しません。

問題点は大きく二つ

  • nextStateself.がついていない
    ポカミスですね。
  • neighboursが元実装と同じ意味になっていない
    humihumikoさん的には少し変形しただけのつもりでしょうが、大きな違いが生じています。
    この辺下手な説明をするとマサカリが飛んでくるのでイヤなんですが^^;

プログラミング FAQ - なぜ list 'y' を変更すると list 'x' も変更されるのですか?
の逆(x = 5)のほうと、stateが同じ状態になってしまっています。
calcNextStateneighboursをチェックしますが、値が変わることがないのでいつまでたっても動きません。

ほか変更点
globalは代入があるものだけでいいです。
拡張for(foreach)を使えるところは使いました。
あとこまごまと微妙に違うところがあるのですが、打ち間違いでしょうか?(誤植?)

Python

1_cellArray = [] 2_cellSize = 10 3_numX = 0 4_numY = 0 5 6def setup(): 7 global _numX, _numY 8 size(500, 300) 9 _numX = floor(width / _cellSize) 10 _numY = floor(height / _cellSize) 11 restart() 12 13def restart(): 14 global _cellArray 15 _cellArray = [[0] * _numY for i in range(0, _numX)] 16 17 for x in range(0, _numX): 18 for y in range(0, _numY): 19 newCell = Cell(x, y) 20 _cellArray[x][y] = newCell 21 22 for x in range(0, _numX): 23 for y in range(0, _numY): 24 above = y - 1 25 below = y + 1 26 left = x - 1 27 right = x + 1 28 29 if above < 0: above = _numY - 1 30 if below == _numY: below = 0 31 if left < 0: left = _numX - 1 32 if right == _numX: right = 0 33 34 _cellArray[x][y].addNeighbour(_cellArray[left][above]) 35 _cellArray[x][y].addNeighbour(_cellArray[left][y]) 36 _cellArray[x][y].addNeighbour(_cellArray[left][below]) 37 _cellArray[x][y].addNeighbour(_cellArray[x][below]) 38 _cellArray[x][y].addNeighbour(_cellArray[right][below]) 39 _cellArray[x][y].addNeighbour(_cellArray[right][y]) 40 _cellArray[x][y].addNeighbour(_cellArray[right][above]) 41 _cellArray[x][y].addNeighbour(_cellArray[x][above]) 42 43def draw(): 44 background(200) 45 46 for col in _cellArray: 47 for cell in col: 48 cell.calcNextState() 49 50 translate(_cellSize / 2, _cellSize / 2) 51 52 for col in _cellArray: 53 for cell in col: 54 cell.drawMe() 55 56def mousePressed(): 57 restart() 58 59 60class Cell: 61 def __init__(self, ex, why): 62 self.x = ex * _cellSize 63 self.y = why * _cellSize 64 if random(2) > 1: 65 self.nextState = True 66 else: 67 self.nextState = False 68 self.state = self.nextState 69 self.neighbours = [] 70 71 def addNeighbour(self, cell): 72 self.neighbours.append(cell) 73 74 def calcNextState(self): 75 liveCount = 0 76 for cell in self.neighbours: 77 if cell.state == True: 78 liveCount += 1 79 if self.state == True: 80 if liveCount == 2 or liveCount == 3: 81 self.nextState = True 82 else: 83 self.nextState = False 84 else: 85 if liveCount == 3: 86 self.nextState = True 87 else: 88 self.nextState = False 89 90 def drawMe(self): 91 self.state = self.nextState 92 stroke(0) 93 if self.state == True: 94 fill(0) 95 else: 96 fill(255) 97 ellipse(self.x, self.y, _cellSize, _cellSize)

Java(processing)で書かれたコードをpython(processing)に翻訳中です。

私も最近OpenProcessingのp5.jsをJavaにしたりしています。
ただ移植するだけでも思わぬところではまったり、新たな発見があったりして面白いですよね^^

OpenProcessing - Creative Coding for the Curious Mind

投稿2021/07/27 21:33

TN8001

総合スコア9862

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

humihumiko

2021/07/30 08:33

ありがとうございます! 諸所非常に勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問