-2

これは私が取り組んでいる私のゲームであり、物事は非常にうまくいっています.プレイヤーは動き回ってボックスを撃ち落とすことができます. :

import pygame, math, random, sys
from pygame import *
import random, math, cmath

pygame.init()

#variables end----------------------------------------------------------------

#imagers
grass = "grass_shit.png" #grass image
player_img = "shithead.png" #player name
ali_img = "shit_head2.png" #alien image
dead_screen = "dead_shit.png"
cross_hair = "crosshair.png"
playButton = "playbutton.png"

#screen
screen = pygame.display.set_mode((850, 640),0,32) #set screen                       
background = pygame.image.load(grass).convert() #load image to screen

health = 100

#mouse things
crosshair = pygame.image.load(cross_hair).convert_alpha()

#variables end----------------------------------------------------------------

pygame.mouse.set_visible(False)

black = ( 0, 0, 0)
white = ( 255, 255, 255)
red = ( 255, 0, 0)
blue = ( 0, 0, 255)

player_x, player_y = 0, 0
move_player_x, move_player_y = 0, 0

move_ali_x, move_ali_y = 0, 0

class Block(pygame.sprite.Sprite):

    def __init__(self, color):

        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.Surface([20, 15])
        self.image.fill(color)

        self.rect = self.image.get_rect()

    def update(self):

        global move_ali_x
        global move_ali_y

        if block.rect.x < player_x:
            move_ali_x =+ 0.05
        elif block.rect.x > player_x:
            move_ali_x =- 0.05
        if block.rect.y < player_y:
            move_ali_y =+ 0.05
        elif block.rect.y > player_y:
            move_ali_y =- 0.05

class Player(pygame.sprite.Sprite):

    def __init__(self):

        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.Surface([20,20])
        self.image.fill(red)

        self.rect = self.image.get_rect()
    def update(self):

        pos = pygame.mouse.get_pos()


        self.rect.x = player_x
        self.rect.y = player_y

class Bullet(pygame.sprite.Sprite):

    def __init__(self, mouse, player):

        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.Surface([4, 10])
        self.image.fill(black)

        self.mouse_x, self.mouse_y = mouse[0], mouse[1]
        self.player = player

        self.rect = self.image.get_rect()

    def update(self):

        speed = 10
        range = 50000
        distance = [self.mouse_x - self.player[0], self.mouse_y - self.player[1]]
        norm = math.sqrt(distance[0] ** 2 + distance[1] ** 2)
        direction = [distance[0] / norm, distance[1] / norm]
        bullet_vector = [direction[0] * speed, direction[1] * speed]


        self.rect.x += bullet_vector[0]
        self.rect.y += bullet_vector[1]

pygame.init()

screen_width = 850
screen_height = 640
screen = pygame.display.set_mode([screen_width,screen_height])

all_sprites_list = pygame.sprite.Group()
block_list = pygame.sprite.Group()
bullet_list = pygame.sprite.Group()

for i in range(5):

    block = Block(blue)

    block.rect.x = random.randrange(screen_width)
    block.rect.y = random.randrange(350)

    block_list.add(block)
    all_sprites_list.add(block)

player = Player()
all_sprites_list.add(player)

done = False

clock = pygame.time.Clock()

score = 0
player.rect.y = 370

# -------- Main Program Loop -----------
while not done:

    # --- Event Processing
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True

        elif event.type == pygame.MOUSEBUTTONDOWN:

            bullet = Bullet(event.pos, [player.rect.x, player.rect.y])

            bullet.rect.x = player.rect.x
            bullet.rect.y = player.rect.y

            all_sprites_list.add(bullet)
            bullet_list.add(bullet)

        if event.type== pygame.KEYDOWN:    
            if event.key==K_a:
                    move_player_x=-4
            elif event.key==K_d:
                    move_player_x=+4
            elif event.key==K_w:
                    move_player_y=-4
            elif event.key==K_s:
                    move_player_y=+4

        if event.type== pygame.KEYUP:
            if event.key==K_a:
                    move_player_x=0
            elif event.key==K_d:
                    move_player_x=0
            elif event.key==K_w:
                    move_player_y=0
            elif event.key==K_s:
                    move_player_y=0

    # --- Game logic

    all_sprites_list.update()

    player_x += move_player_x
    player_y += move_player_y

    block.rect.y += move_ali_y
    block.rect.x += move_ali_x

    for bullet in bullet_list:

        block_hit_list = pygame.sprite.spritecollide(bullet, block_list, True)

        for block in block_hit_list:
            bullet_list.remove(bullet)
            all_sprites_list.remove(bullet)
            score += 1
            print( score )

        if bullet.rect.y < -10:
            bullet_list.remove(bullet)
            all_sprites_list.remove(bullet)

    if player.rect.colliderect(block.rect):
        health =- 35

    mouse_x, mouse_y = pygame.mouse.get_pos()
    mouse_x -= crosshair.get_width() / 2
    mouse_y -= crosshair.get_height() / 2
    screen.blit(background,(0,0))

    all_sprites_list.draw(screen)

    screen.blit(crosshair,(mouse_x, mouse_y))
    pygame.display.flip()
    pygame.display.update()

    clock.tick(20)

pygame.quit()

だからグリッチナンバー1:ボクサーの1つだけが動く、なぜ1つだけがプレイヤーに向かって動いているのか理解できない、これはゾンビシューターになることを望んでいるので、すべてのボクサーはプレイヤーに向かって動くことを意図している.

グリッチ 2: ランダムなポイントで、移動するボックスが 1 つの方向以外のすべての方向への移動を停止するため、ボックスが画面の中央にあるときにこれが発生するとしましょう。プレーヤーがボックスの左側に移動すると、何も起こりません。しかし、プレーヤーがプレーヤーの右に移動すると、右に移動しますが、上下ではなく右に移動し、この継ぎ目は常にいくつかのポイントで発生します。

それだけです。ヒープスタックオーバーフローに感謝します

4

1 に答える 1