学生向けプログラミング入門 | 無料

学生向けにプログラミングを無料で解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails, Python, Django

Python | 13 | 簡単なゲームを作成

<<前  [TOP]  次>>


次のプログラムを作ってみましょう。


【saikoro1.py】

# saikoro1.py

import random

def throwDices(score):
	me1 = random.randint(0,5)
	me2 = random.randint(0,5)
	showDices( me1, me2 )
	score = checkPoints( me1, me2, score )
	return score

def showDices( a, b ):
	diceStrings = ['| * |', '| : |', '|...|', '|: :|','|:.:|','|:::|']
	print( '' )
	print( str(diceStrings[a]) + ' ' + str(diceStrings[b]) )
	print( '' )

def checkPoints( a, b, score ):

	bet = 5
	c = a + b + 2
	if ( c%2 == 0 ) :
		if ( a == b ) :
			score += bet*2
			print( 'あなたは ' + str(bet*2) + '$ 勝ちました。')
		else :
			score += bet
			print( 'あなたは ' + str(bet) + '$ 勝ちました。')
		
	else:
		if( c == 7 ):
			score -= bet*15
			print( 'あなたは ' + str(bet*15) + '$ 負けました。')
		else:
			score -= bet*10
			print( 'あなたは ' + str(bet*10) + '$ 負けました。')

	print( 'あなたの持ち金は' + str(score) + '$ です。')
	return score

def keyInput():
		input('エンターキーを押してください。' )
    
def main():
	score = 100
	round = 1

	while ( score > 0 ):
		print( '' )
		keyInput()
		print( '' )
		print( 'ラウンド:' + str(round))
		score = throwDices(score)
		round += 1

	print( 'あなたのお金はなくなりました。ゲームオーバーです。')


main()



まず最初に次の文を見てください。

diceStrings = ['| * |', '| : |', '|...|', '|: :|','|:.:|','|:::|']

これはサイコロを記号で作っています。
シングルコーテーション(')で囲まれた部分が配列の箱一つに入ります。


mainメソッドでは、while文を使ってscoreが0になるまでループを行っています。
呼び出されるメソッドはkeyInput()とthrowDices()です。
まずは、keyInputメソッドから説明します。

def keyInput():
		input('エンターキーを押してください。' )



input()は標準入力といいます。
今回のプログラムでは、何か入力があるまで待機するといった処理を行います。
何か入力があれば次の処理に進みます。
一時停止みたいなものです。
引数で与えている「エンターキーを押してください。」というメッセージを出力して入力待機状態になります。


random.randint(0,5)という記述で、0から5までの整数がランダムに出ます。
ここで得られた2つの変数は、showDices()とcheckPoints()の二つのメソッドに引数として渡されます。
showDices()は、渡された2つの数字をサイコロにして表示しています。
checkPoints()は与えられた数字に対して、配当を決めています。
今回のプログラムの勝敗は、偶数か奇数か、同じ目が出たかのみ判定しています。


条件によって変数scoreに数字が足し引きされreturnで返しています。


実行してみましょう。

実行結果1
実行結果1
実行結果2
実行結果2



次のプログラムを作ってみましょう。


【saikoro2.py】

# saikoro2.py

import random

class Saikoro:

    def __init__(self):
        self.score = 100
        self.bet = 5
        self.round = 1
        self.choice = 0

s = Saikoro()

def throwDices():
    me1 = int(random.randint(0,5))
    me2 = int(random.randint(0,5))
    showDices( me1, me2 )
    checkPoints( me1, me2)

def showDices( a, b ):
    diceStrings = ['| * |', '| : |', '|...|', '|: :|','|:.:|','|:::|']
    print( '' )	
    print( str(diceStrings[a]) + ' ' + str(diceStrings[b]) )
    print( '' )

def checkPoints(a, b ):
    c = a + b + 2
    d = 0
    if(c%2 == s.choice ):
        if( a == b or s.bet*2):
            d = s.bet*2
        else:
            d = s.bet

        print('あなたは', end=" ")
        print (int(d), end=" ")
        print( '$を手に入れました!')
        s.score = s.score + int(d)

    else:
        if ( a == b or c == 7 ):
            d = s.bet*2
        else:
            d = s.bet

        print( 'あなたは', end=" ")
        print (int(d), end=" ")
        print( '$負けました。')
        s.score = s.score - int(d)

    print( 'あなたの持ち金は ' + str(s.score) + '$です。')

def keyInput():
    s = input()
    return s

def choice():
    print( '')
    print( '偶数か奇数かを選んでエンターを押してください。')
    print( '偶数ならEVEN 奇数ならODDと入力してください。')
    print( 'EVEN or ODD-> ', end=" ")

    str = keyInput()

    if (str[0] =='e' or str[0] == 'E'):
        s.choice = 0
    else:
            s.choice = 1

def bet():
	print( '' )
	print( '掛け金を入力してください')
	print ('-> ', end=" ")
	s.bet = keyInput()

def main():

    while( s.score > 0 ):
        print('')
        print('ラウンド:' + str(s.round))

        choice()
        bet()
        throwDices()
        s.round += 1

    print( 'あなたのお金はなくなりました。ゲームオーバーです。')


main()



このプログラムでは、「インスタンス変数」というものを使用しています。
インスタンス変数は変数名の前に「self」が付きます。

        self.score = 100
        self.bet = 5
        self.round = 1
        self.choice = 0

インスタンス変数を使用すると、プログラムの中で値を保持し続ける事が出来ます。
プログラム内の全メソッドで共通して使用することが出来るのでとても便利です。


インスタンス変数を利用するにはまずクラスの宣言をしなければなりません。
このクラス内で共通のインスタンス変数を利用できます。

class Saikoro:



クラスを宣言した後にインスタンス変数を定義します。

    def __init__(self):
        self.score = 100
        self.bet = 5
        self.round = 1
        self.choice = 0



このインスタンス変数を使用するには、クラスのコンストラクタを生成しなければなりません。
コンストラクタとは、クラスのインスタンス生成時に実行されるメソッドで、主にそのクラスのメンバ変数を初期化するときに使用します。

# コンストラクタの生成
s = Saikoro()



このクラス内でインスタンス変数にアクセスするには、生成したコンストラクタを利用して次のように行います。

        s.score
        s.bet
        s.round
        s.choice



checkPoint()メソッドを見てみます。

c = a + b + 2

最後に2を足しているのは、次の条件に理由があります。

if ( a == b or c == 7 ) :

このc == 7に当てはめる確率を上げています。
2を足さなければ、1と6の組み合わせしかありません。

str = keyInput()
if ( str[0] ='e' or str[0] = 'E' ) :

これは、strの最初の文字がeかEならばという意味です。


出力結果を見てみましょう。

実行結果1
実行結果1
実行結果2
実行結果2



↓↓クリックして頂けると励みになります。


<<前  [TOP]  次>>