سؤال في مشروع بلاك جاك كبداية

هل يجب اخذ الكروت مثل الصورة وال A في الاعتبار ام فقط الكروت من 1-10, انا في اول حلقة واحتاج لرسم الفلوشارت ولكن احترت في هذه النقطتين, لانه الاستاذ لم يرنا حالات لها في المقطع الاول

إعجاب واحد (1)

شكرا لك على اهتمامك بهذه النقطة الكروت في اللعبة هم من 1-10 بالاضافة الى J و Q و K كل واحد من هاؤلاء الثلاثة 10 نقاط و الـ A هو نفسه رقم واحد ولكن عليك ان تضع له احتمالين لانه ربما يصبح 11 اذا اراد المستخدم ان يحسب الاس 11

3 إعجابات

يعني مثلا لو طلع للمستخدم عشوائيا A اسأله هل تريدها 10 ولا 1 فقط ؟

إعجاب واحد (1)

هو لا ما بيسئل المستخدم انو بدك تسويه 11 ولا 1 هو تلقائيا بشوف اذا اذا كان الاس 11 وصار المجموع اكثر من 21 يحسبه واحد واذا كان الاس 11 وبقي المجموع اقل من 21 او يساوي 21 بيحسبه 11

إعجابَين (2)

تمام بارك الله فيك يعطيك الف عافيه

إعجاب واحد (1)

امين يا رب ويبارك لك بوقتك وعملك ويديمك باتم صحة وعافية :rose: :rose:

إعجاب واحد (1)

اخي بدر سؤال اخر جزاك الله خير

اذا مثلا المستخدم سحب كروت وكان مجموعها اكثر من 21 والكمبيوتر عدد كروته اقل من 17 هل يجب ان يسحب الكمبيوتر كروت اضافة ام اتجاوز له عملية السحب في هذه الحاله والاكتفاء بالقدر الذي لديه من الكروت

إعجاب واحد (1)

ي

يعني حالة مشروعنا اخلي الديلر يسحب لين يصير فوق 17 ام ان السحب لدى الكمبيوتر يعطل في حالة كانت الكروت عند المستخدم اكثر من 21

إعجاب واحد (1)

لا لان لو المستخدم كان عدد كروت تجاوزت او عديت رقم 21 والكمبيوتر 17 كدا الفوز يبقي لي الكمبيوتر لان المستخدم خسر لان عدد كروت عديت ال 21 ده علي حسب م اتذكر العبه

إعجابَين (2)

قصدي الكمبيوتر لو عدد الكروت عنده اقل من 17 بس انا سحبت لين تجاوزت 21 هل الكبيوتر برضو لازم يسحب لين فوق18 ام انه لا يسحب زياده يعني هل السحب عند الكمبيوتر متعلق بعدد كروت المستخدم ام لا

إعجاب واحد (1)

بص خلينا افهمك وحده وحده من الاول الاول صلي علي النبي عليه افضل الصلاة والسلام بص ي صديقي هي انا دلوقتي وليكن معيا 10 والكمبيوتر مثلا معاه 18 انا اقدر اسحب ليه لان انا معيا 10 ف حتي لو طلعلي 11 هيكون الناتج 20 طب الكمبيوتر ده بقي هيبقي مخاطره بالنسبه للكمبيوتر ليه لان لو طلع رقم اكتر من 21 هيكون هو خسران والمستخدم كسب خلاص هي فكرة العبه انك لو عديت 21 تخسر فاهم اما بالنسبه لي سؤال ان هل الكمبيوتر لي علاقه بي كروت المستخدم ف طبعا لا الكمبيوتر انت كانك بتلاعب plyer بس الفرق ان كمبيوتر والتاني شخص حقيقي الكمبيوتر هو لي دعوه بي كروتو هو مش بي المستخدم لانو متبرمج مش شخص حقيقي بتلاعبو

إعجابَين (2)

فهمت جزاك الله خير لان النقطه هذه عقدتني كثير لان فالنص سوتلي مشكله وانا مخي هنج

انا تقريبا انهيت نصف المشروع باقي موضوع عرض النتائج ويمكن ارجع اقسم الكود لدوال اصغر ان شاء الله غدا اكمل الحل كامل واشوف اول حلقه للحل مع الاستاذ

إعجابَين (2)

ربنا معاك ويوفقك ولو عوزت حاجه انا معاك بعد ربنا سباحنه وتعالي

إعجابَين (2)

يا هلا فيك اخي عبد الله
بالنسبة لسؤالك اذا المستخدم سحب وصار الكروت عنده اكثر من 21 والكمبيوتر وليكن عند مثل ما في الصورة 15 خلص الكمبيوتر ما بيسحب انك خسرت يعني ما بيضل يسحب اذا انت خسران لحتى يصير فوق ال17

ولكن في حال انت كنت اقل من 21 وقررت خلاص ما تسحب الكمبيوتر بيضل بيسحب لحتى يصير الناتج عنده اكثر من 17
ونقطة مهمة اذا كان الكمبيوتر البطاقتين عنده مجموعهم اكثر من 17 ما بيسحب

إعجابَين (2)

نقاط قيمة ووضحت الموضوع لي جزاك الله خير

إعجابَين (2)

هذه النتيجة النهائيه للكود بعد كل التعديلات الان سوف اتابع مع استاذ ابراهيم الحل

