シャノン寺 ブラックジャック

http://atnd.org/events/39011
2014/03/30のシャノン寺に提出されたプログラムよい選ばれたものを上げておきます。

(python2.7動作確認済みです。)


# -*- coding: utf-8 -*-

import random

all_cards = [(x,y) for x in range(1,14) for y in ["S", "H", "D", "C"]]

#print card[1][1]
#print card[50]

#手札用のリスト
man =[]
com =[]


#カードを1枚手札に加えて、それを削除
def draw_cards(card):
    a = random.randint(0,len(all_cards)-1)
    card.append(all_cards[a])
    all_cards.pop(a)
    return card

#カードを引く、引かない入力後の処理
def draw_or_not(a,player):
    if a== 1:
        draw_cards(player)
#        print player

#カードの合計計算
def sum(cards):
    a = 0
    for n in cards:
        if int(n[0]) >10:
            b = 10
        else:
            b = int(n[0])
        a = a + b
    return a

#お互いに2枚引く
draw_cards(man)
draw_cards(man)
draw_cards(com)
draw_cards(com)

#自分のカードを表示
print "Your cards are" + str(man)

#自分は追加で引くかどうか判断.Noと答えるまで続く

b = 1
while b == 1:
    score_man = sum(man)
    print "Your score is " + str(score_man)

    b = int(raw_input("Draw cards? YES= 1 , NO= 0"))
    draw_or_not(b,man)
    print "Your cards are" + str(man)


#COMはランダムで、引くかどうか判断
b= random.randint(0,1)
draw_or_not(b,com)

print "CPU's cards are" + str(com)

#点数計算
score_man = sum(man)
score_com = sum(com)

print "Your score is " + str(score_man)
print "CPU's score is " + str(score_com)

#勝敗判定
#どちらかが21を超えていたら、超えていない方が勝ち
if score_man > 21 or score_com > 21:
    if score_man < 22:
        print "You win! CPU's score is over 21"
    else:
        print "CPU win! Your score is over 21"
#どちらも21以下なら、小さい方が勝ち、同じなら引き分け        
elif score_man > score_com:
    print "You win!"
elif score_man < score_com:
    print "CPU win!"
else:
    print "Draw..."


参加者からのコメント:
私はプログラミング経験皆無のため、今まではネット上のコードの切り貼りで 簡単なツールは作っていましたが、
本日の講座で関数定義などの感覚をつかむことができたので、
今後はもう少し複雑なものも作れそうです。

所長からのコメント:
こちらのプログラムはシンプルかつreadableだと思いましたので、
こちらのプログラムを参考資料に選びました。
是非pythonでこれからも面白いものを作って行ってください。
一緒に頑張りましょう。

初級編に参加された人の数名の方から中級編をやってもらえないかとの要望があります。
私の中で大富豪のコードが上がってきたら中級編を考えたいと思っています。
大富豪の場合は革命やローカルルールがあるので、
judgeの部分をうまくクラス定義をしていかないと変更や追加に耐えられないので、
大富豪が一つの目安と思います。

Comments are closed.