۱۳ - ۹داربازی

حالا آماده‌ایم که یه بازی بسازیم. از دستور ‏‎new‎‏ از Stack برای ساخت این پروژه استفاده می‌کنیم:

$ stack new hangman simple

با این کار یه پوشه به اسمِ ‏‎hangman‎‏ براتون درست میشه و چندتا فایلِ پیش‌فرض هم داخل‌ش گذاشته میشه.

یه فایلِ ‏‎words‎‏ لازم دارین که لغات رو ازش بگیرین. بیشترِ سیستم عامل‌های برپایه‌ی یونیکس، در یه آدرسی مشابه زیر، یه لیستِ لغات دارن:

$ ls /usr/share/dict/
American-english  british-english
cracklib-smal   README.select-wordlist
words  words.pre-dictionaries-common

اینجا از لیستِ لغاتِ ‏‎words‎‏ استفاده می‌کنیم، که احتمالاً همون لیستی‌ه که سیستم عامل ِتون به طورِ پیش‌فرض استفاده می‌کنه. ممکنه برای شما جای دیگه‌ای باشه، شاید هم مجبور شین دانلودش کنین. میذاریم‌ش تو یه پوشه در آدرس پروژه‌مون:

$ tree .
.
├── LICENSE
├── Setup.hs
├── data
|   └── dict.txt
├── hangman.cabal
├── src
|   └── Main.hs
└── stack.yaml

لغات در اون فایل با خط جدید از هم جدا شدن، یعنی اینطوری:

$ head data/dict.txt
A
a
aa
aal
aalii
aam
Aani
aardvark
aardwolf
Aaron

حالا فایلِ ‏‎.cabal‎‏ رو مثل زیر تغییر بدین:

name:                hangman
version:             0.1.0.0
synopsis:            Playing Hangman
homepage:            Chris N Julie
license:             BSD3
license-file:        LICENSE
author:              Chris Allen and Julie Moronuki
maintainer:          haskellbook.com
category:            Game
build-type:          Simple
extra-source-files:  data/dict.txt
cabal-version:       >=1.10

executable hangman
  main-is              Main.hs
  hs-source-dirs:      src
  build-depends:       base >=4.7 && <5
                     , random
                     , split
  default-language:    Haskell2010

تیکه‌ی مهم‌ش اینه که اینجا از دو تا کتابخونه استفاده کردیم: ‏‎random‎‏ و ‏‎split‎‏. بطور معمول یه بازه از نسخه‌های وابستگی‌ها نوشته میشن (مثل ‏‎base‎‏ در این مثال)، اما ما نسخه‌های ‏‎random‎‏ و ‏‎split‎‏ رو تعیین نکردیم چون خیلی تغییر نمی‌کنن. تنها فایل منبع ِ اصلی، ‏‎src/Main.hs‎‏ هست.