抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > 如何用python做一个贪吃蛇小游戏并给游戏加上背景音乐(pygame的应用)

如何用python做一个贪吃蛇小游戏并给游戏加上背景音乐(pygame的应用)

时间:2022-03-29 16:13:58

相关推荐

导入模块

import pygameimport sysimport timeimport randomfrom pygame.locals import *

定义颜色变量

redColour = pygame.Color(255, 0, 0)blackColour = pygame.Color(0, 0, 0)whiteColour = pygame.Color(255, 255, 255)greyColour = pygame.Color(150, 150, 150)LightGrey = pygame.Color(220, 220, 220)

定义gameOver函数,游戏结束时的界面

def gameOver(playSurface, score):# 显示GAME OVER并定义字体以及大小gameOverFont = pygame.font.Font('arial.ttf', 72)gameOverSurf = gameOverFont.render('Game Over', True, greyColour)gameOverRect = gameOverSurf.get_rect()gameOverRect.midtop = (320, 125)playSurface.blit(gameOverSurf, gameOverRect)# 显示分数并定义字体和大小scoreFont = pygame.font.Font('arial.ttf', 48)scoreSurf = scoreFont.render('SCORE: ' + str(score), True, greyColour)scoreRect = scoreSurf.get_rect()scoreRect.midtop = (320, 225)playSurface.blit(scoreSurf, scoreRect)pygame.display.flip() # 刷新显示界面# 休眠5秒后自动关闭time.sleep(5)pygame.quit()sys.exit()

定义main函数

def main():# 初始化pygamepygame.init()pygame.mixer.init()fpsClock = pygame.time.Clock()# 创建pygame显示层playSurface = pygame.display.set_mode((640, 480))# 定义标题pygame.display.set_caption('Snake Go!')# 加载资源图片,game.ico包含在最后的文件中image = pygame.image.load('game.ico')# 设置图标pygame.display.set_icon(image)# 加载音乐,MP3音乐文件放在代码文件所在文件夹中pygame.mixer.music.load("天地孤影任我行.mp3")# 初始化变量snakePosition = [100, 100] # 蛇头位置snakeSegments = [[100, 100], [80, 100], [60, 100]] # 初始长度为3个单位raspberryPosition = [300, 300] # 树莓位置raspberrySpawned = 1 # 树莓个数direction = 'right' # 初始方向changeDirection = directionscore = 0 # 初始分数while True:# 播放音乐天地孤影任我行,本人喜欢if pygame.mixer.music.get_busy()==False:pygame.mixer.music.play()# 检测例如按键等pygame事件for event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()elif event.type == KEYDOWN:# 判断键盘事件if event.key == K_RIGHT or event.key == ord('d'):changeDirection = 'right'if event.key == K_LEFT or event.key == ord('a'):changeDirection = 'left'if event.key == K_UP or event.key == ord('w'):changeDirection = 'up'if event.key == K_DOWN or event.key == ord('s'):changeDirection = 'down'if event.key == K_ESCAPE: # 按esc退出游戏pygame.event.post(pygame.event.Event(QUIT))# 判断是否输入了反方向if changeDirection == 'right' and not direction == 'left':direction = changeDirectionif changeDirection == 'left' and not direction == 'right':direction = changeDirectionif changeDirection == 'up' and not direction == 'down':direction = changeDirectionif changeDirection == 'down' and not direction == 'up':direction = changeDirection# 根据方向移动蛇头的坐标if direction == 'right':snakePosition[0] += 20if direction == 'left':snakePosition[0] -= 20if direction == 'up':snakePosition[1] -= 20if direction == 'down':snakePosition[1] += 20# 将蛇头的位置加入列表之中snakeSegments.insert(0, list(snakePosition))# 判断是否吃掉了树莓if snakePosition[0] == raspberryPosition[0] and snakePosition[1] == raspberryPosition[1]:raspberrySpawned = 0else:snakeSegments.pop() # 每次将最后一单位蛇身踢出列表# 如果吃掉树莓,则重新生成树莓if raspberrySpawned == 0:x = random.randrange(1, 32)y = random.randrange(1, 24)raspberryPosition = [int(x * 20), int(y * 20)]raspberrySpawned = 1score += 1# 绘制pygame显示层playSurface.fill(blackColour)for position in snakeSegments[1:]: # 蛇身为白色pygame.draw.rect(playSurface, whiteColour, Rect(position[0], position[1], 20, 20))pygame.draw.rect(playSurface, LightGrey, Rect(snakePosition[0], snakePosition[1], 20, 20)) # 蛇头为灰色pygame.draw.rect(playSurface, redColour, Rect(raspberryPosition[0], raspberryPosition[1], 20, 20)) # 树莓为红色# 刷新pygame显示层pygame.display.flip()# 判断是否死亡if snakePosition[0] > 620 or snakePosition[0] < 0: # 超出左右边界gameOver(playSurface, score)if snakePosition[1] > 460 or snakePosition[1] < 0: # 超出上下边界gameOver(playSurface, score)for snakeBody in snakeSegments[1:]: # 蛇碰到自己身体if snakePosition[0] == snakeBody[0] and snakePosition[1] == snakeBody[1]:gameOver(playSurface, score)# 控制游戏速度,长度越长速度越快if len(snakeSegments) < 40:speed = 6 + len(snakeSegments) // 4else:speed = 16fpsClock.tick(speed)if __name__ == "__main__":main()

如果觉得《如何用python做一个贪吃蛇小游戏并给游戏加上背景音乐(pygame的应用)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。