اذهب إلى المحتوى

السؤال

نشر

مثلا زر W

وزر A

بتاريخ 1 ساعة قال Abdullah Talib:

مثلا زر W

وزر A

الرجاء الرد بسرعة

هذاالكود الخاص بي:

def keyPressed():
    qw()
    qe()
    
    
def qw():    
    global player_1_y
    old_y_player_1 = player_1_y
    if keyboard.keyCode == UP:
        player_1_y = player_1_y - 50
    if keyboard.keyCode == DOWN:
        player_1_y = player_1_y + 50
    if player_1_y < 0 or player_1_y + 50 > height:
        player_1_y = old_y_player_1    
def qe():
    global player_2_y
    old_y_player_2 = player_2_y
    if keyboard.keyCode == LEFT:
        player_2_y = player_2_y - 50
    if keyboard.keyCode == RIGHT:
        player_2_y = player_2_y + 50
    if player_2_y < 0 or player_2_y + 10 > height:
        player_2_y = old_y_player_2

وتعمل الشيفرة لكن المشكلة أنه لاعبين يقومان باللعب والحركة تذهب للأعلى والأسفل 

أريد فقط تغيير الزر من زر LEFT إلى زر W 

ومن زر RIGHT إلى زر S

Recommended Posts

  • 1
نشر

إن الدالة keyboard.keyCode تعيد المحرف المضفوط بترميز ASCII فيمكنك مقارنها مع قيمة المحرف للحرف الذي تريده

لكن يفضل بالحالتين الكبيرة و الصغيرة لضمنان معالجتها بالطريقة الصحيحة

if keyboard.keyCode == Letter:
_______________________^^^^^^ =  ASCII

لتصبح:

if keyboard.keyCode == 'W' or keyboard.keyCode == 'w' :

 

  • 0
نشر
بتاريخ 9 ساعات قال Wael Aljamal:

إن الدالة keyboard.keyCode تعيد المحرف المضفوط بترميز ASCII فيمكنك مقارنها مع قيمة المحرف للحرف الذي تريده

لكن يفضل بالحالتين الكبيرة و الصغيرة لضمنان معالجتها بالطريقة الصحيحة


if keyboard.keyCode == Letter:
_______________________^^^^^^ =  ASCII

لتصبح:


if keyboard.keyCode == 'W' or keyboard.keyCode == 'w' :

 

لقد قمت بذلك لكن ربما توجد مشكلة

بتاريخ منذ ساعة مضت قال Abdullah Talib:

هذه البرمجة

from processing import *
width = 550
height = 400
move_x = 7 
move_y = 2
lives_player_1 = 5
lives_player_2 = 5
player_1_x = 50
player_1_y = 220
player_2_x = 550
player_2_y = 220
ball_x = 300
ball_y = 220
goal_player_1_x = -2
goal_player_1_y = 0
goal_player_2_x = 576
goal_player_2_y = 0
player_1_width = 10
player_1_height = 100
player_2_width = 10
player_2_height = 100
ball_width = 50
ball_height = 50
goal_player_1_width = 26
goal_player_1_height = 455
goal_player_2_width = 26
goal_player_2_height = 455

def setup():
    global back
    global player_1
    global player_2
    global ball
    global goal_player_1
    global goal_player_2
    size(600, 450)
    back = loadImage("back.png")
    player_1 = loadImage("player_1.png")
    player_2 = loadImage("player_2.png")
    ball = loadImage("ball.png")
    goal_player_1 = loadImage("goal_player_1.png")
    goal_player_2 = loadImage("goal_player_2.png")

def draw():
    global ball_x
    global ball_y
    global move_x
    global move_y
    global lives_player_1
    global lives_player_2
    ball_x = ball_x + move_x
    ball_y = ball_y + move_y
    if ball_x < 0 or ball_x > width:
        move_x = -move_x
    if ball_y < 1 or ball_y > height:
        move_y = -move_y
    
    if ball_x < 0 or is_colliding(player_1_x, player_1_y, player_1_width, player_1_height, ball_x, ball_y, ball_width, ball_height) or ball_x > width:
        move_x = -move_x

    if ball_y < 0 or  is_colliding(player_2_x, player_2_y, player_2_width, player_2_height, ball_x, ball_y, ball_width, ball_height) or ball_y > width:
        move_x = -move_x
        

    if lives_player_1 > 0 and lives_player_2 > 0:
        image(back, 0, 0)
        image(ball, ball_x, ball_y)
        image(player_1, player_1_x, player_1_y)
        image(player_2, player_2_x, player_2_y)
        image(goal_player_1, goal_player_1_x, goal_player_1_y)
        image(goal_player_2, goal_player_2_x, goal_player_2_y)
        textSize(20)
        fill(255, 255, 255)
        text("Lives player1 = {}".format(lives_player_1), 100, 30)
        text("Lives player2 = {}".format(lives_player_2), 400, 30)
        check_collision_with_walls()
    
    
    if lives_player_1 == 0:
        textSize(60)
        fill(0, 0, 0)
        rect(0, 0, 600, 450)
        fill(255, 0, 0)
        text("Player 2 Win", 150, 250)
    
    if lives_player_2 == 0:
        textSize(60)
        fill(0, 0, 0)
        rect(0, 0, 600, 450)
        fill(255, 0, 0)
        text("Player 1 Win",  150, 250)
    
        
        
