import pygame, sys, random
from pygame.locals import *
‘’’
故事背景
很久很久以前 有个神树大魔王,他有5个苹果超级战士,他想要称霸世界,在这个世界里无人可档
人民祈求上苍救救他的子民,有一天一颗神蛋里,孵化出来一条神蛇
如果神蛇吃了这个5个苹果就天下无敌了,世界将被得救
如果大魔王没有迟到这5个苹果,那么天下就要被神树统治了
小朋友世界靠你拯救 看你的了!加油!
‘’’
snakeColor = pygame.Color(255,0,0)
blackColor = pygame.Color(0, 0, 0)
#苹果为白色
appleColor = pygame.Color(255, 255, 255)
white = pygame.Color(255,255,0)
score=0
def gameover():
print(“Game over”)
print(“小朋友 游戏失败了哦!”)
pygame.quit()
sys.exit()
def show_end(screen,tag=0):
global score
if tag==1:
shengli=“恭喜你小朋友,你获得了胜利”
else:
shengli=‘神树渡劫成功,世界被他统治了’
font = pygame.font.Font(‘STSONG.TTF’, 40)
tip = font.render(shengli, True, (65, 105, 225))
score_font=font.render(“你的得分是”+str(score),True,(65, 105, 225))
gamestart = pygame.image.load(‘game.jpg’)
screen.blit(gamestart, (40, 20))
screen.blit(tip, (100, 130))
screen.blit(score_font,(50,50))
pygame.display.update()
while True: # 键盘监听事件
for event in pygame.event.get(): # event handling loop
if event.type == QUIT:
gameover()
elif event.type == KEYDOWN:
if (event.key == K_ESCAPE): # 终止程序
gameover()
else:
return # 结束此函数, 开始游戏
#开始信息显示
def show_start_info(screen):
font = pygame.font.Font(‘STSONG.TTF’, 40)
# render(内容,是否抗锯齿,字体颜色,字体背景颜色)
tip = font.render(‘按任意键开始游戏~~~’, True, (65, 105, 225))
gamestart = pygame.image.load(‘3.png’)
screen.blit(gamestart, (40, 20))
screen.blit(tip, (150, 130))
pygame.display.update()
while True: #键盘监听事件
for event in pygame.event.get(): # event handling loop
if event.type == QUIT:
gameover()
elif event.type == KEYDOWN:
if (event.key == K_ESCAPE): #终止程序
gameover()
else:
return #结束此函数, 开始游戏
def main():
# 初始化pygame
pygame.init()
# 定义一个变量来控制速度
fpsClock = pygame.time.Clock()
screen = pygame.display.set_mode((640, 480))
screen.fill(white)
pygame.display.set_caption("Python 贪吃蛇小游戏") # 设置标题
show_start_info(screen) # 欢迎信息
# 创建pygame显示层,创建一个界面
# 初始化变量
# 贪吃蛇初始坐标位置 (先以100,100为基准)
snakePosition = [100, 100]
# 初始化贪吃蛇的长度列表中有个元素就代表有几段身体
snakeBody = [[100, 100], [80, 100], [60, 100]]
# 初始化目标方向额位置
targetPosition = [300, 300]
# 目标方块的标记 目的:判断是否吃掉了这个目标方块1 就是没有吃 0就是吃掉
targetflag = 1
# 初始化方向 --》往右
direction = 'right'
# 定义一个方向变量(人为控制 按键)
changeDirection = direction
global score
while True:
if score<5:
pass
else:
show_end(screen,tag=1)
break
for event in pygame.event.get(): # 从队列中获取事件
if event.type == QUIT:
show_end(screen)
elif event.type == KEYDOWN: # 按键按下时,会触发该事件
if event.key == K_RIGHT:
changeDirection = 'right'
if event.key == K_LEFT:
changeDirection = 'left'
if event.key == K_UP:
changeDirection = 'up'
if event.key == K_DOWN:
changeDirection = 'down'
# 对应键盘上的esc文件
if event.key == K_ESCAPE:
pygame.event.post(pygame.event.Event(QUIT))
# 确定方向
if changeDirection == 'left' and not direction == 'right':
direction = changeDirection
if changeDirection == 'right' and not direction == 'left':
direction = changeDirection
if changeDirection == 'up' and not direction == 'down':
direction = changeDirection
if changeDirection == 'down' and not direction == 'up':
direction = changeDirection
# 根据方向移动蛇头
if direction == 'right':
snakePosition[0] += 20
if direction == 'left':
snakePosition[0] -= 20
if direction == 'up':
snakePosition[1] -= 20
if direction == 'down':
snakePosition[1] += 20
# 增加蛇的长度
#因为本身是列表
snakeBody.insert(0, list(snakePosition))
# 如果贪吃蛇和目标方块的位置重合
print(snakePosition[0])
print(snakePosition[1])
if snakePosition[0] == targetPosition[0] and snakePosition[1] == targetPosition[1]:
score+=1
targetflag = 0
else:
snakeBody.pop()
if targetflag == 0:
x = random.randrange(1, 32)
y = random.randrange(1, 24)
targetPosition = [int(x * 20), int(y * 20)]
targetflag = 1
# 填充背景颜色
screen.fill(blackColor)
for position in snakeBody:
# 第一个参数serface指定一个serface编辑区,在这个区域内绘制
# 第二个参数color:颜色
# 第三个参数:rect:返回一个矩形(xy),(width,height)
# 第四个参数:width:表示线条的粗细 width0填充 实心
# 化蛇
pygame.draw.rect(screen, snakeColor, Rect(position[0], position[1], 20, 20))
pygame.draw.rect(screen, appleColor, Rect(targetPosition[0], targetPosition[1], 20, 20))
# 更新显示到屏幕表面
pygame.display.flip()
# 判断是否游戏结束
if snakePosition[0] > 620 or snakePosition[0] < 0:
show_end(screen)
elif snakePosition[1] > 460 or snakePosition[1] < 0:
show_end(screen)
# 控制游戏速度
fpsClock.tick(2)
if name == ‘main’:
main()