猫史档案馆


【Python作品分享】走格子【作品秀】

用户:可靠的飞叶龙JUpj可靠的飞叶龙JUpj查看:0 回复:0 评论:0 创建时间:2024-03-14T21:56:36


【作品展示】

center_image

 

【作品介绍】

游戏玩法:

↑键让角色上移,↓键让角色下移,

←键让角色左移,→键让角色右移,

踩一次结冰的通道TA会变成正常的通道。

踩一次正常的通道TA会破碎。

踩一次破碎的通道TA会变成洞,也会因此失败。

胜利的条件是把正常的通道都踩一遍。

回车重来/下一关(过关了才行)

备注:无连锁反应。

音乐名:Graze the Roof 2022年新版

 

【作品源代码】

import turtle
import copy
import pygame

"""
↑键让角色上移,↓键让角色下移,
←键让角色左移,→键让角色右移,
踩一次结冰的通道TA会变成正常的通道。
踩一次正常的通道TA会破碎。
踩一次破碎的通道TA会变成洞,也会因此失败。
胜利的条件是把正常的通道都踩一遍。
回车重来/下一关(过关了才行)
备注:无连锁反应。
音乐名:Graze the Roof 2022年新版
"""
# -----------------------------------------------------------------
# 1.基本信息区,放置游戏相关的一些信息
pygame.init()
pygame.mixer.music.load("音乐.mp3")
pygame.mixer.music.play(-1)

size = 70
'''
0-空   1-墙壁   2-通道   3-目标   4-箱子
'''
level_n=1
level1 = [[0, 0, 1, 1, 1, 0],
        [0, 0, 1, 3, 1, 1],
        [1, 1, 1, 2, 2, 1],
        [1, 3, 2, 2, 2, 1],
        [1, 1, 2, 2, 2, 1],
        [0, 1, 1, 1, 1, 1]]

level2 = [[0, 1, 1, 1, 1, 1, 1],
          [0, 1, 2, 2, 2, 2, 1],
          [1, 1, 2, 2, 2, 2, 1],
          [1, 3, 2, 2, 2, 2, 1],
          [1, 1, 2, 2, 2, 2, 1],
          [0, 1, 1, 1, 1, 1, 1]]

level3 = [[1, 1, 1, 1, 1, 1, 1, 1],
          [1, 1, 2, 2, 2, 2, 2, 1],
          [1, 2, 2, 1, 2, 2, 2, 1],
          [1, 2, 2, 1, 2, 2, 2, 1],
          [1, 1, 2, 3, 1, 3, 2, 1],
          [1, 1, 1, 1, 1, 1, 1, 1]]

level4 = [[1, 1, 1, 1, 1, 1],
          [1, 2, 2, 2, 3, 1],
          [1, 2, 2, 2, 2, 1],
          [1, 2, 2, 2, 2, 1],
          [1, 1, 1, 2, 1, 1],
          [1, 1, 1, 1, 1, 1]]

level5=[[1, 1, 1, 1, 1, 1],
        [1, 2, 2, 2, 2, 1],
        [1, 2, 3, 3, 2, 1],
        [1, 2, 2, 2, 2, 1],
        [1, 2, 2, 3, 2, 1],
        [1, 2, 2, 2, 2, 1],
        [1, 2, 3, 2, 2, 1],
        [1, 2, 2, 2, 2, 1],
        [1, 1, 1, 1, 1, 1]]

level6=[[0,0,0,1,1,0,0,0],
        [0,0,1,2,2,1,0,0],
        [0,1,2,2,2,2,1,0],
        [1,2,2,2,2,2,2,1],
        [1,2,2,2,3,2,2,1],
        [0,1,2,2,2,2,1,0],
        [0,0,1,2,2,1,0,0],
        [0,0,0,1,1,0,0,0]]

level7=[[1,1,1,1,1,1,1,1],
        [1,2,2,2,2,2,2,1],
        [1,2,2,2,2,3,2,1],
        [1,2,2,2,2,2,2,1],
        [1,3,3,2,3,2,2,1],
        [1,2,2,2,2,2,2,1],
        [1,2,3,2,2,2,2,1],
        [1,1,1,1,1,1,1,1]]

