fork download
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4.  
  5. # 街コロ+ブロックス簡易2Dゲーム
  6.  
  7.  
  8. import random
  9. import numpy as np
  10. import collections
  11. from pprint import pprint
  12.  
  13. # サイコロの準備
  14. Dice=[i for i in range(1,12)]
  15.  
  16. l=[
  17. ['0', '0', '0', '0', '0', '0', '0', '0', '0'],
  18. ['0', '0', '0', '0', '0', '0', '0', '0', '0'],
  19. ['0', '0', '0', '0', '0', '0', '0', '0', '0'],
  20. ['0', '0', '0', '0', 'A', '0', '0', '0', '0'],
  21. ['0', '0', '0', 'B', '0', 'D', '0', '0', '0'],
  22. ['0', '0', '0', '0', 'C', '0', '0', '0', '0'],
  23. ['0', '0', '0', '0', '0', '0', '0', '0', '0'],
  24. ['0', '0', '0', '0', '0', '0', '0', '0', '0'],
  25. ['0', '0', '0', '0', '0', '0', '0', '0', '0']]
  26.  
  27. # ターン 回数識別用
  28. Times=0
  29.  
  30. # 最終目標 必要ないかも
  31. Final_Goal=250
  32. # 誰が目的を達成したか判定用 配列
  33. Final_Goal_Flag=[0,0,0,0]
  34.  
  35.  
  36. # ユーザー情報 ポイント
  37. USE=[50,50,50,50]
  38.  
  39. # 回転済み ブロック
  40. Warehouse_Slot=[[[['1', '0', '0'], ['0', '0', '0'], ['0', '0', '0']], [['0', '0', '1'], ['0', '0', '0'], ['0', '0', '0']], [['0', '0', '0'], ['0', '0', '0'], ['0', '0', '1']], [['0', '0', '0'], ['0', '0', '0'], ['1', '0', '0']]], [[['2', '2', '0'], ['0', '0', '0'], ['0', '0', '0']], [['0', '0', '2'], ['0', '0', '2'], ['0', '0', '0']], [['0', '0', '0'], ['0', '0', '0'], ['0', '2', '2']], [['0', '0', '0'], ['2', '0', '0'], ['2', '0', '0']]], [[['2', '0', '2'], ['0', '0', '0'], ['0', '0', '0']], [['0', '0', '2'], ['0', '0', '0'], ['0', '0', '2']], [['0', '0', '0'], ['0', '0', '0'], ['2', '0', '2']], [['2', '0', '0'], ['0', '0', '0'], ['2', '0', '0']]], [[['2', '0', '0'], ['0', '2', '0'], ['0', '0', '0']], [['0', '0', '2'], ['0', '2', '0'], ['0', '0', '0']], [['0', '0', '0'], ['0', '2', '0'], ['0', '0', '2']], [['0', '0', '0'], ['0', '2', '0'], ['2', '0', '0']]], [[['0', '3', '0'], ['3', '3', '3'], ['0', '0', '0']], [['0', '3', '0'], ['0', '3', '3'], ['0', '3', '0']], [['0', '0', '0'], ['3', '3', '3'], ['0', '3', '0']], [['0', '3', '0'], ['3', '3', '0'], ['0', '3', '0']]], [[['3', '3', '0'], ['3', '0', '0'], ['0', '0', '0']], [['0', '3', '3'], ['0', '0', '3'], ['0', '0', '0']], [['0', '0', '0'], ['0', '0', '3'], ['0', '3', '3']], [['0', '0', '0'], ['3', '0', '0'], ['3', '3', '0']]], [[['0', '5', '0'], ['0', '5', '0'], ['5', '5', '5']], [['5', '0', '0'], ['5', '5', '5'], ['5', '0', '0']], [['5', '5', '5'], ['0', '5', '0'], ['0', '5', '0']], [['0', '0', '5'], ['5', '5', '5'], ['0', '0', '5']]], [[['6', '6', '0'], ['6', '0', '0'], ['6', '6', '0']], [['6', '6', '6'], ['6', '0', '6'], ['0', '0', '0']], [['0', '6', '6'], ['0', '0', '6'], ['0', '6', '6']], [['0', '0', '0'], ['6', '0', '6'], ['6', '6', '6']]], [[['0', '7', '7'], ['7', '7', '0'], ['7', '0', '0']], [['7', '7', '0'], ['0', '7', '7'], ['0', '0', '7']], [['0', '0', '7'], ['0', '7', '7'], ['7', '7', '0']], [['7', '0', '0'], ['7', '7', '0'], ['0', '7', '7']]]]
  41. # ブロックの費用と報酬
  42. Warehouse_Slot_Bloku=[1,4,4,4,12,12,25,30,35]
  43.  
  44.  
  45.  
  46.  
  47. # サイコロの値
  48. def Sample_Demo_New_Bloku_Random_Number():
  49. global Dice
  50. return random.choice(Dice)
  51.  
  52.  
  53.  
  54. # x=座標x y=座標y z=埋め込む配列 Warehouse_Slot[][] ,xyz=0,1,2,3ユーザー識別
  55. def Sample_Demo01(x,y,z,xyz):
  56.  
  57. # ポイントからブロック費用 購入処理
  58. for k,v in enumerate(Warehouse_Slot):
  59. for i in v:
  60. if i==z:
  61. if USE[xyz]-Warehouse_Slot_Bloku[k]>=0:
  62. USE[xyz]-=Warehouse_Slot_Bloku[k]
  63. else:
  64. return 0
  65.  
  66.  
  67.  
  68. # ユーザー識別用 IDの付与
  69. Local_Block=z
  70. Local_Block2=[]
  71. Local_Block3=[]
  72. for i in Local_Block:
  73. for j in i:
  74. if '0'==j:
  75. Local_Block2.append(j)
  76. else:
  77. if xyz==0:
  78. j='A'+j
  79. Local_Block2.append(j)
  80. elif xyz==1:
  81. j='B'+j
  82. Local_Block2.append(j)
  83. elif xyz==2:
  84. j='C'+j
  85. Local_Block2.append(j)
  86. elif xyz==3:
  87. j='D'+j
  88. Local_Block2.append(j)
  89. Local_Block2=list(zip(*[iter(Local_Block2)]*3))
  90. for i in Local_Block2:Local_Block3.append(list(i))
  91. #pprint(Local_Block3)
  92.  
  93.  
  94.  
  95.  
  96. # MAPへの配置
  97. for i_r, i_l in enumerate(range(x, min((x+3, 9)))):
  98. for j_r, j_l in enumerate(range(y, min((y+3, 9)))):
  99. if l[j_l][i_l]=='0':
  100. l[j_l][i_l]=Local_Block3[j_r][i_r]
  101. else:
  102. # ユーザー別 初回のみ座標
  103. if l[j_l][i_l]=='A':
  104. l[3][4]#A
  105. elif l[j_l][i_l]=='B':
  106. l[4][3]#B
  107. elif l[j_l][i_l]=='C':
  108. l[5][4]#C
  109. elif l[j_l][i_l]=='D':
  110. l[4][5]#D
  111. # pass
  112. else:
  113. pass
  114.  
  115.  
  116. return l
  117.  
  118.  
  119.  
  120.  
  121.  
  122. # 各MAP要素の合計
  123. def Sample_Demo_New_Bloku_Initialization(xyz):
  124. c=[]
  125. for i in range(len(xyz)):
  126. c.append(collections.Counter(xyz[i]))
  127. for j in range(len(c)-1):
  128. c[0]+=c[j+1]
  129. return c[0]
  130.  
  131.  
  132.  
  133.  
  134. # ブロックの中央座標から隣接マスの取得
  135. INDEX01=[]
  136. INDEX02=[]
  137. # ブロックの置ける中央座標を取得
  138. def Sample_Demo00_index01(xyz):
  139. for k,v in enumerate(l):
  140. if xyz in v:INDEX01.append([k,v.index(xyz)])
  141. Sample_Demo00_index02()
  142. # ブロックの置ける周囲座標を取得
  143. def Sample_Demo00_index02():
  144. global INDEX01
  145. INDEX02.append([[INDEX01[0][0]-1,INDEX01[0][1]-1],[INDEX01[0][0]-1,INDEX01[0][1]],[INDEX01[0][0]-1,INDEX01[0][1]+1],[INDEX01[0][0],INDEX01[0][1]-1],INDEX01[0],[INDEX01[0][0],INDEX01[0][1]+1],[INDEX01[0][0-1],INDEX01[0][1]-1],[INDEX01[0][0]+1,INDEX01[0][1]],[INDEX01[0][0]+1,INDEX01[0][1]+1]])
  146.  
  147.  
  148.  
  149.  
  150. # MAPの再編集 計算用
  151. def Sample_Demo02(x):
  152. global l
  153. Re_Edit=[]
  154. for i in x:
  155. for j in i:
  156. if j=='0':Re_Edit.append(j)
  157. elif len(j)==2:Re_Edit.append([j[0],int(j[1])])
  158. elif len(j)==3:Re_Edit.append([j[0],int(j[1])+int(j[2])])
  159. Re_Edit=list(zip(*[iter(Re_Edit)]*9))
  160. return Re_Edit
  161.  
  162.  
  163.  
  164. # 取得するポイントの取得 NG
  165. def Sample_Demo03(xyz):
  166. global Nasa
  167. # 一時保留倉庫
  168. Nasa=[0,0,0,0]
  169.  
  170. # MAPに配置されてるブロック別 ポイント取得
  171. Hangout=Sample_Demo_New_Bloku_Initialization(xyz)
  172. pprint(Hangout)
  173.  
  174.  
  175.  
  176. # 1つずつチェック
  177. def Only_One(xyz):
  178. global Nasa
  179. # 一時保留倉庫
  180. Nasa=[0,0,0,0]
  181.  
  182. # MAPに配置されてるブロック別 ポイント取得
  183. Hangout=Sample_Demo_New_Bloku_Initialization(xyz)
  184. #pprint(Hangout)
  185.  
  186. for i in Hangout:
  187. if i=='0' or i=='A' or i=='B' or i=='C' or i=='D':
  188. pass
  189. else:
  190. if 'A' in i:
  191. if len(i)==2:
  192. Nasa[0]+=int(i[1])*Hangout[i]
  193. elif len(i)==3:
  194. Nasa[0]+=int(str(i[1])+str(i[2]))*Hangout[i]
  195. elif 'B' in i:
  196. if len(i)==2:
  197. Nasa[1]+=int(i[1])*Hangout[i]
  198. elif len(i)==3:
  199. Nasa[1]+=int(str(i[1])+str(i[2]))*Hangout[i]
  200. elif 'C' in i:
  201. if len(i)==2:
  202. Nasa[2]+=int(i[1])*Hangout[i]
  203. elif len(i)==3:
  204. Nasa[2]+=int(str(i[1])+str(i[2]))*Hangout[i]
  205. elif 'D' in i:
  206. if len(i)==2:
  207. Nasa[3]+=int(i[1])*Hangout[i]
  208. elif len(i)==3:
  209. Nasa[3]+=int(str(i[1])+str(i[2]))*Hangout[i]
  210. else:
  211. pass
  212. #print(i,Hangout[i])
  213.  
  214. # for k,v in enumerate(Nasa):
  215. # USE[k]+=int(v)
  216.  
  217.  
  218.  
  219.  
  220.  
  221. import numpy as np
  222. # 誰のターン A1,B2,C3,D0
  223. Whose_thing=[1,2,3,0]
  224.  
  225. # 右に1要素分ずらす
  226. def Rotation(Rotating_Objects):
  227. global Whose_thing
  228. xx1=np.array(Whose_thing)
  229. Whose_thing=xx1.tolist()
  230.  
  231.  
  232.  
  233. # MAP上の点数計算
  234. def Sample_Demo04():
  235. # 小屋
  236. if Times%4==Whose_thing[0] or Times%4==Whose_thing[1] or Times%4==Whose_thing[2] or Times%4==Whose_thing[3] and Sample_Demo_New_Bloku_Random_Number==1:
  237. Only_One(l)
  238.  
  239. # 家
  240. if Times%4==Whose_thing[0] and Sample_Demo_New_Bloku_Random_Number==2:
  241. Only_One(l)
  242.  
  243. # 倉庫
  244. if Times%4==Whose_thing[1] and Sample_Demo_New_Bloku_Random_Number==3:
  245. Only_One(l)
  246.  
  247. # パン屋
  248. if Times%4==Whose_thing[0]:pass
  249. elif Times%4==Whose_thing[1] or Times%4==Whose_thing[2] or Times%4==Whose_thing[3] and Sample_Demo_New_Bloku_Random_Number==4:
  250. Only_One(l)
  251.  
  252. # 豪邸
  253. if Times%4==Whose_thing[0] and Sample_Demo_New_Bloku_Random_Number==5:
  254. Only_One(l)
  255.  
  256. # 喫茶店
  257. if Times%4==Whose_thing[0]:pass
  258. elif Times%4==Whose_thing[1] or Times%4==Whose_thing[2] or Times%4==Whose_thing[3] and Sample_Demo_New_Bloku_Random_Number==6:
  259. Only_One(l)
  260.  
  261. # 農園
  262. if Times%4==Whose_thing[0] and Sample_Demo_New_Bloku_Random_Number==7:
  263. Only_One(l)
  264.  
  265. # 工場
  266. if Times%4==Whose_thing[0]:pass
  267. elif Times%4==Whose_thing[1] or Times%4==Whose_thing[2] or Times%4==Whose_thing[3] and Sample_Demo_New_Bloku_Random_Number==8:
  268. Only_One(l)
  269.  
  270. # 資源[農園工場]
  271. if Times%4==Whose_thing[0] or Times%4==Whose_thing[1] or Times%4==Whose_thing[2] or Times%4==Whose_thing[3] and Sample_Demo_New_Bloku_Random_Number==9:
  272. Only_One(l)
  273.  
  274.  
  275. def MIKI():
  276. print()
  277. # ユーザーポイント 皆
  278. print('ユーザーポイント [','A',USE[0],'','B',USE[1],'','C',USE[2],'','D',USE[3],']')
  279.  
  280. # ユーザーが置ける範囲のindexを取得
  281.  
  282. # ユーザー入力
  283. Coffee=list(map(int,input().split()))
  284. #print(Coffee)# 2 3 2 1
  285.  
  286. # ブロックの置ける場所がindexに含まれるか
  287. for i in INDEX02:
  288. try:
  289. try:i.index([Coffee[0], Coffee[1]])
  290. except IndexError:pass
  291. # ブロックを置く ユーザーID
  292. try:pprint(Sample_Demo01(Coffee[0],Coffee[1],Warehouse_Slot[Coffee[2]][Coffee[3]],Times%4==1))
  293. except IndexError:pass
  294. except (SyntaxError,ValueError):pass
  295. # 点数計算
  296. Sample_Demo04()
  297. # 点数計算を横にズラす
  298. Rotation(Whose_thing)
  299.  
  300. # ポイント取得 仮
  301. Sample_Demo03(l)
  302. # 表示
  303. print('ABCD 仮ポイント',Nasa)
  304. print('サイコロの値',Sample_Demo_New_Bloku_Random_Number())
  305. print()
  306.  
  307.  
  308.  
  309. while 250>=USE[0] or 250>=USE[1] or 250>=USE[2] or 250>=USE[3]:
  310. if USE[0]>=250:
  311. print('END',USE[0])
  312. elif USE[1]>=250:
  313. print('END',USE[1])
  314. elif USE[2]>=250:
  315. print('END',USE[2])
  316. elif USE[3]>=250:
  317. print('END',USE[3])
  318. # ターン処理
  319. Times+=1
  320.  
  321. # Aユーザー
  322. if Times%4==1:
  323. # ユーザーが置ける範囲のindexを取得
  324. Sample_Demo00_index01('A')
  325. MIKI()
  326.  
  327. # Bユーザー
  328. elif Times%4==2:
  329. Sample_Demo00_index01('B')
  330. MIKI()
  331. # Cユーザー
  332. elif Times%4==3:
  333. Sample_Demo00_index01('C')
  334. MIKI()
  335. # Dユーザー
  336. elif Times%4==0:
  337. Sample_Demo00_index01('D')
  338. MIKI()
  339.  
  340.  
Runtime error #stdin #stdout #stderr 0.14s 24804KB
stdin
Standard input is empty
stdout
ユーザーポイント [ A 50  B 50  C 50  D 50 ]
stderr
Traceback (most recent call last):
  File "./prog.py", line 325, in <module>
  File "./prog.py", line 283, in MIKI
EOFError: EOF when reading a line