にゃんこ大戦争

にゃんこ大戦争(中1男子/作)
「にゃんこ大戦争」はうちの息子が何万円も課金しているゲームです。。(涙)
ボタンを押すとネコが次々と表示される処理がよく考えられていますね。pygameでこれをやるのは意外と頭を使います。

空っぽの「ネコ座標リスト」を作成して、リストに追加するロジックはよく考えられています。

ネコ座標リスト=[]

新しい座標= pygame.Rect(600,340,0,0)

ネコ座標リスト.append(新しい座標)

続編、期待しています。

Pythonで記述したコード
import pygame
import sys
import random
import time

#変数定義
プッシュフラグ=0
番号=0
ネコ座標=pygame.Rect(600,340,0,0)
城_ライフ=10000
終了=0

#pygame初期化
pygame.init()

スクリーン = pygame.display.set_mode((800,600))
スクリーン.fill("white")

#画像アップロード
背景=pygame.image.load("image\背景.png")
城=pygame.image.load("image\城.png")
城_敵=pygame.image.load("image\城_敵.png")
ネコ=pygame.image.load("image\ネコ\ネコ.png")
歩く1=pygame.image.load("image\ネコ\歩く1.png")
歩く2=pygame.image.load("image\ネコ\歩く2.png")
歩く3=pygame.image.load("image\ネコ\歩く3.png")
歩く4=pygame.image.load("image\ネコ\歩く4.png")
攻撃1=pygame.image.load("image\ネコ\攻撃1.png")
攻撃2=pygame.image.load("image\ネコ\攻撃2.png")
攻撃3=pygame.image.load("image\ネコ\攻撃3.png")
爆発1=pygame.image.load("image\爆発\爆発1.png")
爆発2=pygame.image.load("image\爆発\爆発2.png")
爆発3=pygame.image.load("image\爆発\爆発3.png")
爆発4=pygame.image.load("image\爆発\爆発4.png")
爆発5=pygame.image.load("image\爆発\爆発5.png")
爆発6=pygame.image.load("image\爆発\爆発6.png")
爆発7=pygame.image.load("image\爆発\爆発7.png")
爆発8=pygame.image.load("image\爆発\爆発8.png")
爆発9=pygame.image.load("image\爆発\爆発9.png")
爆発10=pygame.image.load("image\爆発\爆発10.png")
爆発11=pygame.image.load("image\爆発\爆発11.png")
爆発12=pygame.image.load("image\爆発\爆発12.png")
爆発13=pygame.image.load("image\爆発\爆発13.png")

#画像サイズ変更
城=pygame.transform.scale(城,(84,200))
城_敵=pygame.transform.scale(城_敵,(92,200))
ネコボタン=pygame.transform.scale(ネコ,(80,65))
歩く1=pygame.transform.scale(歩く1,(60,66))
歩く2=pygame.transform.scale(歩く2,(60,66))
歩く3=pygame.transform.scale(歩く3,(60,66))
歩く4=pygame.transform.scale(歩く4,(60,66))
攻撃1=pygame.transform.scale(攻撃1,(60,66))
攻撃2=pygame.transform.scale(攻撃2,(60,66))
攻撃3=pygame.transform.scale(攻撃3,(60,66))
爆発1=pygame.transform.scale(爆発1,(60,66))
爆発2=pygame.transform.scale(爆発2,(60,66))
爆発3=pygame.transform.scale(爆発3,(60,66))
爆発4=pygame.transform.scale(爆発4,(60,66))
爆発5=pygame.transform.scale(爆発5,(60,66))
爆発6=pygame.transform.scale(爆発6,(60,66))
爆発7=pygame.transform.scale(爆発7,(60,66))
爆発8=pygame.transform.scale(爆発8,(60,66))
爆発9=pygame.transform.scale(爆発9,(60,66))
爆発10=pygame.transform.scale(爆発10,(60,66))
爆発11=pygame.transform.scale(爆発11,(60,66))
爆発12=pygame.transform.scale(爆発12,(60,66))
爆発13=pygame.transform.scale(爆発13,(60,66))


