Python 我怎样才能让敌人不惜一切代价避开角色线,同时仍然试图消灭他

Python 我怎样才能让敌人不惜一切代价避开角色线,同时仍然试图消灭他,python,pygame,Python,Pygame,我怎样才能让敌人不惜一切代价避开角色线,同时仍然试图消灭他?到目前为止,我所掌握的代码使敌人直接跑向玩家,几乎立刻死亡 有人知道如何防止敌人触碰玩家的防线吗 代码如下: 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 = [] pla

我怎样才能让敌人不惜一切代价避开角色线,同时仍然试图消灭他?到目前为止,我所掌握的代码使敌人直接跑向玩家,几乎立刻死亡

有人知道如何防止敌人触碰玩家的防线吗

代码如下:

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,4)
            Xenemy+=Xenemychange
            
        if enemydirection == 2:
            Xenemychange= random.randint(1,4)
            Xenemy+=Xenemychange
            
        if enemydirection == 3:            
            Yenemychange= -random.randint(1,4)
            Yenemy+=Yenemychange
            
        if enemydirection == 4:
            Yenemychange= random.randint(1,4)            
            Yenemy+=Yenemychange
            
        enemylinesavedata.append([Xenemy,Yenemy])
        enemy()
        break
            
def enemy():
    for XnY in enemylinesavedata:
        pygame.draw.rect(DISPLAY,BLUE, [XnY[0],XnY[1],5,5])

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

def main():

    global playerlinesavedata, enemylinesavedata
    global Xplayer, Yplayer, Xenemy, Yenemy
    WHITE = (255,255,255)
    size = 5

    clock = pygame.time.Clock()
    while True:
        clock.tick(60)
        
        for event in pygame.event.get():
            if event.type==QUIT:
                pygame.quit()
                sys.exit()

        keys = pygame.key.get_pressed()
        Xplayer += (keys[pygame.K_d] - keys[pygame.K_a]) * size
        Yplayer += (keys[pygame.K_s] - keys[pygame.K_w]) * size
       
        playerlinesavedata.append((Xplayer, Yplayer))
        enemymovement()

        player_rectlist = [pygame.Rect(x, y, size, size) for x, y in playerlinesavedata]
        enemy_rectlist = [pygame.Rect(x, y, size, size) for x, y in enemylinesavedata]

        if player_rectlist[-1].collidelist(enemy_rectlist) >= 0:
            pygame.quit()
            sys.exit()

        if enemy_rectlist[-1].collidelist(player_rectlist) >= 0:
            playerlinesavedata = []
            Yplayer = 225//2
            Xplayer = 350
            enemylinesavedata = []
            Yenemy = 450
            Xenemy = 300
       
        DISPLAY.fill(WHITE)
        player()
        enemy()
        pygame.display.update()
   

main()
随机导入
导入pygame,sys
从pygame.locals导入*
导入时间
绿色=(0125,0)
蓝色=(0,0125)
Yplayer=225/2
Xplayer=350
playerlinesavedata=[]
playercurrent=[]
Xplayerchange=0
Yplayerchange=0
Yenemy=450
Xenemy=300
enemylinesavedata=[]
enemycurrent=[]
Xenemychange=0
Yenemychange=0
windowX=900
窗口Y=600
pygame.init()
DISPLAY=pygame.DISPLAY.set_模式((windowX,windowY),0,32)
def enemymovement():
全球Xplayer、Yplayer、Xenemy、Yenemy
enemy1=真
enemydirection=random.randint(1,4)
#敌人向玩家移动
如果Xenemy>Xplayer:enemydirection=1
elif XenemyYplayer:enemydirection=3
elif Yenemy=0:
pygame.quit()
sys.exit()
如果敌方名单[-1]。冲突名单(玩家名单)>=0:
playerlinesavedata=[]
Yplayer=225//2
Xplayer=350
enemylinesavedata=[]
Yenemy=450
Xenemy=300
显示。填充(白色)
玩家()
敌人()
pygame.display.update()
main()

使用全球化变量是一种不好的做法。最好使用python类作为pygame对象

这里是您的代码的清理版本,以便您或堆栈溢出上的其他用户可以更轻松地帮助您解决问题:

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

pygame.init()

GREEN = (0, 125, 0)
BLUE = (0, 0, 125)
WHITE = (255,255,255)

windowX = 900
windowY = 600

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

class Object:
    def __init__(self, X, Y, enemy=False, color=GREEN):
        self.enemy = enemy
        self.X = X
        self.Y = Y
        self.current = []
        self.Xchange = 0
        self.Ychange = 0
        self.direction = 0
        self.rectlist = []
        self.color = color
        self.size = 5

    def movement(self):
        for rect in self.rectlist:
            pygame.draw.rect(wn, self.color, rect)

        if self.enemy:
            if self.X > player.X:
                self.direction = 1
            elif self.X < player.X:
                self.direction = 2
            elif self.Y > player.Y:
                self.direction = 3
            elif self.Y < player.Y:
                self.direction = 4
  
            if self.direction == 1:
                self.Xchange = -random.randint(1,4)
                self.X += self.Xchange
                
            if self.direction == 2:
                self.Xchange = random.randint(1,4)
                self.X += self.Xchange
                
            if self.direction == 3:
                self.Ychange = -random.randint(1,4)
                self.Y += self.Ychange
                
            if self.direction == 4:
                self.Ychange = random.randint(1,4)
                self.Y += self.Ychange
        else:
            keys = pygame.key.get_pressed()
            player.X += (keys[pygame.K_d] - keys[pygame.K_a]) * player.size
            player.Y += (keys[pygame.K_s] - keys[pygame.K_w]) * player.size
                    
        self.rectlist.append(pygame.Rect(self.X, self.Y, self.size, self.size))


