.net 网站 语言,营销培训心得体会,贵阳中国建设银行招聘信息网站,网站建设知识学习心得使用Pythonpygame贪吃蛇小游戏
使用第三方库pygame#xff0c;关于Python中pygame游戏模块的安装使用可见 https://blog.csdn.net/cnds123/article/details/119514520
给出两种实现。
第一种
运行效果如下#xff1a; 游戏源码如下#xff1a;
import pygame
import sy…使用Pythonpygame贪吃蛇小游戏
使用第三方库pygame关于Python中pygame游戏模块的安装使用可见 https://blog.csdn.net/cnds123/article/details/119514520
给出两种实现。
第一种
运行效果如下 游戏源码如下
import pygame
import sys
import random# 初始化pygame
pygame.init()# 设置屏幕大小
screen_size (640, 480)
screen pygame.display.set_mode(screen_size)# 设置游戏标题
pygame.display.set_caption(贪吃蛇按p键暂停/继续)# 定义颜色
WHITE (255, 255, 255)
GREEN (0, 255, 0)
RED (255, 0, 0)# 蛇的初始位置
snake_pos [[100, 100], [80, 100], [60, 100]]# 食物的初始位置
food_pos [300, 300]# 蛇的初始速度
snake_speed [20, 0]# 初始化分数
score 0# 创建字体对象
font pygame.font.Font(None, 36)# 游戏暂停标志
paused False# 主循环
while True:# 处理游戏事件for event in pygame.event.get():if event.type pygame.QUIT:pygame.quit()sys.exit()elif event.type pygame.KEYDOWN:if event.key pygame.K_p: # 按 P 键暂停或继续paused not pausedif not paused:if event.key pygame.K_UP and snake_speed ! [0, 20]:snake_speed [0, -20]elif event.key pygame.K_DOWN and snake_speed ! [0, -20]:snake_speed [0, 20]elif event.key pygame.K_LEFT and snake_speed ! [20, 0]:snake_speed [-20, 0]elif event.key pygame.K_RIGHT and snake_speed ! [-20, 0]:snake_speed [20, 0]if not paused:# 更新蛇的位置snake_pos.insert(0, [snake_pos[0][0] snake_speed[0], snake_pos[0][1] snake_speed[1]])# 检查蛇头是否碰到墙壁如果是则“经过墙壁”if snake_pos[0][0] 0:snake_pos[0][0] screen_size[0]-20elif snake_pos[0][0] screen_size[0]:snake_pos[0][0] 0elif snake_pos[0][1] 0:snake_pos[0][1] screen_size[1]-20elif snake_pos[0][1] screen_size[1]:snake_pos[0][1] 0# 检查蛇头是否碰到食物if snake_pos[0] food_pos:food_pos [random.randrange(1, screen_size[0] // 20) * 20, random.randrange(1, screen_size[1] // 20) * 20]score 1 # 计分else:snake_pos.pop()# 绘制游戏界面screen.fill(WHITE)for pos in snake_pos:pygame.draw.rect(screen, GREEN, pygame.Rect(pos[0], pos[1], 20, 20))pygame.draw.rect(screen, RED, pygame.Rect(food_pos[0], food_pos[1], 20, 20))# 显示得分score_text font.render(Score: str(score), True, (0, 0, 0))screen.blit(score_text, (10, 10))# 如果游戏暂停则显示暂停提示if paused:pause_text font.render(Paused. Press P to continue., True, (0, 0, 0))screen.blit(pause_text, (screen_size[0] // 2 - pause_text.get_width() // 2, screen_size[1] // 2 - pause_text.get_height() // 2))pygame.display.flip() # 更新屏幕显示# 控制游戏速度pygame.time.Clock().tick(6)第二种
就不给出运行效果图了你可以运行看看。
下面给出另一种实现源码
import pygame
import time
import random# 设置蛇的速度
snake_speed 15# 窗口颜色
white pygame.Color(255, 255, 255)# 蛇的颜色
green pygame.Color(0, 255, 0)# 食物的颜色
red pygame.Color(255, 0, 0)# 初始化pygame
pygame.init()# 初始化游戏窗口
window pygame.display.set_mode((720, 480))# FPS帧率控制器
fps pygame.time.Clock()# 定义蛇的默认位置
snake_position [100, 50]# 定义蛇身体的前四个块
snake_body [[100, 50], [90, 50], [80, 50], [70, 50]]# 食物位置
food_position [random.randrange(1, 72) * 10, random.randrange(1, 48) * 10]# 蛇吃到食物时
food_spawn True# 设置默认的蛇的方向为向右
direction RIGHT# 初始分数
score 0def game_over():# 设置字体以显示分数#font pygame.font.SysFont(None, 26) font pygame.font.Font(C:\\Windows\\Fonts\\simsun.ttc, 26) #显示中文文字score_text font.render(得分: str(score), True, green)window.blit(score_text, [320, 240])# 显示信息again_text font.render(游戏结束按任意键重新开始, True, red) # 修改颜色变量为whitewindow.blit(again_text, [160, 280])pygame.display.flip() # 使用 flip() 来更新整个屏幕# 等待用户按键然后重新开始游戏waiting_for_input Truewhile waiting_for_input:for event in pygame.event.get():if event.type pygame.KEYDOWN:waiting_for_input Falseelif event.type pygame.QUIT:pygame.quit()quit()# 游戏重新开始main()# 游戏的主逻辑
def main():global direction, food_position, food_spawn, score# 重置游戏score 0snake_position [100, 50]snake_body [[100, 50], [90, 50], [80, 50], [70, 50]]direction RIGHTfood_position [random.randrange(1, 72) * 10, random.randrange(1, 48) * 10]food_spawn Truewhile True:# 处理按键事件for event in pygame.event.get():if event.type pygame.QUIT:pygame.quit()quit()elif event.type pygame.KEYDOWN:if event.key pygame.K_UP and direction ! DOWN:direction UPif event.key pygame.K_DOWN and direction ! UP:direction DOWNif event.key pygame.K_LEFT and direction ! RIGHT:direction LEFTif event.key pygame.K_RIGHT and direction ! LEFT:direction RIGHT# 移动蛇if direction UP:snake_position[1] - 10if direction DOWN:snake_position[1] 10if direction LEFT:snake_position[0] - 10if direction RIGHT:snake_position[0] 10# 蛇身体增长机制snake_body.insert(0, list(snake_position))if snake_position[0] food_position[0] and snake_position[1] food_position[1]:score 1food_spawn Falseelse:snake_body.pop()if not food_spawn:food_position [random.randrange(1, 72) * 10, random.randrange(1, 48) * 10]food_spawn True# 图形界面window.fill(white)for pos in snake_body:pygame.draw.rect(window, green, pygame.Rect(pos[0], pos[1], 10, 10))pygame.draw.rect(window, red, pygame.Rect(food_position[0], food_position[1], 10, 10))# 游戏结束条件if snake_position[0] 0 or snake_position[0] 710 or snake_position[1] 0 or snake_position[1] 470:game_over()break # 结束游戏后跳出循环for block in snake_body[1:]:if snake_position[0] block[0] and snake_position[1] block[1]:game_over()break # 结束游戏后跳出循环# 更新显示pygame.display.update()# 每秒帧数/刷新率fps.tick(snake_speed)# 运行主函数
if __name__ __main__:main()OK