鱼C论坛

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

[已解决]有没有dalao看看

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

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

background = pygame.image.load('background.png')
block = pygame.image.load('block.png')
screen = pygame.display.set_mode(background.get_size())
clock = pygame.time.Clock()
fps = 80
block_position = (10, 230)
block_speed = 0.025
block_tick = 0
block_step = 3
key_down = False
key_value = 0

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

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

def verify_position(position):
    fuzziness = 20
    width, height = block.get_size()
    for h in range(height):
        for w in range(width):
            a = background.get_at(tuple_add(position, (w, h)))
            b = pygame.Color(color_add((0, 0, 0), fuzziness))
            a = background.map_rgb(a)
            b = background.map_rgb(b)
            if a <= b: return False
    return True

def block_move():
    global block_position, block_tick
    block_tick += (1 / fps)
    if block_tick < block_speed: return
    block_tick = 0
    new_position = block_position
    if key_value == pygame.K_LEFT: new_position = tuple_add(block_position, (-1, 0))
    if key_value == pygame.K_UP: new_position = tuple_add(block_position, (0, -1))
    if key_value == pygame.K_RIGHT: new_position = tuple_add(block_position, (1, 0))
    if key_value == pygame.K_DOWN: new_position = tuple_add(block_position, (0, 1))
    if verify_position(new_position): block_position = new_position

main_loop = True
while main_loop:
    if key_down: block_move()
    screen.blit(background, (0, 0))
    screen.blit(block, block_position)
    pygame.display.update()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            main_loop = False
        if event.type == pygame.KEYDOWN:
            if event.key == ord('q'):
                pygame.event.post(pygame.event.Event(pygame.QUIT))
            key_down = True
            key_value = event.key
        if event.type == pygame.KEYUP:
            key_down = False
    clock.tick(fps)

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

使用道具 举报

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

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

background = pygame.image.load('background.png')
block = pygame.image.load('block.png')
screen = pygame.display.set_mode(background.get_size())
clock = pygame.time.Clock()
fps = 80
block_position = (10, 230)
block_speed = 0.025
block_tick = 0
block_step = 3
key_down = False
key_value = 0

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

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

def verify_position(position):
    fuzziness = 20
    width, height = block.get_size()
    for h in range(height):
        for w in range(width):
            a = background.get_at(tuple_add(position, (w, h)))
            b = pygame.Color(color_add((0, 0, 0), fuzziness))
            a = background.map_rgb(a)
            b = background.map_rgb(b)
            if a <= b: return False
    return True

def block_move():
    global block_position, block_tick
    block_tick += (1 / fps)
    if block_tick < block_speed: return
    block_tick = 0
    new_position = block_position
    if key_value == pygame.K_LEFT: new_position = tuple_add(block_position, (-1, 0))
    if key_value == pygame.K_UP: new_position = tuple_add(block_position, (0, -1))
    if key_value == pygame.K_RIGHT: new_position = tuple_add(block_position, (1, 0))
    if key_value == pygame.K_DOWN: new_position = tuple_add(block_position, (0, 1))
    if verify_position(new_position): block_position = new_position

main_loop = True
while main_loop:
    if key_down: block_move()
    screen.blit(background, (0, 0))
    screen.blit(block, block_position)
    pygame.display.update()
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            main_loop = False
        if event.type == pygame.KEYDOWN:
            if event.key == ord('q'):
                pygame.event.post(pygame.event.Event(pygame.QUIT))
            key_down = True
            key_value = event.key
        if event.type == pygame.KEYUP:
            key_down = False
    clock.tick(fps)

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

使用道具 举报

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

评分

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

查看全部评分

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

使用道具 举报

发表于 2021-8-8 21:06:06 | 显示全部楼层
所以,迷宫的出口在哪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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


一般不是认为出口右下角吗。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

右下角右下角 入口左上角
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 15:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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