level8=[[1,1,1,1,1,1,1,1],
        [1,2,2,2,2,2,2,1],
        [1,2,2,2,3,2,2,1],
        [1,2,2,2,2,2,2,1],
        [1,2,2,2,2,3,2,1],
        [1,2,2,3,2,2,2,1],
        [1,3,2,2,2,2,2,1],
        [1,1,1,1,1,1,1,1]]

level9 = [[1, 1, 1, 1, 1, 1, 1],
          [1, 2, 2, 2, 2, 3, 1],
          [1, 2, 2, 2, 2, 2, 1],
          [1, 2, 2, 2, 2, 2, 1],
          [1, 2, 2, 2, 2, 2, 1],
          [1, 2, 2, 2, 2, 5, 1],
          [1, 1, 1, 1, 1, 1, 1],
          [0, 1, 3, 3, 3, 1, 0],
          [0, 1, 3, 5, 3, 1, 0],
          [0, 1, 3, 3, 3, 1, 0],
          [0, 1, 1, 1, 1, 1, 0]]

level10=[[1, 1, 1, 1, 1, 1, 1],
         [1, 5, 2, 2, 2, 2, 1],
         [1, 2, 2, 2, 2, 2, 1],
         [1, 2, 2, 3, 2, 2, 1],
         [1, 2, 2, 2, 2, 2, 1],
         [1, 2, 2, 2, 2, 5, 1],
         [1, 1, 1, 1, 1, 1, 1]]

level11 = [[0, 0, 0, 1, 1, 0, 0, 0],
           [0, 0, 1, 6, 6, 1, 0, 0],
           [0, 1, 2, 6, 6, 6, 1, 0],
           [1, 6, 6, 6, 6, 6, 6, 1],
           [1, 6, 6, 6, 2, 6, 6, 1],
           [0, 1, 2, 6, 6, 6, 1, 0],
           [0, 0, 1, 6, 6, 1, 0, 0],
           [0, 0, 0, 1, 1, 0, 0, 0]]

level12 = [[1, 1, 1, 1, 1, 1, 1, 1],
           [1, 6, 6, 6, 6, 6, 6, 1],
           [1, 6, 6, 6, 6, 3, 6, 1],
           [1, 6, 6, 6, 6, 6, 6, 1],
           [1, 3, 2, 6, 3, 6, 6, 1],
           [1, 6, 6, 6, 6, 6, 6, 1],
           [1, 2, 3, 6, 6, 6, 6, 1],
           [1, 1, 1, 1, 1, 1, 1, 1]]

level13 = [[1, 1, 1, 1, 1, 1, 1, 1],
           [1, 6, 6, 6, 6, 6, 6, 1],
           [1, 6, 6, 6, 3, 6, 6, 1],
           [1, 6, 6, 6, 2, 6, 6, 1],
           [1, 6, 6, 6, 6, 3, 6, 1],
           [1, 6, 6, 3, 6, 6, 6, 1],
           [1, 2, 6, 6, 6, 6, 6, 1],
           [1, 1, 1, 1, 1, 1, 1, 1]]
levels = [level1, level2, level3, level4, level5, level6,level7, level8, level9, level10, level11,level12,level13]  # 添加1关必填
grid = copy.deepcopy(levels[level_n-1])  # levels[level_n-1]
width=len(grid[0])
height=len(grid)
origin_x = -(width-1) / 2 * size
origin_y = (height-1) / 2 * size
# 角色初始位置
max_level=13
players = [[1, 3], [4, 1], [3, 4], [4, 1], [3, 2], [4, 4], [2, 4], [1, 6],[5,1],[1,1],[4,4],[2,4],[1,6]]  # 添加1关必填
player_x = players[level_n-1][0]
player_y = players[level_n-1][1]
#0:游戏结束,1:过关,2:游戏进行中
result=2
# ------------------------------------------------------------
# 2.功能模块区,主要放置函数
def draw(pen, img, x, y):
    '''使用画笔pen,前往坐标(x,y),绘制外观img'''
    global origin_x, origin_y, size
    pen.goto(origin_x + x * size, origin_y - y * size)
    pen.shape(img)
    pen.stamp()

