Game of Life sketch game

This commit is contained in:
Xevion
2019-11-02 15:37:01 -05:00
parent 440c0fc6ab
commit ca50661b36
3 changed files with 103 additions and 0 deletions

View 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)))

View File

@@ -0,0 +1,2 @@
mode=Python
mode.id=jycessing.mode.PythonMode

11
games/README.md Normal file
View 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.