Давайте начнем с того, что сделаем код как можно более простым, чтобы было проще добавить прокрутку.
Во-первых, у вас есть отдельный класс для каждого объекта, в этом нет необходимости. Классы работают так, что вы можете создать несколько экземпляры одного класса, поэтому вместо класса для каждого врага вы можете иметь его.
# enemy class 1
class enemys(object):
def __init__(self,x,y,height,width):
self.x = x
self.y = y
self.height = height
self.width = width
# Defininition for the class player/enemys
playerman = players(50,390,20,20)
enemy1 = enemys(150,390,100,10)
enemy2 = enemys(320,320,100,10)
enemy3 = enemys(120,250,100,10)
enemy4 = enemys(0,459,500,40)
у вас также есть другая переменная для каждого прямоугольника врагов. давайте переместим его в класс. Фактически, давайте переместим весь рисунок в класс
# enemy class 1
class enemys(object):
def __init__(self,x,y,height,width):
self.x = x
self.y = y
self.height = height
self.width = width
self.rect = pygame.Rect(x,y,width,height)
def draw(self):
pygame.draw.rect(window, (NiceBlue), self.rect)
playerman.draw()
enemy1.draw()
enemy2.draw()
enemy3.draw()
enemy4.draw()
Я заметил, что лава имеет другой цвет, поэтому давайте сделаем это аргументом для создания врага
# enemy class 1
class enemys: #you dont need an (object) only in python2
def __init__(self,x,y,height,width,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.rect = pygame.Rect(x,y,width,height)
self.color = color
def draw(self):
pygame.draw.rect(window, self.color, self.rect)
enemy1 = enemys(150,390,100,10, NiceBlue)
enemy2 = enemys(320,320,100,10, NiceBlue)
enemy3 = enemys(120,250,100,10, NiceBlue)
enemy4 = enemys(0,459,500,40, (230,4,231))
Теперь, чтобы убрать столкновение, он работает, но вам не нужны все эти операторы if, вы можете использовать al oop. Давайте также исправим везде, где был игрок, и изменим его на playerman.rect, и то же самое с врагом
enemies = [enemy1,enemy2,enemy3,enemy4]
collide = False
for enemy in enemies:
if playerman.rect.colliderect(enemy.rect):
collide = True
playerman.y = enemy.rect.top - playerman.height + 1 #had to add 1 to look smooth
if playerman.rect.right > enemy.rect.left and playerman.rect.left < enemy.rect.left - playerman.width:
playerman.x = enemy.rect.left - player.width
if playerman.rect.left < enemy.rect.right and playerman.rect.right > enemy.rect.right + playerman.width:
playerman.x = enemy.rect.right
break #break so dont check every object
if playerman.rect.bottom >= 500:
collide = True
playerman.isJump = False
playerman.JumpCount = 10
playerman.y = 500 - playerman.height
Теперь давайте сделаем прокрутку, чтобы прокрутить, вам нужно переместить все на экран, когда игрок приближается к краю экрана
if keys[pygame.K_LEFT]:
playerman.x -= playerman.speed
if playerman.x < 100: #if the player is close to the edge
playerman.x += playerman.speed #move everything the other direction
for enemy in enemies:
enemy.x += playerman.speed
if keys[pygame.K_RIGHT]:
playerman.x += playerman.speed
if playerman.x > 400:
playerman.x -= playerman.speed
for enemy in enemies:
enemy.x -= playerman.speed
и то же самое для прыжка
if playerman.y < 250:
playerman.y += 1
for enemy in enemies:
enemy.y += playerman.speed
Теперь я выбрал числа, которые должны быть ближе к краю, вы должны заменить 400
, 100
и 250
в переменные, чтобы вы могли их изменить.
Вот полный код:
import pygame
pygame.init()
window = pygame.display.set_mode((500,500))
pygame.display.set_caption("GET LOAD OF THIES")
# Character class
class players(object):
def __init__(self,x,y,height,width):
self.x = x
self.y = y
self.height = height
self.width = width
self.isJump = False
self.JumpCount = 10
self.fall = 0
self.speed = 5
self.rect = pygame.Rect(x,y,width,height)
#draw the player
def draw(self):
self.rect.topleft = (self.x, self.y)
pygame.draw.rect(window, (NiceGreen), self.rect)
# enemy class 1
class enemys(object):
def __init__(self,x,y,width,height,color):
self.x = x
self.y = y
self.height = height
self.width = width
self.rect = pygame.Rect(x,y,width,height)
self.color = color
#draw the enemy
def draw(self):
#update the rect with new positions
self.rect.topleft = (self.x, self.y)
pygame.draw.rect(window, self.color, self.rect)
# Colors
NiceBlue = (0,214, 82)
NiceGreen = (214,0,82)
# FPS
FPS = 60
clock = pygame.time.Clock()
# Defininition for the class player/enemys
playerman = players(50,390,20,20)
enemy1 = enemys(150,390,100,10, NiceBlue)
enemy2 = enemys(320,320,100,10, NiceBlue)
enemy3 = enemys(120,250,100,10, NiceBlue)
enemy4 = enemys(0,459,500,40, (230,4,231))
enemies = [enemy1,enemy2,enemy3,enemy4]
# Main loop
runninggame = True
while runninggame:
# Frames per second
clock.tick(FPS)
# Exit Event
for event in pygame.event.get():
if event.type == pygame.QUIT:
runninggame = False
#Draw The enemys and Main Characte
window.fill((0,0,0))
playerman.draw()
enemy1.draw()
enemy2.draw()
enemy3.draw()
enemy4.draw()
#check for scroll up
if playerman.y < 250:
playerman.y += 1
for enemy in enemies:
enemy.y += playerman.speed
#-----------------------------------------------------put here---------------
#check for scroll down
if playerman.y > 450: #somewhere close to the bottom of the screen
playerman.y -= playerman.fall #reverse direction
for enemy in enemies:
enemy.y -= playerman.fall
#---------------------------------------------------------------------------
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
playerman.x -= playerman.speed
#check to scroll left
if playerman.x < 100:
playerman.x += playerman.speed #move player back so doesnt go off screen
for enemy in enemies: #move everything in other direction
enemy.x += playerman.speed
if keys[pygame.K_RIGHT]:
playerman.x += playerman.speed
#check to scroll right
if playerman.x > 400:
playerman.x -= playerman.speed
for enemy in enemies:
enemy.x -= playerman.speed
if not playerman.isJump:
playerman.y += playerman.fall
playerman.fall += 1
# ----------------------------------------------------- # enem1 collisio
# both of my 2 enemy squares collisions push me back when ever I Jump on the top of them on there sides but when I jump on the middle of of both of them it seems to work if I just want it so when I jump on both of my squares I just don't get pushed back
collide = False
for enemy in enemies:
if playerman.rect.colliderect(enemy.rect):
collide = True
playerman.y = enemy.rect.top - playerman.height + 1 #had to add 1 to look smooth
if playerman.rect.right > enemy.rect.left and playerman.rect.left < enemy.rect.left - playerman.width:
playerman.x = enemy.rect.left - player.width
if playerman.rect.left < enemy.rect.right and playerman.rect.right > enemy.rect.right + playerman.width:
playerman.x = enemy.rect.right
break
if playerman.rect.bottom >= 500:
collide = True
playerman.isJump = False
playerman.JumpCount = 10
playerman.y = 500 - playerman.height
if collide:
if keys[pygame.K_SPACE]:
playerman.isJump = True
playerman.fall = 0
else:
if playerman.JumpCount > 0:
playerman.y -= (playerman.JumpCount * abs(playerman.JumpCount)) * 0.3
playerman.JumpCount -= 1
else:
playerman.JumpCount = 10
playerman.isJump = False
# update winodw event
pygame.display.update()
# quit event
pygame.quit()
#check for scroll up
if playerman.y > 450: #somewhere close to the bottom of the screen
playerman.y -= playerman.fall #reverse direction
for enemy in enemies:
enemy.y -= playerman.fall