#!/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) 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()
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question