الخطأ الذي تحصل عليه “SyntaxWarning: name ‘finishes’ is assigned to before global declaration” يحدث لأنك تستخدم كلمة “global” للمتغير “finishes” داخل دالة Menu() بعد تعيينه مباشرة. في بايثون، عندما تستخدم “global” داخل دالة، يجب أن يسبقه تعريف للمتغير بأنه متغير عام (global variable). وفي حالتك، لا يجب أن تستخدم “global” مع “finishes” لأنها متغير محلي داخل دالة load_level() وتعين قيمته داخل هذه الدالة فقط.
لحل هذا الخطأ، يمكنك تعيين قيمة “finishes” كمتغير عام خارج الدالة load_level()، ثم استخدامه داخل الدالة Menu() بدون استخدام “global”. وهناك تعديل آخر يجب القيام به، حيث يجب أن تقوم بتعيين قيمة currentlevel كمتغير عام في بداية دالة Menu() بدلاً من استخدام “global” معها. قم بتحديث دالة Menu() كما يلي:
pythondef Menu():
global currentlevel, walls, players, finishes
currentlevel = 0 # تعيين قيمة افتراضية لـ currentlevel
walls, players, finishes = load_level(currentlevel) # تحميل المستوى الافتراضي
runnin = True
while runnin:
clock.tick(60)
screen.fill(BLACK)
mouseclick = pygame.mouse.get_pressed()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit(0)
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
pygame.quit()
sys.exit(0)
for option in options:
if option.rect.collidepoint(pygame.mouse.get_pos()):
option.hovered = True
if mouseclick[0] == 1:
if option.text == "Easy":
currentlevel = 0
walls, players, finishes = load_level(currentlevel)
main()
elif option.text == "Medium":
currentlevel = 1
walls, players, finishes = load_level(currentlevel)
main()
elif option.text == "Hard":
currentlevel = 2
walls, players, finishes = load_level(currentlevel)
main()
else:
runnin = False
else:
option.hovered = False
option.draw()
pygame.display.update()
pygame.quit()
sys.exit(0)
بهذا التعديل، يجب أن تتجنب الخطأ وتعمل اللعبة بشكل صحيح دون ظهور الرسالة المزعجة.
المزيد من المعلومات
بالتأكيد، إليك المزيد من المعلومات حول الكود الذي قمت بمشاركته:
-
الكود الذي قمت بمشاركته يبدو كأنه جزء من لعبة تستخدم مكتبة Pygame في Python. Pygame تستخدم لتطوير الألعاب والتطبيقات المرئية التفاعلية.
-
تقوم الدالة
load_level(level)
بتحميل مستوى اللعب الحالي من قائمة المستوياتlevels
، وتقوم بإنشاء قوائم للجدران، اللاعبين، والنقاط النهائية (finishes) بناءً على الرموز الموجودة في كل مستوى. -
الدالة
Menu()
تقوم بعرض قائمة الخيارات للاعب، حيث يمكنه اختيار مستوى الصعوبة (سهل، متوسط، صعب)، وعند اختيار اللاعب لأحد الخيارات، يتم تحميل المستوى المناسب وبدء اللعب. -
تم استخدام الكلمة الأساسية
global
بطريقة غير صحيحة داخل دالةMenu()
، حيث يجب تعريف المتغيرات العامة (global variables) في البداية بدون استخدامglobal
داخل الدالة نفسها. -
يبدو أن هناك خلل في تعيين قيمة
currentlevel
داخل دالةMenu()
، حيث يجب تعيينها كمتغير عام خارج الدالة لتجنب الخطأ.