لعبة من عهد الجيل الأول ^_^ ، حجر ورقة مقص باستعمال مكتبة Turtle (دمج بين المستوى الأول و المستوى الثاني) أرجو منكم التجربة و الآراء

Face 01

Face 02

Face 03

Face 04

Face 05

Face 06

Face 07

Face 08

Face 09

from turtle import Turtle, Screen
import random
import time

# Assign the variables
shapes = (
    """
                _______
            ---'   ____)
                  (_____)
                  (_____)
                  (____)
            ---.__(___)
    """,
    """
                _______
            ---'    ____)____
                       ______)
                      _______)
                     _______)
            ---.__________)
    """,
    """
                _______
            ---'   ____)____
                      ______)
                   __________)
                  (____)
            ---.__(___)
    """
)

faces = (
    """
        (◔_◔)
    """,
    """
        (-‿-)
    """
)
list_of_choice = ("Rock", "Paper", "Scissors")
score_player = 0
score_computer = 0


# Function to draw the info squares on the screen
def draw_info_squares(x_name_square, y_name_square, x_score_square, y_score_square):
    painter.penup()
    painter.goto(x_name_square, y_name_square)
    painter.pendown()
    painter.pensize(1)
    painter.pencolor("#273746")
    painter.fillcolor("#273746")
    painter.speed("fastest")
    painter.begin_fill()

    for _ in range(2):
        painter.forward(150)
        painter.right(90)
        painter.forward(40)
        painter.right(90)

    painter.end_fill()

    painter.penup()
    painter.goto(x_score_square, y_score_square)
    painter.pendown()
    painter.pensize(1)
    painter.pencolor("#f7e142")
    painter.fillcolor("#f7e142")
    painter.speed("fastest")
    painter.begin_fill()

    for _ in range(2):
        painter.forward(150)
        painter.right(90)
        painter.forward(30)
        painter.right(90)

    painter.end_fill()


# Function to draw the score square
def draw_score_square(x_position, y_position):
    painter.penup()
    painter.goto(x_position, y_position)
    painter.pendown()
    painter.pensize(1)
    painter.pencolor("#f7e142")
    painter.fillcolor("#f7e142")
    painter.speed("fastest")
    painter.begin_fill()

    for _ in range(2):
        painter.forward(150)
        painter.right(90)
        painter.forward(30)
        painter.right(90)

    painter.end_fill()


# Function to display the loser emoji
def loser_emoji(color):
    painter.penup()
    painter.goto(80, 0)
    painter.pendown()
    painter.color(color)  # add color
    painter.write(f"{faces[0]}", font=("arial", 32, "bold"))


# Function to display the winner emoji
def winner_emoji(color):
    painter.penup()
    painter.goto(65, -155)
    painter.pendown()
    painter.color(color)  # add color
    painter.write(f"{faces[1]}", font=("arial", 38, "bold"))


# Function to display the player's and computer's names
def show_players_names(player, computer):
    painter.penup()
    painter.goto(-280, 100)
    painter.pendown()
    painter.color("#7ca0c2")
    painter.write(f"{player}", font=("arial", 12, "bold"))

    painter.penup()
    painter.goto(-280, -90)
    painter.pendown()
    painter.color("#7ca0c2")
    painter.write(f"{computer}", font=("arial", 12, "bold"))


# Function to display the player's choice on the screen
def player_choice(player_choice):
    painter.penup()
    painter.goto(-110, 10)
    painter.pendown()
    painter.color("#273746")
    painter.write(f"{player_choice}", font=("arial", 14, "bold"))


# Function to display the computer's choice on the screen
def computer_choice(computer_choice):
    painter.penup()
    painter.goto(-110, -170)
    painter.pendown()
    painter.color("#273746")
    painter.write(f"{computer_choice}", font=("arial", 14, "bold"))