def keyPressed():
    qw()
    qe()
    
    
def qw():    
    global player_1_y
    old_y_player_1 = player_1_y
    if keyboard.keyCode == 'W' or keyboard.keyCode == 'w':
        player_1_y = player_1_y - 50
    if keyboard.keyCode == 'S' or keyboard.keyCode == 's' :
        player_1_y = player_1_y + 50
    if player_1_y < 0 or player_1_y + 10 > height:
        player_1_y = old_y_player_1    
        
def qe():
    global player_2_y
    old_y_player_2 = player_2_y
    if keyboard.keyCode == UP:
        player_2_y = player_2_y - 50
    if keyboard.keyCode == DOWN:
        player_2_y = player_2_y + 50
    if player_2_y < 0 or player_2_y + 10 > height:
        player_2_y = old_y_player_2
        
        
def check_collision_with_walls():
    global goal_player_1
    global lives_player_1
    global goal_player_2
    global lives_player_2
    global player_1_x
    global player_1_y
    global player_2_x
    global player_2_y
    global ball_x
    global ball_y
    
    if is_colliding(goal_player_1_x, goal_player_1_y, goal_player_1_width, goal_player_1_height, ball_x, ball_y, ball_width, ball_height):
        ball_x = 500
        ball_y = 220
        player_1_x = 50
        player_1_y = 220
        player_2_x = 550
        player_2_y = 220
        lives_player_1 = lives_player_1 - 1
        
    if is_colliding(goal_player_2_x, goal_player_2_y, goal_player_2_width, goal_player_2_height, ball_x, ball_y, ball_width, ball_height):
        ball_x = 100
        ball_y = 220
        player_1_x = 50
        player_1_y = 220
        player_2_x = 550
        player_2_y = 220
        lives_player_2 = lives_player_2 - 1


def is_colliding(first_x, first_y, first_width, first_height,
                second_x, second_y, second_width, second_height):
    first = (first_x + first_width) > second_x
    second = first_x < (second_x + second_width)
    third = (first_y + first_height) > second_y
    fourth = first_y < (second_y + second_height)
    return first and second and third and fourth

run()

 

  • 0
نشر

لا يعمل زر مع معاكسه

يعني مثلا قمت ببرمجة زر W للأعلى وقمت بتشغيله فورا فعمل الزر لتحريك اللاعب للأعلى وكان زر التحريك للأسفل هو زر LEFT لكن عندما قمت بتغيير من زر LEFT إلى زر S لم أستطع تحريك الكائن للأعلى أو للأسفل

  • 0
نشر
بتاريخ منذ ساعة مضت قال Abdullah Talib:

لا يعمل زر مع معاكسه

يعني مثلا قمت ببرمجة زر W للأعلى وقمت بتشغيله فورا فعمل الزر لتحريك اللاعب للأعلى وكان زر التحريك للأسفل هو زر LEFT لكن عندما قمت بتغيير من زر LEFT إلى زر S لم أستطع تحريك الكائن للأعلى أو للأسفل

في الألعاب يجب أن يكون حدث الاستامع للنقر غير متزامن و غير تسلسلي أي يمكن نقر زرين في نفس الوقت و حدوث استجابة فورية لا أعلم بالضبط إن كانت هذه أفضل طريقة لعمل هذا.

يمكنك محاولة استخدام الدالة is_pressed:

import keyboard  
while True:  # حلقة اللعب
  if keyboard.is_pressed('q'):  # if key 'q' is pressed 
	print('You Pressed A Key!')

كرر هذا لكل زر ترغب به.

لاستخدام مستمع أحداث عليك بالتالي:

from pynput.keyboard import Key, Listener

def on_press(key):
    print('{0} pressed'.format(
        key))

def on_release(key):
    print('{0} release'.format(
        key))
    if key == Key.esc:
        # Stop listener
        return False

# Collect events until released
with Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()

 

  • 0
نشر (معدل)
بتاريخ 23 ساعات قال Abdullah Talib:

لقد قمت بذلك لكن ربما توجد مشكلة


