猫史档案馆


【Python作品分享】走格子(待更新)【作品秀】

用户:李熠恒李熠恒查看:0 回复:2 评论:0 创建时间:2024-08-10T09:23:23


【作品展示】

center_image

 

【作品介绍】

这是我创作的一款走格子游戏,上下左右键控制角色移动,回车键重置或跳到下一关;游戏中你需要把雪地变成冰块,但冰块不能踩第二次。资源有限,请各位大佬多指教,有想法的可以发在评论区。栓Q~

 

【作品源代码】

import turtle
import pygame
import copy
pygame.mixer.init()
pygame.mixer.music.load('奇妙探险.mp3')
pygame.mixer.music.set_volume(0.5)
pygame.mixer.music.play()
# -----------------------------------------------------------------
# 1.基本信息区,放置游戏相关的一些信息
size = 70
'''
0-空   1-墙壁2   2-雪地   3-冰   4-破碎的冰
'''
level_n = 1
level1 = [[0, 0, 0, 0, 0, 0],
         [1, 1, 1, 1, 0, 0],
         [1, 3, 2, 1, 0, 0],
         [1, 1, 1, 1, 0, 0],
         [0, 0, 0, 0, 0, 0],
         [0, 0, 0, 0, 0, 0]]
level2 = [[0, 0, 1, 1, 1, 1],
         [0, 0, 1, 2, 2, 1],
         [1, 1, 1, 2, 2, 1],
         [1, 2, 2, 2, 2, 1],
         [1, 2, 3, 1, 3, 1],
         [0, 1, 1, 0, 1, 1]]
level3 = [[0, 0, 0, 0, 0, 0],
          [0, 1, 1, 1, 1, 1],
          [1, 1, 1, 2, 2, 1],
          [1, 2, 2, 3, 2, 1],
          [1, 3, 2, 2, 2, 1],
          [1, 1, 1, 1, 1, 1]]

levels = [level1, level2, level3]
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
# 角色初始位置
players = [[1, 2], [2, 4], [1, 4]]
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] == 2:
        grid[player_y][player_x] = 3
    elif grid[player_y][player_x] == 3:
        grid[player_y][player_x] = 4
    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:
            result = 1
def next_level():
    '''按下回车进入下一关,或者重置当前关卡'''
    global result, level_n, grid, player_x, player_y, width, height, origin_x, origin_y, size
    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 - 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 next_levelo():
    '''按下回车进入下一关,或者重置当前关卡'''
    global result, level_n, grid, player_x, player_y, width, height, origin_x, origin_y, size
    if result == 1:
        level_n +=1
    result = 2
    grid = 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]

# ------------------------------------------------------------
# 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', '墙壁2.gif', '雪地.gif', '冰.gif', '破碎的冰.gif']
for i in tile_shapes:
    turtle.addshape(i)
turtle.addshape('角色26.gif')
turtle.addshape('遮罩.gif')
result_shapes = ['失败.gif', '成功.gif', '空.gif']
for i in result_shapes:
    turtle.addshape(i)
# ------------------------------------------------------------
# 5.画面绘制区,绘制场景用的画笔,绘制场景的代码
p = turtle.Pen()
turtle.bgpic('雪地背景.gif')
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, '角色26.gif', player_x, player_y)
    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 页 / 共 1下一页
peTerpeTer

创赛营的

点赞0


评论


code猫的code猫的

importturtle importpygame importcopy pygame.mixer.init() pygame.mixer.music.load('奇妙探险.mp3') pygame.mixer.music.set_volume(0.5) pygame.mixer.music.play() #BasicGameInfor喵 size=70 level_n=1 #LevelsDefine levels=[ [[0,0,0,0,0,0], [1,1,1,1,0,0], [1,3,2,1,0,0], [1,1,1,1,0,0], [0,0,0,0,0,0], [0,0,0,0,0,0]], #Addlevelshere ] #InitialPlayerPosition players=[[1,2],[2,4],[1,4]] player_x=players[level_n-1][0] player_y=players[level_n-1][1] #GameState result=2 #FunctionDefinitions defdraw(pen,img,x,y): globalorigin_x,origin_y,size pen.goto(origin_x+x*size,origin_y-y*size) pen.shape(img) pen.stamp() defmove_up(): move(0,-1) defmove_down(): move(0,1) defmove_left(): move(-1,0) defmove_right(): move(1,0) defmove(dx,dy): globalplayer_x,player_y,grid ifresult!=2: return new_x=player_x+dx new_y=player_y+dy ifnot(0<=new_x<widthand0<=new_y<height): return ifgrid[new_y][new_x]==1: return player_x,player_y=new_x,new_y change_grid() defchange_grid(): globalgrid,player_x,player_y #Changeterrainlogic ifgrid[player_y][player_x]==2: grid[player_y][player_x]=3 elifgrid[player_y][player_x]==3: grid[player_y][player_x]=4 show_result() defshow_result(): globalresult ifgrid[player_y][player_x]==4: result=0 else: result=2ifany(2inrowforrowingrid)else1 defnext_level(): globalresult,level_n ifresult==1: level_n+=1 reset_level() defreset_level(): globalresult,grid,player_x,player_y result=2 grid=copy.deepcopy(levels[level_n-1]) player_x,player_y=players[level_n-1] defreset_current_level(): globalgrid,player_x,player_y,result result=2 player_x,player_y=players[level_n-1] grid=copy.deepcopy(levels[level_n-1]) #InputHandling 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.onkey(reset_current_level,'r')#Resetcurrentlevel turtle.listen() #GraphicsSetup tile_shapes=['空.gif','墙壁2.gif','雪地.gif','冰.gif','破碎的冰.gif'] forshapeintile_shapes: turtle.addshape(shape) turtle.addshape('角色26.gif') turtle.addshape('遮罩.gif') result_shapes=['失败.gif','成功.gif','空.gif'] forshapeinresult_shapes: turtle.addshape(shape) #GameLoop p=turtle.Pen() turtle.bgpic('雪地背景.gif') p.penup() p.hideturtle() turtle.tracer(False) whileTrue: p.clear() foriinrange(width): forjinrange(height): draw(p,tile_shapes[grid[j][i]],i,j) draw(p,'角色26.gif',player_x,player_y) draw(p,'遮罩.gif',player_x,player_y) draw(p,result_shapes[result],(width-1)/2,(height-1)/2) turtle.update() turtle.done()

点赞0


评论