鱼C论坛

 找回密码
 立即注册
查看: 3646|回复: 80

[作品展示] 用Python做一个跑酷游戏

[复制链接]
发表于 2023-7-4 20:59:52 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Ewan-Ahiouy 于 2023-7-11 07:03 编辑

用Python做一个跑酷游戏


制作背景

前几天逛论坛,逛到一个精华帖,叫 【鱼币】用 Scratch 做一个跑酷

看了里面的题外话

https://fishc.com.cn/thread-228545-1-1.html

上次,我不是说

Python,C++ 都很难做出来对吧?

这就是Scratch的优势!

结果呢???

https://fishc.com.cn/thread-228775-1-1.html

https://fishc.com.cn/thread-228778-1-1.html

https://fishc.com.cn/thread-229450-1-1.html

就连@Twilight6 斑竹也说:

很棒,论坛就需要这种学习良性竞争的氛围!!!

https://fishc.com.cn/forum.php?mod=redirect&goto=findpost&ptid=228775&pid=6243751

555,脸丢尽了

于是,我又写了一个作品,@zhangjinxuan 来啊!

嘿嘿 你 sfqxx 可真的是太嚣张了,强大的Python做不出来?开什么玩笑

于是,打开 VS Code ,一顿操作猛如虎......

大概两天就做出来了

代码不到200行,代码自我感觉良好

引用一下 zhangjinxuan 的名言:

sfqxx,不服来战!




游戏截图


                               
登录/注册后可看大图



                               
登录/注册后可看大图



                               
登录/注册后可看大图



                               
登录/注册后可看大图



                               
登录/注册后可看大图


附加文件

fuJia.rar (625.41 KB, 下载次数: 19, 售价: 3 鱼币)

这是打包的文件和依赖文件 ->

