まずは Python で簡単なカードゲームを作成する
【ゲームの仕様】
1.プレイヤーとエネミーの手札(1~12)をランダムに3つ生成する
2.プレイヤーから入力(手札の選択)を受け付ける
3.選択された手札とエネミーがランダムに選択する手札で勝負する
4.高い数字の手札を出した方が勝利する
5. 1は12に勝利する
6.勝負を2回繰り返し、勝利数の多い方がゲームの勝者となる
実行するPythonファイル
◆コンセプト
実行モジュールからはロジックを排除し、上から下へ実行していくだけにする
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)
◆コンセプト
ロジックはここに集約し、探しやすいように関数名の昇順で定義する
"""
関数定義
"""
import random
"""
手札情報を削除する
param number 削除する数字
param arr 削除先の配列
return arr 削除後の配列
"""
def deleteNumber(number, arr):
arr.remove(number)
return arr
"""
手札の初期化
return arr 数字が3つ入った配列
"""
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で画面を作成して、カード(トランプ)を表示させたい