鱼C论坛

 找回密码
 立即注册
查看: 1867|回复: 5

[已解决]有没有dalao看看

[复制链接]
发表于 2021-8-7 20:30:53 | 显示全部楼层 |阅读模式
20鱼币
maze.png
用python读入图片 有没有办法实现可视化走迷宫
最佳答案
2021-8-7 20:30:54
天神下饭... 发表于 2021-8-9 00:35
右下角右下角 入口左上角
  1. import pygame

  2. pygame.init()
  3. pygame.display.set_caption('maze')

  4. background = pygame.image.load('background.png')
  5. block = pygame.image.load('block.png')
  6. screen = pygame.display.set_mode(background.get_size())
  7. clock = pygame.time.Clock()
  8. fps = 80
  9. block_position = (10, 230)
  10. block_speed = 0.025
  11. block_tick = 0
  12. block_step = 3
  13. key_down = False
  14. key_value = 0

  15. def tuple_add(a, b):
  16.     return (a[0] + b[0], a[1] + b[1])

  17. def color_add(a, b):
  18.     return pygame.Color(a[0] + b, a[1] + b, a[2] + b, 0)

  19. def verify_position(position):
  20.     fuzziness = 20
  21.     width, height = block.get_size()
  22.     for h in range(height):
  23.         for w in range(width):
  24.             a = background.get_at(tuple_add(position, (w, h)))
  25.             b = pygame.Color(color_add((0, 0, 0), fuzziness))
  26.             a = background.map_rgb(a)
  27.             b = background.map_rgb(b)
  28.             if a <= b: return False
  29.     return True

  30. def block_move():
  31.     global block_position, block_tick
  32.     block_tick += (1 / fps)
  33.     if block_tick < block_speed: return
  34.     block_tick = 0
  35.     new_position = block_position
  36.     if key_value == pygame.K_LEFT: new_position = tuple_add(block_position, (-1, 0))
  37.     if key_value == pygame.K_UP: new_position = tuple_add(block_position, (0, -1))
  38.     if key_value == pygame.K_RIGHT: new_position = tuple_add(block_position, (1, 0))
  39.     if key_value == pygame.K_DOWN: new_position = tuple_add(block_position, (0, 1))
  40.     if verify_position(new_position): block_position = new_position

  41. main_loop = True
  42. while main_loop:
  43.     if key_down: block_move()
  44.     screen.blit(background, (0, 0))
  45.     screen.blit(block, block_position)
  46.     pygame.display.update()
  47.     for event in pygame.event.get():
  48.         if event.type == pygame.QUIT:
  49.             pygame.quit()
  50.             main_loop = False
  51.         if event.type == pygame.KEYDOWN:
  52.             if event.key == ord('q'):
  53.                 pygame.event.post(pygame.event.Event(pygame.QUIT))
  54.             key_down = True
  55.             key_value = event.key
  56.         if event.type == pygame.KEYUP:
  57.             key_down = False
  58.     clock.tick(fps)
复制代码


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

使用道具 举报

发表于 2021-8-7 20:30:54 | 显示全部楼层    本楼为最佳答案   
天神下饭... 发表于 2021-8-9 00:35
右下角右下角 入口左上角
  1. import pygame

  2. pygame.init()
  3. pygame.display.set_caption('maze')

  4. background = pygame.image.load('background.png')
  5. block = pygame.image.load('block.png')
  6. screen = pygame.display.set_mode(background.get_size())
  7. clock = pygame.time.Clock()
  8. fps = 80
  9. block_position = (10, 230)
  10. block_speed = 0.025
  11. block_tick = 0
  12. block_step = 3
  13. key_down = False
  14. key_value = 0

  15. def tuple_add(a, b):
  16.     return (a[0] + b[0], a[1] + b[1])

  17. def color_add(a, b):
  18.     return pygame.Color(a[0] + b, a[1] + b, a[2] + b, 0)

  19. def verify_position(position):
  20.     fuzziness = 20
  21.     width, height = block.get_size()
  22.     for h in range(height):
  23.         for w in range(width):
  24.             a = background.get_at(tuple_add(position, (w, h)))
  25.             b = pygame.Color(color_add((0, 0, 0), fuzziness))
  26.             a = background.map_rgb(a)
  27.             b = background.map_rgb(b)
  28.             if a <= b: return False
  29.     return True

  30. def block_move():
  31.     global block_position, block_tick
  32.     block_tick += (1 / fps)
  33.     if block_tick < block_speed: return
  34.     block_tick = 0
  35.     new_position = block_position
  36.     if key_value == pygame.K_LEFT: new_position = tuple_add(block_position, (-1, 0))
  37.     if key_value == pygame.K_UP: new_position = tuple_add(block_position, (0, -1))
  38.     if key_value == pygame.K_RIGHT: new_position = tuple_add(block_position, (1, 0))
  39.     if key_value == pygame.K_DOWN: new_position = tuple_add(block_position, (0, 1))
  40.     if verify_position(new_position): block_position = new_position

  41. main_loop = True
  42. while main_loop:
  43.     if key_down: block_move()
  44.     screen.blit(background, (0, 0))
  45.     screen.blit(block, block_position)
  46.     pygame.display.update()
  47.     for event in pygame.event.get():
  48.         if event.type == pygame.QUIT:
  49.             pygame.quit()
  50.             main_loop = False
  51.         if event.type == pygame.KEYDOWN:
  52.             if event.key == ord('q'):
  53.                 pygame.event.post(pygame.event.Event(pygame.QUIT))
  54.             key_down = True
  55.             key_value = event.key
  56.         if event.type == pygame.KEYUP:
  57.             key_down = False
  58.     clock.tick(fps)
复制代码


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

使用道具 举报

发表于 2021-8-8 16:05:28 | 显示全部楼层
你这迷宫有出口吗

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
Aston7 + 1 + 1 + 1 鱼C有你更精彩^_^

查看全部评分

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

使用道具 举报

发表于 2021-8-8 21:06:06 | 显示全部楼层
所以,迷宫的出口在哪
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-9 00:34:54 From FishC Mobile | 显示全部楼层
nahongyan1997 发表于 2021-8-8 16:05
你这迷宫有出口吗


一般不是认为出口右下角吗。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-8-9 00:35:44 From FishC Mobile | 显示全部楼层
nahongyan1997 发表于 2021-8-8 16:05
你这迷宫有出口吗

右下角右下角 入口左上角
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-20 15:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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