תרגיל - החל מאפייני רשימה
נניח שאתה מפתח בחברה למשחקים לא רשמיים. התבקשת לכתוב קוד פותח שישמש עבור משחק כרטיס. המטלה הראשונה שלך היא ליצור חבילת כרטיסים ולאחר מכן ליצור פונקציה שתוכל לצייר כרטיסים מהמצגת, אחד בכל פעם.
יצירת חבילת כרטיסים
חבילת כרטיסים כוללת 52 כרטיסים, אך כדי להקל על קריאת ההדפסה של הקונסולה, בוא נפחית את חבילת הכרטיסים לחמישה כרטיסים. באפשרותך ליצור סידרת מספרים על-ידי הוספת שתי נקודות (..), המוקפות ברווחים, בין המספר הראשון למספר האחרון ברשימה.
בקונסולה, צור פרוייקט חדש על-ידי הפעלת
dotnet new:dotnet new console --language F# -o Cards cd Cardsכדי ליצור רשימה המכילה את הכרטיסים, בקובץ Program.fs, את הקוד הבא:
let cards = [ 0 .. 5 ]קוד זה יוצר רשימה של מספרים בין 0 ל- 5.
ציור כרטיסים מהמרפסת
כעת, לאחר שיצרת את ערכת השקופיות שלך, תוכל לבנות שיטה עבור כרטיסי ציור. לשם כך, באפשרותך להשתמש במאפיינים המוכללים של Head ו- Tail.
לאחר מכן, צור פונקציה
drawCard():let drawCard (list:int list) = printfn "%i" list.Head list.Tailבאמצעות המאפיין
Head, אתה קורא את הפריט הראשון ברשימה ועל-ידי החזרתTail, אתה מדמה לוקח כרטיס מראש הרשימה ומחזיר את שאר הכרטיסים בערכת הפריטים.כדי לנסות את היישום, הוסף את הקוד הבא לשיטה
main()הבאה:let result = cards |> drawCard |> drawCard // 0 1הפעל את הפרוייקט על-ידי התקשרות
dotnet run:כעת אתה אמור לראות
0ו-1מודפסים במסוף.
מזל טוב! הטמעת חבילת שקופיות שמ עבורה תוכל לצייר כרטיסים.
ציור כרטיסים ליד
היכולת לצייר כרטיסים מהמרפסת היא התחלה נהדרת, אבל משחקי קלפים בדרך כלל זקוקים לשני שחקנים או יותר כדי לאסוף את הכרטיסים האלה. כפי שאתה יודע, כל אוסף של כרטיסים מצוירים של כל שחקן נקרא יד. בשלב הבא, עליך ליישם קוד כדי שכל כרטיס מצויר יתווסף ליד.
בקוד שבו הצהרת על הרשימה
cards, הוסף את הקוד הבא:let hand = []לאחר מכן, שנה
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.שנה את הקוד בשיטה הראשית כדי לצייר כרטיסים ביד:
let d, h = (cards, hand) |> drawCard |> drawCard printfn "Deck: %A Hand: %A" d h // Deck: [2; 3; 4; 5] Hand: [1; 0]הפעל את הפרוייקט על-ידי התקשרות
dotnet run:dotnet runאתה אמור לראות את הפלט הבא מודפס בקונסולה:
Deck: [2; 3; 4; 5] Hand: [1; 0]
מזל טוב! הצליח לדמות שחקן, hand, עבור כל פעם שאתה מצייר כרטיס.