这是可贪食蛇的简化版游戏,用的也是Pygame接口,我也不会写过多的介绍,
有兴趣的朋友可以看一下,另外还有一些资源文件,单下面的程序运行不了
游戏,请先安装pygame,然后下载下面的包看看,里面包括程序和资源。
http://sunyueming.91x.net/snake.tar
#filename snake.py
import pygame
from pygame.locals import *
from random import random
bg = 0,0,0
RH={(0,-1):0,(0,1):180,(-1,0):90,(1,0):-90}
RB={(1,1):0,(1,-1):90,(-1,-1):180,(-1,1):-90}
def random_place():
return int(random()*30),int(random()*20)
def make_display():
screen.blit(bG,(0,0))
screen.blit(pygame.transform.rotate(heaD, RH[direction]),(snake[-1][0]*10,snake[-1][1]*10))
for n in range(1,len(snake)-1):
d1X,d1Y=snake[n+1][0]-snake[n][0],snake[n+1][1]-snake[n][1]
d2X,d2Y=snake[n-1][0]-snake[n][0],snake[n-1][1]-snake[n][1]
T=d1X+d2X,d1Y+d2Y
if not T[0]:
screen.blit(pygame.transform.rotate(bodY, d1Y*90),(snake[n][0]*10,snake[n][1]*10))
else:
screen.blit(pygame.transform.rotate(turN, RB[T]),(snake[n][0]*10,snake[n][1]*10))
tail_direction=snake[0][0]-snake[1][0],snake[0][1]-snake[1][1]
screen.blit(pygame.transform.rotate(taiL, RH[tail_direction]),(snake[0][0]*10,snake[0][1]*10))
if scale[0] < 15:
scale[0]=scale[0] + 2
screen.blit(holE,(food_where[0]*10-5,food_where[1]*10-5))
screen.blit(pygame.transform.scale(fooD,(scale[0]+1,scale[0])),(food_where[0]*10+12-scale[0],food_where[1]*10+11-scale[0]))
pygame.display.update()
pygame.init()
screen=pygame.display.set_mode((300,200),NOFRAME|HWSURFACE|DOUBLEBUF,0)
pygame.display.set_caption('贪吃的蛇 sunyueming 2004-04-17')
bG=pygame.image.load('bg.gif').convert()
heaD=pygame.image.load('head.gif').convert()
taiL=pygame.image.load('tail.gif').convert()
bodY=pygame.image.load('body.gif').convert()
turN=pygame.image.load('turn.gif').convert()
fooD=pygame.image.load('food.gif').convert()
holE=pygame.image.load('hole.gif').convert()
oveR=pygame.image.load('over.gif').convert()
mixer=pygame.mixer
mixer.init(11025)
s1=mixer.Sound(('die.wav'))
s2=mixer.Sound(('eat.wav'))
s4=mixer.Sound(('start.wav'))
done = 0
while not done:
snake = [(15,3),(15,4),(15,5)]
score = 3
direction = 0,1
snake_alive = 1
s4.play()
while snake_alive and not done:
see_food = 0
while not see_food:
food_where = random_place()
see_food = 1
for body_part in snake:
if body_part == food_where:
see_food=0
scale = [1]
while see_food and not done:
for e in pygame.event.get():
if e.type == QUIT or (e.type == KEYUP and e.key == K_ESCAPE):
done = 1
break
if e.type == KEYDOWN and e.key == K_UP and direction <> (0,1):
direction = 0,-1
break
if e.type == KEYDOWN and e.key == K_LEFT and direction <> (1,0):
direction = -1,0
break
if e.type == KEYDOWN and e.key == K_RIGHT and direction <> (-1,0):
direction = 1,0
break
if e.type == KEYDOWN and e.key == K_DOWN and direction <> (0,-1):
direction = 0,1
break
make_display()
pygame.time.delay(120)
ahead = snake[-1][0]+direction[0],snake[-1][1]+direction[1]
if ahead == food_where:
snake.append(ahead)
score = score + 1
s2.play()
break
if ahead[0] > 29 or ahead[0] < 0 or ahead[1] > 19 or ahead[1] < 0:
snake_alive = 0
for body_part in snake:
if body_part == ahead:
snake_alive = 0
if snake_alive == 0:
s1.play()
break
snake.remove(snake[0])
snake.append(ahead)
if done:
break
screen.blit(oveR,(40,80))
pygame.display.update()
press_a_key = 0
while not press_a_key:
for e in pygame.event.get():
if e.type == KEYDOWN and e.key == K_SPACE:
press_a_key = 1