用户:
正在debug查看:0 回复:0 评论:0 创建时间:2024-07-24T19:18:40
【作品展示】

【作品介绍】
使用txt文本模拟出了kitten版的云变量。过10赞发教程
【作品源代码】
import copy
import sys
import os
import turtle
import os, sys
from cloud12 import *
#首先,py文件中的数据要用copy库中的deepcopy(深度包装)包围
#然后,在一键修改路径脚本里输入文件名(这个程序就是输入过的)
#注意,这个文件如果报错了,要注释掉或套个try: except:
#最后,在打包中输入输入好的程序的名称,运行,在dist中找到exe
def get_resource_path(path):
if os.path.isabs(path):
# 获取当前脚本所在目录的绝对路径
dir_realpath = r'C:\Users\z\Desktop\6.1-程序打包练手'
# 获取传入文件相对于脚本的相对路径
relative_path = os.path.relpath(path, dir_realpath)
else:
relative_path = path
if getattr(sys, 'frozen', False) and hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS, relative_path)
return os.path.join(os.path.abspath("."), relative_path)
# Python解释器工作目录
base_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
os.chdir(base_dir)
# -----------------------------------------------------------------
# 功能模块区,主要放置函数
# 观察绘制砖块和角喵像的代码,合并简化,这里可以引入global
def draw(pen, img, x, y):
"""
绘制砖块
"""
global origin_x, origin_y, size
pen.shape(img)
pen.goto(origin_x + x * size, origin_y - y * size)
pen.stamp()
def move_up():
global grid_x, grid_y, grid, result
if result != 2:
return
grid_y.cloud_remove(1)
# 移动范围
if grid_y.save < 0:
grid_y.cloud_add(1)
return
elif grid[grid_y.save][grid_x.save] == 1:
grid_y.cloud_add(1)
return
# 更新信息
update()
def move_down():
global grid_x, grid_y, grid, height, result
if result != 2:
return
grid_y.cloud_add(1)
# 移动范围
if grid_y >= height:
grid_y -= 1
return
elif grid[grid_y.save][grid_x.save] == 1:
grid_y -= 1
return
# 更新信息
update()
def move_left():
global grid_x, grid_y, grid, result
if result != 2:
return
grid_x.cloud_remove(1)
# 移动范围
if grid_x.save < 0:
grid_x.cloud_add(1)
return
elif grid[grid_y.save][grid_x.save] == 1:
grid_x.cloud_add(1)
return
# 更新信息
update()
def move_right():
global grid_x, grid_y, grid, width, result
if result != 2:
return
grid_x.cloud_add(1)
# 移动范围
if grid_x.save >= width:
grid_x.cloud_add(-1)
return
elif grid[grid_y.save][grid_x.save] == 1:
grid_x.cloud_add(-1)
return
# 更新信息
update()
def update():
global grid, grid_x, grid_y
if grid[grid_y.save][grid_x.save] == 2:
grid[grid_y.save][grid_x.save] = 3
elif grid[grid_y.save][grid_x.save] == 3:
grid[grid_y.save][grid_x.save] = 4
elif grid[grid_y.save][grid_x.save] == 5:
grid[grid_y.save][grid_x.save] = 2
update_result()
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.save][grid_x.save] and (grid_y.save != i or grid_x.save != j):
return j, i
def update_result():
"""
更新游戏状态
"""
global result, grid, grid_x, grid_y
if grid[grid_y.save][grid_x.save] == 4:
result = 0
else:
result = 1
for i in grid:
if 2 in i:
result = 2
break
def next_level():
global result, level_num, grid, grid_x, grid_y, width, height, origin_x, origin_y, size
if result == 1:
level_num.cloud_add(1)
if level_num.save == 7:
level_num.cloud_write(1)
level_num.save=1
p.clear()
draw(p, get_resource_path("通关.gif"), (width - 1)/2, (height - 1)/2)
turtle.done()
result = 2
grid = copy.deepcopy((level_store[int(level_num.save - 1)]))
grid_x.cloud_write(position_store[int(level_num.save - 1)][0])
grid_y.cloud_write(position_store[int(level_num.save - 1)][1])
width = len(grid[0])
height = len(grid)
origin_x = 0 - size * (width - 1) / 2
origin_y = 0 + size * (height - 1) / 2
print(level_num.save)
# ------------------------------------------------------------
# 基本信息区,放置游戏相关的一些信息
#''get_resource_path(' 地图二维列表信息 0: 空 1:墙壁 2:通道 3:目标 4:窟窿 5:箱子.gif')))''
# 关卡地图列表
grid_x=cloud_open("grid_x")
grid_y=cloud_open("grid_y")
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 = [[2, 2, 2, 2, 2, 2],
[2, 2, 2, 2, 2, 2],
[2, 1, 1, 2, 2, 2],
[2, 3, 2, 2, 3, 2],
[2, 2, 2, 2, 2, 2],
[2, 2, 2, 2, 2, 2]]
level3 = [[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]]
level4 = [[0, 1, 1, 1, 1, 0],
[1, 2, 2, 3, 1, 1],
[1, 2, 2, 2, 2, 1],
[1, 3, 2, 2, 2, 1],
[1, 1, 2, 2, 3, 1],
[0, 1, 1, 1, 1, 1]]
#32行以及154行:levels
# 48行:players
level5 = [[0, 1, 1, 1, 1, 1, 0],
[1, 3, 3, 2, 2, 2, 1],
[1, 2, 2, 2, 3, 2, 1],
[1, 2, 2, 2, 2, 2, 1],
[1, 2, 2, 2, 2, 2, 1],
[0, 1, 1, 1, 1, 1, 0]]
level6 = [[0, 1, 1, 1, 1, 1, 0],
[1, 2, 2, 2, 2, 2, 1],
[1, 2, 2, 2, 2, 2, 1],
[1, 2, 2, 2, 2, 3, 1],
[1, 2, 2, 2, 3, 3, 1],
[1, 2, 2, 2, 2, 2, 1],
[1, 1, 1, 1, 1, 1, 0]]
level_store = [level1, level2, level3, level4, level5, level6]
# 关卡角色位置列表
position_store = [[1, 3], [4, 1], [1, 3], [4, 4], [1, 1], [5, 4]]
# 关卡角色位置列表
level_num = cloud_open("level_num")
grid = copy.deepcopy(level_store[int(level_num.save - 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.cloud_write(position_store[int(level_num.save - 1)][0])
grid_y.cloud_write(position_store[int(level_num.save - 1)][1])
# 游戏状态
''' result
0: 游戏结束 1:过关 2:游戏进行中'''
result = 2
# ------------------------------------------------------------
# 操作事件区
# 事件监听
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 = [get_resource_path('空.gif'), get_resource_path('墙壁.gif'), get_resource_path('通道.gif'), get_resource_path('破碎的通道.gif'),
get_resource_path('空.gif'), get_resource_path('通道2.gif')]
turtle.addshape(get_resource_path('空.gif'))
turtle.addshape(get_resource_path('墙壁.gif'))
turtle.addshape(get_resource_path('通道.gif'))
turtle.addshape(get_resource_path('破碎的通道.gif'))
# turtle.addshape(get_resource_path('空.gif'))))
turtle.addshape(get_resource_path('编程猫.gif'))
result_shapes = [get_resource_path('失败.gif'), get_resource_path('成功.gif'), get_resource_path('空.gif'), get_resource_path("通关.gif")]
for i in result_shapes:
turtle.addshape(i)
# ------------------------------------------------------------
# 画面绘制区,绘制场景用的画笔,绘制场景的代码
# 创建绘制场景的画笔
p = turtle.Pen()
p.penup()
p.hideturtle()
turtle.tracer(False)
try:
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, get_resource_path('编程猫.gif'), grid_x.save, grid_y.save)
# 绘制结果
draw(p, result_shapes[result], (width - 1) / 2, (height - 1) / 2)
turtle.update()
turtle.done()
except:
pass
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn