我对编码是个新手,所以很抱歉我很难编码和重复代码。以下是代码
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)有什么想法吗?
当你完全控制的时候,它会让敌人随机移动。我还没有添加它,但我想是这样的,当你冲进敌人的防线时,你会死,如果敌人撞上你,他们也会死,但你可以越过你的防线,他们也可以越过他们的防线
发布于 2020-11-14 05:15:45
您正在使用全局变量,并将它们作为参数进行传递。当参数更新时,全局变量不会更新。你也会在每个循环中多次调整敌人的速度。
下面是你的代码的一个更干净的版本:
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()https://stackoverflow.com/questions/64819851
复制相似问题