#!/usr/bin/env python
# -*-coding:utf-8-*-
import pygame,sys
import win32api,win32console,win32gui,codecs
import time,random
from pygame.sprite import Sprite
pygame.init()
win = win32console.GetConsoleWindow()
win32gui.ShowWindow(win,0)
white = (255,255,255)
black = (0,0,0)
red = (255,0,0)
green = (0,155,0)
display_width = 800
display_height = 600
gameDisplay=pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption("Flafel")
icon=pygame.image.load("apple.png")
pygame.display.set_icon(icon)
img=pygame.image.load("snakehead.png")
appleimg=pygame.image.load("apple.png")
clock = pygame.time.Clock()
AppleThickness=30
block_size = 20
FPS = 15
direction="right"
smallfont = pygame.font.SysFont("comicsansms",25)
medfont = pygame.font.SysFont("comicsansms",50)
largefont = pygame.font.SysFont("comicsansms",80)
pygame.mixer.init()
intro_sound=pygame.mixer.Sound("intro.wav")
dead_sound=pygame.mixer.Sound("dead.wav")
def game_intro():
intro=True
while intro:
for event in pygame.event.get():
if event.type==pygame.QUIT:
pygame.quit()
quit()
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_c:
intro=False
if event.key==pygame.K_q:
pygame.quit()
quit()
gameDisplay.fill(white)
message_to_screen("Welcome to Flafel",green,-100,"large")
message_to_screen("The objective of the game is to eat red apples",black,-30)
message_to_screen("The more apples you eat,the longer you get",black,10)
message_to_screen("If you run into yourself, or the edges, you die!",black,50)
message_to_screen("Press C to play, P to pause or Q to quit",black,180)
pygame.display.update()
clock.tick(15)
def pause():
paused=True
message_to_screen("Paused",black,-100,size="large")
message_to_screen("Press C to continue or Q to quit",black,25)
pygame.display.update()
while paused:
for event in pygame.event.get():
if event.type==pygame.QUIT:
pygame.quit()
quit()
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_c:
paused=False
elif event.key==pygame.K_q:
pygame.quit()
quit()
clock.tick(5)
def score(score):
text=smallfont.render("Score: "+str(score),True,black)
gameDisplay.blit(text,[0,0])
def randAppleGen():
randApplex = round(random.randrange(0,display_width-AppleThickness))#/10.0)*10.0
randAppley = round(random.randrange(0,display_height-AppleThickness))#/10.0)*10.0
return randApplex,randAppley
def snake(block_size,snakeList):
if direction=="right":
head=pygame.transform.rotate(img,270)
if direction=="left":
head=pygame.transform.rotate(img,90)
if direction=="up":
head=img
if direction=="down":
head=pygame.transform.rotate(img,180)
gameDisplay.blit(head,(snakeList[-1][0],snakeList[-1][1]))
for XnY in snakeList[:-1]:
pygame.draw.rect(gameDisplay, green, (XnY[0],XnY[1],block_size,block_size))
def text_objects(text,color,size):
if size=="small":
textSurface=smallfont.render(text,True,color)
elif size=="medium":
textSurface=medfont.render(text,True,color)
elif size=="large":
textSurface=largefont.render(text,True,color)
return textSurface,textSurface.get_rect()
def message_to_screen(msg,color,y_displace=0,size="small"):
textSurf,textRect=text_objects(msg,color,size)
#screen_text = font.render(msg,True,color)
#gameDisplay.blit(screen_text,[display_width-600,display_height/2])
textRect.center=(display_width/2),(display_height/2)+y_displace
gameDisplay.blit(textSurf,textRect)
def gameLoop():
global direction
direction="right"
running = True
gameOver= False
lead_x = display_width/2
lead_y = display_height/2
lead_x_change = 10
lead_y_change = 0
snakeList=[]
snakeLength=1
randApplex,randAppley=randAppleGen()
while running:
if gameOver==True:
message_to_screen("Game over",red,-50,size="large")
message_to_screen("Press C to play again or Q to quit",black,50,size="medium")
pygame.display.update()
while gameOver == True:
#gameDisplay.fill(white)
for event in pygame.event.get():
if event.type==pygame.QUIT:
gameOver=False
running=False
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_q:
running=False
gameOver=False
if event.key==pygame.K_c:
gameLoop()
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
direction="left"
lead_x_change = -block_size
lead_y_change = 0
elif event.key == pygame.K_RIGHT:
direction="right"
lead_x_change = block_size
lead_y_change = 0
elif event.key == pygame.K_UP:
direction="up"
lead_y_change = -block_size
lead_x_change = 0
elif event.key == pygame.K_DOWN:
direction="down"
lead_y_change = block_size
lead_x_change = 0
elif event.key==pygame.K_p:
pause()
if lead_x>=display_width or lead_x<0 or lead_y<0 or lead_y>=display_height:
gameOver=True
dead_sound.play()
lead_x += lead_x_change
lead_y += lead_y_change
gameDisplay.fill(white)
gameDisplay.blit(appleimg,(randApplex,randAppley))
snakeHead=[]
snakeHead.append(lead_x)
snakeHead.append(lead_y)
snakeList.append(snakeHead)
if len(snakeList)>snakeLength:
del snakeList[0]
for eachSegment in snakeList[:-1]:
if eachSegment==snakeHead:
gameOver=True
dead_sound.play()
snake(block_size,snakeList)
score(snakeLength-1)
pygame.display.update()
if lead_x>randApplex and lead_x <randApplex+AppleThickness or lead_x+block_size>randApplex and lead_x+block_size<randApplex+AppleThickness:
if lead_y>randAppley and lead_y <randAppley+AppleThickness:
randApplex,randAppley=randAppleGen()
snakeLength+=1
elif lead_y+block_size > randAppley and lead_y+block_size<randAppley+AppleThickness:
randApplex,randAppley=randAppleGen()
snakeLength+=1
clock.tick(FPS)
pygame.quit()
quit()
intro_sound.play()
game_intro()
intro_sound.stop()
gameLoop()
Diff to Previous Revision
--- revision 1 2015-01-03 01:56:22
+++ revision 2 2015-01-03 01:58:04
@@ -45,7 +45,6 @@
def game_intro():
intro=True
-
while intro:
for event in pygame.event.get():
if event.type==pygame.QUIT:
@@ -75,6 +74,7 @@
message_to_screen("Press C to continue or Q to quit",black,25)
pygame.display.update()
+
while paused:
for event in pygame.event.get():
if event.type==pygame.QUIT:
@@ -86,7 +86,6 @@
elif event.key==pygame.K_q:
pygame.quit()
quit()
- #gameDisplay.fill(white)
clock.tick(5)
@@ -112,11 +111,14 @@
head=img
if direction=="down":
head=pygame.transform.rotate(img,180)
+
gameDisplay.blit(head,(snakeList[-1][0],snakeList[-1][1]))
+
for XnY in snakeList[:-1]:
pygame.draw.rect(gameDisplay, green, (XnY[0],XnY[1],block_size,block_size))
def text_objects(text,color,size):
+
if size=="small":
textSurface=smallfont.render(text,True,color)
elif size=="medium":
@@ -126,6 +128,7 @@
return textSurface,textSurface.get_rect()
def message_to_screen(msg,color,y_displace=0,size="small"):
+
textSurf,textRect=text_objects(msg,color,size)
#screen_text = font.render(msg,True,color)
#gameDisplay.blit(screen_text,[display_width-600,display_height/2])
@@ -135,10 +138,13 @@
def gameLoop():
+
global direction
+
direction="right"
running = True
gameOver= False
+
lead_x = display_width/2
lead_y = display_height/2
@@ -197,13 +203,9 @@
dead_sound.play()
-
lead_x += lead_x_change
lead_y += lead_y_change
gameDisplay.fill(white)
-
-
- #pygame.draw.rect(gameDisplay, red, (randApplex,randAppley,AppleThickness,AppleThickness))
gameDisplay.blit(appleimg,(randApplex,randAppley))
@@ -230,7 +232,6 @@
if lead_x>randApplex and lead_x <randApplex+AppleThickness or lead_x+block_size>randApplex and lead_x+block_size<randApplex+AppleThickness:
- #print ("x crossover")
if lead_y>randAppley and lead_y <randAppley+AppleThickness:
randApplex,randAppley=randAppleGen()
snakeLength+=1