Ciao ragazzi
Un piccolo esperimento con le pygames. Ho anche deciso di adottare uno stile nella scrittura delle funzioni diverso dal mio solito uso "monolitico" più orientato a splittare il codice in funzioni più piccole e (spero) più leggibili. Ditemi voi cosa vi sembra meglio
Per averlo funzionante dovete scaricare tutto il pacchetto e avere le pygame installate.
Link: http://myfreefilehosting.com/f/8ec171659b_0.1MB
Oppure potete solo leggere il codice:
Un piccolo esperimento con le pygames. Ho anche deciso di adottare uno stile nella scrittura delle funzioni diverso dal mio solito uso "monolitico" più orientato a splittare il codice in funzioni più piccole e (spero) più leggibili. Ditemi voi cosa vi sembra meglio
Per averlo funzionante dovete scaricare tutto il pacchetto e avere le pygame installate.
Link: http://myfreefilehosting.com/f/8ec171659b_0.1MB
Oppure potete solo leggere il codice:
Codice:
#----- SNAKE -----#
# Title: [Snake Origins]
# Descr: [Famouse 'Snake' Game. The snake is a python.]
# Version: [1.0]
#-----------------#
import pygame, sys, random, time
PNG_IMG = 4 #Dimension of .png pictures
FOOD_POINTS = 1
class SnakeBodySquare(pygame.sprite.Sprite):
def __init__(self,speed=[5,0]):
pygame.sprite.Sprite.__init__(self)
self.pic = pygame.image.load('snake_body.png')
self.rect = self.pic.get_rect()
self.speed = speed
class SnakeBody:
def __init__(self):
self.snake_body=[]
self.speed = [5,0]
self.add_body(5)
def add_body(self,parts):
for part in range(parts):
try:
n_part = SnakeBodySquare(speed=self.snake_body[-1].speed)
p_part = self.snake_body[-1]
p_part_x = p_part.rect.left
p_part_y = p_part.rect.top
n_part.rect = n_part.rect.move(
[p_part.rect.left-p_part.speed[0],
p_part.rect.top-p_part.speed[1]])
except IndexError:
n_part = SnakeBodySquare()
n_part.rect = n_part.rect.move([20,20])
self.snake_body.append(n_part)
def show(self):
location = [10,24]
for part in self.snake_body:
part.rect = part.rect.move(location)
def move(self,display_cords):
o_speeds = [part.speed for part in self.snake_body]
o_speeds[-1] = self.speed
for part in self.snake_body:
part.speed = o_speeds\
[self.snake_body.index(part)-1]
for part in self.snake_body:
part.rect = part.rect.move(part.speed)
if self.collide_check(part):
return False
if self.borders_check(part,display_cords):
self.borders_move(part,display_cords)
return True
def borders_check(self,part,display_cords):
if part.rect.top < 0 or\
part.rect.left < 0 or\
part.rect.left > display_cords[0] or\
part.rect.top > display_cords[1]:
return True
else:
return False
def borders_move(self,part,display_cords):
if part.rect.top < 0:
part.rect = part.rect.move(0,display_cords[1])
elif part.rect.left < 0:
part.rect = part.rect.move(display_cords[0],0)
elif part.rect.left > display_cords[0]:
part.rect = part.rect.move(-display_cords[0],0)
elif part.rect.top > display_cords[1]:
part.rect = part.rect.move(0,-display_cords[1])
def collide_check(self,part):
for o_part in self.snake_body:
if part != o_part and \
part.rect.colliderect(o_part.rect):
return True
else:
return False
def food_check(self,food):
for part in self.snake_body:
if part.rect.colliderect(food.rect):
self.add_body(1)
return True
class SnakeFood(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.pic = pygame.image.load('snake_food.png')
self.rect = self.pic.get_rect()
def random_show(self,(width,height)):
self.position = [random.randrange(width/PNG_IMG)*PNG_IMG,
random.randrange(height/PNG_IMG)*PNG_IMG]
self.rect = self.rect.move(self.position)
class Game:
def __init__(self):
pygame.init()
self.width, self.height = (150,150)
self.black = 0,0,0
self.white = 255,255,255
self.screen = pygame.display.set_mode((self.width,self.height))
self.points = 0
self.font = pygame.font.Font(None,20)
while True:
if not self._main():
print "You Lost"
print "Points: %d" %self.points
raw_input("Press [ENTER] for a new game")
def _main(self):
print "New Game"
snake = SnakeBody()
snake.show()
food = SnakeFood()
food.random_show((self.width,self.height))
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_DOWN:
if snake.speed[1] != -5:
snake.speed = [0,5]
elif event.key == pygame.K_UP:
if snake.speed[1] != 5:
snake.speed = [0,-5]
elif event.key == pygame.K_RIGHT:
if snake.speed[0] != -5:
snake.speed = [5,0]
elif event.key == pygame.K_LEFT:
if snake.speed[0] != 5:
snake.speed = [-5,0]
if snake.food_check(food):
print "+%d Points" % FOOD_POINTS
self.points += FOOD_POINTS
food = SnakeFood()
food.random_show((self.width,self.height))
if not snake.move((self.width,self.height)):
return False
text = self.font.render(str(self.points),
1, self.white)
self.screen.fill(self.black)
for part in snake.snake_body:
self.screen.blit(part.pic,part.rect)
self.screen.blit(food.pic,food.rect)
self.screen.blit(text,(self.width-20,self.height-20))
pygame.display.flip()
time.sleep(0.2)
Game()