问题描述
如果对象 Player1 和对象 COmpuTER 发生碰撞,它们的坐标应该是静态的并且不会改变。我正在使用 for 循环来查找 Class Player1 和 COmpuTER 之间的距离。如果距离是 100,Class Player1 和 COmpuTER 都应该停止移动。我想通知您 Player1 和 COmpuTER 是包含类的列表。这些类被称为 Mobs 并描述了我游戏中的一个 mob 对象。
import pygame as pg
import random
import math
import os
import time
pg.init()
width_height = [800,800] #1400,1000
screen = pg.display.set_mode((width_height[0],width_height[1]))
background_image = pg.transform.scale(pg.image.load(os.path.join("Pictures","BackgroundWarcraft.png")),(width_height[0],width_height[1]))
screen.blit(background_image,(0,0))
def collide(player1,player2):
value = abs(player1 - player2)
return int(value)
class Building:
def __init__(self,x,y,w,h,HP):
self.x = x
self.y = y
self.w = w #width
self.h = h #height
self.HP = int(HP)
self.mob_position = pg.rect.Rect((self.x,self.y,self.w,self.h))
def draw(self,surface,a,b,c):
pg.draw.rect(screen,(a,c),self.mob_position)
def health_bar(self,max_HP):
pg.draw.rect(screen,[255,0],[self.x,self.y - 40,max_HP,10])
pg.draw.rect(screen,[0,255,self.HP,10])
class Mob:
def __init__(self,moving_x_position,moving_y_position,HP):
self.x = x
self.y = y
self.HP = int(HP)
self.moving_x_position = moving_x_position
self.moving_y_position = moving_y_position
self.Creating_mob = pg.rect.Rect((self.x,50,50))
#self.speed = 10
def detection(self,mobs_number,other_mobs):
enemy_detected = False
if enemy_detected == False:
self.Creating_mob.move_ip(0,self.moving_y_position)
if enemy_detected == True:
self.Creating_mob.move_ip(0,0)
liste = []
for i in other_mobs:
Coordinate = (i.Creating_mob[0],i.Creating_mob[1])
liste.append(Coordinate)
ny_liste = []
for i in other_mobs:
distance_x = collide(self.Creating_mob[0],i.Creating_mob[0])
distance_y = collide(self.Creating_mob[1],i.Creating_mob[1])
distance = math.sqrt((distance_x)**2+((distance_y)**2))
if distance < 500 and distance > 100:
retning_x,retning_y = 0,10
self.Creating_mob.move_ip(retning_x,retning_y)
i.Creating_mob.move_ip(retning_x,-retning_y)
if distance < 99 or distance == 100:
enemy_detected = True
self.Creating_mob.move_ip(0,0)
i.Creating_mob.move_ip(0,0)
def health_bar(self,max_HP):
pg.draw.rect(screen,self.y- 40,10]) #max_HP maybe
pg.draw.rect(screen,10])
def draw(self,c):
pg.draw.rect(screen,self.Creating_mob)
Player1_mobs = []
mobs_number = 0
COmpuTER_mobs = []
COmpuTER_timer = 30
COmpuTER_mobs_number = 0
Player1_building1 = Building(width_height[0]/8,width_height[1]-(width_height[1]/3),75,75)
Player1_building2 = Building((width_height[0]-(width_height[0]/8)-100),width_height[1]-
(width_height[1]/3),75)
Player1_building3 = Building((width_height[0]/6+width_height[0]-width_height[0]/8-100)/2-50,width_height[1]-(width_height[1]/4),100,100)
COmpuTER_building1 = Building(width_height[0]/8,width_height[1]-(width_height[1]/4)-500,75)
COmpuTER_building2 = Building((width_height[0]-(width_height[0]/8)-100),width_height[1]-
(width_height[1]/4)-500,75)
COmpuTER_building3 = Building((width_height[0]/6+width_height[0]-width_height[0]/8-100)/2-
50,width_height[1]-(width_height[1]/3)-500,100)
FPS = 100
state = "START"
running = True
tick = 0
while running:
tick = tick + 1
if state == "START":
for event in pg.event.get():
if event.type == pg.QUIT:
running = False
elif event.type == pg.KEYDOWN:
if event.key == pg.K_SPACE:
pass
elif event.key == pg.K_ESCAPE:
pg.quit()
if mobs_number != 0:
for mobs_drawing in range(len(Player1_mobs)):
Player1_mobs[mobs_drawing].draw(screen,200)
Player1_mobs[mobs_drawing].health_bar(100)
click = (1,0)
if pg.mouse.get_pressed() == click:
event.pos = pg.mouse.get_pos()
if Player1_building1.mob_position.collidepoint(event.pos): #Central position
Player1_mobs.append(Mob(Player1_building1.mob_position[0]+12.5,Player1_building1.mob_position[1],-10,100))
mobs_number += 1
time.sleep(0.05)
if Player1_building2.mob_position.collidepoint(event.pos): #Central position
Player1_mobs.append(Mob(Player1_building2.mob_position[0]+12.5,Player1_building2.mob_position[1],100))
mobs_number += 1
time.sleep(0.05)
if Player1_building3.mob_position.collidepoint(event.pos): #Central position
Player1_mobs.append(Mob(Player1_building3.mob_position[0]+25,Player1_building3.mob_position[1],100))
mobs_number += 1
time.sleep(0.05)
if COmpuTER_mobs_number != 0:
for mobs_drawing in range(len(COmpuTER_mobs)):
COmpuTER_mobs[mobs_drawing].draw(screen,200,0)
COmpuTER_mobs[mobs_drawing].health_bar(100)
if COmpuTER_mobs[mobs_drawing].Creating_mob[1] > width_height[1] or COmpuTER_mobs[mobs_drawing].Creating_mob[1] == width_height[1]:
COmpuTER_mobs.remove(COmpuTER_mobs[-1])
COmpuTER_mobs_number -= 1
if COmpuTER_timer > 0:
COmpuTER_timer -= 1
if COmpuTER_timer == 0:
COmpuTER_random_choice = random.choice(["enemy_startpos1","enemy_startpos2","enemy_startpos3"])
if COmpuTER_random_choice == "enemy_startpos1":
COmpuTER_mobs.append(Mob(COmpuTER_building1.mob_position[0]+12.5,COmpuTER_building1.mob_position[1],10,100))
COmpuTER_mobs_number += 1
COmpuTER_timer = 100 #måske noget som ''difficulty level input''
elif COmpuTER_random_choice == "enemy_startpos2":
COmpuTER_mobs.append(Mob(COmpuTER_building2.mob_position[0]+12.5,COmpuTER_building2.mob_position[1],100))
COmpuTER_mobs_number += 1
COmpuTER_timer = 100 #måske noget som ''difficulty level input''
elif COmpuTER_random_choice == "enemy_startpos3":
COmpuTER_mobs.append(Mob(COmpuTER_building3.mob_position[0]+25,COmpuTER_building3.mob_position[1],100))
COmpuTER_mobs_number += 1
COmpuTER_timer = 100 #måske noget som ''difficulty level input''
if mobs_number != 0:
if Player1_mobs[0].Creating_mob[1] == 0 or Player1_mobs[0].Creating_mob[1] < 0:
Player1_mobs.remove(Player1_mobs[0])
mobs_number -= 1
for mob in COmpuTER_mobs:
mob.detection(mobs_number,Player1_mobs)
for mob in Player1_mobs:
mob.detection(COmpuTER_mobs_number,COmpuTER_mobs)
Player1_building1.draw(screen,200)
Player1_building2.draw(screen,200)
Player1_building3.draw(screen,200)
COmpuTER_building1.draw(screen,0)
COmpuTER_building2.draw(screen,0)
COmpuTER_building3.draw(screen,0)
Player1_building1.health_bar(75)
Player1_building2.health_bar(75)
Player1_building3.health_bar(100)
COmpuTER_building1.health_bar(75)
COmpuTER_building2.health_bar(75)
COmpuTER_building3.health_bar(100)
pg.display.update()
screen.blit(background_image,0))
pg.time.Clock().tick(FPS)
#Vigtig
#print(Player1_building1.y)> 533.3333333
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)