猫史档案馆


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

用户:LLeo_淡退LLeo_淡退查看:0 回复:1 评论:0 创建时间:2023-08-20T17:58:54


【作品展示】

center_image

 

【作品介绍】

这是一款走格子的小游戏,基本规则是走完所有格,每个格子只能走一下,并不碰到障碍物。一共有9关,每一关的规则都有升级,欢迎来玩呦!!!(本人年纪小,请多指教大佬们)▷△◁

 

【作品源代码】

import turtle

import copy

import time

import random

import pygame
pygame.mixer.init()
track = pygame.mixer.music.load('菊次郎的夏天.mp3')

import os
import sys

# Python解释器工作目录
base_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
os.chdir(base_dir)
# -----------------------------------------------------------------
# 1.基本信息区,放置游戏相关的一些信息

size = 70
n=0
dhj_x = 1
dhj_y = 8
'''
0-空 1-墙 2-红包关闭 3-元宝 4-窟窿 5-年兽 
6-传送门 7-金块 8-大黄鸡 9-陷阱
'''
level_n = 1
level1 = [[1, 1, 1, 1, 1, 1, 1, 1, 1], 
        [1, 2, 2, 2, 2, 5, 2, 2, 1],
        [1, 2, 2, 2, 2, 2, 2, 2, 1],
        [1, 2, 2, 2, 2, 5, 2, 2, 1],
        [1, 2, 2, 5, 2, 2, 2, 2, 1], 
        [1, 3, 2, 2, 2, 2, 2, 2, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1]]

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

level3 = [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
          [1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1],
          [1, 2, 2, 5, 2, 2, 1, 2, 6, 2, 1],
          [1, 3, 2, 2, 6, 5, 1, 2, 2, 2, 1],
          [1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1],
          [0, 0, 0, 0, 0, 0, 1, 2, 2, 5, 1],
          [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1]]

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

level5 = [[1, 1, 1, 1, 1, 1, 1, 1],
         [1, 7, 2, 2, 2, 2, 2, 1],
         [1, 2, 2, 2, 3, 2, 2, 1],
         [1, 2, 2, 2, 2, 2, 10, 1],
         [1, 2, 2, 11, 2, 2, 2, 1],
         [1, 2, 2, 2, 2, 2, 2, 1],
         [1, 2, 2, 2, 2, 2, 2, 1],
         [1, 1, 1, 1, 1, 1, 1, 1]]

level6 = [[1,1,1,1,1,1,1,1,1,1],
          [1,2,7,7,7,7,7,7,7,1],
          [1,7,7,7,7,7,7,7,7,1],
          [1,7,7,7,7,7,7,7,7,1],
          [1,7,7,7,7,7,7,7,7,1],
          [1,7,7,7,7,7,7,7,7,1],
          [1,7,7,7,7,7,7,7,7,1],
          [1,7,7,7,7,7,7,7,7,1],
          [1, 7, 7, 7, 7, 7, 7, 7, 7, 1],
          [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]

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

level8 = [[1,1,1,1,1,1,1,0,0,0,0],
          [1,2,5,3,2,2,1,0,0,0,0],
          [1,2,7,6,5,2,1,1,1,1,1],
          [1,5,2,2,2,2,1,5,2,5,1],
          [1,1,1,1,1,1,1,6,7,2,1],
          [1,2,6,2,5,1,1,2,2,2,1],
          [1,2,5,2,2,1,1,5,2,2,1],
          [1,7,2,5,2,1,1,2,2,2,1],
          [1,2,2,2,2,1,1,2,2,2,1],
          [1,1,1,1,1,1,1,1,1,1,1]]

level9 = [[1,1,1,1,1,1],
          [1,3,12,2,5,1],
          [1,1,1,1,1,1]]
levels = [level1, level2, level3, level4, level5, level6,level7,level8,level9]
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,5],[5,1],[1,3],[1,5],[4,2],[1,1],[1,6],[3,1],[1,1]]
player_x = players[level_n-1][0]
player_y = players[level_n-1][1]

result = 2

grid_time = [20,35,25,20,25,20,35,25,10]
count_time = grid_time[level_n-1]

# ------------------------------------------------------------
# 2.功能模块区,主要放置函数

def draw(pen,image,x,y):
    global origin_x,size,origin_y
    pen.goto(origin_x + x * size, origin_y - y * size)
    pen.shape(image)
    pen.stamp()

def move_up():
    global player_y,player_x,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
    elif grid[player_y][player_x] == 5:
        player_y += 1
        return
    change_grid()
    blank1()
    l5()
    blank2()
     
