シャノン寺 数字足しあげゲーム

http://atnd.org/events/37883
今回のIT寺小屋 シャノン寺では数え上げるゲームのプログラムを一緒に作りました。
参加された方の中から一番良いプログラムを載せます。

ゲームの内容はプレーヤーがまずコンピューターとじゃんけんして勝った方が先行、そして1~3までの数字を足しあげていって10を言った方が負け。

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

# -*- coding: utf-8 -*-
import random

#Janken
#ジャンケンのために、自分と相手用の変数を2つ(この場合はA,B)を用意します。

print u'Lets ジャンケン'
print 'Rock=1 , Scissors=2 , Paper=3'

A = raw_input ('Select a number as you like')
B = random.choice('123')

print 'Player = '+ A
print 'Com = '+ B

#あいこの場合が考えられるので、A,Bが同じ数をしているときはループします。(whileループ)

while A == B:
    print 'again'
    A = raw_input('Select one number as you like')
    B = random.choice("123")

    print 'Player = ' + A
    print 'Computer = ' + B

#以下からジャンケンの勝ち負け判定が始まります。

N = 2

#ジャンケンの勝ち負け判定を関数化したものです。
def jankenjudge (a,b,x,y,z,n):
    global N
    if a == x and b == y:
        N = n
        print z

#考えらえる6通りの組み合わせを渡します。

jankenjudge (A,B,"2","1","Com win",0)
jankenjudge (A,B,"3","1","You win",1)
jankenjudge (A,B,"1","2","You win",1)
jankenjudge (A,B,"3","2","Com win",0)
jankenjudge (A,B,"1","3","Com win",0)
jankenjudge (A,B,"2","3","You win",1)

#以下から数え上げゲームが始まります。

#Kazoeage gam

#Nの数により(どちらがジャンケンに買ったかにより)、コンピュータが先攻かプレーヤーが先攻かが分かれます。
if N == 0 :
    #N=0なので、コンピュータが先攻です。 
    #何もないリストを一つ用意します。このリストに数を足していく形でゲームは進みます。
    List = [0]
    print List
    #リストの一番最後の要素が10になっていないとき(ゲームが終了していないとき)に、以下の処理を実行します。
    while List[-1] != 10 :
            #まずコンピュータにランダムに1~3の数を選ばせます。
            c = random.choice("123")
            #選んだ数に従ってリストの一番最後に要素を追加していきます。
            for i in range(0,int(c)):
                List.append(List[-1]+1)
            #一連の処理を表示させます。
            print 'Computer Turn'
            print 'Com selected ' + c
            print List
            #勝ち負け判定です。リストの一番最後の要素が10以上であればコンピュータの負けです。
            if List[-1] >= 10:
                print ''
                print 'You win'
                break
            #プレーヤーのターンになります。        
            print 'Your Turn'
            #プレーヤーに1~3の数の中で任意の数の入力を要求します。
            p = raw_input('Please input number from 1 to 3 as you like')
            #同様に入力された数に従ってリストの一番最後に要素を追加していきます。
            for i in range(0,int(p)):
                List.append(List[-1]+1)
            #ここまでの処理を表示させます。
            print 'Your Turn'
            print List
            #勝ち負け判定です。この時点でリストの一番最後の要素が10以上であればプレーヤーの負けです。
            if List[-1] >= 10:
                print ''
                print 'You lose'
                break
            print ''
#上記まではコンピュータが先攻の場合でしたが、これより以下はプレーヤーが先攻の場合です。コードはほぼ同じため、説明は省きます。
elif N == 1 :
    List = [0]
    print List
    while List[-1] != 10 :
            print 'Your Turn'
            p = raw_input('Please input number from 1 to 3 as you like')
            for i in range(0,int(p)):
                List.append(List[-1]+1)
            print 'Your Turn'
            print List
            if List[-1] >= 10:
                print ''
                print 'You lose'
                break
            c = random.choice("123")
            for i in range(0,int(c)):
                List.append(List[-1]+1)
            print 'Computer Turn'
            print 'Com selected ' + c
            print List
            if List[-1] >= 10:
                print ''
                print 'You win'
                break        
            print ''

寺小屋長からのコメント:
良くできています。特に以前やったじゃんけんのプログラムを組み合わせているのがいいと思います。
ただ
for i in range(0,int(c)):
List.append(List[-1]+1)
ここでlistを使う必要がありますかね???(習ったから使った???)
普通に、
Num = 0
while Num < 10;
p = raw_input(‘Please input number from 1 to 3 as you like’)
Num = Num + int(p)

みたいにできそうですがどうでしょう?

Comments are closed.