基本pygame的贪吃蛇

import pygame, sys, random
from pygame.locals import *

‘’’
故事背景
很久很久以前 有个神树大魔王,他有5个苹果超级战士,他想要称霸世界,在这个世界里无人可档
人民祈求上苍救救他的子民,有一天一颗神蛋里,孵化出来一条神蛇
如果神蛇吃了这个5个苹果就天下无敌了,世界将被得救
如果大魔王没有迟到这5个苹果,那么天下就要被神树统治了
小朋友世界靠你拯救 看你的了!加油!

‘’’

1,定义物体属性变量

贪吃蛇为红色

snakeColor = pygame.image.load(“2.png”)

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()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值