パーソナルブログメモリ

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

スプらしいものに挑戦

2020-02-11 | pygame

スプラトゥーンがすばらしすぎて、少し作ってみることにしました。

おそらく「千里の道の一歩」より 遥かに短い一歩と思います。

 

 

最初は画面設計まで

 

 

 

次にランダムにマップを作り 壁(黒)以外に塗った面積が50%を越えたら終了を追加

脳内ではレギュラーマッチで遊んでいる時の音楽が流れています。

 

これにエージェントを作って、なにかしらAIを作って対戦させてみようかな。

 

 

作成環境

ubuntu 18.04

python 3.7.5

pygame 1.9.6

 

 

 

ソースリスト

#スプラしい
import pygame,random
from itertools import product
from pygame.locals import *
screen = pygame.display.set_mode((900, 600))
bd = [["#" for x in range(300)] for y in range(200)] #ゲームボード(boardの略)
col=[(0,100,0),(0,250,200),(255,200,0)] #色 空間:緑 チーム1:水色 チーム2:黄色
ri=random.randint
def stageMake(): #対称になるように空間を空けます
    x,y,r=ri(0, 299),ri(0, 199),ri(30, 50)
    circle(x,y,r,"0","a");circle(299-x,199-y,r,"0","a")
def main():
    for i in range(8):stageMake()
    gameOver=0 #どちらかが50%超えるとゲーム終了とします
    while (1):
        if gameOver==0:
            for i in range(4):ikaDraw()
            screen.fill((0,0,0))
            s1,s2=mapWrite()
            text(40,40,"SPRASII",100,(255,255,255))
            text(540,540,"cyan:"+str(s1)+" vs "+"yellow:"+str(s2),40,(255,100,100))
            if s1>50 or s2>50:gameOver=1
            pygame.display.update()
        for event in pygame.event.get(): #pygameお決まりの処理です
            if event.type == pygame.QUIT:pygame.quit();quit()
def mapWrite(): #bdの値によって色をつけます 同時に色によってスコアを計算します
    score=[0,0,0]
    for x,y in product(range(300),range(200)):
        if bd[y][x]!="#":
            score[int(bd[y][x])]+=1
            pygame.draw.rect(screen, col[int(bd[y][x])], Rect(x*3,y*3,3,3))
    return round(score[1]*100/sum(score),1),round(score[2]*100/sum(score),1)
def ikaDraw(): #適当な位置と大きさで円を塗ります
    for i in "12":circle(ri(0,299),ri(0,199),ri(5,10),i)
def circle(sx,sy,r,s,o="#"): #円を塗ります oは塗らない条件です
    r2=r*r
    for x,y in product(range(sx-r,sx+r+1),range(sy-r,sy+r+1)):
     if 0<=x<300 and 0<=y<200 and (sx-x)**2+(sy-y)**2<=r2 and bd[y][x]!=o:bd[y][x]=s
def text(x,y,txt,size,c):
    screen.blit(pygame.font.Font(None, size).render(txt, True,c), [x, y])
pygame.init();main();pygame.quit();quit()

 


最新の画像もっと見る

コメントを投稿

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