【问题标题】:I am trying to use random to make the enemy move with a trail, does anyone know why the enemy isn't moving?我正在尝试使用随机让敌人移动,有谁知道为什么敌人不移动?
【发布时间】:2020-11-13 11:10:34
【问题描述】:

我对编码很陌生,所以对于硬编码和重复代码感到抱歉。这是代码

import random 
import pygame, sys
from pygame.locals import *
import time


GREEN=(0,125,0)
BLUE=(0,0,125)
global Yplayer
Yplayer = 225/2

global Xplayer
Xplayer = 300

playerlinesavedata = []
playercurrent = []


global Xplayerchange
Xplayerchange=0

global Yplayerchange
Yplayerchange=0





global enemydirection

enemydirection = random.randint(1,4) 


global Yenemy
Yenemy = 450

global Xenemy
Xenemy = 300

enemylinesavedata = []
enemycurrent = []

global enemy1
enemy1 = False

global Xenemychange
Xenemychange=0

global Yenemychange
Yenemychange=0

on = True
windowX = 900
windowY = 600

pygame.init()
DISPLAY=pygame.display.set_mode((windowX,windowY),0,32)


def enemymovement(enemy1,Xenemychange,Yenemychange,Xenemy,Yenemy,enemy,enemylinesavedata):
    while enemy1 == True:    
        if enemydirection == 1:
           
            Xenemychange-= random.randint(1,10)
            print("1")
            print(Xenemychange)
            Xenemy+=Xenemychange
            Xenemychange=0
            enemy(enemylinesavedata,Yenemy,Yenemychange,Xenemy,Xenemychange)
            enemy1 = False
        if enemydirection == 2:
           
            
            Xenemychange+= random.randint(1,10)
            print("2")
            print(Xenemychange)
            Xenemy+=Xenemychange
            Xenemychange=0
            enemy(enemylinesavedata,Yenemy,Yenemychange,Xenemy,Xenemychange)
            enemy1 = False
        if enemydirection == 3:
            
            Yenemychange-= random.randint(1,10)
            print("3")
            print(Yenemychange)
            Yenemy+=Yenemychange
            enemy(enemylinesavedata,Yenemy,Yenemychange,Xenemy,Xenemychange)
            Yenemychange=0
            enemy1 = False
            
        if enemydirection == 4:
            Yenemychange+= random.randint(1,10)
            print("4")
            print(Yenemychange)
            
            Yenemy+=Yenemychange
            enemy(enemylinesavedata,Yenemy,Yenemychange,Xenemy,Xenemychange)
            Yenemychange=0
            enemy1 = False
def enemy(enemylinesavedata,Yenemy,Yenemychange,Xenemy,Xenemychange):
    for XnY in enemylinesavedata:
        Yenemy+=Yenemychange
        Xenemy+=Xenemychange
        pygame.draw.rect(DISPLAY,BLUE, [XnY[0],XnY[1],5,5])
        Yenemy+=Yenemychange
        Xenemy+=Xenemychange

def player(playerlinesavedata):
    for XnY in playerlinesavedata:
        pygame.draw.rect(DISPLAY,GREEN,[XnY[0],XnY[1],5,5])

def main(Xplayer, Yplayer, Xplayerchange, Yplayerchange, Xenemy, Yenemy, Xenemychange, Yenemychange):
   
    WHITE=(255,255,255)
    BLUE=(0,0,255)
    playerlinesavedata = []
    DISPLAY.fill(WHITE)

    
    pygame.display.update()
    while on == True:
        Yplayer+=Yplayerchange
        Xplayer+=Xplayerchange
        Yenemy+=Yenemychange
        Xenemy+=Xenemychange
        for event in pygame.event.get():
            if event.type==QUIT:
                pygame.quit()
                sys.exit()
            if event.type==KEYDOWN:
                if event.key==K_d:
                    Xplayerchange+=1
                    
                if event.key==K_a:
                    Xplayerchange-=1
                if event.key==K_w:
                    Yplayerchange-=1
                if event.key==K_s:
                    Yplayerchange+=1
            if event.type==KEYUP:
                if event.key==K_a or K_d:
                    Yplayerchange=0
                if event.key==K_w or K_s:
                    Xplayerchange=0


       
        playercurrent = []
        playercurrent.append(Xplayer)
        playercurrent.append(Yplayer)
        playerlinesavedata.append(playercurrent)
        
        Yplayer+=Yplayerchange
        Xplayer+=Xplayerchange

        enemymovement(enemy1,Xenemychange,Yenemychange,Xenemy,Yenemy,enemy,enemylinesavedata)
        enemycurrent = []
        enemycurrent.append(Xenemy)
        enemycurrent.append(Yenemy)
        enemylinesavedata.append(enemycurrent)

                
        Yenemy+=Yenemychange
        Xenemy+=Xenemychange
        
        Yplayer+=Yplayerchange
        Xplayer+=Xplayerchange
        
       
        DISPLAY.fill(WHITE)
        
        player(playerlinesavedata)
        enemy(enemylinesavedata,Yenemy,Yenemychange,Xenemy,Xenemychange)
        enemymovement(enemy1,Xenemychange,Yenemychange,Xenemy,Yenemy,enemy,enemylinesavedata)
        pygame.display.update()








        
