猫史档案馆


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

用户:潘金莲潘金莲查看:0 回复:0 评论:0 创建时间:2023-08-15T14:48:47


【作品展示】

center_image

 

【作品介绍】

走格子游戏。

 

【作品源代码】

import turtle
import copy
import os
import sys
import random

# Python解释器工作目录
base_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
os.chdir(base_dir)

# -----------------------------------------------------------------
# 1.基本信息区,放置游戏相关的一些信息
size = 70
result=2
'''
0-空   1-墙壁   2-通道   3-目标   4-箱子   5-level0_1   6-level0_2   7-level0_3    8-level94_1  9-level94_2   10-level94_3
'''
level_n=1
level0 = [[5, 5, 5, 5, 5, 5, 5, 5, 5],
          [5, 6, 6, 6, 6, 6, 6, 6, 5],
          [5, 4, 5, 5, 5, 5, 5, 6, 5],
          [5, 6, 6, 6, 6, 6, 6, 6, 5],
          [5, 6, 5, 5, 5, 5, 5, 4, 5],
          [5, 6, 6, 6, 6, 6, 6, 6, 5],
          [5, 4, 5, 5, 5, 5, 5, 6, 5],
          [5, 7, 6, 6, 6, 6, 6, 6, 5],
          [5, 5, 5, 5, 5, 5, 5, 5, 5]]
#[1,7]
level1 = [[0, 5, 5, 5, 5, 0],
          [0, 5, 6, 6, 5, 5],
          [5, 5, 6, 6, 6, 5],
          [5, 6, 6, 6, 6, 5],
          [5, 5, 6, 6, 5, 5],
          [0, 5, 6, 5, 5, 0]]
#[2,3]
level2 = [[0, 1, 1, 1, 1, 0],
          [0, 1, 2, 2, 1, 1],
          [1, 1, 2, 2, 2, 1],
          [1, 2, 2, 2, 2, 1],
          [1, 4, 2, 2, 1, 0],
          [1, 1, 2, 1, 1, 0]]
#[2,3]
level3 = [[0, 0, 1, 1, 2, 1, 0, 0, 0],
          [0, 1, 1, 2, 2, 1, 1, 1, 1],
          [1, 1, 4, 2, 2, 2, 2, 2, 1],
          [1, 1, 1, 1, 1, 2, 2, 2, 1],
          [0, 0, 1, 2, 2, 2, 1, 1, 1],
          [1, 1, 1, 2, 2, 4, 3, 4, 1],
          [0, 1, 2, 2, 2, 3, 1, 1, 1],
          [0, 1, 2, 2, 3, 4, 1, 0, 0],
          [1, 1, 1, 1, 1, 1, 1, 0, 0]]
#[4,7]
level4 = [[0, 0, 1, 1, 2, 1, 1, 0, 0],
          [0, 0, 1, 2, 2, 3, 1, 0, 0],
          [0, 1, 1, 2, 2, 2, 1, 1, 1],
          [0, 1, 3, 3, 1, 2, 4, 4, 1],
          [1, 1, 2, 2, 2, 2, 2, 3, 1],
          [1, 2, 2, 3, 2, 2, 2, 3, 1],
          [1, 2, 2, 2, 2, 2, 1, 1, 1],
          [1, 1, 2, 2, 3, 4, 1, 0, 0],
          [0, 1, 1, 1, 1, 1, 1, 0, 0]]
#[3,5]
level5 = [[1, 1, 1, 1, 1, 1, 1, 1, 1],
          [1, 2, 2, 2, 2, 2, 2, 4, 1],
          [1, 2, 2, 2, 2, 2, 2, 2, 2],
          [1, 2, 2, 2, 2, 2, 3, 4, 1],
          [1, 2, 2, 2, 1, 1, 4, 1, 1],
          [1, 2, 2, 2, 1, 0, 0, 0, 0],
          [1, 3, 2, 2, 4, 0, 0, 0, 0],
          [1, 4, 3, 4, 1, 0, 0, 0, 0]]
