LoginSignup
0
0

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

Last updated at Posted at 2024-04-05

まずは 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で画面を作成して、カード(トランプ)を表示させたい

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0