main(Xplayer, Yplayer, Xplayerchange, Yplayerchange, Xenemy, Yenemy, Xenemychange, Yenemychange)

有什么想法吗?

它应该在你完全控制时让敌人随机移动。我还没有添加它,但我想要的是,当你撞到敌线时你会死,如果敌人撞到你,他们会死,但你可以越过你的线,他们可以越过他们的线

【问题讨论】:

    标签: python-3.x


    【解决方案1】:

    您正在使用全局变量并将它们作为参数传递。当参数更新时,全局变量不会。您还在每个循环中多次调整敌人的速度。

    这是您的代码的更简洁版本:

    import random 
    import pygame, sys
    from pygame.locals import *
    import time
    
    GREEN=(0,125,0)
    BLUE=(0,0,125)
    
    Yplayer = 225//2
    Xplayer = 350
    
    playerlinesavedata = []
    playercurrent = []
    
    Xplayerchange=0
    Yplayerchange=0
    
    Yenemy = 450
    Xenemy = 300
    
    enemylinesavedata = []
    enemycurrent = []
    
    Xenemychange=0
    Yenemychange=0
    
    windowX = 900
    windowY = 600
    
    pygame.init()
    DISPLAY=pygame.display.set_mode((windowX,windowY),0,32)
    
    
    def enemymovement():
        global Xplayer,Yplayer,Xenemy,Yenemy
        enemy1 = True
        enemydirection = random.randint(1,4)
        
        # enemy moves toward player
        if Xenemy > Xplayer: enemydirection = 1
        elif Xenemy < Xplayer: enemydirection = 2
        elif Yenemy > Yplayer: enemydirection = 3
        elif Yenemy < Yplayer: enemydirection = 4
    
        while enemy1 == True:    
            if enemydirection == 1:
                Xenemychange= -random.randint(1,2)
                Xenemy+=Xenemychange
                
            if enemydirection == 2:
                Xenemychange= random.randint(1,2)
                Xenemy+=Xenemychange
                
            if enemydirection == 3:            
                Yenemychange= -random.randint(1,2)
                Yenemy+=Yenemychange
                
            if enemydirection == 4:
                Yenemychange= random.randint(1,2)            
                Yenemy+=Yenemychange
                
            enemylinesavedata.append([Xenemy,Yenemy])
            enemy()
            break
                
    def enemy():
        pygame.draw.circle(DISPLAY,BLUE, (enemylinesavedata[-1][0]+2,enemylinesavedata[-1][1]+2), 8)
        for XnY in enemylinesavedata:
            pygame.draw.rect(DISPLAY,BLUE, [XnY[0],XnY[1],5,5])
    
    def player():
        pygame.draw.circle(DISPLAY,GREEN, (playerlinesavedata[-1][0]+2,playerlinesavedata[-1][1]+2), 8)
        for XnY in playerlinesavedata:
            pygame.draw.rect(DISPLAY,GREEN,[XnY[0],XnY[1],5,5])
    
    def collide():
        global enemylinesavedata, playerlinesavedata
        if ((enemylinesavedata[-1][0] - playerlinesavedata[-1][0])**2 + (enemylinesavedata[-1][1] - playerlinesavedata[-1][1])**2)**.5 < 10:
            playerlinesavedata = playerlinesavedata[-1:] # keep head only
    
    def main():
    
        global Xplayer,Yplayer,Xenemy,Yenemy,Xplayerchange,Yplayerchange
        WHITE=(255,255,255)
        BLUE=(0,0,255)
        DISPLAY.fill(WHITE)
    
        
        pygame.display.update()
        while True:
            Yplayer+=Yplayerchange
            Xplayer+=Xplayerchange
    
            for event in pygame.event.get():
                if event.type==QUIT:
                    pygame.quit()
                    sys.exit()
                if event.type==KEYDOWN:
                    if event.key==K_d:
                        Xplayerchange+=1
                        
                    if event.key==K_a:
                        Xplayerchange-=1
                    if event.key==K_w:
                        Yplayerchange-=1
                    if event.key==K_s:
                        Yplayerchange+=1
                if event.type==KEYUP:
                    if event.key==K_a or K_d:
                        Yplayerchange=0
                    if event.key==K_w or K_s:
                        Xplayerchange=0
    
    
           
            playercurrent = []
            playercurrent.append(Xplayer)
            playercurrent.append(Yplayer)
            playerlinesavedata.append(playercurrent)
            
            Yplayer+=Yplayerchange
            Xplayer+=Xplayerchange
    
            enemymovement()
    
            Yplayer+=Yplayerchange
            Xplayer+=Xplayerchange
            
            # check collide
            collide()
                       
            DISPLAY.fill(WHITE)
            
            player()
            enemy()
            pygame.display.update()
    
    main()
    

    【讨论】:

    • 谢谢,你知道如何添加碰撞检测吗?
    • 很抱歉我很挑剔,但我如何检查他是否越界或反之亦然
    • 您需要检查尾部中每个矩形的碰撞。要检查多个对象,请查看精灵组:stackoverflow.com/questions/43474849/…
    • 如何在这段代码中添加精灵组?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多