# Function to take the player's name from the user, then display it using the show_players_names function
def input_player_name():
    player_one = window.textinput("Name of player one", "Enter your name: ").capitalize().split(" ")
    if len(player_one) > 1:
        player_one = player_one[0]
    else:
        player_one = "".join(player_one[0])
    player_two = "Computer".capitalize()
    show_players_names(player_one, player_two)


# Function to display the scores of the player and computer on the screen
def show_scores(player_score, computer_score):
    painter.penup()
    painter.goto(-280, 65)
    painter.pendown()
    painter.color("#f7e142")
    painter.write(f"SCORE : {player_score}", font=("arial", 12, "bold"))
    painter.color("Black")
    painter.write(f"SCORE : {player_score}", font=("arial", 12, "bold"))

    painter.penup()
    painter.goto(-280, -125)
    painter.pendown()
    painter.color("#f7e142")
    painter.write(f"SCORE : {computer_score}", font=("arial", 12, "bold"))
    painter.color("Black")
    painter.write(f"SCORE : {computer_score}", font=("arial", 12, "bold"))


# Create Turtle and Screen objects and set their properties
painter = Turtle()
painter.hideturtle()
window = Screen()
window.setup(600, 400)
window.title("Rock - Paper - Scissors GAME")
window.bgcolor("#7ca0c2")

# Drawing the interface
painter.penup()
painter.goto(-148, 155)
painter.pendown()
painter.pensize(3)
painter.pencolor("White")
painter.goto(-148, -155)
painter.penup()
painter.goto(-120, 0)
painter.pendown()
painter.goto(120, 0)
painter.penup()
painter.goto(148, 155)
painter.pendown()
painter.goto(148, -155)
draw_info_squares(-300, 130, -300, 90)
draw_info_squares(-300, -60, -300, -100)

# Start the game by taking the player's name from the user
input_player_name()
show_scores(score_player, score_computer)

# Start the game loop
while True:
    # Draw the squares where the player's choice and the computer's choice will be displayed
    loser_emoji("#273746")
    winner_emoji("#273746")
    painter.penup()
    painter.goto(-120, 155)
    painter.pendown()
    painter.pensize(2)
    painter.speed("fastest")
    painter.pencolor("Orange")
    painter.fillcolor("White")
    painter.begin_fill()
    for _ in range(2):
        painter.forward(240)
        painter.right(90)
        painter.forward(140)
        painter.right(90)
    painter.end_fill()

    painter.penup()
    painter.goto(-120, -15)
    painter.pendown()
    painter.pensize(2)
    painter.speed("fastest")
    painter.pencolor("Orange")
    painter.fillcolor("White")
    painter.begin_fill()
    for _ in range(2):
        painter.forward(240)
        painter.right(90)
        painter.forward(140)
        painter.right(90)
    painter.end_fill()

    # Get the player's choice
    pl_choice = window.textinput("Player choice", "Enter your choice\nRock - Paper - Scissors\nOr type Exit to quit").capitalize()

    # Show the player's choice on the screen
    if pl_choice == "Exit":
        exit()
    if pl_choice in list_of_choice:
        if pl_choice == "Rock":
            player_choice(shapes[0])
        elif pl_choice == "Paper":
            player_choice(shapes[1])
        elif pl_choice == "Scissors":
            player_choice(shapes[2])
    else:
        continue

    time.sleep(1)

    # Computer randomly chooses from the list (Rock, Paper, Scissors)
    com_choice = random.choice(list_of_choice)
    if com_choice == "Rock":
        computer_choice(shapes[0])
    elif com_choice == "Paper":
        computer_choice(shapes[1])
    elif com_choice == "Scissors":
        computer_choice(shapes[2])

    # Determine the winner and loser:
    if pl_choice == com_choice:
        loser_emoji("Green")
        winner_emoji("Green")
        time.sleep(3)
        continue
    # Player wins
    elif (pl_choice == "Rock" and com_choice == "Scissors"
          or pl_choice == "Paper" and com_choice == "Rock"
          or pl_choice == "Scissors" and com_choice == "Paper"):
        loser_emoji("#273746")
        winner_emoji("Green")
        score_player += 1
    # Computer wins
    else:
        loser_emoji("Red")
        winner_emoji("#273746")
        score_computer += 1
    # Show scores
    draw_score_square(-300, 90)
    draw_score_square(-300, -100)
    show_scores(score_player, score_computer)
    time.sleep(2)
