楽しいカードゲームを作るまでの記録～その１～

## まずは Python で簡単なカードゲームを作成する
### 【ゲームの仕様】
1．プレイヤーとエネミーの手札（１～１２）をランダムに３つ生成する
2．プレイヤーから入力（手札の選択）を受け付ける
3．選択された手札とエネミーがランダムに選択する手札で勝負する
4．高い数字の手札を出した方が勝利する
5. １は１２に勝利する
6．勝負を２回繰り返し、勝利数の多い方がゲームの勝者となる

### 実行するPythonファイル
◆コンセプト
実行モジュールからはロジックを排除し、上から下へ実行していくだけにする

```py
import parts

# 勝敗情報(1戦目・2戦目・最終結果)
result = [list(),list(),list()]

# プレイヤーの手札を生成する
p_number = parts.initializeNumber()

print('player number is [' + ','.join(map(str, p_number)) + ']')

# プレイヤーの手札の選択する
p_input = input('Enter your number : ')

# 発行された番号以外は不正エラーで強制終了する
parts.isValidInput(p_input, p_number)

print('player selected number is ' + p_input)

# エネミーの手札を生成する
e_number = parts.initializeNumber()

# print('enemy number is [' + ','.join(map(str, e_number)) + ']')

# エネミーの手札をランダムに選択する
e_select = parts.selectRandamNumber(e_number, 3)

print('enemy selected number is ' + str(e_select))

# 勝敗を確認する
result[0] = parts.setResult(p_input, e_select)

print(result[0][2])

# 手札から選択したものを削除する
p_number = parts.deleteNumber(int(p_input), p_number)
e_number = parts.deleteNumber(e_select, e_number)

print('player number is [' + ','.join(map(str, p_number)) + ']')
# print('enemy number is [' + ','.join(map(str, e_number)) + ']')

# プレイヤーの手札の選択する
p_input = input('Enter your number : ')

# 発行された番号以外は不正エラーで強制終了する
parts.isValidInput(p_input, p_number)

print('player selected number is ' + p_input)

# エネミーの手札をランダムに選択する
e_select = parts.selectRandamNumber(e_number, 2)

print('enemy selected number is ' + str(e_select))

# 勝敗を確認する
result[1] = parts.setResult(p_input, e_select)

print(result[1][2])

# 手札から選択したものを削除する
p_number = parts.deleteNumber(int(p_input), p_number)
e_number = parts.deleteNumber(e_select, e_number)

# 最終結果を生成する
result[2] = parts.setResultFinal(result[0], result[1])

print('[Result] Player Wins ' + str(result[2][0]) + ' : Enemy Wins ' + str(result[2][1]))
print(result[2][2])

```
### 関数定義ファイル（parts.py）
◆コンセプト
ロジックはここに集約し、探しやすいように関数名の昇順で定義する
```py
"""
関数定義
"""
import random

"""
手札情報を削除する
param number 削除する数字
param arr 削除先の配列
return arr 削除後の配列
"""
def deleteNumber(number, arr):
	arr.remove(number)
	return arr

"""
手札の初期化
return arr 数字が３つ入った配列
"""
def initializeNumber():
	num_chk = 0
	arr = []
	while num_chk == 0:
		randam1 = random.randint(1, 12)
		randam2 = random.randint(1, 12)
		randam3 = random.randint(1, 12)
		if randam1 != randam2 and randam2 != randam3 and randam1 != randam3:
			num_chk = 1
			arr = [randam1,randam2,randam3]
	return arr

"""
入力値のチェック
param p_input 画面から入力された文字列
param p_number プレイヤー手札の配列
"""
def isValidInput(p_input, p_number):
	if int(p_input) not in p_number:
		print('error! try again.')
		exit()
"""
手札からランダムに選択
param e_number エネミー手札の配列
param range 選択肢の幅
return e_select 選択した数字
"""
def selectRandamNumber(e_number, range):
	r = random.randint(0, range-1)
	e_select = e_number[r]
	return e_select

"""
勝敗情報をセットする
param p_input プレイヤーの手札
param e_select エネミーの手札
return result 勝敗情報の配列（1戦だけ）
"""
def setResult(p_input, e_select):
	result = [0,0,'']
	special = specialWin(p_input, e_select)
	if special == 1:
		result[0] += 1
		result[2] = 'You Win!'
	elif special == 2:
		result[1] += 1
		result[2] = 'You Lose...'
	elif int(p_input) > e_select and special == 0:
		result[0] += 1
		result[2] = 'You Win!'
	elif int(p_input) == e_select and special == 0:
		result[2] = 'Draw.'
	elif int(p_input) < e_select and special == 0:
		result[1] += 1
		result[2] = 'You Lose...'
	else:
		result[2] = 'Draw.'
	return result

"""
最終結果をセットする
param first 1戦目の勝敗結果
param second 2戦目の勝敗結果
return result 最終結果の配列
"""
def setResultFinal(first, second):
	result = [0,0,'']
	result[0] = first[0] + second[0]
	result[1] = first[1] + second[1]
	if result[0] > result[1]:
		result[2] = 'Congratulations! You Win!'
	elif result[0] == result[1]:
		result[2] = 'Unfortunately, it was a draw.'
	elif result[0] < result[1]:
		result[2] = 'Too bad it\'s your loss.'
	else:
		result[2] = 'Too bad it\'s your loss.'
	return result

"""
特殊勝利の定義
param p_input プレイヤーの手札
param e_select エネミーの手札
return special 以下の値
	該当しない：0
	プレイヤーの勝利：1
	エネミーの勝利：2
"""
def specialWin(p_input, e_select):
	special = 0
	if int(p_input) == 1 and e_select == 12:
		special = 1
	elif int(p_input) == 12 and e_select == 1:
		special = 2
    else:
		special = 0
	return special
 
```
### ◆◆◆次の展望◆◆◆
Tkinterで画面を作成して、カード（トランプ）を表示させたい