• 0

عدم عمل لعبة الثعبان في بايثون

هذه هي المشاكل التي تواجهني :

Module 'curses' has no 'curs_set' member

Module 'curses' has no 'newwin' member

Module 'curses' has no 'endwin' member

Module 'curses' has no 'KEY_up' member

Module 'curses' has no 'KEY_left' member

هذا هو ملف العمل :

snake.py

تمّ تعديل بواسطة Waled Noaman

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 10 دقائق مضت قال Waled Noaman:

invalid syntax (<unknown>, line 81)

يوجد شيفرة مضافة في هذا السطر (شيفرة تشغيل البرنامج) يمكنك حذفها لأنها ليست جزء منه.

يمكنك تشغيل المشروع في cmd وهو يعمل :

 

snake-working.png

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

يبدو أنك غير مثبت curses لذلك عليك التثبيت بإستخدام هذا الأمر

pip install windows-curses

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

ايضا يجب عليك تغيير 

KEY_up و KEY_left

 الى

KEY_UP و KEY_LEFT 

يجب عليك جعلها كلها حروف كبيرة

وإذا ظهرت مشكلة فيمكن أن تكون المشكلة أخرى لهذا قم بإرسال أخر مشكلة ظهرت لك

تمّ تعديل بواسطة عبدالمجيد الجرادي
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

بعد التعديلات التي أخبرك بها عبد المجيد، ظهر خطأ:

"snake.py", line 57, in <module>
    w.addch(tial[0],tial[1]," ")
TypeError: integer argument expected, got float

أي أن القيمة التي قرأها من snake هي float ويجب أن تكون integer لإصلاح المشكلة نعدل السطر التالي لنجعل ناتج القسمة integer: // بدل /

snk_x =sw//4
snk_y =sh//2

عندها سيعمل البرنامج و يرسم الأفعى

الشيفرة النهائية:

import random
import curses

s = curses.initscr()
curses.curs_set(0)
sh,sw = s.getmaxyx()
w = curses.newwin(sh,sw,0,0)
w.keypad(1)
w.timeout(100)

snk_x =sw//4
snk_y =sh//2
snake = [
    [snk_y,snk_x],
    [snk_y,snk_x-1],
    [snk_y,snk_x-2]

]

