鱼C论坛

 找回密码
 立即注册
查看: 377|回复: 43

[作品展示] Pygame纯画笔弹幕游戏(复制即玩)

[复制链接]
发表于 2025-8-28 17:19:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 andy大宝 于 2026-7-1 09:04 编辑

Pygame学了不到一个星期,感觉发展空间比scratch大很多,有些scratch做不到的功能Pygame都能做到。
以前用scratch写的一个弹幕游戏,今天尝试用python复刻一下
再见,图形化编程ヽ(`Д&`)︵ ┻━┻

游客,如果您要查看本帖隐藏内容请回复
规则:
上下左右移动,红弹幕减血,绿弹幕加分,血量<=0或角色出边界时游戏结束
游戏截图:

截图1

截图1

截图2

截图2

关于bug与可玩性:
上下左右是按时间进行连续判定的,可能有判定不准的情况发生

因为这是用Pygame写游戏的第一次尝试,像难度调整,结算画面等都没能够完成,请各位大佬见谅 (也希望各位大佬能帮忙补全)



顺便说,我在代码里面添加了很多注释,但如果仍对代码内容有疑问,或有改进方案,欢迎提出^_^



评分

参与人数 5荣誉 +23 鱼币 +21 贡献 +17 C币 +3 收起 理由
smallwh + 5 + 5 + 3 期待将来更多作品
超级小和 + 5 + 3 + 3 鱼C有你更精彩^_^
小甲鱼 + 3 + 3 + 3 + 3 鱼C有你更精彩^_^
zhangchenyvn + 5 + 5 + 3 游戏的价值不在于完美,而在于好玩,不错不.
青出于蓝 + 5 + 5 + 5 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2025-8-28 17:26:49 | 显示全部楼层
别问我为什么用纯画笔,或所有圈都长一个样,因为我不会碰撞检测,写代码时是用勾股定理算的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-8-29 09:22:35 | 显示全部楼层
好历害啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-8-29 17:27:41 | 显示全部楼层
报错:SyntaxError: multiple statements found while compiling a single stateme
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-8-29 18:26:07 From FishC Mobile | 显示全部楼层

回帖奖励 +2 鱼币

看看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2025-8-29 18:37:56 | 显示全部楼层
wxw2015 发表于 2025-8-29 17:27
报错:SyntaxError: multiple statements found while compiling a single stateme

这段代码在我的设备上运行没有问题啊……
抱歉,我水平有限,不能解决你的报错问题。下面是AI提供的修改方案,如果还是不行的话再看看有没有大佬能提供建议吧:
  1. import pygame as pg
  2. import sys
  3. from random import *
  4. from math import *

  5. # pygame初始化
  6. pg.init()
  7. # 设置窗口
  8. window = pg.display.set_mode((800,600))         
  9. pg.display.set_caption("game")

  10. # 设置弹幕速度
  11. speed = 2
  12. # 设置角色坐标
  13. mx = 400
  14. my = 500

  15. isOver = False
  16. life = 10
  17. score = 0

  18. # 每20个红色弹幕之后生成1个绿色弹幕
  19. wait = 20

  20. # 设置按键重复
  21. pg.key.set_repeat(1,10)
  22. # 获得字体
  23. font = pg.font.Font(None,35)

  24. # 定义弹幕类
  25. class Bullet():   
  26.     def __init__(self, colour):
  27.         self.x = 400
  28.         self.y = 300
  29.         self.ifDistory = False
  30.         self.angle = pi / 180 * randint(0,359)
  31.         self.colour = colour

  32. # 建立子弹库
  33. every = []

  34. def main_game_loop():
  35.     global mx, my, isOver, life, score, wait, every
  36.    
  37.     while True:
  38.         # 处理按键事件
  39.         for ev in pg.event.get():
  40.             if ev.type == pg.QUIT:                  
  41.                 pg.quit()
  42.                 sys.exit()
  43.         
  44.             # 角色控制
  45.             elif ev.type == pg.KEYDOWN:
  46.                 if ev.key == pg.K_UP:
  47.                     my -= 2
  48.                 if ev.key == pg.K_DOWN:
  49.                     my += 2            
  50.                 if ev.key == pg.K_LEFT:
  51.                     mx -= 2
  52.                 if ev.key == pg.K_RIGHT:
  53.                     mx += 2
  54.                     
  55.         if not isOver:            
  56.             # 增加弹幕数量
  57.             every.append(Bullet("red"))
  58.             if wait == 0:
  59.                 every.append(Bullet("green"))
  60.                 wait = 20
  61.             else:
  62.                 wait -= 1
  63.             # 绘制背景
  64.             window.fill("white")
  65.             
  66.             for i in every:
  67.                 # 更改弹幕状态
  68.                 i.x += (speed * cos(i.angle))
  69.                 i.y -= (speed * sin(i.angle))
  70.                 # 绘制弹幕
  71.                 pg.draw.circle(window, i.colour, (i.x, i.y), 5, 2)
  72.                 # 边缘检测
  73.                 if i.x < 0 or i.x > 800 or i.y < 0 or i.y > 600:
  74.                     i.ifDistory = True
  75.                 # 碰撞判定
  76.                 if ((i.x - mx) ** 2 + (i.y - my) ** 2) ** 0.5 <= 10:
  77.                     i.ifDistory = True
  78.                     if i.colour == "red":
  79.                         life -= 1
  80.                     else:
  81.                         score += 1

  82.             for i in every[:]:  # 使用切片创建副本,避免在迭代时修改列表
  83.                 # 删除弹幕
  84.                 if i.ifDistory:
  85.                     every.remove(i)
  86.             
  87.             # 死亡判定
  88.             if life <= 0 or mx < 0 or mx > 800 or my < 0 or my > 600:
  89.                 isOver = True
  90.             # 绘制角色
  91.             pg.draw.circle(window, "black", (mx, my), 5, 2)

  92.             # 绘制文字
  93.             window.blit(font.render("life:%s" % life, True, "black"), (20, 20))
  94.             window.blit(font.render("score:%s" % score, True, "black"), (20, 60))
  95.             # 画面更新
  96.             pg.display.update()
  97.             # 设置延迟
  98.             pg.time.delay(10)

  99. # 启动游戏
  100. if __name__ == "__main__":
  101.     main_game_loop()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-8-29 19:44:42 | 显示全部楼层
还有回帖奖励?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-8-29 21:40:41 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-8-29 23:04:42 | 显示全部楼层

回帖奖励 +2 鱼币

感谢分享,学习一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-8-30 13:58:24 From FishC Mobile | 显示全部楼层

回帖奖励 +2 鱼币

红绿色盲怎么玩
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2025-8-31 13:07:41 | 显示全部楼层

我建议作者可以自选配色,这样既更好看,也更好玩

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
andy大宝 + 2 + 2 之后学完Tkinter可以尝试一下^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2025-8-31 15:51:59 | 显示全部楼层

回帖奖励 +2 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-8-31 15:57:53 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-8-31 16:24:41 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-8-31 19:41:28 | 显示全部楼层

回帖奖励 +2 鱼币

9
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-9-1 09:20:16 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-9-1 17:06:15 | 显示全部楼层
我的发,牛
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-9-1 19:17:32 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-9-2 14:45:31 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-9-3 02:52:43 From FishC Mobile | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-7-22 10:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表