アフィリエイト広告を利用しています

広告

posted by fanblog

2020年04月29日

ゲームAI パターン

pygameで作ったスカッシュに
敵をつくり、非常に単純な動作を与えました。

右から左に動きながら、画面の端っこに着いたら、
折り返すだけです。

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

検索

私が見た動画紹介コーナー

素敵です

プロフィール
もう一人の自分さんの画像
もう一人の自分
好きなことを仕事にしなかった
プロフィール
最新記事
カテゴリーアーカイブ
ファン
写真ギャラリー
×

この広告は30日以上新しい記事の更新がないブログに表示されております。