F#에서 블랙잭을 구현했습니다.
소개
아래의 2기사에서 영감을 받아 자신도 심플한 블랙잭을 구현해 보았습니다.
프로그래밍 입문자의 졸업 시험은 "블랙 잭"을 개발해야합니다.
F #에서 "졸업 시험"블랙 잭 개발을 시도했습니다.
소스 코드는 이쪽. 120행 정도입니다.
htps : // 기주 b. 이 m/m사노우/Bぁck그럼 ckF샤rp/bぉb/마s r/P로g 등 m. fs
당긴 카드의 중복 체크에 대해서
이미 당긴 카드의 관리 방법에 대해입니다. 가능한 한 Array등의 mutable인 컬렉션은 사용하지 않고 하는 것을 목표로 하고 있었으므로, 당긴 카드를 deck로서 인도하면서 관리하기로 했습니다.
let rec pickCard hand deck =
let card = { PlayingCard.Number = rand.Next(1,13);
PlayingCard.Suit = rand.Next(1,4) |> enum<Suits> }
if isCardExist card deck then pickCard hand deck
else hand @ [card], deck @ [card]
처음에는 야마 카드를 본뜬 Array를 준비해… 가는 것보다 기억해 나가는 것이 좋을지도 모른다.
그리고, 꽤 튜플을 많이 사용했습니다만, 좀 더 선명한 방법이 있는 것 같아요.
점수 계산
let calcScore hand =
let temp = hand |> List.sumBy(fun x -> if x.Number > 10 then 10 else x.Number)
hand |> List.fold (fun x y ->
if y.Number = 1 && x <= 11 then x + 10 else x) temp
우선, J, Q, K의 점수를 10점으로 하여 패의 합계를 계산합니다. 그리고, 점수의 합계가 11을 넘지 않는 경우에 한해서, 에이스의 스코어를 11로서 취급한다(합계치에 10 더한다)… 가 패에 한 장이라도 포함되는 경우는 10을 가산한다”로 좋았군요. 일부러 fold 함수 사용하지 않아서 좋았다.
let calcScore hand =
let temp = hand |> List.sumBy(fun x -> if x.Number > 10 then 10 else x.Number)
if hand |> List.exists (fun x -> x.Number = 1) && temp <= 11 then temp+10 else temp
이렇게 다시 쓰여졌습니다.
결론
메시지의 표시 처리나 입력의 접수를 기술하는 장소, 판별 공용체를 패라든지에 사용해 버스트의 판별을 그 멤버에게 시키는 등, 여러가지 그 밖에도 궁리의 여지는 있는 것처럼 생각합니다.
만들고 기사로도 하려고 생각하고 있었습니다만, 생각했던 것보다 아무것도 쓰는 일이 없다.
Reference
이 문제에 관하여(F#에서 블랙잭을 구현했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/MinoruSanou/items/159aa5937907dce594fe
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이미 당긴 카드의 관리 방법에 대해입니다. 가능한 한 Array등의 mutable인 컬렉션은 사용하지 않고 하는 것을 목표로 하고 있었으므로, 당긴 카드를 deck로서 인도하면서 관리하기로 했습니다.
let rec pickCard hand deck =
let card = { PlayingCard.Number = rand.Next(1,13);
PlayingCard.Suit = rand.Next(1,4) |> enum<Suits> }
if isCardExist card deck then pickCard hand deck
else hand @ [card], deck @ [card]
처음에는 야마 카드를 본뜬 Array를 준비해… 가는 것보다 기억해 나가는 것이 좋을지도 모른다.
그리고, 꽤 튜플을 많이 사용했습니다만, 좀 더 선명한 방법이 있는 것 같아요.
점수 계산
let calcScore hand =
let temp = hand |> List.sumBy(fun x -> if x.Number > 10 then 10 else x.Number)
hand |> List.fold (fun x y ->
if y.Number = 1 && x <= 11 then x + 10 else x) temp
우선, J, Q, K의 점수를 10점으로 하여 패의 합계를 계산합니다. 그리고, 점수의 합계가 11을 넘지 않는 경우에 한해서, 에이스의 스코어를 11로서 취급한다(합계치에 10 더한다)… 가 패에 한 장이라도 포함되는 경우는 10을 가산한다”로 좋았군요. 일부러 fold 함수 사용하지 않아서 좋았다.
let calcScore hand =
let temp = hand |> List.sumBy(fun x -> if x.Number > 10 then 10 else x.Number)
if hand |> List.exists (fun x -> x.Number = 1) && temp <= 11 then temp+10 else temp
이렇게 다시 쓰여졌습니다.
결론
메시지의 표시 처리나 입력의 접수를 기술하는 장소, 판별 공용체를 패라든지에 사용해 버스트의 판별을 그 멤버에게 시키는 등, 여러가지 그 밖에도 궁리의 여지는 있는 것처럼 생각합니다.
만들고 기사로도 하려고 생각하고 있었습니다만, 생각했던 것보다 아무것도 쓰는 일이 없다.
Reference
이 문제에 관하여(F#에서 블랙잭을 구현했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/MinoruSanou/items/159aa5937907dce594fe
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
let calcScore hand =
let temp = hand |> List.sumBy(fun x -> if x.Number > 10 then 10 else x.Number)
hand |> List.fold (fun x y ->
if y.Number = 1 && x <= 11 then x + 10 else x) temp
let calcScore hand =
let temp = hand |> List.sumBy(fun x -> if x.Number > 10 then 10 else x.Number)
if hand |> List.exists (fun x -> x.Number = 1) && temp <= 11 then temp+10 else temp
메시지의 표시 처리나 입력의 접수를 기술하는 장소, 판별 공용체를 패라든지에 사용해 버스트의 판별을 그 멤버에게 시키는 등, 여러가지 그 밖에도 궁리의 여지는 있는 것처럼 생각합니다.
만들고 기사로도 하려고 생각하고 있었습니다만, 생각했던 것보다 아무것도 쓰는 일이 없다.
Reference
이 문제에 관하여(F#에서 블랙잭을 구현했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/MinoruSanou/items/159aa5937907dce594fe텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)