【python教程入门学习】python实现贪吃蛇

这是一个使用Python turtle库和pygame模块实现的贪吃蛇游戏。游戏中包含了蛇的移动、食物生成、边界检测、碰撞检测等功能,并且加入了吃食物和游戏结束的音效。玩家可以通过键盘控制蛇的方向,当蛇吃到食物时,会播放吃食物音效;如果蛇撞到边界或自身,会播放游戏结束音效并重新开始。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全部代码:

import turtle

from turtle import *

from random import randrange

from time import sleep

import pygame

snake = [[0,0],[10,0],[20,0],[30,0],[40,0],[50,0]]

apple_x = randrange(-20,18)*10

apple_y = randrange(-19,19)*10

aim_x = 10

aim_y = 0

def square(x,y,size,color_name):

up()

goto(x,y)

down()

#设置颜色

color(color_name)

#填充

begin_fill()

forward(size)

left(90)

forward(size)

left(90)

forward(size)

left(90)

forward(size)

left(90)

end_fill()

def change(x,y):

global aim_x,aim_y

aim_x = x

aim_y = y

def inside_snake():

for i in range(len(snake)-1):

  if snake[i][0] == snake[-1][0] and snake[i][1] == snake[-1][1]:

  #蛇咬住自己

      return True

return False

def inside_map():

if -200

  #没出界

  return True

else:

  return False

def sound1(): #播放吃食物音效

file1 = r’吃食物音效.mp3’

#初始化混音器模块

pygame.mixer.init()

#创建声音对象

track = pygame.mixer.Sound(file1)

#播放

track.play()

def sound2(): #播放蛇over音效

file2 = r’贪吃蛇挂了.mp3’

pygame.mixer.init()

track = pygame.mixer.Sound(file2)

track.play()

pygame.mixer.init()

file = r’贪吃蛇大作战背景音乐.mp3’

pygame.mixer.music.load(file)

pygame.mixer.music.play(-1)

def gameLoop():

global apple_x,apple_y,snake,aim_x,aim_y

snake.append([snake[-1][0]+aim_x,snake[-1][1]+aim_y])

if snake[-1][0] != apple_x or snake[-1][1] != apple_y:

  snake.pop(0)

else:

  #迟到食物

  sound1()    #播放音效

  #更新食物位置

  apple_x = randrange(-20, 18)*10

  apple_y = randrange(-19, 19)*10

#出界或者蛇咬住自己,结束

if (not inside_map()) or inside_snake():

  square(snake[-1][0],snake[-1][1],10,"red")

  update()

  #播放游戏结束音效

  sound2()

  #等待两秒重开

  sleep(2)

  snake = [[0, 0], [10, 0], [20, 0], [30, 0], [40, 0], [50, 0]]

  apple_x = randrange(-20, 18)*10

  apple_y = randrange(-19, 19)*10

  aim_x = 10

  aim_y = 0

clear()

square(-210, -200, 410, “black”)

square(-200, -190, 390, “white”)

square(apple_x, apple_y, 10, “red”)

for i in range(len(snake)):

  square(snake[i][0],snake[i][1],10,"black")

#更新

update()

#过130ms再次执行gameLoop

ontimer(gameLoop,130)

#画布

turtle.setup(420, 420, 0, 0)

hideturtle()

#隐藏绘图,直接显示绘画效果

tracer(False)

#监视键盘和鼠标操作

listen()

#右手操控

onkey(lambda: change(0,10), “Up”)

onkey(lambda: change(0,-10), ‘Down’)

onkey(lambda: change(10,0), ‘Right’)

onkey(lambda: change(-10,0), ‘Left’)

#左手操控

onkey(lambda: change(0,10), “w”)

onkey(lambda: change(0,-10), ‘s’)

onkey(lambda: change(10,0), ‘d’)

onkey(lambda: change(-10,0), ‘a’)

sleep(3)

gameLoop()

done()

效果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KQoDaoNO-1644916050178)(https://upload-images.jianshu.io/upload_images/27042338-31a4d904a8a5e006?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值