mirror of
https://github.com/Xevion/processing-projects.git
synced 2025-12-06 01:15:57 -06:00
Game of Life sketch game
This commit is contained in:
90
games/GameOfLife/GameOfLife.pyde
Normal file
90
games/GameOfLife/GameOfLife.pyde
Normal file
@@ -0,0 +1,90 @@
|
||||
class Board:
|
||||
def __init__(self, x, y):
|
||||
self.width, self.height = x, y
|
||||
self.divX, self.divY = width / float(self.width), height / float(self.height)
|
||||
self.board = [[False for _ in range(self.width)] for _ in range(self.height)]
|
||||
|
||||
def render(self):
|
||||
for y, row in enumerate(self.board):
|
||||
for x, cell in enumerate(row):
|
||||
translate(self.divX * x, self.divY * y)
|
||||
if cell:
|
||||
fill(212, 226, 15)
|
||||
elif not cell:
|
||||
fill(99, 99, 97)
|
||||
stroke(204)
|
||||
rect(0, 0, self.divX, self.divY)
|
||||
textAlign(CENTER, CENTER)
|
||||
fill(255)
|
||||
# text(str(self.neighbors(x,y)), self.divX / 2.0, self.divY / 2.0)
|
||||
resetMatrix()
|
||||
|
||||
def neighbors(self, x, y):
|
||||
global offsets
|
||||
# (X, Y, Active)
|
||||
neighbors = []
|
||||
for offX, offY in offsets:
|
||||
newX, newY = (x + offX, y + offY)
|
||||
if not self.valid(newX, newY):
|
||||
continue
|
||||
elif self.board[newY][newX]:
|
||||
neighbors.append((newX, newY))
|
||||
return len(neighbors)
|
||||
|
||||
def tick(self):
|
||||
temp = []
|
||||
for y, row in enumerate(self.board):
|
||||
for x, cell in enumerate(row):
|
||||
neighbors = self.neighbors(x, y)
|
||||
# populated
|
||||
if cell:
|
||||
if neighbors < 2 or neighbors > 3:
|
||||
temp.append((x, y))
|
||||
# elif neighbors >= 2 and <= 3:
|
||||
# pass
|
||||
# unpopulated
|
||||
elif not cell:
|
||||
if neighbors == 3:
|
||||
temp.append((x, y))
|
||||
for togX, togY in temp:
|
||||
self.toggle(togX, togY)
|
||||
|
||||
def click(self, x, y):
|
||||
x /= self.divX
|
||||
y /= self.divY
|
||||
x, y = int(x), int(y)
|
||||
self.toggle(x, y)
|
||||
return x, y
|
||||
|
||||
def toggle(self, x, y):
|
||||
self.board[y][x] = not self.board[y][x]
|
||||
|
||||
def valid(self, x, y):
|
||||
return not(x < 0 or y < 0 or x >= self.width or y >= self.height)
|
||||
|
||||
def setup():
|
||||
size(750, 750)
|
||||
global board, paused, offsets
|
||||
board = Board(50, 50)
|
||||
paused = True
|
||||
offsets = [(0, 1), (0, -1), (1, 0), (-1, 0), (1, 1), (-1, -1), (1, -1), (-1, 1)]
|
||||
frameRate(60)
|
||||
|
||||
def draw():
|
||||
global board, paused
|
||||
background(0)
|
||||
if not paused:
|
||||
board.tick()
|
||||
board.render()
|
||||
|
||||
def mouseClicked():
|
||||
x, y = board.click(mouseX, mouseY)
|
||||
|
||||
def keyPressed():
|
||||
global paused
|
||||
paused = not paused
|
||||
if paused:
|
||||
frameRate(60)
|
||||
elif not paused:
|
||||
frameRate(10)
|
||||
print('Paused: {}'.format(str(paused)))
|
||||
2
games/GameOfLife/sketch.properties
Normal file
2
games/GameOfLife/sketch.properties
Normal file
@@ -0,0 +1,2 @@
|
||||
mode=Python
|
||||
mode.id=jycessing.mode.PythonMode
|
||||
11
games/README.md
Normal file
11
games/README.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# games
|
||||
|
||||
## About
|
||||
|
||||
Games made within the Processing.py library. Includes both actively player driven games and automata.
|
||||
|
||||
## Sketches
|
||||
|
||||
- **GameOfLIfe** - Conway's Game of Life.
|
||||
|
||||
- **Minesweeper** - Simple single-player puzzle. Somewhat incomplete in that it starts immediately with no start button or win conditions.
|
||||
Reference in New Issue
Block a user