import random
import os
import time
#شعار اللعبه
ascii_logo = '''
        ████████╗░██╗░░░░░░░██╗███████╗███╗░░██╗████████╗██╗░░░██╗░░░░░░░█████╗░███╗░░██╗███████╗
        ╚══██╔══╝░██║░░██╗░░██║██╔════╝████╗░██║╚══██╔══╝╚██╗░██╔╝░░░░░░██╔══██╗████╗░██║██╔════╝
        ░░░██║░░░░╚██╗████╗██╔╝█████╗░░██╔██╗██║░░░██║░░░░╚████╔╝░█████╗██║░░██║██╔██╗██║█████╗░░
        ░░░██║░░░░░████╔═████║░██╔══╝░░██║╚████║░░░██║░░░░░╚██╔╝░░╚════╝██║░░██║██║╚████║██╔══╝░░
        ░░░██║░░░░░╚██╔╝░╚██╔╝░███████╗██║░╚███║░░░██║░░░░░░██║░░░░░░░░░╚█████╔╝██║░╚███║███████╗
        ░░░╚═╝░░░░░░╚═╝░░░╚═╝░░╚══════╝╚═╝░░╚══╝░░░╚═╝░░░░░░╚═╝░░░░░░░░░╚════╝░╚═╝░░╚══╝╚══════╝
                ♠                     ♣                     ♥                     ♦

----------------------------------------------------------------------------------------------------------            
                '''
#حذف محتوى الشاشة
def clear_screen():
    os.system('cls' if os.name == 'nt' else 'clear')
#بطاقات اللعب
cards = {'K':10,'Q':10,'J':10,'A':11,}
for card_number in range(1,11):
    cards[str(card_number)] = card_number
#اضافة كرت اضافي
def another_card(keys_list):
    keys_list.append(random.choice(list(cards.keys())))
#دالة لتحويل المفاتيح الى قيم
def change_to_value(keys_list):
    score = 0
    for key in keys_list:
        if key == 'A':
            score += 1 if score > 10 else 11
        else:
            score += cards[key]
    return score

def computer(cards_list,user_score):
    computer_score = change_to_value(cards_list)
    if user_score <= 21:
        while computer_score < 17:
            another_card(cards_list)
            computer_score = change_to_value(cards_list)
    return computer_score

def winner(user_score,computer_score):
    if user_score > 21:
        print (f"You went over 21, computer wins.")
    elif computer_score > 21:
        print (f"Computer went over 21, you win")
    elif computer_score == user_score:
        print ("Draw.")
    elif user_score > computer_score:
        print ('You win')
    else:
        print ("Computer wins.")
#اللعبه
def black_jack():
    clear_screen()
    print (ascii_logo)
    #ننشئ قوائم بكروت المستخدم والكمبيوتر لعرضها
    user_cards = random.choices(list(cards.keys()),k=2)
    computer_cards = random.choices(list(cards.keys()),k=2)

    #نحول المفاتيح الى قيم
    #نحسب عدد كروت المستخدم

    user_score = change_to_value(user_cards)
    while user_score < 21:
        print (f"\nYour cards are {user_cards}, current score is {user_score}")        
        #نعرض كرت الكمبيوتر الاول فقط
        print (f"Computer's first card is {computer_cards[0]}")
        #هل تود الحصول على بطاقة اخرى؟
        confirm = input ("\nGet another card? y/n: ").lower()
        if confirm == 'y':
            another_card(user_cards)
            user_score = change_to_value(user_cards)
        else:
            break
    
    computer_score =  computer(computer_cards,user_score)
    clear_screen()
    print (f"\nYour final hand: {user_cards} with score {user_score}")
    print (f"Computer's final hand: {computer_cards} with score {computer_score}\n")
    
    winner(user_score,computer_score)
    time.sleep(2)

def froggy():
    print ('Coming Soon ...')

def Snake():
    print ("Coming Soon ...")

def program():
    print ("\n\nchoose a game to start (1-3) ....\n")
    choice =input( '1- Froggy\n2- Twenty one\n3- Snake\n-----------------------\n')
    if choice == '1':           
        time.sleep(3)
        froggy()
    elif choice == '2':
        print ("-----------\nStarting game .......\n-----------\n")
        time.sleep(3)            
        black_jack()
    elif choice =='3':
        time.sleep(3)            
        Snake()
    else:
        print ("Invalid choice")
        time.sleep(3)
    program()
    time.sleep(3)            

program()


إعجاب واحد (1)

جميل اللعبة متقنة جدا احسنت


إعجاب واحد (1)

بس اديك اختصار لكود كبير كان فينك تختصر بحيث تضع في الشرط انو اذا المستخدم ضغط 1 او 3 يطبع قريبا اللعبة وليس من الضروري عمل فانكشن خاصة لطباعة كلمة قريبا في الخيار الاول وفانكشن خاصة للخيار الثالث حتى يمكنك حذف الشرط الثالث بانه اذا ضغط الخيار الثالث بحيث تضع في نفس شرط الخيار الاول او اختار الخيار الثالث انظر الى الصورة
الاكواد الخضراء التي تم اختصاراها

إعجاب واحد (1)

صحيح لم انتبه لهذه النقطه سأقوم بتعديلها الان لكن الحمدلله ان الكود نال اعجابكم بشكل عام

واعذرونا على ازعاجكم

إعجاب واحد (1)

العفو اخي الكريم عبد الله
لا مشلكة بالعكس سعدنا بتجربة الكود :ok_hand:

إعجاب واحد (1)