food =[sh//2,sw//2]
w.addch(food[0],food[1],curses.ACS_PI)

key = curses.KEY_RIGHT

while True:
    next_key = w.getch()
    key = key if next_key == -1 else next_key
    
    if snake[0][0] in [0,sh] or snake [0][1] in [0,sw] or snake[0] in snake [1:]:
        curses.endwin()
        quit()
        
    new_head =[snake[0][0], snake[0][1]]
    
    if key == curses.KEY_DOWN:
        new_head[0] += 1    
    if key == curses.KEY_UP:
        new_head[1] -= 1 
    if key == curses.KEY_RIGHT:
        new_head[0] -= 1 
    if key == curses.KEY_LEFT:
        new_head[1] += 1 
    
    snake.insert(0,new_head)
    
    if snake[0] == food :
        food = None       
        while food is None:
            nf = [
                random.randint(1,sh-1),
                random.randint(1,sw-1)
            ]
            food =nf if nf not in snake else None
        w.addch(food[0],food[1].curses.ACS_PI)
    else:
        tial = snake.pop()
        w.addch(tial[0],tial[1]," ")
        
    w.addch(snake[0][0],snake[0][1],curses.ACS_CKBOARD)
    

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

ثبتها و عندي نفس المشكلة

تمّ تعديل بواسطة Waled Noaman

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

لقد ظهر الثعبان لمدة قليلة ثم اختفى ولا زالت هناك مشاكل :

Module 'curses' has no 'endwin' member

Module 'curses' has no 'curs_set' member

Module 'curses' has no 'newwin' member

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

الشيفرة النهائية للأخ وائل تشتغل من دون أخطاء وهذا هو عمل الكود الخاص بك لهذا يختفي

يمكنك تخزين الشيفرة النهائية في ملف وقم بإعطائه أي اسم ومن ثم قم بتشغيل هذا الأمر

python snake.py

يمكنك استخدام هذا الكود الكامل وأن تقارن الاختلاف الموجود في هذا الكود وفي الكود الخاص بك

import curses
from curses import KEY_RIGHT, KEY_LEFT, KEY_UP, KEY_DOWN
from random import randint


curses.initscr()
win = curses.newwin(20, 60, 0, 0)
win.keypad(1)
curses.noecho()
curses.curs_set(0)
sh,sw = win.getmaxyx()
win.border(0)
win.nodelay(1)

key = KEY_RIGHT                                                    # Initializing values
score = 0

snk_x =sw//4
snk_y =sh//2
snake = [
    [snk_y,snk_x],
    [snk_y,snk_x-1],
    [snk_y,snk_x-2]

]                                     # Initial snake co-ordinates
food = [10,20]                                                     # First food co-ordinates

win.addch(food[0], food[1], '*')                                   # Prints the food

while key != 27:                                                   # While Esc key is not pressed
    win.border(0)
    win.addstr(0, 2, 'Score : ' + str(score) + ' ')                # Printing 'Score' and
    win.addstr(0, 27, ' SNAKE ')                                   # 'SNAKE' strings
    win.timeout(150 - (len(snake)//5 + len(snake)//10)%120)          # Increases the speed of Snake as its length increases
    
    prevKey = key                                                  # Previous key pressed
    event = win.getch()
    key = key if event == -1 else event 


    if key == ord(' '):                                            # If SPACE BAR is pressed, wait for another
        key = -1                                                   # one (Pause/Resume)
        while key != ord(' '):
            key = win.getch()
        key = prevKey
        continue

    if key not in [KEY_LEFT, KEY_RIGHT, KEY_UP, KEY_DOWN, 27]:     # If an invalid key is pressed
        key = prevKey

    # Calculates the new coordinates of the head of the snake. NOTE: len(snake) increases.
    # This is taken care of later at [1].
    snake.insert(0, [snake[0][0] + (key == KEY_DOWN and 1) + (key == KEY_UP and -1), snake[0][1] + (key == KEY_LEFT and -1) + (key == KEY_RIGHT and 1)])

    # If snake crosses the boundaries, make it enter from the other side
    if snake[0][0] == 0: snake[0][0] = 18
    if snake[0][1] == 0: snake[0][1] = 58
    if snake[0][0] == 19: snake[0][0] = 1
    if snake[0][1] == 59: snake[0][1] = 1

    # Exit if snake crosses the boundaries (Uncomment to enable)
    #if snake[0][0] == 0 or snake[0][0] == 19 or snake[0][1] == 0 or snake[0][1] == 59: break

    # If snake runs over itself
    if snake[0] in snake[1:]: break

    
    if snake[0] == food:                                            # When snake eats the food
        food = []
        score += 1
        while food == []:
            food = [randint(1, 18), randint(1, 58)]                 # Calculating next food's coordinates
            if food in snake: food = []
        win.addch(food[0], food[1], '*')
    else:    
        last = snake.pop()                                          # [1] If it does not eat the food, length decreases
        win.addch(last[0], last[1], ' ')
    win.addch(snake[0][0], snake[0][1], '#')
    
curses.endwin()

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0

 أين أشغل  هذا الكود 

python snake.py

snakegame.pysnakegame.py

هناك مشكلة :

invalid syntax (<unknown>, line 81)

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ On 5/5/2021 at 23:56 قال Waled Noaman:

 أين أشغل  هذا الكود 

python snake.py

snakegame.pysnakegame.py

هناك مشكلة :

invalid syntax (<unknown>, line 81)

لا تقم بكتابة python snake.py في الكود الخاص باللعبة، هذا الكود يستخدم لتشغيل اللعبة من موجه الأوامر

قم بحذف هذا السطر python snake.py ومن ثم قم بتشغيل الكود بالضغط مرتين عليه بالفأرة مثلما تفتح أي برنامج آخر

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن