#!/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() #gameDisplay.fill(white) 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) #pygame.draw.rect(gameDisplay, red, (randApplex,randAppley,AppleThickness,AppleThickness)) 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: #print ("x crossover") 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()