תרגיל - החל מאפייני רשימה

הושלם

נניח שאתה מפתח בחברה למשחקים לא רשמיים. התבקשת לכתוב קוד פותח שישמש עבור משחק כרטיס. המטלה הראשונה שלך היא ליצור חבילת כרטיסים ולאחר מכן ליצור פונקציה שתוכל לצייר כרטיסים מהמצגת, אחד בכל פעם.

יצירת חבילת כרטיסים

חבילת כרטיסים כוללת 52 כרטיסים, אך כדי להקל על קריאת ההדפסה של הקונסולה, בוא נפחית את חבילת הכרטיסים לחמישה כרטיסים. באפשרותך ליצור סידרת מספרים על-ידי הוספת שתי נקודות (..), המוקפות ברווחים, בין המספר הראשון למספר האחרון ברשימה.

  1. בקונסולה, צור פרוייקט חדש על-ידי הפעלת dotnet new:

    dotnet new console --language F# -o Cards
    cd Cards
    
  2. כדי ליצור רשימה המכילה את הכרטיסים, בקובץ Program.fs, את הקוד הבא:

    let cards = [ 0 .. 5 ]
    

    קוד זה יוצר רשימה של מספרים בין 0 ל- 5.

ציור כרטיסים מהמרפסת

כעת, לאחר שיצרת את ערכת השקופיות שלך, תוכל לבנות שיטה עבור כרטיסי ציור. לשם כך, באפשרותך להשתמש במאפיינים המוכללים של Head ו- Tail.

  1. לאחר מכן, צור פונקציה drawCard():

    let drawCard (list:int list) = 
        printfn "%i" list.Head
        list.Tail 
    

    באמצעות המאפיין Head, אתה קורא את הפריט הראשון ברשימה ועל-ידי החזרת Tail, אתה מדמה לוקח כרטיס מראש הרשימה ומחזיר את שאר הכרטיסים בערכת הפריטים.

  2. כדי לנסות את היישום, הוסף את הקוד הבא לשיטה main() הבאה:

    let result = cards |> drawCard |> drawCard // 0 1
    
  3. הפעל את הפרוייקט על-ידי התקשרות dotnet run:

    כעת אתה אמור לראות 0 ו- 1 מודפסים במסוף.

מזל טוב! הטמעת חבילת שקופיות שמ עבורה תוכל לצייר כרטיסים.

ציור כרטיסים ליד

היכולת לצייר כרטיסים מהמרפסת היא התחלה נהדרת, אבל משחקי קלפים בדרך כלל זקוקים לשני שחקנים או יותר כדי לאסוף את הכרטיסים האלה. כפי שאתה יודע, כל אוסף של כרטיסים מצוירים של כל שחקן נקרא יד. בשלב הבא, עליך ליישם קוד כדי שכל כרטיס מצויר יתווסף ליד.

  1. בקוד שבו הצהרת על הרשימה cards, הוסף את הקוד הבא:

    let hand = []
    
  2. לאחר מכן, שנה drawCard() הבאה כדי לקבל קבוצת משתנים המורכבת משתי רשימות, אחת המייצגת את ערכת שקופיות והטבלה האחרת המייצגת את היד:

    let drawCard (tuple: int list * int list) = 
        let deck = fst tuple
        let draw = snd tuple
        let firstCard = deck.Head
        printfn "%i" firstCard
    
        let hand = 
            draw
            |> List.append [firstCard]
    
        (deck.Tail, hand)
    

    הפונקציה fst() משמשת לגישה למאפיין הראשון בקבוצה (לדוגמה, ערכת שקופיות). הפונקציה snd משמשת לגישה ליד. בנוסף, שנהת את סוג ההחזרה כך שהוא יחזיר קבוצת משתנים המורכבת מהמצגת ומהידיים (deck.Tail, hand), אך עם כרטיס firstCard.

  3. שנה את הקוד בשיטה הראשית כדי לצייר כרטיסים ביד:

    let d, h = (cards, hand) |> drawCard |> drawCard
    
    printfn "Deck: %A Hand: %A" d h // Deck: [2; 3; 4; 5] Hand: [1; 0]
    
  4. הפעל את הפרוייקט על-ידי התקשרות dotnet run:

    dotnet run
    

    אתה אמור לראות את הפלט הבא מודפס בקונסולה:

    Deck: [2; 3; 4; 5] Hand: [1; 0]
    

מזל טוב! הצליח לדמות שחקן, hand, עבור כל פעם שאתה מצייר כרטיס.