プレイ方法
1.下記のURLからPythonをダウンロードする。
2.IDLEというソフトを開きFile>>New Fileと選択し開いたページに下記のコードをペーストする。
3.IDLEのFile>>Saveを選択し適当に名前を付ける。
4.コードをペーストしたページを選択しRun>>Run Moduleを選択を選択するとプレイできます。
ゲーム操作方法
方向キー左右で移動しスペースを押す度に玉が出ます。敵を倒すと20点敵を逃すと減点敵と当たるとゲームオーバーです。
コード
import pygame
import random
import sys
import math
pygame.init()
WIDTH=800
HEIGHT=600
screen=pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption("Pygameシューティング! 撃ちまくっれ!")
BLACK=(0,0,0)
WHITE=(255,255,255)
BLUE=(50,150,255)
RED=(255,50,50)
YELLOW=(255,255,0)
GREEN=(50,200,50)
PURPLE=(150,50,200)
font_large=pygame.font.SysFont("malgungothic",50,bold=True)
font_small=pygame.font.SysFont("malgungothic",30)
font_score=pygame.font.SysFont("malgungothic",24)
clock=pygame.time.Clock()
class Bullet:
def __init__(self,x,y,speed=10):
self.x=x
self.y=y
self.speed=speed
self.size=5
self.color=YELLOW
def update(self):
self.y-=self.speed
def draw(self,screen):
pygame.draw.circle(screen,self.color,(int(self.x),int(self.y)),self.size)
class Enemy:
def __init__(self):
self.x=random.randint(0,WIDTH-40)
self.y=-50
self.width=40
self.height=40
self.speed=random.randint(2,5)
self.color=RED
def update(self):
self.y+=self.speed
self.x+=math.sin(self.y*0.02)*2
def draw(self,screen):
pygame.draw.rect(screen,self.color,(self.x,self.y,self.width,self.height))
pygame.draw.circle(screen,WHITE,(int(self.x+8),int(self.y+10)),4)
pygame.draw.circle(screen,WHITE,(int(self.x+28),int(self.y+10)),4)
class Player:
def __init__(self):
self.x=WIDTH//2-25
self.y=HEIGHT-80
self.width=50
self.height=50
self.speed=7
self.color=BLUE
self.shoot_delay=0
self.max_delay=10
def update(self,keys):
if keys[pygame.K_LEFT] or keys[pygame.K_a]:
self.x-=self.speed
if keys[pygame.K_RIGHT] or keys[pygame.K_d]:
self.x+=self.speed
self.x=max(0,min(WIDTH-self.width,self.x))
if self.shoot_delay>0:
self.shoot_delay-=1
def shoot(self):
if self.shoot_delay==0:
bullets.append(Bullet(self.x+self.width//2,self.y))
self.shoot_delay=self.max_delay
return True
return False
def draw(self,screen):
pygame.draw.rect(screen,self.color,(self.x,self.y,self.width,self.height))
pygame.draw.polygon(screen,GREEN,[(self.x-10,self.y+20),(self.x,self.y+10),(self.x,self.y+30)])
pygame.draw.polygon(screen,GREEN,[(self.x+self.width+10,self.y+20),(self.x+self.width,self.y+10),(self.x+self.width,self.y+30)])
player=Player()
bullets=[]
enemies=[]
score=0
spawn_timer=0
game_over=False
running=True
while running:
for event in pygame.event.get():
if event.type==pygame.QUIT:
running=False
if event.type==pygame.KEYDOWN:
if event.key==pygame.K_r and game_over:
player=Player()
bullets=[]
enemies=[]
score=0
spawn_timer=0
game_over=False
if event.key==pygame.K_SPACE and not game_over:
player.shoot()
if not game_over:
keys=pygame.key.get_pressed()
player.update(keys)
spawn_timer+=1
if spawn_timer>max(30,120-score//100):
spawn_timer=0
enemies.append(Enemy())
for bullet in bullets[:]:
bullet.update()
if bullet.y<0:
bullets.remove(bullet)
for enemy in enemies[:]:
enemy.update()
if enemy.y>HEIGHT:
enemies.remove(enemy)
score-=5
if (player.x<enemy.x+enemy.width and player.x+player.width>enemy.x and player.y<enemy.y+enemy.height and player.y+player.height>enemy.y):
game_over=True
for bullet in bullets[:]:
if (bullet.x-bullet.size<enemy.x+enemy.width and bullet.x+bullet.size>enemy.x and bullet.y-bullet.size<enemy.y+enemy.height and bullet.y+bullet.size>enemy.y):
enemies.remove(enemy)
bullets.remove(bullet)
score+=20
break
screen.fill((20,100,200))
for _ in range(50):
x=random.randint(0,WIDTH)
y=random.randint(0,HEIGHT)
pygame.draw.circle(screen,WHITE,(x,y),1)
if not game_over:
player.draw(screen)
for bullet in bullets:
bullet.draw(screen)
for enemy in enemies:
enemy.draw(screen)
score_text=font_score.render(f"スコア:{score}",True,WHITE)
screen.blit(score_text,(20,20))
else:
over_text=font_large.render("ゲームオーバー",True,RED)
restart_text=font_small.render("Rキーでリスタート",True,WHITE)
final_score=font_small.render(f"最終スコア:{score}",True,WHITE)
screen.blit(over_text,(WIDTH//2-over_text.get_width()//2,HEIGHT//2-60))
screen.blit(final_score,(WIDTH//2-final_score.get_width()//2,HEIGHT//2))
screen.blit(restart_text,(WIDTH//2-restart_text.get_width()//2,HEIGHT//2+60))
pygame.display.flip()
clock.tick(60)
pygame.quit()
sys.exit()