猫史档案馆


【Python作品分享】火山行走【作品秀】

用户:天萼天萼查看:0 回复:0 评论:0 创建时间:2022-07-31T17:00:11


【作品展示】

center_image

 

【作品介绍】

一看就知道怎么玩(滑鸡)

 

【作品源代码】

import turtle
from copy import deepcopy
turtle.bgpic("火山.gif")
print(turtle.window_width(), turtle.window_height())
# -----------------------------------------------------------------
# 功能模块区,主要放置函数
def draw(pen, img, x, y):    
    pen.shape(img)    
    pen.goto(origin_x+x*size, origin_y-y*size)    
    pen.stamp()

def move_up():    
    global grid_x, grid_y, grid
    if result!=2:
        return    
    grid_y -= 1    
    # 移动范围    
    if grid_y < 0:        
        grid_y += 1        
        return    
    if grid[grid_y][grid_x] == 1:        
        grid_y += 1        
        return
    # 更新信息    
    update()

def move_down():    
    global grid_x, grid_y, grid 
    if result!=2:
        return      
    grid_y += 1    
    # 移动范围    
    if grid_y >= height:        
        grid_y -= 1        
        return    
    if grid[grid_y][grid_x] == 1:        
        grid_y -= 1        
        return    
    # 更新信息    
    update()

def move_left():    
    global grid_x, grid_y, grid
    if result!=2:
        return       
    grid_x -= 1    
    # 移动范围    
    if grid_x < 0:        
        grid_x += 1        
        return    
    if grid[grid_y][grid_x] == 1:        
        grid_x += 1        
        return    
    # 更新信息    
    update()

def move_right():    
    global grid_x, grid_y, grid
    if result!=2:
        return       
    grid_x += 1    
    # 移动范围    
    if grid_x >= width:        
        grid_x -= 1        
        return    
    if grid[grid_y][grid_x] == 1:        
        grid_x -= 1        
        return    
    # 更新信息    
    update()

def update():    
    global grid_x, grid_y, grid    
    # 踩冰块机制    
    if grid[grid_y][grid_x] == 2:        
        grid[grid_y][grid_x] = 3    
    elif grid[grid_y][grid_x] == 3:        
        grid[grid_y][grid_x] = 4
    #更新游戏状态
    update_result()

def update_result():
    global grid_x, grid_y, grid, result
    if grid[grid_y][grid_x] == 4:
        result = 0
    else:
        result = 1
        for i in grid:
            if 2 in i:
                result = 2
                break

def next_level():
    global result, level_num,grid, size, width, height, origin_x, origin_y, grid_x, grid_y 
    if result == 1:
        level_num += 1
    grid = deepcopy(level_store[level_num-1])
    size = 70
    width = len(grid[0])
    height = len(grid)

    origin_x = 0 - size * (width - 1) / 2
    origin_y = 0 + size * (height - 1) / 2
    # 角色初始位置
    grid_x = position_store[level_num-1][0]
    grid_y = position_store[level_num-1][1]
    result = 2
# ------------------------------------------------------------
# 基本信息区,放置游戏相关的一些信息
size = 70
width = 6
height = 6

''' 地图二维列表信息
0: 空
1:墙壁
2:通道
3:目标点
4: 箱子
5: 位于目标点的箱子
'''
level1 = [[1, 1, 1, 1, 1, 1, 1, 1],        
        [1, 2, 2, 2, 2, 2, 2, 1],        
        [1, 2, 2, 2, 1, 2, 2, 1],        
        [1, 2, 2, 2, 2, 2, 2, 1],        
        [1, 2, 2, 2, 2, 1, 2, 1],        
        [1, 2, 2, 1, 2, 2, 2, 1],
        [1, 3, 2, 2, 2, 2, 2, 1],
        [1, 1, 1, 1, 1, 1, 1, 1]]

level2 = [[1, 1, 1, 1, 1, 1, 1, 1],        
        [1, 2, 2, 1, 2, 2, 2, 1],        
        [1, 2, 2, 2, 1, 2, 2, 1],        
        [1, 2, 2, 2, 2, 2, 2, 1],        
        [1, 2, 2, 2, 2, 1, 2, 1],        
        [1, 2, 2, 1, 2, 2, 2, 1],
        [1, 2, 2, 2, 2, 2, 2, 1],
        [1, 1, 1, 1, 1, 1, 1, 1]]
level_store = [level1, level2]
position_store = [
    [1, 6],
    [1, 6]
]
level_num = 1
grid = level_store[level_num-1]
size = 70
width = len(grid[0])
height = len(grid)

origin_x = 0 - size * (width - 1) / 2
origin_y = 0 + size * (height - 1) / 2
# 角色初始位置
grid_x = position_store[level_num-1][0]
grid_y = position_store[level_num-1][1]

result = 2
# ------------------------------------------------------------
# # 操作事件区,放置键鼠操作相关的内容
turtle.onkey(move_up, 'Up')
turtle.onkey(move_down, 'Down')
turtle.onkey(move_left, 'Left')
turtle.onkey(move_right, 'Right')
turtle.onkey(next_level, 'Return')
turtle.listen()

# ------------------------------------------------------------
# 场景素材区,添加游戏画面相关的素材
# 添加素材
tile_shapes = ['空.gif', '砖块2.gif', '喵.gif', '砖块喵.gif', '岩浆.gif', '编程猫.gif']
for i in tile_shapes:    
    turtle.addshape(i)

#0:失败 1:成功 2:游戏中
result_shape = ['失败.gif', '成功.gif', '空.gif']
for i in result_shape:
    turtle.addshape(i)

turtle.addshape("遮罩.gif")

# ------------------------------------------------------------
# 画面绘制区,绘制场景用的画笔,绘制场景的代码
p = turtle.Pen()
p.penup()
# p.speed(0)
# p.speed('fast')
turtle.tracer(0)

while True:    
    p.clear()    
    # 绘制地图
    for i in range(len(grid)):        
        for j in range(len(grid[i])):
            # p.shape(tile_shapes[grid[i][j]])            
            # p.goto(origin_x+j*size, origin_y-i*size)            
            # p.stamp()
            draw(p, tile_shapes[grid[i][j]], j, i)
    # 绘制编程猫    
    # p.shape("编程猫.gif")    
    # p.goto(origin_x+grid_x*size, origin_y-grid_y*size)    
    # p.stamp()
    draw(p, "编程猫.gif", grid_x, grid_y)  
    #draw(p, "遮罩.gif", grid_x, grid_y)
    draw(p, result_shape[result], grid_x, grid_y)
    #更新
    #更新窗口
    turtle.update()

turtle.done()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页