from processing import *
width = 550
height = 400
move_x = 7 
move_y = 2
lives_player_1 = 5
lives_player_2 = 5
player_1_x = 50
player_1_y = 220
player_2_x = 550
player_2_y = 220
ball_x = 300
ball_y = 220
goal_player_1_x = -2
goal_player_1_y = 0
goal_player_2_x = 576
goal_player_2_y = 0
player_1_width = 10
player_1_height = 100
player_2_width = 10
player_2_height = 100
ball_width = 50
ball_height = 50
goal_player_1_width = 26
goal_player_1_height = 455
goal_player_2_width = 26
goal_player_2_height = 455

def setup():
    global back
    global player_1
    global player_2
    global ball
    global goal_player_1
    global goal_player_2
    size(600, 450)
    back = loadImage("back.png")
    player_1 = loadImage("player_1.png")
    player_2 = loadImage("player_2.png")
    ball = loadImage("ball.png")
    goal_player_1 = loadImage("goal_player_1.png")
    goal_player_2 = loadImage("goal_player_2.png")

def draw():
    global ball_x
    global ball_y
    global move_x
    global move_y
    global lives_player_1
    global lives_player_2
    ball_x = ball_x + move_x
    ball_y = ball_y + move_y
    if ball_x < 0 or ball_x > width:
        move_x = -move_x
    if ball_y < 1 or ball_y > height:
        move_y = -move_y
    
    if ball_x < 0 or is_colliding(player_1_x, player_1_y, player_1_width, player_1_height, ball_x, ball_y, ball_width, ball_height) or ball_x > width:
        move_x = -move_x

    if ball_y < 0 or  is_colliding(player_2_x, player_2_y, player_2_width, player_2_height, ball_x, ball_y, ball_width, ball_height) or ball_y > width:
        move_x = -move_x
        

    if lives_player_1 > 0 and lives_player_2 > 0:
        image(back, 0, 0)
        image(ball, ball_x, ball_y)
        image(player_1, player_1_x, player_1_y)
        image(player_2, player_2_x, player_2_y)
        image(goal_player_1, goal_player_1_x, goal_player_1_y)
        image(goal_player_2, goal_player_2_x, goal_player_2_y)
        textSize(20)
        fill(255, 255, 255)
        text("Lives player1 = {}".format(lives_player_1), 100, 30)
        text("Lives player2 = {}".format(lives_player_2), 400, 30)
        check_collision_with_walls()
    
    
    if lives_player_1 == 0:
        textSize(60)
        fill(0, 0, 0)
        rect(0, 0, 600, 450)
        fill(255, 0, 0)
        text("Player 2 Win", 150, 250)
    
    if lives_player_2 == 0:
        textSize(60)
        fill(0, 0, 0)
        rect(0, 0, 600, 450)
        fill(255, 0, 0)
        text("Player 1 Win",  150, 250)
    
        
        
def keyPressed():
    qw()
    qe()
    
    
def qw():    
    global player_1_y
    old_y_player_1 = player_1_y
    if keyboard.keyCode == 'W' or keyboard.keyCode == 'w':
        player_1_y = player_1_y - 50
    if keyboard.keyCode == 'S' or keyboard.keyCode == 's' :
        player_1_y = player_1_y + 50
    if player_1_y < 0 or player_1_y + 10 > height:
        player_1_y = old_y_player_1    
        
def qe():
    global player_2_y
    old_y_player_2 = player_2_y
    if keyboard.keyCode == UP:
        player_2_y = player_2_y - 50
    if keyboard.keyCode == DOWN:
        player_2_y = player_2_y + 50
    if player_2_y < 0 or player_2_y + 10 > height:
        player_2_y = old_y_player_2
        
        
def check_collision_with_walls():
    global goal_player_1
    global lives_player_1
    global goal_player_2
    global lives_player_2
    global player_1_x
    global player_1_y
    global player_2_x
    global player_2_y
    global ball_x
    global ball_y
    
    if is_colliding(goal_player_1_x, goal_player_1_y, goal_player_1_width, goal_player_1_height, ball_x, ball_y, ball_width, ball_height):
        ball_x = 500
        ball_y = 220
        player_1_x = 50
        player_1_y = 220
        player_2_x = 550
        player_2_y = 220
        lives_player_1 = lives_player_1 - 1
        
    if is_colliding(goal_player_2_x, goal_player_2_y, goal_player_2_width, goal_player_2_height, ball_x, ball_y, ball_width, ball_height):
        ball_x = 100
        ball_y = 220
        player_1_x = 50
        player_1_y = 220
        player_2_x = 550
        player_2_y = 220
        lives_player_2 = lives_player_2 - 1


def is_colliding(first_x, first_y, first_width, first_height,
                second_x, second_y, second_width, second_height):
    first = (first_x + first_width) > second_x
    second = first_x < (second_x + second_width)
    third = (first_y + first_height) > second_y
    fourth = first_y < (second_y + second_height)
    return first and second and third and fourth

run()

 

إذا ما الخطأ هنا إذاً؟؟

تم التعديل في بواسطة Abdullah Talib

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...