6 إعجابات

بوركت الهمم
ما شاء الله
حلو ان تطبق ما تعلمت في مشاريع متنوعة وتنمي مهارتك في وقت الانتظار

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

ربنا ابارك فيك :+1:
لازم من حين لآخر نستغل بعض الوقت لدمج ما تعلمناه، خاصة في هذه الأيام لا توجد حلقات جديدة عل التطبيق :disappointed_relieved: :disappointed_relieved:.
أيضا من الجميل بعض التنويع في مشاهدة بعض الدروس و المشاريع على يوتوب .

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

وفيكم بارك الله

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

كل هذا له فائدة ستات حظها على المدى البعيد بإذن الله

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

ما شاء الله عليك، أخي حكيم مرزوق
دائمًا تُبهرنا بإبداعاتك في المشاريع المتنوعة
أنصحك بأن تستغل هذه الفترة التي توقفت فيها الدروس على التطبيق بالتعلم من الآخرين، والتركيز على الأساسيات دون التعمق في التفاصيل. الأستاذ إبراهيم عادل أعطاك أهم الأساسيات، ولكن ليس كلها، لذا استغل هذا الوقت للبحث عن معلومات جديدة من مصادر مختلفة. هذا سيوفر عليك الكثير من الوقت ويساعدك في رحلتك التعليمية.

استمر في المذاكرة والتعلم وابتكار المشاريع، وستقترب من النجاح خطوة بخطوة
نشكرك على مشاركتك الطيبة ونتمنى لك كل التوفيق.

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

شكرا جزيلا أخي وفقنا الله و إياكم لكل ما فيه خير لنا في الدنيا و الآخرة.
طبعا تبقى البرمجة بحر من المعلومات التي تتطلب البحث و يجب أن نسعى لاغتنام الوقت في تحصيلها. وكل الفضل يعود للأستاذ إبراهيم عادل الذي مكننا من فهم هذا المجال بأسلوبه و بيداغوجيته في إيصال الفكرة و بناء المعلومات لا شعوريا و بشكل متسلسل .
:+1::+1::+1::tada::tada::tada::clap::clap::clap:

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

Wonderful idea. Great work
I will do it and compare my code to yours

3 إعجابات

مرحبًا بك يا Ilyas في مجتمع OctuCode! نحن سعداء جدًا بانضمامك إلينا، ونتطلع إلى رؤية إبداعاتك ومشاركتك معنا في رحلتك البرمجية. إذا كنت بحاجة إلى أي مساعدة أو نصيحة، ستجد الجميع هنا على استعداد لدعمك. نتمنى لك تجربة ممتعة ومليئة بالتعلم والتطور!

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

Welcome, Ilyas! :slightly_smiling_face:I’m very pleased with your comment :star_struck:. I wish you good luck, and I hope we can continue to exchange ideas and collaborate as we learn new things in programming.
:+1: :+1: :clap: :clap: :clap:

جميل بوركت الهمم ربنا يوفقك

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

أمين يا رب العالمين
لنا و لكم أخي العزيز

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

مرحبا في بك في مجمتع اكتوكود :+1:

إعجابَين (2)

شغل جميل يعطيك العافية

إعجابَين (2)

الله يبارك فيك و يعافيك أخي :+1:، و فقنا الله و إياك لكل ما هو خير
ألف شكر لكم :heart::heart:

إعجابَين (2)

