Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions classes/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from .field import Field
from .snake import Snake
Binary file added classes/__pycache__/__init__.cpython-38.pyc
Binary file not shown.
Binary file added classes/__pycache__/field.cpython-38.pyc
Binary file not shown.
Binary file added classes/__pycache__/snake.cpython-38.pyc
Binary file not shown.
70 changes: 70 additions & 0 deletions classes/field.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import curses
import time
import sys
from random import randint

class Field:
def __init__(self, size):
self.size = size
self.icons = {
0: ' . ', # empty baord
1: ' ▢ ', # snake tail
2: ' ⏺ ', # snake head
3: ' △ ', # food
}
self.snake_coords = []
self._generate_field()
self.add_entity()

def add_entity(self):

while(True):
i = randint(0, self.size-1)
j = randint(0, self.size-1)
entity = [i, j]

if entity not in self.snake_coords:
self.field[i][j] = 3
break

def _generate_field(self):
self.field = [[0 for j in range(self.size)] for i in range(self.size)]

def _clear_field(self):
self.field = [[j if j!= 1 and j!= 2 else 0 for j in i] for i in self.field]


def render(self, screen):
size = self.size
self._clear_field()


# Render snake on the field
for i, j in self.snake_coords:
self.field[i][j] = 1

# Mark head
head = self.snake_coords[-1]
self.field[head[0]][head[1]] = 2

for i in range(size):
row = ''
for j in range(size):
row += self.icons[ self.field[i][j] ]

screen.addstr(i, 0, row)

def get_entity_pos(self):
for i in range(self.size):
for j in range(self.size):
if self.field[i][j] == 3:
return [i, j]

return [-1, -1]


def is_snake_eat_entity(self):
entity = self.get_entity_pos()
head = self.snake_coords[-1]
return entity == head

94 changes: 1 addition & 93 deletions snake.py → classes/snake.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,72 +3,6 @@
import sys
from random import randint

class Field:
def __init__(self, size):
self.size = size
self.icons = {
0: ' . ',
1: ' * ',
2: ' # ',
3: ' & ',
}
self.snake_coords = []
self._generate_field()
self.add_entity()

def add_entity(self):

while(True):
i = randint(0, self.size-1)
j = randint(0, self.size-1)
entity = [i, j]

if entity not in self.snake_coords:
self.field[i][j] = 3
break

def _generate_field(self):
self.field = [[0 for j in range(self.size)] for i in range(self.size)]

def _clear_field(self):
self.field = [[j if j!= 1 and j!= 2 else 0 for j in i] for i in self.field]


def render(self, screen):
size = self.size
self._clear_field()


# Render snake on the field
for i, j in self.snake_coords:
self.field[i][j] = 1

# Mark head
head = self.snake_coords[-1]
self.field[head[0]][head[1]] = 2

for i in range(size):
row = ''
for j in range(size):
row += self.icons[ self.field[i][j] ]

screen.addstr(i, 0, row)

def get_entity_pos(self):
for i in range(self.size):
for j in range(self.size):
if self.field[i][j] == 3:
return [i, j]

return [-1, -1]


def is_snake_eat_entity(self):
entity = self.get_entity_pos()
head = self.snake_coords[-1]
return entity == head


class Snake:
def __init__(self, name):
self.name = name
Expand Down Expand Up @@ -158,6 +92,7 @@ def move(self):
curses.beep()
self.level_up()
self.field.add_entity()
return 1



Expand All @@ -166,30 +101,3 @@ def set_field(self, field):
self.field = field


def main(screen):
# Configure screen
screen.timeout(0)

# Init snake & field
field = Field(10)
snake = Snake("Joe")
snake.set_field(field)

while(True):
# Get last pressed key
ch = screen.getch()
if ch != -1:
# If some arrows did pressed - change direction
snake.set_direction(ch)

# Move snake
snake.move()

# Render field
field.render(screen)
screen.refresh()

time.sleep(.4)

if __name__=='__main__':
curses.wrapper(main)
41 changes: 41 additions & 0 deletions game.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import curses
import time
import sys
from random import randint
from classes import Field
from classes import Snake


def main(screen):
# Configure screen
screen.timeout(0)

# Init snake & field
field = Field(10)
snake = Snake("Joe")
snake.set_field(field)
speed = 0.4

while(True):
# Get last pressed key
ch = screen.getch()
if ch != -1:
# If some arrows did pressed - change direction
snake.set_direction(ch)

# Move snake
hit = snake.move()
if hit == 1:
# we ate a food
if randint(1,10) > 6:
# incrase speed every now and then...
speed -= 0.05

# Render field
field.render(screen)
screen.refresh()

time.sleep(speed)

if __name__=='__main__':
curses.wrapper(main)