前回ランダムマップだったので今回少しまともなマップにしてみます。
画像をドット解析してマップを作ってみました。
bg.png
kure.png
画像をドット解析してマップを作ってみました。
bg.png
kure.png
#!/usr/bin/python # -*- coding: utf-8 -*- import pygame from pygame.locals import * import random import numpy as np pygame.init() window_size = (640, 480) bg_color = (0, 0, 0) clock = pygame.time.Clock() screen = pygame.display.set_mode(window_size) img_char = pygame.image.load('bg.png') img_map = pygame.image.load('kure.png') spimg = [] bgx=0 bgy=0 mapdata = np.array([0 for y in range(400*400)]) mapcolor = [] mapcolor.append(Color(125,255,255)) mapcolor.append(Color(200,255,200)) mapcolor.append(Color(220,220,220)) mapcolor.append(Color(120,0,0)) mapcolor.append(Color(255,255,255)) def nearcolorno(c): ret=0 best=1000 for n in range(5): l=abs(mapcolor[n].r-c.r)+abs(mapcolor[n].g-c.g)+abs(mapcolor[n].b-c.b) if l<best: ret=n best=l return ret def bgmake(): sx=100 sy=50 for x in range(400): for y in range(400): col = img_map.get_at((x+sx,y+sy)) mapdata[x+y*400]=nearcolorno(col) def spset(): for y in range(10): for x in range(10): temp = pygame.Surface((16, 16), pygame.SRCALPHA) temp.blit(img_char, (0, 0), (x * 16, y * 16, 16, 16)) spimg.append(temp) def bgwrite(bx,by): for x in range(40): for y in range(30): if mapdata[x+bx+(y+by)*400]>=0: screen.blit(spimg[mapdata[x+bx+(y+by)*400]], (x*16, y*16)) def spwrite(cn,x,y): screen.blit(spimg[cn], (x*16, y*16)) spset() bgmake() pygame.key.set_repeat (30, 30) end_game = False cn=10 while not end_game: for event in pygame.event.get(): if event.type == pygame.QUIT: end_game = True if event.type == KEYDOWN: if event.key == K_LEFT: if bgx>0: bgx -= 1 if event.key == K_RIGHT: if bgx<400-40: bgx += 1 if event.key == K_UP: if bgy>0: bgy -= 1 if event.key == K_DOWN: if bgy<400-30: bgy += 1 screen.fill(bg_color) bgwrite(bgx,bgy) cn += 1 if cn>11: cn=10 spwrite(cn,20,15) pygame.display.flip() clock.tick(50) pygame.quit() quit()