player = Object(350, 225 / 2)
enemy = Object(450, 300, enemy=True, color=BLUE)


def main():
    clock = pygame.time.Clock()
    size = 5
    while True:
        clock.tick(60)
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()

        player.movement()
        enemy.movement()

        if player.rectlist[-1].collidelist(enemy.rectlist) >= 0:
            pygame.quit()
            sys.exit()

        if enemy.rectlist[-1].collidelist(player.rectlist) >= 0:
            player.rectlist = []
            player.X = 350
            player.Y = 225 // 2
            enemy.rectlist = []
            enemy.X = 450
            enemy.Y = 300
            
        pygame.display.update()
        wn.fill(WHITE)

main()

随机导入
导入pygame,sys
从pygame.locals导入*
导入时间
pygame.init()
绿色=(0,125,0)
蓝色=(0,0,125)
白色=(255255)
windowX=900
窗口Y=600
wn=pygame.display.set_模式((windowX,windowY),0,32)
类对象:
定义初始值(自身、X、Y、敌人=假,颜色=绿色):
敌人
self.X=X
self.Y=Y
self.current=[]
self.Xchange=0
self.Ychange=0
自我定向=0
self.rectlist=[]
self.color=颜色
self.size=5
def移动(自):
对于self.rectlist中的rect:
pygame.draw.rect(wn,self.color,rect)
如果自相残杀:
如果self.X>player.X:
自我定向=1
elif self.Xplayer.Y:
自我定向=3
elif self.Y=0:
pygame.quit()
sys.exit()
如果敌方.rectlist[-1].collizeList(player.rectlist)>=0:
player.rectlist=[]
玩
import random 
import pygame, sys
from pygame.locals import *
import time

pygame.init()

GREEN = (0, 125, 0)
BLUE = (0, 0, 125)
WHITE = (255,255,255)

windowX = 900
windowY = 600

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

class Object:
    def __init__(self, X, Y, enemy=False, color=GREEN):
        self.enemy = enemy
        self.X = X
        self.Y = Y
        self.current = []
        self.Xchange = 0
        self.Ychange = 0
        self.direction = 0
        self.rectlist = []
        self.color = color
        self.size = 5
        self.bounce = 0

    def movement(self):
        for rect in self.rectlist:
            pygame.draw.rect(wn, self.color, rect)

        if self.enemy:
            enemydirection = random.randint(1,4)
            if not self.bounce:
                if self.X > player.X:
                    self.direction = 1
                elif self.X < player.X:
                    self.direction = 2
                elif self.Y > player.Y:
                    self.direction = 3
                elif self.Y < player.Y:
                    self.direction = 4
            else:
                self.bounce -= 1
            if self.direction == 1:
                self.Xchange = -random.randint(1,4)
                self.X += self.Xchange
                
            if self.direction == 2:
                self.Xchange = random.randint(1,4)
                self.X += self.Xchange
                
            if self.direction == 3:
                self.Ychange = -random.randint(1,4)
                self.Y += self.Ychange
                
            if self.direction == 4:
                self.Ychange = random.randint(1,4)
                self.Y += self.Ychange
        else:
            keys = pygame.key.get_pressed()
            player.X += (keys[pygame.K_d] - keys[pygame.K_a]) * player.size
            player.Y += (keys[pygame.K_s] - keys[pygame.K_w]) * player.size
                    
        self.rectlist.append(pygame.Rect(self.X, self.Y, self.size, self.size))


player = Object(350, 225 / 2)
enemy = Object(450, 300, enemy=True, color=BLUE)


def main():
    clock = pygame.time.Clock()
    size = 5
    while True:
        clock.tick(60)
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()

        player.movement()
        enemy.movement()

        if player.rectlist[-1].collidelist(enemy.rectlist) >= 0:
            pygame.quit()
            sys.exit()

        if enemy.rectlist[-1].collidelist(player.rectlist) >= 0:
            if not enemy.bounce:
                while enemy.rectlist[-1].collidelist(player.rectlist) >= 0:
                    enemy.rectlist.pop()
                    enemy.rectlist.pop()
                    enemy.rectlist.pop()

                enemy.X, enemy.Y = enemy.rectlist[-1].x, enemy.rectlist[-1].y
                enemy.direction = enemy.direction - 2 if enemy.direction - 2 else enemy.direction + 2
                enemy.bounce = 40
        
            
        pygame.display.update()
        wn.fill(WHITE)

main()