Math Adventures with Python
An Illustrated Guide to Exploring Math with Code
楽天ブックス(Kobo)
紀伊国屋書店(Kinoppy)
開発環境
- macOS Mojave - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Python 3.7 (プログラミング言語)
- Processing 3 (プログラミング言語、統合開発環境、グラフィック機能)
Math Adventures with Python: An Illustrated Guide to Exploring Math with Code (Peter Farrell(著)、No Starch Press)のPART 3(BLAZING YOUR OWN TRAIL)、9(BUILDING OBJECTS WITH CLASSES)、EXERCISE 9-2(SETTING SHEEP LIFESPAN)の解答を求めてみる。
コード
Python 3
import random import time patch_size = 10 sheep_list = [] grass_list = [] rows_of_grass = None class Sheep: def __init__(self, x, y): self.x = x self.y = y self.size = 10 self.energy = 20 self.age = 0 def update(self): self.age += 0.2 if self.age > 12: sheep_list.remove(self) return move = 10 self.x += random.randrange(-move, move + 1) self.y += random.randrange(-move, move + 1) if self.x > width: self.x %= width elif self.x < 0: self.x += width if self.y > height: self.y %= height elif self.y < 0: self.y += height x_scale = int(self.x / patch_size) y_scale = int(self.y / patch_size) grass = grass_list[x_scale * rows_of_grass + y_scale] if not grass.eaten: self.energy += grass.energy grass.eaten = True fill(255) ellipse(self.x, self.y, self.size, self.size) if self.energy <= 0: sheep_list.remove(self) elif self.energy >= 50: self.energy -= 30 sheep_list.append(Sheep(self.x, self.y)) class Grass: def __init__(self, x, y, size): self.x = x self.y = y self.energy = 2 self.eaten = False self.size = size def update(self): if self.eaten: if random.randrange(100) < 5: self.eaten = False else: fill(color(165, 42, 42)) else: fill(color(0, 255, 0)) rect(self.x, self.y, self.size, self.size) def setup(): global patch_size, grass_list, sheep_list, rows_of_grass size(960, 515) rows_of_grass = height / patch_size noStroke() grass_list = [Grass(x, y, patch_size) for x in range(0, width, patch_size) for y in range(0, height, patch_size)] sheep_list = [Sheep(random.randrange(width), random.randrange(height)) for _ in range(20)] def draw(): background(255) for grass in grass_list: grass.update() for sheep in sheep_list: sheep.update()
0 コメント:
コメントを投稿