カタン、Pythonでは?―― マップできた
で、マップであるが、とりあえず、下のような形になった。
import numpy as np import pygame import numpy.random as nr import random import csv t1 = [0,1,1,1,2,2,2,2,3,3,3,4,4,4,4,5,5,5,5] p1 = [5,2,6,3,8,10,9,12,11,4,8,10,9,4,5,6,3,11] random.shuffle(t1) print(t1) j = t1.index(0) print(j) p1.insert(j, 0) print(p1) # 各タイルの位置を示したファイル"dataR5.csv"を読み込む tt2 = np.loadtxt(fname='dataR5.csv', dtype=float, delimiter=",", skiprows=1) tt22 = tt2.tolist() print(tt22) tt3 = np.loadtxt(fname='dataR6.csv', dtype=float, delimiter=",", skiprows=1) tt33 = tt3.tolist() print(tt33) # シートの大きさ WIDTH = 1280 HEIGHT = 720 GRAY = (237, 237,237) pygame.init() screen = pygame.display.set_mode((WIDTH, HEIGHT)) myclock = pygame.time.Clock() screen.fill(GRAY) for t11, tt21 in zip(t1, tt22): t12 = "Tile{}.png".format(t11) t13 = pygame.image.load(t12) screen.blit(t13,tt21) pygame.display.flip() endflag = 0 for p11, t31 in zip(p1, tt33): p12 = "To{}.png".format(p11) t32 = pygame.image.load(p12) screen.blit(t32, t31) pygame.display.flip() endflag = 0 p11 = pygame.image.load("Po31.png") p10 = pygame.image.load("Po32.png") p12 = pygame.image.load("Po2.png") p13 = pygame.image.load("Po4.png") p14 = pygame.image.load("Po6.png") p15 = pygame.image.load("Po8.png") p16 = pygame.image.load("Po10.png") screen.blit(p11, (490, 99)) screen.blit(p11, (490, 563)) screen.blit(p11, (890, 331)) screen.blit(p10, (788, 187)) screen.blit(p12, (635,94)) screen.blit(p13, (385, 239)) screen.blit(p14, (385, 413)) screen.blit(p15, (635, 558)) screen.blit(p16, (785, 471)) pygame.display.flip() endflag = 0 while endflag == 0: for event in pygame.event.get(): if event.type == pygame.QUIT: endflag = 1 myclock.tick(60) pygame.quit()
これまでやってきたやり方からは、けっこう変わっている。
タイル(資源の種類)は正六角形をpygameのpolygonで描くのではなく、前もって作っておいた6種類の絵で表示。トークン(生産力)、港も同じ。タイル、トークン、港の位置を示したファイルも別に用意して、マップを描くごとに読み込む。後は、タイルの順番をランダムにして、砂漠の位置に応じてトークンの中にゼロを挿入する。
出来たのがこの図。
けっこう綺麗に見える。
とはいうものの、これでは一人カタンさえできない。家を建てたり、道を引いたり。どのようにして指定するか。楽しめるレベルに到達するのは、まだまだ先だ、、、