2020年04月29日
ゲームAI パターン
pygameで作ったスカッシュに
敵をつくり、非常に単純な動作を与えました。
右から左に動きながら、画面の端っこに着いたら、
折り返すだけです。
1回くらいしか、ボールを返せません。
敵をつくり、非常に単純な動作を与えました。
右から左に動きながら、画面の端っこに着いたら、
折り返すだけです。
1回くらいしか、ボールを返せません。
#!usr/bin/env python3
#coding:utf-8
import pygame
from pygame.locals import*
import sys
SCR_RECT=Rect(0,0,480,640)
class BarSprite(pygame.sprite.Sprite):
def __init__(self,filename,x,y,vx,vy):
pygame.sprite.Sprite.__init__(self,self.containers)
self.image=pygame.image.load(filename).convert_alpha()
width=self.image.get_width()
height=self.image.get_height()
self.rect=Rect(x,y,width,height)
self.vx=vx
self.vy=vy
def update(self):
pressed_keys=pygame.key.get_pressed()
if pressed_keys[pygame.K_RIGHT]:
self.rect.move_ip(self.vx,self.vy)
if pressed_keys[pygame.K_LEFT]:
self.rect.move_ip(-self.vx,self.vy)
self.rect.clamp_ip(SCR_RECT)
class BallSprite(pygame.sprite.Sprite):
def __init__(self,filename,x,y,vx,vy,bar,enemy):
pygame.sprite.Sprite.__init__(self,self.containers)
self.image=pygame.image.load(filename).convert_alpha()
width=self.image.get_width()
height=self.image.get_height()
self.rect=Rect(x,y,width,height)
self.vy=vy
self.vx=vx
self.bar=bar
self.enemy=enemy
def update(self):
self.rect.move_ip(self.vx,self.vy)
if self.rect.left<0 or self.rect.right>SCR_RECT.width:
self.vx=-self.vx
if self.rect.top<SCR_RECT.top:
self.kill()
if self.rect.colliderect(self.bar.rect) or self.rect.colliderect(self.enemy.rect)>0:
self.vy=-self.vy
if self.rect.bottom>SCR_RECT.bottom:
self.kill()
class EnemySprite(pygame.sprite.Sprite):
def __init__(self,filename,x,y,vx,vy):
pygame.sprite.Sprite.__init__(self,self.containers)
self.image=pygame.image.load(filename).convert_alpha()
width=self.image.get_width()
height=self.image.get_height()
self.rect=Rect(x,y,width,height)
self.vy=vy
self.vx=vx
def update(self):
self.rect.move_ip(self.vx,self.vy)
#画面の端っこに着いたら折り返す
if self.rect.right>SCR_RECT.width or self.rect.left<0:
self.vx=-self.vx
self.rect.clamp_ip(SCR_RECT)
def main():
pygame.init()
screen=pygame.display.set_mode(SCR_RECT.size)
pygame.display.set_caption(u"トレーニング")
balls=pygame.sprite.Group()
group=pygame.sprite.RenderUpdates()
BarSprite.containers=group
EnemySprite.containers=group
BallSprite.containers=group,balls
bar=BarSprite("bar.png",240,600,10,0)
enemy=EnemySprite("bar.png",89,20,9,0)
ball1=BallSprite("ball.png",89,100,9,9,bar,enemy)
ball2=BallSprite("ball.png",340,100,-5,5,bar,enemy)
ball3=BallSprite("ball.png",90,150,-7,6,bar,enemy)
ball4=BallSprite("ball.png",0,100,-5,5,bar,enemy)
clock=pygame.time.Clock()
while True:
clock.tick(60)
screen.fill((0,0,0))
group.update()
group.draw(screen)
pygame.display.update()
if len(balls.sprites())==0:
main()
for event in pygame.event.get():
if event.type==QUIT:sys.exit()
if __name__=="__main__":
main()
【このカテゴリーの最新記事】
-
no image