0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

$GREEDを作ってみた

Last updated at Posted at 2018-12-26

作ってみてどうだった?

別に難しいことはしておらず、むしろ単純なほどだったのですがバグ潰しが大変でした。
今までのコーディング経験の中で、…一番簡単だったと思います。まぁそもそも完成させたものが少ないので。

$GREEDのルールについてはプログラムと関係ないので、割愛します。

コード

import random

def game_set():
	number_of_player = ""

	while not isinstance(number_of_player,int):
		i = input("プレイヤー数:")
		if len(i)==0:
			continue
		if len(set(tuple(i)) - {"0","1","2","3","4","5","6","7","8","9"}):
			print("数字を入力してください。")			
		else:
			number_of_player = int(i)

	player_names = []
	for i in range(number_of_player):
		n = input("PL" + str(i+1) + "のプレイヤー名:")
		if n == "":
			n = "PL" + str(i+1)
		player_names.append(n)

	player_point_dates = {name:0 for name in player_names}
	return player_names,player_point_dates

def roll(number_of_dice):
	return [random.randint(1,6) for i in range(number_of_dice)]

def search_role(rolled_dice):
	#role (six of a kind,$GREeD,DDDD,$$$,GGG,RRR,EEE,eee,D,G)
	roles = [0,0,0,0,0,0,0,0,0,0]
	roll=[0,0,0,0,0,0]
	for i in rolled_dice:
		roll[i-1] += 1
	
	if len(set(rolled_dice)) == 1 and len(rolled_dice) == 6:
		roles[0] += 1
	elif len(set(rolled_dice)) == 6:
		roles[1] += 1
	else:
		roles[4] = roll[1]//3
		roles[9] = roll[1]%3
		roles[2] = roll[5]//4
		roles[8] = roll[5]%4
		roles[3] = roll[0]//3
		roles[5] = roll[2]//3
		roles[6] = roll[3]//3
		roles[7] = roll[4]//3
	role = sum(roles)
	return role,roles

def one_round(PL="",point = 0):
	#six of a kind
	#$GREeD
	
	#DDDD #$$$ #GGG #RRR #EEE #eee #D #G
	PL = PL + ":"

	name_of_role = ("six of a kind","$GREeD","DDDD","$$$","GGG","RRR","EEE","eee","D","G")
	dice_of_role = (6,6,4,3,3,3,3,3,1,1)
	point_of_role = (5000,1000,1000,600,500,400,300,300,100,50)
	
	dice = 6
	conv = {1:"$",2:"G",3:"R",4:"E",5:"e",6:"D"}
	vnoc = {"$":1,"G":2,"R":3,"E":4,"e":5,"D":6}
	while True:
		dice_roll = roll(dice)
		print(PL," ".join([conv[i] for i in dice_roll]))
		role,roles = search_role(dice_roll)

		if not role:#Break?
			print(PL,"GREED OUT")
			print(PL,"0")
			print(PL,"break!")
			input("=====oh!=====")
			break


		if dice == sum([i1 * i2 for i1,i2 in zip(dice_of_role,roles)]):#all?
			print(PL,"role:"," ".join([" ".join([i2]*i1) for i1,i2 in zip(roles,name_of_role)]))
			print(PL,"again!")
			point += sum([i1 * i2 for i1,i2 in zip(point_of_role,roles)])
			input(PL + " total: " + str(point)+"pt")
			print("=====")
			continue


		get = input(PL + " get:")
		if get == "all":
			point += sum([i1 * i2 for i1,i2 in zip(point_of_role,roles)])
			dice -= sum([i1 * i2 for i1,i2 in zip(dice_of_role,roles)])
			input(PL + " total: " + str(point)+"pt")
			print("=====")
		else:
			get = [vnoc[i] for i in get if i in ("$","G","R","E","e","D")][:7]
			get_ = []
			for i in get:
				if i in dice_roll:
					dice_roll.remove(i)
					get_.append(i)
			role,roles = search_role(get_)
			if role:
				point += sum([i1 * i2 for i1,i2 in zip(point_of_role,roles)])
				dice -= sum([i1 * i2 for i1,i2 in zip(dice_of_role,roles)])
			input(PL + " total:" + str(point)+"pt")
			print("=====")


		while True:
			again = input(str(PL) + " roll dice again?(y/n):")
			if again in ["y","n"]:
				break
			else:
				print(PL,"write \"n\" or \"y\".")
		print("-----")
		if again == "n":
			break

	return point

def main():
	PLname,PLpoint = game_set()
	BREAK = None
	while True:
		for i in PLname:
			if i == BREAK:
				return PLname,PLpoint
			PLpoint[i] = one_round(i,PLpoint[i])
			
			print("==== player points ====")
			print(" ".join([":".join([str(i) for i in i]) for i in tuple(PLpoint.items())]))
			print("=======================")

			BREAK = ([i for i in tuple(PLpoint.keys()) if PLpoint[i] > 5000]+[None])[0]
	return PLpoint
main()

main()関数は何のため?

自分でもわかりません…

0
0
3

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?