def move_up():
    '''角色上移'''
    global player_x, player_y, grid
    #显示结果后,禁止角色移动
    if result !=2:
        return
    player_y -= 1
    # 移动范围
    if player_y < 0:
        player_y += 1
        return
    elif grid[player_y][player_x] == 1:
        player_y += 1
        return
    # 改变地形,更新地图信息
    change_grid()

def move_down():
    '''角色下移'''
    global player_x, player_y, grid
    #显示结果后,禁止角色移动
    if result != 2:
        return
    player_y += 1
    # 移动范围
    if player_y >= height:
        player_y -= 1
        return
    elif grid[player_y][player_x] == 1:
        player_y -= 1
        return
    # 改变地形,更新地图信息
    change_grid()

def move_left():
    '''角色左移'''
    global player_x, player_y, grid
    #显示结果后,禁止角色移动
    if result != 2:
        return
    player_x -= 1
    # 移动范围
    if player_x < 0:
        player_x += 1
        return
    elif grid[player_y][player_x] == 1:
        player_x += 1
        return
    # 改变地形,更新地图信息
    change_grid()

def move_right():
    '''角色右移'''
    global player_x, player_y, grid
    #显示结果后,禁止角色移动
    if result != 2:
        return
    player_x += 1
    # 移动范围
    if player_x >= width:
        player_x -= 1
        return
    elif grid[player_y][player_x] == 1:
        player_x -= 1
        return
    # 改变地形,更新地图信息
    change_grid()

def change_grid():
    '''改变地形,更新地图信息'''
    global grid, player_x, player_y
    if grid[player_y][player_x] == 6:
        grid[player_y][player_x] = 2
    elif grid[player_y][player_x] == 2:
        grid[player_y][player_x] = 3
    elif grid[player_y][player_x] == 3:
        grid[player_y][player_x] = 4
    change_pos()
    show_result()

def show_result():
    global result,grid,player_x,player_y
    if grid[player_y][player_x]==4:
        result=0
    else:
        for i in grid:
            if 2 in i:
                result=2
                break
        else:
            if level_n!=max_level:
                result=1
            else:
                result=3
                turtle.onkey(None, 'Return')

def next_level():
    global result, level_n, grid, player_x, player_y, width, height, origin_x, origin_y, size
    if result == 1:
        if level_n!=max_level:
            level_n+=1
    result=2
    grid=copy.deepcopy(levels[level_n-1])
    width=len(grid[0])
    height=len(grid)
    origin_x=0-size*(width-1)/2
    origin_y=0+size*(height-1)/2
    player_x=players[level_n-1][0]
    player_y=players[level_n-1][1]

def change_pos():
    global grid,player_x,player_y
    if level_n==9:
        if player_x==5 and player_y==5:
                player_x = 3
                player_y = 8
        elif player_x==3 and player_y==8:
                player_x = 5
                player_y = 5
    if level_n == 10:
        if player_x == 1 and player_y == 1:
            player_x = 5
            player_y = 5
        elif player_x == 5 and player_y == 5:
            player_x = 1
            player_y = 1


# ------------------------------------------------------------
# 3.操作事件区,放置键鼠操作相关的内容
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()

# ------------------------------------------------------------
# 4.场景素材区,添加游戏画面相关的素材
tile_shapes = ['空.gif', '墙壁3.gif', '通道.gif','破碎的通道.gif', '陷阱.gif', '传送门.gif', '通道2.gif']
for i in tile_shapes:
    turtle.addshape(i)
turtle.addshape('编程猫.gif')
result_shapes = ["失败.gif", '成功.gif', '空.gif', '通关.gif']
for i in result_shapes:
    turtle.addshape(i)
turtle.addshape('遮罩.gif')
# ------------------------------------------------------------
# 5.画面绘制区,绘制场景用的画笔,绘制场景的代码
p = turtle.Pen()
p.penup()
p.hideturtle()

turtle.tracer(False)
while True:
    p.clear()
    for i in range(width):
        for j in range(height):
            draw(p, tile_shapes[grid[j][i]], i, j)
    draw(p, '编程猫.gif', player_x, player_y)
    draw(p, '遮罩.gif', player_x, player_y)
    draw(p, result_shapes[result], width//2, height//2)
    turtle.update()

turtle.done()

 

【提示】

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

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页