curses.endwin()
sys.exit(0)
- def add_fruit(self):
- r, c = self.random.choice([
+ def random_empty_tile(self):
+ return self.random.choice([
(r, c)
for r, row in enumerate(self.tiles)
for c, tile in enumerate(row)
if tile is TileContents.Empty
])
+
+ def add_fruit(self):
+ r, c = self.random_empty_tile()
fruit_type = self.random.choices(
[TileContents.Fruit, TileContents.TurboFruit, TileContents.PortalFruit],
weights=[0.8, 0.1, 0.1]
life = 150
self.tiles[r][c] = fruit_type
self.fruit.append(Fruit(r, c, life, id))
- r, c = self.random.choice([
- (r, c)
- for r, row in enumerate(self.tiles)
- for c, tile in enumerate(row)
- if tile is TileContents.Empty
- ])
+ r, c = self.random_empty_tile()
self.tiles[r][c] = fruit_type
self.fruit.append(Fruit(r, c, life, id))
for fruit in self.fruit
if fruit.life > 0
]
-
-
+
def write_highscore(self):
os.makedirs(os.path.dirname(self.highscore_file), exist_ok=True)
with open(self.highscore_file, 'w') as f:
self.snake.append((self.snake[-1][0] + 1, self.snake[-1][1]))
r, c = self.snake[-1]
if self.tiles[r][c] is TileContents.Fruit:
- self.fruit = [fruit for fruit in self.fruit if fruit.row != r or fruit.column != c]
+ self.fruit = [fruit for fruit in self.fruit if (fruit.row, fruit.column) != (r, c)]
self.tiles[r][c] = TileContents.Snake
self.score += 1
elif self.tiles[r][c] is TileContents.TurboFruit:
- self.fruit = [fruit for fruit in self.fruit if fruit.row != r or fruit.column != c]
+ self.fruit = [fruit for fruit in self.fruit if (fruit.row, fruit.column) != (r, c)]
self.tiles[r][c] = TileContents.Snake
self.score += 1
self.turbo = 100
elif self.tiles[r][c] is TileContents.PortalFruit:
- portal_id = [fruit.id for fruit in self.fruit if fruit.row == r or fruit.column == c]
+ portal_id = [fruit.id for fruit in self.fruit if (fruit.row, fruit.column) == (r, c)]
dest_portals = [
(fruit.row, fruit.column)
for fruit in self.fruit
if fruit.id in portal_id
and self.tiles[fruit.row][fruit.column] is TileContents.PortalFruit
- and fruit.row != r
- and fruit.column != c
+ and (fruit.row, fruit.column) != (r, c)
]
- self.fruit = [fruit for fruit in self.fruit if fruit.row != r or fruit.column != c]
+ self.fruit = [fruit for fruit in self.fruit if (fruit.row, fruit.column) != (r, c)]
if len(dest_portals) == 0:
self.tiles[r][c] = TileContents.Snake
r, c = self.snake[0]