مشروعك للعبة “حجر ورقة مقص” باستخدام مكتبة Turtle هو حقاً مذهل! :clap::tada: أنت تقوم بعمل رائع في دمج البرمجة مع التصميم بطرق مبدعة وممتعة. إليك بعض التعليقات التي تعكس حماسي لما أنجزته:

:star2: التصميم الرائع:

  • الأشكال المبتكرة: الرسوم البيانية التي استخدمتها لتمثيل الخيارات تضيف لمسة فريدة وتبعث الحياة في اللعبة. عملك على التفاصيل مثل الرموز التعبيرية يجعل التجربة أكثر حيوية وتفاعلًا.

:wrench: التحسينات القادمة:

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

  • إضافة ميزات جديدة: تخيل إضافة مستويات صعوبة أو خيارات تخصيص مميزة! سيمكنك ذلك من تقديم تجربة لعبة أعمق وأكثر تحدياً، مما سيجذب اللاعبين للاستمتاع أكثر.

:rocket: تجربة اللاعبين:

  • تشجيع اللاعبين: اجعل تجربة اللعب أكثر تميزاً بإضافة رسائل توجيهية أو تحسين التفاعل مع إدخالات اللاعبين. هذا يمكن أن يجعل اللعبة أكثر ودية ويوجه اللاعبين بشكل أفضل.

:bulb: نصائح وإلهام:

  • اختبر واستمتع: لا تتردد في اختبار جميع جوانب اللعبة واستقبال التعليقات من الآخرين. كل تجربة هي فرصة لتحسين اللعبة وجعلها أكثر إثارة.

  • استمر في الإبداع: أنت بالفعل تسير على الطريق الصحيح، وابتكاراتك في استخدام Turtle تضيف قيمة كبيرة لمشاريعك. استمر في هذا الإبداع والابتكار، ولا تتوقف عن تجربة أفكار جديدة!

أنت تقوم بعمل رائع، والنتائج التي تحققها بالفعل رائعة. استمر في تطوير مهاراتك وتوسيع حدود خيالك، لأن ما تفعله الآن هو خطوة نحو تحقيق أشياء أكبر! :star2::rocket:

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

ألف شكر لك أخي و بارك الله فيك على نصائحك القيمة
الحمد لله الذي أوصلنا لهذا المستوى و نأمل إلى أكثر ، تعليقاتكم تزيد من التحفيز و محاولة زيادة جهد أكثر برغم عدم توفر الوقت الكافي للتفرغ الوافي للدراسة و التعلم أكثر.

و لكن بإذن الله و توفيقه سنصل كلنا إلى المستوى المطلوب بأسرع وقت ممكن.

و لا ننسى بالشكر الأستاذ المحترم إبراهيم عادل، الذي بإذن الله و توفيقه أوصلنا إلى بناء ما وصلنا إليه، نرجو من الله أن يكون في ميزان حسناته و يحفظه من كل سوء.

ألف شكر لكم جميعا :heart::heart::+1::tada::clap:

إعجابَين (2)

شكراً جزيلاً لك على كلماتك الطيبة! :star2:

من الرائع سماع تقديرك وامتنانك، وأنت محق تمامًا في أن العمل الجاد والتفاني في التعلم، حتى وإن كان في أوقات محدودة، يمكن أن يؤدي إلى نتائج مدهشة. الوصول إلى المستوى المطلوب ليس مجرد هدف، بل هو رحلة مستمرة من التعلم والتطور.

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

استمر في العمل الجاد، ولا تتردد في السعي وراء تحقيق أهدافك، فإن الإصرار والتفاني هما مفاتيح النجاح. وبإذن الله، ستصل إلى المزيد من الإنجازات.

أتمنى لك كل التوفيق والتقدم في مسيرتك التعليمية والمهنية، وشكرًا لك مرة أخرى على كلماتك الجميلة. نحن هنا دائمًا لدعمك ومساعدتك في أي شيء تحتاجه. :star2::clap::books:

إعجابَين (2)