#[2,7]
level10=[[1, 1, 1, 1, 1, 1, 1, 1, 1],
         [1, 3, 2, 2, 2, 2, 2, 2, 1],
         [1, 2, 2, 2, 2, 2, 2, 2, 1],
         [1, 2, 2, 2, 2, 2, 2, 2, 1],
         [1, 2, 2, 2, 2, 2, 2, 2, 1],
         [1, 2, 2, 2, 2, 2, 2, 2, 1],
         [1, 2, 2, 2, 2, 2, 2, 2, 1],
         [1, 2, 2, 2, 2, 2, 2, 2, 1],
         [1, 2, 2, 2, 2, 2, 2, 2, 1],
         [1, 1, 1, 1, 1, 1, 1, 1, 1]]
#[1,1]
level11=[[1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1],
         [1, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 1],
         [1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1],
         [1, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 1],
         [1, 4, 4, 2, 2, 2, 2, 2, 2, 4, 4, 1],
         [1, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 1],
         [1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1],
         [1, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 1],
         [1, 4, 4, 2, 2, 2, 2, 2, 2, 4, 4, 1],
         [1, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 1],
         [1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 1],
         [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
#[10,10]
levelfun=[[1, 1, 2, 1, 1, 1, 1, 1, 1],
          [1, 4, 2, 2, 2, 2, 2, 2, 1],
          [1, 1, 1, 1, 2, 2, 2, 2, 1],
          [1, 2, 2, 2, 2, 2, 2, 2, 1],
          [1, 2, 2, 2, 2, 2, 1, 2, 1],
          [1, 2, 2, 1, 1, 1, 1, 2, 1],
          [1, 1, 1, 1, 2, 2, 2, 2, 1],
          [1, 2, 2, 2, 2, 4, 4, 4, 1],
          [1, 1, 1, 1, 1, 1, 1, 1, 1]]
#[2,7]
leveli = [[1, 1, 1],
          [1, 3, 1],
          [1, 2, 1],
          [1, 2, 1],
          [1, 2, 1],
          [1, 2, 1],
          [1, 2, 1],
          [1, 2, 1],
          [1, 2, 1],
          [1, 2, 1],
          [1, 2, 1],
          [1, 2, 1],
          [1, 2, 1],
          [1, 2, 1],
          [1, 2, 1],
          [1, 2, 1],
          [1, 2, 1],
          [1, 2, 1]]
#[1,1]
level3999=[[1, 1, 1, 1, 1, 1],
           [1, 4, 2, 2, 2, 2],
           [1, 3, 2, 2, 3, 1],
           [1, 4, 2, 2, 4, 1],
           [1, 3, 2, 2, 3, 1],
           [1, 4, 2, 2, 4, 1],
           [1, 3, 2, 2, 3, 1],
           [1, 4, 3, 2, 4, 1],
           [1, 1, 1, 1, 1, 1]]
#[2,7]
'''
0-空   1-墙壁   2-通道   3-目标   4-箱子   5-level0_1   6-level0_2   7-level0_3    8-level94_1  9-level94_2   10-level94_3
'''
level194_1 = [[1, 1, 1, 1, 1, 1],
            [1, 3, 2, 2, 1, 1],
            [1, 2, 2, 2, 2, 1],
            [1, 2, 2, 2, 2, 1],
            [1, 2, 2, 2, 2, 1],
            [1, 1, 2, 1, 1, 1]]
#[1,1]
level194_2_9 = [[1, 1, 1, 1, 1],
              [1, 2, 2, 2, 1],
              [1, 2, 3, 2, 1],
              [1, 2, 2, 2, 1],
              [1, 1, 1, 1, 1]]
#[2,2]

'''
0-空   1-墙壁   2-通道   3-目标   4-箱子   5-level0_1   6-level0_2   7-level0_3    8-level94_1  9-level94_2   10-level94_3
11-level130_1   12-level130_2   13-level130_3
'''
level94 = [[0, 0, 8, 8, 8, 8, 8, 0, 0],
           [0, 8, 8,10, 9, 9, 8, 8, 0],
           [8, 8, 8, 9, 9, 9, 8, 8, 8],
           [8, 9, 9, 9, 9, 9, 9, 9, 8],
           [8, 9, 9, 9, 9, 9, 9, 9, 8],
           [8, 9, 9, 9, 9, 9, 9, 9, 8],
           [8, 8, 8, 9, 9, 9, 8, 8, 8],
           [0, 8, 8, 9, 9, 9, 8, 8, 0],
           [0, 0, 8, 8, 8, 8, 8, 0, 0]]
#[3,1]
level124=[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
          [1, 3, 3, 2, 2, 2, 3, 2, 2, 2, 1],
          [1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1],
          [1, 2, 2, 2, 3, 2, 2, 2, 3, 2, 1],
          [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
#[1,1]
level130 = [[11, 11, 11, 11, 11, 11, 11],
            [11, 13, 12, 12, 12, 12, 11],
            [11, 11, 11, 11, 11, 12, 11],
            [11, 12, 12, 12, 12, 12, 11],
            [11, 12, 11, 11, 11, 11, 11],
            [11, 12, 11, 12, 12, 12, 11],
            [11, 12, 11, 12, 11, 12, 11],
            [11, 12, 11, 12, 11, 12, 11],
            [11, 12, 11, 12, 11, 12, 11],
            [11, 12, 12, 12, 11, 12, 11],
            [11, 11, 11, 11, 11, 12, 11]]
#[1,1]
level8 = [[ 0,14,16,15,15,15, 0],
          [ 0,15,16,16,16,15,15],
          [15,16,16,15,16,16,15],
          [15,16,16,16,16,16,15],
          [15,16,14,15,16,16,15],
          [15,16,16,16,16,15,15],
          [15,16,16,15,16,17,15],
          [15,16,16,15,15,15,15],
          [15,16,16,15, 0,15,15],
          [15,15,15,15, 0, 0,15],
          [ 0,15,15,15, 0, 0, 0]]
#[5,6]
playershave = [[1, 7], [2, 3], [2, 3], [4, 7], [3, 5], [2, 7], [1, 1], [10, 10], [2, 7], [1, 1], [2, 7], [1, 1], [2, 2], [3, 1], [1, 1], [1, 1], [5, 6]]
levelhave = [level0, level1, level2, level3, level4, level5, level10, level11, levelfun,leveli, level3999, level194_1, level194_2_9, level94, level124, level130, level8]
levels = [level0]
grid = copy.deepcopy(levels[level_n-1])

width = len(grid[0])
height = len(grid)
origin_x = -(width-1) / 2 * size
origin_y = (height-1) / 2 * size
# 角色初始位置
#level0=[1,7]           level94=[3,1]
#level1=[2,3]           level124=[1,1]
#level2=[2,3]           level130=[1,1]
#level3=[4,7]           level8=[5,6]
#level4=[3,5]
#level5=[2,7]
#level10=[1,1]
#level11=[10,10]
#levelfun=[2,7]
#leveli=[1,1]
#level3999=[2,7]
#level194_1=[1,1]
#level194_2_9=[2,2]
players = [[1, 7]]
player_x = players[level_n-1][0]
player_y = players[level_n-1][1]

playershave = [[1, 7], [2, 3], [2, 3], [4, 7], [3, 5], [2, 7], [1, 1], [10, 10], [2, 7], [1, 1], [2, 7], [1, 1], [2, 2], [3, 1], [1, 1], [1, 1], [5, 6]]
levelhave = [level0, level1, level2, level3, level4, level5, level10, level11, levelfun, leveli, level3999, level194_1, level194_2_9, level94, level124, level130, level8]
gs = random.randint(10, 20)
for i in range(gs):
    gm = random.randint(0, 16)
    levels += levelhave[gm]
    players += playershave[gm]
# ------------------------------------------------------------
# 2.功能模块区,主要放置函数
def show_result():
    global player_x,player_y,grid,result
    if grid[player_y][player_x]==4 or grid[player_y][player_x]==14:
        result=0
    else:
        for i in grid:
            if 2 in i or 6 in i or 9 in i or 12 in i or 16 in i:
                result=2
                break
        else:
            result=1

def draw(pen, img, x, y):
    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_y, player_x, grid
    if result != 2:
       return
    player_y -= 1
    if player_y < 0 or grid[player_y][player_x] == 1 or grid[player_y][player_x] == 5 or grid[player_y][player_x] == 8 or grid[player_y][player_x] == 11:
        player_y += 1
        return
    elif grid[player_y][player_x] == 15:
        player_y += 1
        return
    change_grid()

def move_down():
    global player_y, player_x, grid
    if result != 2:
        return
    player_y += 1
    if player_y >= height or grid[player_y][player_x] == 1 or grid[player_y][player_x] == 5 or grid[player_y][player_x] == 8 or grid[player_y][player_x] == 11:
        player_y -= 1
        return
    elif grid[player_y][player_x] == 15:
        player_y -= 1
        return
    change_grid()

def move_left():
    global player_y, player_x, grid
    if result != 2:
       return
    player_x -= 1
    if player_x < 0 or grid[player_y][player_x] == 1 or grid[player_y][player_x] == 5 or grid[player_y][player_x] == 8 or  grid[player_y][player_x] == 11:
        player_x += 1
        return
    elif grid[player_y][player_x] == 15:
        player_y += 1
        return
    change_grid()

def move_right():
    global player_y, player_x, grid
    if result != 2:
       return
    player_x += 1
    if player_x >= width or grid[player_y][player_x] == 1 or grid[player_y][player_x] == 5 or grid[player_y][player_x] == 8 or grid[player_y][player_x] == 11:
        player_x -= 1
        return
    elif grid[player_y][player_x] == 15:
        player_y -= 1
        return
    change_grid()

def change_grid():
    global player_y, player_x, grid
    if 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
    if grid[player_y][player_x] == 6 :
        grid[player_y][player_x] = 7
    elif grid[player_y][player_x] == 7:
        grid[player_y][player_x] = 4
    if grid[player_y][player_x] == 9:
        grid[player_y][player_x] = 10
    elif grid[player_y][player_x] == 10:
        grid[player_y][player_x] = 4
    if grid[player_y][player_x] == 12:
        grid[player_y][player_x] = 13
    elif grid[player_y][player_x] == 13:
        grid[player_y][player_x] = 4
    if grid[player_y][player_x] == 16:
        grid[player_y][player_x] = 17
    elif grid[player_y][player_x] == 17:
        grid[player_y][player_x] = 14
    show_result()

def next_level():
    global result,level_n,player_y,player_x,grid,width,height,origin_x,origin_y,size,wznr
    if result == 1:
        level_n+=1
    result=2
    grid=copy.deepcopy(levels[level_n-1])
    width = len(grid[0])
    height = len(grid)
    origin_x = 0-(width-1) / 2 * size
    origin_y = (height-1) / 2 * size
    player_x = players[level_n-1][0]
    player_y = players[level_n-1][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', '墙壁.gif', '通道.gif', '目标.gif', '箱子.gif','level0_1.gif','level0_2.gif','level0_3.gif',
'level94_1.gif','level94_2.gif','level94_3.gif','level130_1.gif','level130_2.gif','level130_3.gif','失败结果2.gif',
'level8_1.gif','level8_2.gif','level8_3.gif','皇家口粮.gif']
#14-失败结果2
for i in tile_shapes:
    turtle.addshape(i)
result_shapes = [ '失败.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,result_shapes[result],(width-1)/2,(height-1)/2)
    turtle.update()

turtle.done()

 

【提示】

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

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页