パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

pythonゲームコーディング10時間目 それっぽいMAPを作る

2017-08-17 | pygame
前回ランダムマップだったので今回少しまともなマップにしてみます。

画像をドット解析してマップを作ってみました。

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()



最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。