def move_down():
    global player_y, player_x, 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
    elif grid[player_y][player_x] == 5:
        player_y -= 1
        return
    change_grid()
    blank1()
    l5()
    blank2() 

def move_left():
    global player_y, player_x, 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
    elif grid[player_y][player_x] == 5:
        player_x += 1
        return
    change_grid()
    blank1()
    l5()
    blank2()
    
def move_right():
    global player_y, player_x, 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
    elif grid[player_y][player_x] == 5:
        player_x -= 1
        return
    change_grid()
    blank1()
    l5()
    blank2()
    
def change_grid():
    global player_y, player_x, grid,result,level_n   
    if grid[player_y][player_x] == 7:
        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
    show_result()
    
def show_result():
    global grid,result,player_x,player_y,level_n
    if level_n == 9:
        if grid[player_y][player_x] == 12:
            grid[player_y][player_x] = 0
            grid[1][4] = 13
        elif grid[player_y][player_x] == 13:
            result = 3
    elif grid[player_y][player_x] == 8:
        result = 1
    elif 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,width,height,origin_x,origin_y,size,player_x,player_y,count_time,grid_time
    if result == 1:
        if level_n == len(levels):
            return
        level_n+=1
    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
    player_x = players[level_n-1][0]
    player_y = players[level_n-1][1]
    result = 2
    count_time = grid_time[level_n-1]

def blank1():
    global grid,player_x,player_y
    if player_x == 8 and player_y == 2:
        if level_n == 3:
            player_x = 4
            player_y = 3
    elif player_x == 4 and player_y == 3:
        if level_n == 3:
            player_x = 8
            player_y = 2

def blank2():
    global grid,player_x,player_y
    if player_x == 3 and player_y == 2:
        if level_n == 8:
            player_x = 2
            player_y = 5
    elif player_x == 2 and player_y == 5:
        if level_n == 8:
            player_x = 7
            player_y = 4
    elif player_x == 7 and player_y == 4:
        if level_n == 8:
            player_x = 3
            player_y = 2
            
def l6():
    global grid,level_n,result,count_time,n,dhj_x,dhj_y
    if level_n == 6 and result == 2:
        if count_time%1.5 == 0 and n == 0:
            grid[dhj_y][dhj_x] = 8
            n = 1
        elif count_time%1 == 0 and n == 1:
            grid[dhj_y][dhj_x] = 7
            n = 0
            dhj_x = random.randint(1, 8)
            dhj_y = random.randint(1, 8)

def l5():
    global grid,player_x,player_y,result
    if level_n == 5:
        if player_x == 1 and player_y == 1 or player_x == 6 and player_y == 3 or player_x == 3 and player_y == 4:
            grid[player_y][player_x] = 9
            result = 0

# ------------------------------------------------------------
# 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','年兽.gif',
'传送门.gif','金块.gif','大黄鸡.gif','陷阱.gif','金币.gif','红包-打开.gif','鞭炮.gif','星星.gif']

for i in tile_shapes:
    turtle.addshape(i)
player_shapes = ['编程猫-掉落.gif','编程猫.gif','编程猫.gif','编程猫.gif']
for i in player_shapes:
    turtle.addshape(i)

result_shapes = ['失败.gif', '成功.gif', '空.gif','通关.gif']
turtle.addshape('遮罩.gif')

for i in result_shapes:
    turtle.addshape(i)

# ------------------------------------------------------------
# 5.画面绘制区,绘制场景用的画笔,绘制场景的代码

p = turtle.Pen()
p.penup()
p.hideturtle()

turtle.tracer(False)
time1 = time.time()

while True:
    if pygame.mixer.music.get_busy() == False:
        pygame.mixer.music.play()
    p.clear()
    for i in range(width):
        for j in range(height):
            draw(p,tile_shapes[grid[j][i]],i,j)
    draw(p,player_shapes[result],player_x,player_y)
    if level_n == 8 or level_n == 7:
        draw(p,'遮罩.gif',player_x,player_y)
    draw(p,result_shapes[result],(width-1)/2,(height-1)/2)
    time2 = time.time()
    if int(time2 - time1) == 1 and result == 2:
        count_time -= 1
        if count_time%1.5 == 0:
            l6()
        time1 = time.time()
    if count_time == 0:
        result = 0
    p.goto(-280,250)
    p.write(str(count_time),font = ('文泉驿正黑',60))
    turtle.update()

turtle.done()

 

【提示】

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

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
lingyi_objlingyi_obj

https://www.wjx.cn/vm/Ya3BmHB.aspx

帮忙做一下,班级小课题研究,谢谢

点赞0


评论