Code

  1. import pygame, sys

  2. pygame.init()

  3. width, height = 800, 600
  4. window = pygame.display.set_mode((width, height))
  5. windowrect = pygame.Rect(0, 0, width, height)
  6. pygame.display.set_caption("跑酷")
  7. shibai = 0
  8. guan = 1
  9. zhujue_old = pygame.image.load("imges/zhujue.png")
  10. zhujue1 = pygame.transform.rotozoom(zhujue_old, 0, 0.6)
  11. zhujue2 = pygame.transform.flip(zhujue1, True, False)
  12. zhujue = zhujue1
  13. zhujuew, zhujueh = zhujue.get_size()
  14. x, y = 10, 470
  15. xsu, ysu = 0, 0
  16. boolwalk = False
  17. walk = None
  18. up = False
  19. peng = False
  20. zuidaguan = 10
  21. yanjiang = [
  22.     [],
  23.     [[0, height - 300, width, 40]],
  24.     [[200, height - 51, 100, 41], [450, height - 51, 100, 41]],
  25.     [],
  26.     [],
  27.     [],
  28.     [[0, 0, width, 40], [350, height - 50, 300, 40]],
  29.     [],
  30.     [[470, height - 50, 330, 40]],
  31.     []
  32. ]
  33. zhangai = [
  34.     [[0, height - 50, 100, 40], [0, 270, width, 40]],
  35.     [[0, height - 50, width, 40]],
  36.     [[0, height - 50, width, 40]],
  37.     [[0, height - 50, width, 40], [300, height - 450, 50, 400], [350, height - 450, 200, 50], [350, height - 300, 200, 50]],
  38.     [[0, height - 50, width, 40], [500, height - 450, 50, 400], [300, height - 450, 200, 50], [300, height - 300, 200, 50]],
  39.     [[0, height - 50, 100, 40], [150, height - 200, 100, 40], [300, height - 350, 100, 40], [450, height - 500, 100, 40]],
  40.     [[0, height - 50, 100, 40], [100, 200, 40, 390], [250, 40, 40, 410], [250, height - 50, 100, 40], [550, height - 100, 100, 40]],
  41.     [[0, height - 50, 100, 40], [0, 300, 300, 40], [300, 40, 500, 40]],
  42.     [[0, height - 50, 470, 40]],
  43.     [[0, height - 50, width, 40]]
  44. ]
  45. zilist = [
  46.     "欢迎来到我的跑酷游戏~试试按住上键吧~", "小心岩浆哦~", "难度+1", "经典正F", "经典反F", "天梯~", "小心哦~", "难度很高~", "信仰之跃! 加油! ", "恭喜你, 成功通关~"
  47. ]
  48. font = pygame.font.Font("font/1.ttf", 30)

  49. def ifin(x, y, w, h, mx, my):
  50.     if x <= mx <= x + w and y <= my <= y + h:
  51.         return True
  52.     return False

  53. while True:
  54.     pygame.time.Clock().tick(60)

  55.     text = font.render("失败次数: " + str(shibai), True, (0, 0, 0))
  56.     text2 = font.render("第 {} 关".format(guan), True, (0, 0, 0))
  57.     text3 = font.render(zilist[guan - 1], True, (0, 0, 0))
  58.     textrect = text3.get_rect()
  59.     textrect.centerx = windowrect.centerx
  60.     if guan == 8:
  61.         textrect.y = 100
  62.     else:
  63.         textrect.y = 70
  64.     window.fill((255, 255, 255))
  65.     if y > height:
  66.         shibai += 1
  67.         x, y = 10, 470
  68.         ysu = 0
  69.         xsu = 0

  70.     if boolwalk:
  71.         if walk == pygame.K_d or walk == pygame.K_RIGHT:
  72.             if xsu <= 8:
  73.                 xsu += 2
  74.             zhujue = zhujue1
  75.         if walk == pygame.K_a or walk == pygame.K_LEFT:
  76.             if xsu >= -8:
  77.                 xsu -= 2
  78.             zhujue = zhujue2
  79.     xsu *= 0.9
  80.     x += xsu
  81.     ysu -= 1
  82.     y -= ysu
  83.     peng = False
  84.     for i in zhangai[guan - 1]:
  85.         if i:
  86.             wx, wy, ww, wh = i
  87.             if ifin(wx, wy, ww, wh, x + 1, y + zhujueh) or ifin(wx, wy, ww, wh, x + zhujuew - 1, y + zhujueh) or ifin(wx, wy, ww, wh, x + int(zhujuew / 2), y + zhujueh) or \
  88.                ifin(wx, wy, ww, wh, x + 1, y) or ifin(wx, wy, ww, wh, x + zhujuew - 1, y) or ifin(wx, wy, ww, wh, x + int(zhujuew / 2), y):
  89.                 peng = True
  90.     if peng:
  91.         y += ysu
  92.         ysu = 0
  93.         if up:
  94.             ysu = 20

  95.     for i in zhangai[guan - 1]:
  96.         if i:
  97.             mx, my, mw, mh = i
  98.             pygame.draw.rect(window, (0, 0, 0), (mx, my, mw, mh))
  99.             if ifin(mx, my, mw, mh, x + zhujuew, y) or \
  100.                ifin(mx, my, mw, mh, x, y) or \
  101.                ifin(mx, my, mw, mh, x, y + zhujueh) or \
  102.                ifin(mx, my, mw, mh, x + zhujuew, y + zhujueh) or \
  103.                ifin(mx, my, mw, mh, x, y + int(zhujueh / 2)) or \
  104.                ifin(mx, my, mw, mh, x + zhujuew, y + int(zhujueh / 2)):
  105.                 x -= xsu
  106.                 if up:
  107.                     if xsu > 0:
  108.                         xsu = -10
  109.                     else:
  110.                         xsu = 10
  111.                     ysu = 15
  112.                 else:
  113.                     ysu = 0

  114.     for i in yanjiang[guan - 1]:
  115.         if i:
  116.             mx, my, mw, mh = i
  117.             pygame.draw.rect(window, (255, 0, 0), (mx, my, mw, mh))
  118.             if ifin(mx, my, mw, mh, x + zhujuew, y) or ifin(mx, my, mw, mh, x, y) or ifin(mx, my, mw, mh, x, y + zhujueh) or ifin(mx, my, mw, mh, x + zhujuew, y + zhujueh):
  119.                 shibai += 1
  120.                 x, y = 10, 470
  121.                 ysu = 0
  122.                 xsu = 0

  123.     if ifin(width - 5, 0, 50, height, x + zhujuew, y) and guan < zuidaguan:
  124.         x, y = 10, 470
  125.         guan += 1

  126.     window.blit(zhujue, (x, y))
  127.     window.blit(text, (10, 10))
  128.     window.blit(text2, (10, 50))
  129.     window.blit(text3, textrect)

  130.     for event in pygame.event.get():
  131.         if event.type == pygame.QUIT:
  132.             pygame.quit()
  133.             sys.exit()

  134.         if event.type == pygame.KEYDOWN:
  135.             if event.key == pygame.K_ESCAPE:
  136.                 pygame.quit()
  137.                 sys.exit()

  138.             if event.key in [pygame.K_a, pygame.K_d, pygame.K_RIGHT, pygame.K_LEFT]:
  139.                 walk = event.key
  140.                 boolwalk = True

  141.             if event.key == pygame.K_w or event.key == pygame.K_UP:
  142.                 up = True

  143.         if event.type == pygame.KEYUP:
  144.             if event.key in [pygame.K_a, pygame.K_d, pygame.K_RIGHT, pygame.K_LEFT]:
  145.                 boolwalk = False

  146.             if event.key == pygame.K_w or event.key == pygame.K_UP:
  147.                 up = False

  148.     pygame.display.update()