#ネコの歩く画像リスト
ネコリスト=[歩く1,歩く2,歩く3,歩く4]
攻撃リスト=[攻撃1,攻撃2,攻撃3]
爆発リスト=[爆発1,爆発2,爆発3,爆発4,爆発5,爆発6,爆発7,爆発8,爆発9,爆発10,爆発11,爆発12,爆発13]
ネコ座標リスト=[]

#BGM
BGM=pygame.mixer.Sound("sound\BGM.mp3")
城破壊=pygame.mixer.Sound("sound\城破壊.wav")
爆発=pygame.mixer.Sound("sound\爆発.wav")
勝利_音=pygame.mixer.Sound("sound\勝利.wav")

#ボリューム設定
城破壊.set_volume(0.1)
BGM.set_volume(0.1)
爆発.set_volume(0.1)
勝利_音.set_volume(0.1)

#BGMを鳴らす
BGM.play(-1)

#フォントのアップロード
font = pygame.font.Font("font\日本語フォント.ttf",30)
文字 = font.render(str(城_ライフ)+"/"+"10000",True,"black")

#画像情報取得
ネコボタン情報=スクリーン.blit(ネコボタン,(110,520)) #rect(110, 520, 80, 65)が取得できる

def ネコ出撃():
    global ネコ座標リスト #このリストは最初は空っぽで設定
    新しい座標= pygame.Rect(600,340,0,0)
    ネコ座標リスト.append(新しい座標)

def エンディング():
    global 番号
    BGM.stop()
    for i in range(26):
        番号=番号+1
        爆発x=random.randint(90,120)
        爆発y=random.randint(250,350)
        爆発.play()
        #以下の.blitがないと爆発画像が消せない。    
        スクリーン.blit(背景,(0,0))
        スクリーン.blit(城,(100,200))
        スクリーン.blit(城_敵,(600,200))
        スクリーン.blit(ネコボタン,(110,520))
        スクリーン.blit(爆発リスト[番号%13],(爆発x,爆発y))
        スクリーン.blit(文字,(45,140))
            
        pygame.display.update()
        pygame.time.Clock().tick(5)       
    time.sleep(1)
    勝利_音.play()
    
    while True:
        #display.update()がないとゴミが残る
        pygame.display.update()
        スクリーン.blit(背景,(0,0))
        スクリーン.blit(城,(100,200))
        スクリーン.blit(城_敵,(600,200))
        スクリーン.blit(ネコボタン,(110,520))
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
#処理を終了させる
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
    
    #マウスの操作情報を取得する
    マウスクリック=pygame.mouse.get_pressed()
    #マウスカーソールの情報を取得する
    (mx,my)=pygame.mouse.get_pos()
    
    if マウスクリック[0] and ネコボタン情報.collidepoint((mx,my)) and プッシュフラグ==0:
        ネコ出撃()
        プッシュフラグ=1
    else:
        プッシュフラグ=0
    #転送
    スクリーン.blit(背景,(0,0))
    スクリーン.blit(城,(100,200))
    スクリーン.blit(城_敵,(600,200))
    スクリーン.blit(ネコボタン,(110,520))
    スクリーン.blit(文字,(45,140))

    for i in ネコ座標リスト:
        番号=番号+1
        #ネコ座標リストから順番に取り出す
        if i.x > 180:
            i.x = i.x - 6
            スクリーン.blit(ネコリスト[番号%4],i)
        elif 城_ライフ>0:
            攻撃x=random.randint(90,180)
            スクリーン.blit(攻撃リスト[番号%3],(攻撃x, 340, 0, 0))
            城_ライフ=城_ライフ-1
            文字 = font.render(str(城_ライフ)+"/"+"10000",True,"black")
            城破壊.play(1)
        else:
            エンディング()
            終了=1
            
    if 終了==1:
        break
           
    #ディスプレイのアップデート
    pygame.display.update()

    #処理速度
    pygame.time.Clock().tick(15)