Так что мне нужен совет/помощь в том, как сделать этот код/программу более ООП (объектно-ориентированное программирование).ООП (объектно-ориентированное программирование) dilemma
Я отправлю здесь весь код. Я планировал создавать отдельные модули, но я на самом деле это noob.
Немного предыстории об игре: Это игра с первым стартовым игровым экраном, затем экран сложности, а затем уровень один с овцами и лисой (player
), а затем уровень 2 вместо кроликов - свиньи и кабаны. Планирование также третьего уровня с тремя типами врагов.
Итак, любая помощь приветствуется, мне просто нужны некоторые советы и т. Д., Чтобы преобразовать этот код в объектно-ориентированное кодирование, которое легче читать и не так сильно нагружает процессор.
дальнейший прогресс в файле main.py:
# -*- coding: utf-8 -*-
#Så jag ska försöka göra koden objekt orienterad så man förstår bättre
#det är samt enklare att läsa.
import pygame, sys, random, math
from rabbits import Rabbit
from pigs import Pig
from boars import Boar
from pygame.locals import *
from threading import Timer
pygame.init()
pygame.mixer.init()
mainClock = pygame.time.Clock()
soundsDict = {"foxSound" : pygame.mixer.sound(sound/foxSound.wav),
"rabbitSound" : pygame.mixer.Sound('sounds/rabbitSound.wav'),
"pigSound" : pygame.mixer.Sound('sounds/pigSound.wav'),
"boarSound" : pygame.mixer.Sound('sounds/boarSound.wav')}
musicDict = {"musicMenu" : pygame.mixer.Sound('music/Who Likes To Party.ogg')}
spriteDict = {"playerImage" : pygame.image.load('textures/Fox.png'),
"playerImageTwo" : pygame.image.load('textures/Fox2.png'),
"rabbitImage" : pygame.image.load('textures/topic_rabbit.png'),
"rabbitImageTwo" : pygame.image.load('textures/topic_rabbit2.png'),
"pigImage" : pygame.image.load('textures/Pig.png'),
"pigImageTwo" : pygame.image.load('textures/Pig2.png'),
"boarImage" : pygame.image.load('textures/Boar.png'),
"boarImageTwo" : pygame.image.load('textures/Boar2.png')}
buttonDict = {"buttonEasyImage" : pygame.image.load('textures/buttonEasy.png'),
"buttonNormalImage" : pygame.image.load('textures/buttonNormal.png'),
"buttonHardImage" : pygame.image.load('textures/buttonHard.png')}
level = 1
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if level == 1:
player.update()
for rabbit in rabbits:
rabbit.update()
elif level == 2:
player.update()
for pig in pigs:
pig.update()
surface.fill((0, 0, 0))
MOVE_SPEED = 0
if level == 1:
# Play level 2 music
# Draw level 1 state to screen
Player.update()
Player.draw()
for rabbit in rabbits:
rabbit.draw(surface)
elif level == 2: #I get a weird indentation error here*
# Play level 2 music
# Draw level 2 state to screen
Player.update()
Player.draw()
for pig in pigs:
pig.draw(surface)
for boar in boars:
boar.draw(surface)
pygame.display.update()
mainClock.tick(60)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Итак, я сделал некоторый прогресс, просто хотел, чтобы ваше мнение, если я направляюсь в в правильном направлении, так сказать.
Вот файл player.py и файл boars.py, например (обновлено):
\player.py
# -*- coding: utf-8 -*-
import pygame, sys, random, math
class Player(object):
def __init__(self):
self.moveRight = False
self.moveLeft = False
self.moveUp = False
self.moveDown = False
def process_event(event):
if event.type == KEYDOWN:
if event.key == K_SPACE:
levelOne = False
if event.key == K_LEFT:
self.moveRight = False
self.moveLeft = True
if event.key == K_RIGHT:
self.moveRight = True
self.moveLeft = False
if event.key == K_UP:
self.moveDown = False
self.moveUp = True
if event.key == K_DOWN:
self.moveDown = True
self.moveUp = False
if event.type == KEYUP:
if event.key == K_LEFT:
self.moveLeft = False
if event.key == K_RIGHT:
self.moveRight = False
if event.key == K_UP:
self.moveUp = False
if event.key == K_DOWN:
self.moveDown = False
def update(self):
if moveDown and player.bottom < WINDOW_HEIGHT:
player.top += MOVE_SPEED
if moveUp and player.top > 0:
player.top -= MOVE_SPEED
if moveLeft and player.left > 0:
player.left -= MOVE_SPEED
if moveRight and player.right < WINDOW_WIDTH:
player.right += MOVE_SPEED
def draw(self, surface):
windowSurface.blit(playerImage, player)
~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~
\boars.py
# -*- coding: utf-8 -*-
import pygame, sys, random, math
class Boar(object):
boarCounter = 0
NEW_BOAR = 40
BOAR_SIZE = 64
boars = []
for i in range (10):
boars.append(pygame.Rect(random.randint(0, WINDOW_WIDTH
- BOAR_SIZE), random.randint (0, WINDOW_HEIGHT - BOAR_SIZE),
BOAR_SIZE, BOAR_SIZE))
def __init__(self):
pass
def update(self):
stepMovementNegativeBoar = random.randrange(0, -6, -2)
stepMovementPositiveBoar = random.randrange(0, 6, 2)
boarMovement = [((stepMovementNegativeBoar),0), ((stepMovementPositiveBoar), 0)
, (0, (stepMovementNegativeBoar)), (0, (stepMovementPositiveBoar))]
for boar in boars:
boar.move_ip(*random.choice(boarMovement))
for boar in boars[:]:
if player.colliderect(boar):
windowSurface.blit(boarImageTwo, boar)
windowSurface.blit(playerImageTwo, player)
def explosionBoar():
for boar in boars:
if player.colliderect(boar) and (moveLeft == False and
moveRight == False and moveUp == False and
moveDown == False):
boars.remove(boar)
if player.colliderect(boar) and (moveLeft == False and
moveRight == False and moveUp == False and moveDown == False):
#timer inställningar
tBoar = Timer(10, explosionPig)
tBoar.start()
def draw(self, surface):
boarCounter += 1
if boarCounter >= NEW_BOAR:
boarCounter = 0
boars.append(pygame.Rect(random.randint(0, WINDOW_WIDTH
- BOAR_SIZE), random.randint (0, WINDOW_HEIGHT - BOAR_SIZE),
BOAR_SIZE, BOAR_SIZE))
Здесь слишком много кода. –
Боюсь, что лучше начать и скопировать используемые части из приведенного выше кода. Прежде чем вы это сделаете, прочитайте ООП, объектно-ориентированное программирование, которое является официальным названием для того, что вы называете OOC, я думаю. У вас будет больше хитов. – bastijn