复制代码


育碧换评分,好吗

求评分

求求了~~~~~

题外话

唉,你们这些人啊,说玩,附件都不下载,咋玩

我做这个游戏,不就是想让你们玩的开心吗?

结果到头来,一个玩的都没有,唉,有什么意思?


评分

参与人数 15荣誉 +44 鱼币 +42 贡献 +23 收起 理由
zhangchenyvn + 1 + 1 不要再竞争了???
蒜爆泥鳅 + 1 + 1 + 1
tommyyu + 5 + 3
小甲鱼 + 5 + 5 + 5 鱼C有你更精彩^_^
cjjJasonchen + 1 + 4 + 1
sfqxx + 5 + 3 算了,看看能不能
zhangjinxuan + 2 + 5 鱼C有你更精彩^_^
liuhongrun2022 + 5 + 5 + 3
yinda_peng + 2 + 5 鱼C有你更精彩^_^
琅琊王朝 + 1 鱼C有你更精彩^_^

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-4 21:08:33 | 显示全部楼层
哇巧!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-4 21:12:43 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-4 21:19:23 | 显示全部楼层
好厉害啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-4 21:31:20 | 显示全部楼层
评负分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-4 22:28:33 | 显示全部楼层
wtm,我的又一个项目被抢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-4 23:18:30 | 显示全部楼层
不过,我相信。这上不了精华
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-5 07:07:33 | 显示全部楼层
本帖最后由 Ewan-Ahiouy 于 2023-7-8 19:43 编辑
sfqxx 发表于 2023-7-4 23:18
不过,我相信。这上不了精华


谁说我发帖子都要精华?我只是做出来了分享一下而已~

而且我想升级
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-5 07:08:41 | 显示全部楼层
歌者文明清理员 发表于 2023-7-4 22:28
wtm,我的又一个项目被抢了

az......不是吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-5 07:09:11 | 显示全部楼层

求评分,正的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-5 07:53:38 | 显示全部楼层

求评分,快升级

评分

参与人数 1荣誉 +5 收起 理由
zhangjinxuan + 5 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-5 08:15:47 | 显示全部楼层

回帖奖励 +3 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-7-5 08:46:20 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-5 08:47:27 | 显示全部楼层

回帖奖励 +3 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-5 08:56:19 | 显示全部楼层

回帖奖励 +3 鱼币

厉害了!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-5 13:08:56 | 显示全部楼层

回帖奖励 +3 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-7-5 13:50:59 | 显示全部楼层

回帖奖励 +3 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-7-5 13:52:16 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-5 14:32:32 | 显示全部楼层

回帖奖励 +3 鱼币

好耶好耶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-5 16:11:35 | 显示全部楼层

回帖奖励 +3 鱼币

冲冲冲,开玩
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 11:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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