#!/usr/bin/env python
# -*-coding:utf-8-*-
import pygame,sys
import time,random
from pygame.sprite import Sprite
pygame.init()
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("Rắn Ăn Táo")
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("time new roman",25)
medfont = pygame.font.SysFont("time new roman",50)
largefont = pygame.font.SysFont("time new roman",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 Khải TK",green,-100,"large")
message_to_screen("Vào chơi game ăn quả táo thôi nào",black,-30)
message_to_screen("Hãy ăn thật nhiều táo vào nha",black,10)
message_to_screen("Nếu ăn hoặc chạm tường là bạn chết",black,50)
message_to_screen("Nhấn C để chơi, P dừng, Q thoát",black,180)
pygame.display.update()
clock.tick(15)
def pause():
paused=True
message_to_screen("Đã dừng",black,-100,size="large")
message_to_screen("Nhấn C để tiếp tục, Nhấp Q để thoát",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("Đồ ngu chết rồi",red,-50,size="large")
message_to_screen("Nhấn C để tiếp tục, nhấn Q để thoát !",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 lead_y="" or="">=display_height:0>
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
snakeLength+=1
elif lead_y+block_size > randAppley and lead_y+block_size
snakeLength+=1
clock.tick(FPS)
pygame.quit()
quit()
intro_sound.play()
game_intro()
intro_sound.stop()
gameLoop()