首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我试着用随机的方法让敌人有痕迹地移动,有人知道为什么敌人不动吗?

我试着用随机的方法让敌人有痕迹地移动,有人知道为什么敌人不动吗?
EN

Stack Overflow用户
提问于 2020-11-13 19:10:34
回答 1查看 35关注 0票数 1

我对编码是个新手,所以很抱歉我很难编码和重复代码。以下是代码

代码语言:javascript
复制
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)

有什么想法吗?

当你完全控制的时候,它会让敌人随机移动。我还没有添加它,但我想是这样的,当你冲进敌人的防线时,你会死,如果敌人撞上你,他们也会死,但你可以越过你的防线,他们也可以越过他们的防线

EN

回答 1

Stack Overflow用户

发布于 2020-11-14 05:15:45

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

下面是你的代码的一个更干净的版本:

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64819851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档