用户:
威武的多小多查看:0 回复:0 评论:0 创建时间:2023-07-14T20:33:19
【作品展示】

【作品介绍】
按上下左右控制蓝雀移动,按回车键重置或切换关卡
【作品源代码】
import turtle
p1=turtle.Pen()
p1.ht()
import copy
import os
import sys
import pygame
# Python解释器工作目录
base_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
os.chdir(base_dir)
pygame.init()
pygame.mixer.music.load("欢沁.mp3")
pygame.mixer.music.set_volume(0.2)
pygame.mixer.music.play(-1)
# -----------------------------------------------------------------
# 功能模块区,主要放置函数
# 观察绘制砖块和角喵像的代码,合并简化,这里可以引入global
def draw(pen, img, x, y):
pass
global origin_x, origin_y, size
p.shape(img)
p.goto((origin_x + x * size),(origin_y - y * size))
p.stamp()
def move_up():
global grid_x, grid_y, grid, result
if (result != 2):
return
grid_y -= 1
# 移动范围
if (grid_y < 0):
grid_y += 1
return
elif (grid[grid_y][grid_x] == 1) :
grid_y += 1
return
else :
pass
update()
# 更新信息
def move_down():
global grid_x, grid_y, grid, height, result
if (result != 2):
return
grid_y += 1
# 移动范围
if (grid_y >= height):
grid_y -= 1
return
elif (grid[grid_y][grid_x] == 1) :
grid_y -= 1
return
else :
pass
update()
# 更新信息
def move_left():
global grid_x, grid_y, grid, result
if (result != 2):
return
grid_x -= 1
# 移动范围
if (grid_x < 0):
grid_x += 1
return
elif (grid[grid_y][grid_x] == 1) :
grid_x += 1
return
else :
pass
update()
# 更新信息
def move_right():
global grid_x, grid_y, grid, width, result
if (result != 2):
return
grid_x += 1
# 移动范围
if (grid_x >= width):
grid_x -= 1
return
elif (grid[grid_y][grid_x] == 1) :
grid_x -= 1
return
else :
pass
update()
# 更新信息
def update():
global grid, grid_x, grid_y
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
elif (grid[grid_y][grid_x] == 5) :
grid[grid_y][grid_x] = 2
else :
pass
update_result()
blink1()
shibai()
chenggong()
def exchange(grid_x, grid_y):
global grid, width, height
for i in range(height):
for j in range(width):
if (grid[i][j] == grid[grid_y][grid_x] and (grid_y != i or grid_x != j)):
return j, i
def update_result():
pass
global result, grid, grid_x, grid_y
if (grid[grid_y][grid_x] == 4):
result = 0
else :
result = 1
for i in grid:
if (2 in i):
result = 2
break
if (level_n == 3 and result == 1):
result = 3
p1.pencolor('yellow')
p1.penup()
p1.goto(-600,200)
p1.write('恭喜你成功进入源码世界', font=('Arial', 80, 'normal'))
def next_level():
global result, level_n, grid, grid_x, grid_y, width, height, origin_x, origin_y, size, noshibai
if (result == 1):
level_n += 1
result = 2
grid = copy.deepcopy((level_store[level_n - 1]))
grid_x = position_store[(level_n - 1)][0]
grid_y = position_store[(level_n - 1)][1]
width = len(grid[0])
height = len(grid)
origin_x = (0 - (size * (width - 1)) / 2)
origin_y = (0 + (size * (height - 1)) / 2)
noshibai = 0
p1.clear()
def blink1():
global grid, grid_x, grid_y
if (grid_x == 4 and grid_y == 0):
if (level_n == 2 or level_n == 3):
grid_x = 2
grid_y = 4
elif (grid_x == 2 and grid_y == 4) :
if (level_n == 2 or level_n == 3):
grid_x = 4
grid_y = 0
else :
pass
def shibai():
global result
if (grid_x == 3 and grid_y == 3):
if (level_n == 2 or level_n == 3):
if (grid[grid_y][grid_x] == 9):
if (noshibai == 0):
result = 0
else :
grid[grid_y][grid_x]=3
def chenggong():
global noshibai
if (grid[grid_y][grid_x] == 8 or grid[grid_y][grid_x] == 10):
if (level_n == 2 or level_n == 3):
grid[grid_y] [grid_x]=3
noshibai = 1
# ------------------------------------------------------------
# 基本信息区,放置游戏相关的一些信息
' 地图二维列表信息 0: 空 1:墙壁 2:通道 3:目标 4:窟窿 5:箱子.gif'
# 关卡地图列表
level1 = [[1, 1, 1, 1, 1, 1], [1, 2, 2, 2, 2, 1], [1, 2, 1, 2, 2, 1], [1, 3, 2, 2, 3, 1], [1, 1, 2, 2, 2, 1], [0, 1, 1, 1, 1, 1]]
level2 = [[5, 2, 2, 2, 7, 2], [5, 2, 2, 2, 2, 2], [2, 2, 2, 8, 2, 2], [2, 3, 2, 9, 3, 2], [2, 10, 7, 2, 8, 2], [1, 1, 1, 1, 1, 1]]
level3 = [[2, 2, 2, 2, 7, 2], [5, 2, 2, 1, 2, 2], [2, 1, 2, 8, 2, 2], [1, 3, 2, 9, 3, 2], [1, 10, 7, 2, 8, 2], [1, 1, 2, 2, 1, 5]]
level_store = [level1, level2, level3]
# 关卡角色位置列表
position_store = [[1, 3], [4, 1], [5, 2]]
level_n = 1
grid = copy.deepcopy(level_store[level_n - 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_n - 1)][0]
grid_y = position_store[(level_n - 1)][1]
# 游戏状态
''' result
0: 游戏结束 1:过关 2:游戏进行中 3:全部通关'''
result = 2
noshibai = 0
# ------------------------------------------------------------
# 操作事件区
# 事件监听
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', '喵.gif', '喵地.gif', '喵地2.gif', '陷阱.gif', '砖块19.gif', '遮罩.gif', '传送门.gif', '红包-闭合.gif', '炮仗.gif', '闪电.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)
# ------------------------------------------------------------
# 画面绘制区,绘制场景用的画笔,绘制场景的代码
# 创建绘制场景的画笔
p = turtle.Pen()
turtle.addshape('遮罩.gif')
p.shape('遮罩.gif')
p.penup()
p.goto(grid_x,grid_y)
p.st()
p.penup()
p.hideturtle()
turtle.bgpic('背景10.gif')
turtle.tracer(False)
while True:
p.clear()
# 绘制地图
for i in range(len(grid)):
for j in range(len(grid[i])):
draw(p, tile_shapes[grid[i][j]], j, i)
# 绘制角色
draw(p, '蓝雀.gif', grid_x, grid_y)
draw(p,'遮罩.gif',grid_x,grid_y)
# 绘制结果
draw(p, result_shapes[result], (width - 1) / 2, (height - 1) / 2)
turtle.update()
turtle.done()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn