用 Python 写个贪吃蛇游戏,丹爷上线
转载请标明出处:
https://dujinyang.blog.csdn.net/
本文出自:【奥特曼超人的博客】
用 Python 写个贪吃蛇游戏,丹爷上线!🐍🎮
序章:游戏开发现场 🎬
时间:凌晨 2 点
地点:周董的卧室(不是网吧)
丹爷:“周董!听说你最近用 Python 写游戏了?真的假的?”🤔
周董:“当然真的,我用 Python 写了个贪吃蛇,玩的不亦乐乎!🐍”
丹爷瞪大眼:“用 Python 写游戏?你是说那种小时候手机上的贪吃蛇?能吃还能死的那种?”
周董笑了笑:“Exactly!来,丹爷,让我教你一步一步打造属于你的第一款游戏!”😎
一、准备工作 🧰
首先确保你安装好了以下内容:
- Python 3.7 ✅
pygame
库(终端运行pip install pygame
)
二、贪吃蛇源码来了!📜
下面是完整版代码,文件命名为 snake_game_dujinyang.py
:
import pygame
import random
# 初始化
pygame.init()
# 游戏窗口设置
width_dujinyang = 600
height_dujinyang = 400
win_dujinyang = pygame.display.set_mode((width_dujinyang, height_dujinyang))
pygame.display.set_caption("贪吃蛇 - Dujinyang版")
# 颜色定义
black_dujinyang = (0, 0, 0)
green_dujinyang = (0, 255, 0)
red_dujinyang = (255, 0, 0)
# 蛇的初始设置
snake_block_dujinyang = 10
snake_speed_dujinyang = 15
clock_dujinyang = pygame.time.Clock()
font_dujinyang = pygame.font.SysFont(None, 35)
# 分数显示
def your_score_dujinyang(score):
value = font_dujinyang.render("你的得分: " + str(score), True, red_dujinyang)
win_dujinyang.blit(value, [0, 0])
# 蛇的绘制
def draw_snake_dujinyang(snake_block, snake_list):
for x in snake_list:
pygame.draw.rect(win_dujinyang, green_dujinyang, [x[0], x[1], snake_block, snake_block])
# 游戏循环
def game_loop_dujinyang():
game_over = False
game_close = False
x1 = width_dujinyang / 2
y1 = height_dujinyang / 2
x1_change = 0
y1_change = 0
snake_list = []
length_of_snake = 1
foodx = round(random.randrange(0, width_dujinyang - snake_block_dujinyang) / 10.0) * 10.0
foody = round(random.randrange(0, height_dujinyang - snake_block_dujinyang) / 10.0) * 10.0
while not game_over:
while game_close:
win_dujinyang.fill(black_dujinyang)
message = font_dujinyang.render("你挂了!按Q退出,按C重来", True, red_dujinyang)
win_dujinyang.blit(message, [width_dujinyang / 6, height_dujinyang / 3])
your_score_dujinyang(length_of_snake - 1)
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
game_close = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
game_over = True
game_close = False
if event.key == pygame.K_c:
game_loop_dujinyang()
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x1_change = -snake_block_dujinyang
y1_change = 0
elif event.key == pygame.K_RIGHT:
x1_change = snake_block_dujinyang
y1_change = 0
elif event.key == pygame.K_UP:
y1_change = -snake_block_dujinyang
x1_change = 0
elif event.key == pygame.K_DOWN:
y1_change = snake_block_dujinyang
x1_change = 0
if x1 >= width_dujinyang or x1 < 0 or y1 >= height_dujinyang or y1 < 0:
game_close = True
x1 += x1_change
y1 += y1_change
win_dujinyang.fill(black_dujinyang)
pygame.draw.rect(win_dujinyang, red_dujinyang, [foodx, foody, snake_block_dujinyang, snake_block_dujinyang])
snake_head = []
snake_head.append(x1)
snake_head.append(y1)
snake_list.append(snake_head)
if len(snake_list) > length_of_snake:
del snake_list[0]
for x in snake_list[:-1]:
if x == snake_head:
game_close = True
draw_snake_dujinyang(snake_block_dujinyang, snake_list)
your_score_dujinyang(length_of_snake - 1)
pygame.display.update()
if x1 == foodx and y1 == foody:
foodx = round(random.randrange(0, width_dujinyang - snake_block_dujinyang) / 10.0) * 10.0
foody = round(random.randrange(0, height_dujinyang - snake_block_dujinyang) / 10.0) * 10.0
length_of_snake += 1
clock_dujinyang.tick(snake_speed_dujinyang)
pygame.quit()
game_loop_dujinyang()
丹爷:“哈哈,那我直接复制它了…”
三、运行效果图 👇
“周董,我贪吃蛇跑起来了诶!它还能掉头吃自己,太残忍了吧哈哈哈😂!”
“丹爷,游戏设计都是有毒的,一口吞自己,是蛇的宿命!” 😅
👇 游戏运行效果如下图:
四、总结 🧠
- 使用 Python 也能轻松开发小游戏
- Pygame 是新手练手绝佳选择
- 游戏逻辑的锻炼能极大提升编程思维
丹爷:“周董,这下我也能说我会做游戏了!”🕹️
周董:“哎哟不错哦!下次我们来个 “打飞机” 升级版本,保准你打得飞起!”😂✈️
相关博文:
- 《Python与C++开发格斗游戏:周董 vs 丹爷》
- 《丹爷的 Python 与 C++ 跨界冒险:从自动化到游戏开发的魔法之旅》
- 《周董和丹爷:让 Python 和 C++ 一起“搞事情”,实现高效数据处理和分析》
- 《丹爷的 Python 逆袭之路:从咸鱼到自动化办公女王》
- 《周董不服 :丹爷的Python编程对决》
- 《周董的 Python 冒险:与丹爷的Py编程对决》
- 《深度学习魔法入门:周董与丹爷的成长冒险之旅》
- 《Python 与 C++ 结合加速 AI 计算:性能优化与实战案例》
- 《C++ 协程(Coroutines):高效异步编程新纪元》
感兴趣的后续可以关注专栏或者公众号:
《黑客的世界》
作者:奥特曼超人Dujinyang
来源:CSDN
原文:https://dujinyang.blog.csdn.net/
版权声明:本文为博主杜锦阳原创文章,转载请附上博文链接!
相关阅读:
《C++智能指针及其在资源管理中的应用(智能指针Smart Pointer)》