スプラトゥーンがすばらしすぎて、少し作ってみることにしました。
おそらく「千里の道の一歩」より 遥かに短い一歩と思います。
最初は画面設計まで
次にランダムにマップを作り 壁(黒)以外に塗った面積が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()