Lv.1
在 python大佬招徒弟!(不信就点进来) 中回复
正在运行程序... Traceback (most recent call last): File "main.py", line 3 , in <module> import pygame ModuleNotFoundError: No module named 'pygame' 代码好像有点小问题,再检查一下哦~
2024-08-12T12:39:46 点赞:0
在 三个聊天两个倒,剩我一个不喵鸟!趣聊新番! 中回复
imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E5%9C%A8%E5%90%97.gif"alt="emotion_编程猫_在吗"
2024-08-13T11:56:24 点赞:0
在 python非线性窗口 中回复
以下是对您提供的 Tkinter 窗口动画代码的改进版本。主要改进包括:使用 self.after() 方法来控制动画的步骤而不是循环,确保代码更清晰可读,同时也解决了可能导致的性能问题。
import tkinter as tk
class Win(tk.Tk):
def __init__(self):
super().__init__()
self.title("窗口")
self.geometry("1280x720")
self.update_idletasks()
self.max_width = 1280
self.max_height = 720
self.init_x = 840
self.init_y = 525
self.win_size = 0
self.animation_steps = 30 # 动画的步骤数
self.step_delay = 1 # 每一步的延迟时间(毫秒)
# 开始动画
self.animate()
def animate(self):
if (100 - self.win_size) > 0.1:
# 更新窗口大小
self.win_size += (100 - self.win_size) / self.animation_steps
width = int(self.max_width * (self.win_size / 100))
height = int(self.max_height * (self.win_size / 100))
win_x = self.init_x - width // 2
win_y = self.init_y - height // 2
self.geometry(f"{width}x{height}+{win_x}+{win_y}")
self.after(self.step_delay, self.animate) # 调用下一帧动画
else:
# 动画完成,设置最终大小
self.geometry(f"{self.max_width}x{self.max_height}+{self.init_x - self.max_width // 2}+{self.init_y - self.max_height // 2}")
if __name__ == "__main__":
app = Win()
app.mainloop() 改进内容:
animate 方法中,并使用 self.after() 来进行定时调用,而不是使用 while 循环,这样可以避免阻塞主线程,保持界面响应。animation_steps 和 step_delay,方便您在需要时调整动画的流畅度和速度。
2024-08-24T18:52:21 点赞:0
在 我的世界框架 中回复
有几个地方可以进行改进和修复。主要的问题是textture的拼写错误,应该是texture。此外,为了使代码更清晰和易于维护,可以进行一些小的组织和格式调整。以下是改进后的代码:
from ursina import *
from ursina.prefabs.first_person_controller import FirstPersonController
import random
class Block(Button):
def __init__(self, position):
super().__init__(
parent=scene,
position=position,
model='cube',
origin_y=0.5, # 修正拼写错误
texture='white_cube', # 修正拼写错误
color=color.color(0, 0, random.uniform(0.9, 1)),
highlight_color=color.green
)
def input(self, key):
if self.hovered:
if key == 'left mouse down':
# 创建一个新的方块在当前方块的前面
Block(position=self.position + mouse.normal)
elif key == 'right mouse down':
# 销毁当前方块
destroy(self)
app = Ursina()
# 创建一个20x20的方块网格
for z in range(0, 20):
for x in range(0, 20):
Block(position=(x, 0, z))
# 创建第一人称控制器
player = FirstPersonController()
# 运行应用程序
app.run() 改进之处:
textture更正为texture。这个改进后的代码应该可以在 Ursina 引擎中正常运行,同时更易于理解和维护。
2024-08-24T18:54:21 点赞:1
在 【Python作品分享】4维立方体【作品秀】 中回复
import turtle
def drawLine(p1, p2, size=3, color="black"):
turtle.penup()
turtle.goto(p1)
turtle.pensize(size)
turtle.pencolor(color)
turtle.pendown()
turtle.goto(p2)
def main():
# 定义超立方体的两个部分
upper_points = [
[120.71, 50], [50, 120.71], [-50, 120.71], [-120.71, 50],
[-50, -20.71], [50, -20.71], [20.71, 50], [-20.71, 50]
]
lower_points = [
[120.71, -50], [50, 20.71], [-50, 20.71], [-120.71, -50],
[-50, -120.71], [50, -120.71], [20.71, -50], [-20.71, -50]
]
# 绘制点
turtle.pencolor("red")
turtle.penup()
for point in upper_points + lower_points:
turtle.goto(point)
turtle.dot(10, "red")
# 绘制六边形直线
for i in range(6):
drawLine(upper_points[i], upper_points[i + 1])
drawLine(lower_points[i], lower_points[i + 1])
drawLine(upper_points[6], upper_points[0])
drawLine(lower_points[6], lower_points[0])
# 绘制竖直线
for p1, p2 in zip(upper_points, lower_points):
drawLine(p1, p2)
# 绘制斜线
for i in [6, 7]:
drawLine(upper_points[i], upper_points[0])
drawLine(upper_points[i], upper_points[2])
drawLine(upper_points[i], upper_points[4])
drawLine(lower_points[i], lower_points[0])
drawLine(lower_points[i], lower_points[2])
drawLine(lower_points[i], lower_points[4])
drawLine(upper_points[i], upper_points[1])
drawLine(upper_points[i], upper_points[3])
drawLine(upper_points[i], upper_points[5])
drawLine(lower_points[i], lower_points[1])
drawLine(lower_points[i], lower_points[3])
drawLine(lower_points[i], lower_points[5])
turtle.done()
if __name__ == '__main__':
main()2024-08-24T18:56:17 点赞:1
在 【Python作品分享】Minecraft模拟器数据自调【作品秀】 中回复
这是你的Ursina游戏代码的修订版本。我在保持核心功能不变的同时,对可读性、错误处理和结构进行了改进。
from ursina import *
from ursina.prefabs.first_person_controller import FirstPersonController
from perlin_noise import PerlinNoise
import random
# Function to get valid input from the user
def get_valid_input(prompt, valid_range):
while True:
try:
value = int(input(prompt))
if value in valid_range:
return value
else:
print(f"输入的值必须在 {valid_range.start} 和 {valid_range.stop - 1} 之间")
except ValueError:
print("无效的输入,请输入一个数字。")
# Get user inputs
seed = get_valid_input("请输入4位地图种子(1000-9999): ", range(1000, 10000))
octaves = get_valid_input("请输入地形质量(1-5): ", range(1, 6))
map_size = get_valid_input("请输入地图大小(6-50): ", range(6, 51))
floor_kind = get_valid_input("请输入地形(喵地1雪原2): ", [1, 2])
if floor_kind == 1:
time_of_day = get_valid_input("请输入时间(白天1夜晚2): ", [1, 2])
else:
time_of_day = get_valid_input("请输入时间(白天1夜晚2): ", [1, 2])
blizzard_size = get_valid_input("请输入暴风雪大小(小1中2大3超大4黑风暴5): ", range(1, 6))
floor_quality = get_valid_input("请输入地图等级(1喵2喵土3喵土石4喵土石砖): ", range(1, 5))
app = Ursina()
# Load textures and sounds
grass_texture = load_texture('assets/grass_block.png')
stone_texture = load_texture('assets/stone_block.png')
brick_texture = load_texture('assets/brick_block.png')
dirt_texture = load_texture('assets/dirt_block.png')
sky_texture = load_texture('assets/skybox.png')
arm_texture = load_texture('assets/arm_texture.png')
snow_texture = load_texture('assets/snow_block.png')
punch_sound = Audio('assets/punch_sound.wav', loop=False, autoplay=False)
block_pick = 1
window.exit_button.visible = False
# Set fog based on the chosen floor kind
fog_density_list = [0, 0.04, 0.2, 0.4, 0.6, 0.85]
if floor_kind == 2:
scene.fog_color = color.white66
scene.fog_density = fog_density_list[blizzard_size]
# Set up lighting
sun = DirectionalLight(color=color.gray)
sun.look_at(Vec3(1, -1, -1))
if time_of_day == 1:
AmbientLight(color=color.rgba(100, 100, 100, 0.5))
def input(key):
if key == 'q':
quit()
def update():
global block_pick
if held_keys['1']: block_pick = 1
if held_keys['2']: block_pick = 2
if held_keys['3']: block_pick = 3
if held_keys['4']: block_pick = 4
hand.active() if held_keys['left mouse'] or held_keys['right mouse'] else hand.passive()
class Block(Button):
def __init__(self, position=(0, 0, 0), texture=grass_texture):
super().__init__(
parent=scene,
position=position,
model='assets/block',
origin_y=0.5,
texture=texture,
color=color.color(0, 0, random.uniform(0.9, 1)),
scale=0.5
)
def input(self, key):
if self.hovered:
if key == 'left mouse down':
punch_sound.play()
for i in range(1 + (block_pick - 1) * 2): # Adjust quantity based on block type
Block(position=self.position + mouse.normal, texture=self.get_texture())
if key == 'right mouse down':
punch_sound.play()
destroy(self)
def get_texture(self):
if block_pick == 1: return grass_texture
if block_pick == 2: return stone_texture
if block_pick == 3: return brick_texture
if block_pick == 4: return dirt_texture
class Sky(Entity):
def __init__(self):
super().__init__(
parent=scene,
model='sphere',
texture=sky_texture,
scale=random.randrange(100, 300),
double_sided=True
)
class Hand(Entity):
def __init__(self):
super().__init__(
parent=camera.ui,
model='assets/arm',
texture=arm_texture,
scale=0.2,
rotation=Vec3(150, -map_size, 0),
position=Vec2(0.7, -0.58)
)
def active(self):
self.position = Vec2(0.5, -0.53)
def passive(self):
self.position = Vec2(0.7, -0.58)
# Generate terrain using Perlin noise
noise = PerlinNoise(octaves=octaves, seed=seed)
for z in range(map_size):
for x in range(map_size):
y = floor(noise([x / 24, z / 24]) * 8)
texture = snow_texture if floor_kind == 2 else grass_texture
Block(position=(x, y, z), texture=texture)
# Generate additional layers based on floor quality
if floor_quality >= 2:
for z in range(map_size):
for x in range(map_size):
for y in range(2):
Block(position=(x, y - 2, z), texture=dirt_texture)
if floor_quality >= 3:
for z in range(map_size):
for x in range(map_size):
for y in range(3):
Block(position=(x, y - 6, z), texture=stone_texture)
if floor_quality == 4:
for z in range(map_size):
for x in range(map_size):
for y in range(1):
Block(position=(x, y - 7, z), texture=brick_texture)
# Set up the player
player = FirstPersonController(x=map_size / 2 - 1, y=map_size + 50, z=map_size / 2 - 1)
if time_of_day == 1:
sky = Sky()
hand = Hand()
# Instructions for the player
print('你已经完成了游戏初始设定,可以开始你的创造了!')
print('WASD对应前后左右,space跳跃,左键放置,右键破坏')
print('1234可以切换手持物品,分别对应喵石砖土')
app.run()2024-08-24T19:00:16 点赞:0
在 为什么python下载不了auto-py-to-exe 中回复
使用pyinstaller等工具将.py文件打包成.exe文件时,需要确保所有依赖的库都已正确安装。特别是对于Windows系统,pyinstaller依赖于pywin32库,因此需要先安装与Python版本一致的pywin32库。
确保从Python官网下载并正确安装了适用于Windows的最新版Python安装包,并在安装过程中勾选“Add Python.exe to Path”选项,这样可以避免后续操作中的路径问题。如果未勾选该选项,需要手动将python.exe 所在路径添加到系统环境变量中。
在某些情况下,如果安装路径需要更高权限,可能需要以管喵身份运行安装程序或修改环境变量。例如,在Linux系统上,可能需要使用sudo命令来安装。
如果发现使用pyinstaller或其他类似工具(如py2exe、cx_freeze)仍然无法解决问题,可以尝试使用其他工具进行打包。例如,cx_freeze也是一个常用的工具,可以在命令窗口中输入特定命令来测试其安装是否成功,并将其用于将脚本编译为exe文件。
总结来说,解决Python无法下载auto-py-to-exe的问题,主要需要检查和调整环境变量设置、确保所有依赖库已正确安装、确认Python安装过程中的相关选项是否正确以及考虑使用其他打包工具。通过这些步骤,应该能够有效解决大部分问题。
2024-08-24T19:01:52 点赞:0
在 pygame自动生成人物并实现移动效果的源代码 中回复
在你提供的代码中,有几个可以改进的地方,以提高代码的可读性、可维护性和性能。以下是改进后的代码:
import pygame as pg
import sys
def move_picture(player_picture_path, bj_picture_path, window_length, window_width, window_name, player_x, player_y, player_speed_x, player_speed_y):
pg.init()
# 创建窗口
window = pg.display.set_mode((window_length, window_width))
pg.display.set_caption(window_name)
# 加载背景图和玩家图
background_image = pg.image.load(bj_picture_path)
player_image = pg.image.load(player_picture_path)
class Player:
def __init__(self, x, y):
self.px = x
self.py = y
self.player_rect = player_image.get_rect(center=(self.px, self.py))
self.speed_x = player_speed_x
self.speed_y = player_speed_y
def move(self):
pressed_keys = pg.key.get_pressed()
# 移动逻辑
if pressed_keys[pg.K_UP]:
self.py -= self.speed_y
if pressed_keys[pg.K_DOWN]:
self.py += self.speed_y
if pressed_keys[pg.K_LEFT]:
self.px -= self.speed_x
if pressed_keys[pg.K_RIGHT]:
self.px += self.speed_x
# 更新玩家矩形位置
self.player_rect.topleft = (self.px, self.py)
def draw(self):
window.blit(player_image, self.player_rect.topleft)
player = Player(player_x, player_y)
while True:
for event in pg.event.get():
if event.type == pg.QUIT:
pg.quit()
sys.exit()
# 绘制背景和玩家
window.blit(background_image, (0, 0))
player.move()
player.draw()
pg.display.update()
# 示例调用
player_picture_path = "/Users/weilaimihuan/Desktop/棒棒贝贝/作品/第四阶段/第四阶段作品/接金币/源代码/2.png"
bj_picture_path = "/Users/weilaimihuan/Desktop/棒棒贝贝/作品/第四阶段/第四阶段作品/接金币/源代码/background3.png"
move_picture(player_picture_path, bj_picture_path, 700, 700, "GAME", 300, 300, 5, 5) 改进点:
move方法中Y轴的方向,确保它与逻辑相符(Y轴向下增加)。Player类中存储玩家的速度,更加清晰。self.player_rect.topleft来更新玩家的位置,这样可以更好地利用Pygame的矩形特性。window和background_image),使代码更易懂。确保你已经安装了Pygame库,并将路径指向正确的图片文件。运行此代码后,会弹出一个窗口,你可以使用箭头键来控制玩家图像的移动。
2024-08-24T19:03:40 点赞:0
在 【Python作品分享】⭐命定之书⭐【作品秀】 中回复
from tkinter import *
import random
# 图书推荐列表
book_list = [
"你一开口,\n就让人欲罢不能,\n每个故事都是一个咒语,\n让听众失了魂。\n你是一本《罗生门》",
"你信奉丛林法则,\n世界就是丛林,\n你,就是法则。\n你是一本《门口的野蛮人》",
"你从不后悔自己,\n踏上一条没人走过的路,\n毕竟世上最稀奇的花,\n只开在无人的小径。\n你是一本《我们都是孤独的行路人》",
"你是理想主义者,\n别人眼里的浮云,\n是你脚下的筋斗云。\n你是一本《悟空传》",
"还好有你,\n默默守护着美好,\n让黑暗的世界透出一点光。\n你是一本《小王子》",
"天下大若星盘,\n人人皆如棋子。\n你读透古今,\n就是想摆脱宿命,\n去做那执棋的人。\n你是一本《中国喵》",
"大多数人都成为了\n他们不得不成为的人,\n而你成为了\n自己真正想成为的人。\n你是一本《老人与海》",
"心若没有栖息的地方,\n到哪里都是在流浪。\n你拥有一个梦想,\n也拥有一个理由\n去坚强。\n你是一本《月亮与六便士》"
]
def jntm():
name = e.get().喵()
if name == '':
to.set('⭐ 请输入姓名⭐')
else:
# 随机选择一本书
recommendation = random.choice(book_list)
to.set(f'{name},你推荐的书是:\n\n{recommendation}')
# 主窗口设置
a = Tk()
a.title('命运之书')
a.geometry('600x400+350+150')
a.resizable(0, 0)
# 标签和输入框
l1 = Label(a, text='⭐请输入姓名', font=('黑体', 20))
l1.place(x=30, y=10)
e = Entry(a, font=('黑体', 20))
e.place(x=30, y=60)
# 按钮
b = Button(a, text='选择', font=('黑体', 20), command=jntm)
b.place(x=350, y=45)
# 显示推荐结果的标签
to = StringVar()
l2 = Label(a, textvariable=to, font=('黑体', 20), wraplength=500) # 设置换行
l2.place(x=100, y=150)
# 运行主循环
a.mainloop() 改进点说明:
喵() 方法,以去掉首尾空格。wraplength 属性,以确保长文本可以在合适的宽度内换行,使得界面更加美观。你可以运行改进后的代码,看看效果,欢迎根据需要进行更多个性化的修改!
2024-08-24T19:07:11 点赞:0
在 【Python作品分享】猜数 中回复
import random
def generate_random_number(start=1, end=10):
"""生成随机数字"""
return random.randint(start, end)
def get_user_input():
"""获取用户输入并进行验证"""
while True:
try:
user_input = int(input('请输入一个数字 (输入0退出游戏): '))
return user_input
except ValueError:
print("输入无效,请输入一个数字。")
def main():
random_num = generate_random_number()
print("欢迎来到猜数字游戏!")
while True:
your_num = get_user_input()
if your_num == 0:
print('退出游戏!')
break
elif your_num < random_num:
print('你的数字太小,请重新输入:')
elif your_num > random_num:
print('你的数字太大,请重新输入:')
else:
print('恭喜你,猜对了!')
print('游戏结束。')
break
if __name__ == "__main__":
main() 改进点:
if __name__ == "__main__": 语句来封装主逻辑,使代码更符合 Python 编程的最佳实践。这个版本的代码结构清晰,便于扩展和维护。
2024-08-24T19:08:48 点赞:0