カタン、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種類の絵で表示。トークン(生産力)、港も同じ。タイル、トークン、港の位置を示したファイルも別に用意して、マップを描くごとに読み込む。後は、タイルの順番をランダムにして、砂漠の位置に応じてトークンの中にゼロを挿入する。
出来たのがこの図。
f:id:chamcham5628:20201011231809p:plain

けっこう綺麗に見える。

とはいうものの、これでは一人カタンさえできない。家を建てたり、道を引いたり。どのようにして指定するか。楽しめるレベルに到達するのは、まだまだ先だ、、、