Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from direct.showbase.ShowBase import ShowBase
- from pandac.PandaModules import*
- from direct.task import Task
- #import direct.directbase.DirectStart
- from panda3d.ai import *
- import sys,__builtin__
- from physics import Physics
- from field import Field
- from ball import Ball
- from player import Player
- from baliza import Baliza
- from keeper import Keeper
- from screen import Screen
- from menu import Menu
- from bancadas import Bancadas
- class Game(ShowBase):
- def __init__(self):
- ShowBase.__init__(self)
- #adding your sound setup at the very start of the application
- self.setupSound()
- self.setupClock()
- self.soundMenu.play()
- self.create_menu()
- def create_menu(self):
- self.menu = Menu(self)
- self.started = False
- #setting up clock as class attribute
- def setupClock(self):
- __builtin__.startTime = self.startTime = globalClock.getFrameTime()
- __builtin__.tempo = self.tempo = 0
- __builtin__.flag = self.flag = 0
- __builtin__.cont = self.cont = 0
- #loading your sound inside this function
- def setupSound(self):
- __builtin__.soundAplaud1 = self.soundAplaud1 = loader.loadSfx("models/som1.wav")
- __builtin__.soundMenu = self.soundMenu = loader.loadSfx("models/musica_menu.mp3")
- __builtin__.soundArbitro = self.soundArbitro = loader.loadSfx("models/arbitro.mp3")
- __builtin__.soundGoloPorto = self.soundGoloPorto = loader.loadSfx("models/golo_porto.mp3")
- __builtin__.soundGoloBenfica = self.soundGoloBenfica = loader.loadSfx("models/golo_benfica.mp3")
- __builtin__.soundSuperDragoes = self.soundSuperDragoes = loader.loadSfx("models/super_dragoes.mp3")
- def startGame(self):
- self.menu.hide()
- #also changing your variables in other to be attributes of the class
- # which in this case is Game
- self.soundMenu.stop()
- self.soundArbitro.play()
- self.soundAplaud1.play()
- self.soundSuperDragoes.setLoop(True)
- self.soundSuperDragoes.play()
- self.soundSuperDragoes.setVolume(0.4)
- self.physics = Physics()
- self.score = {"goalBlue":0,"goalRed":0}
- self.screen=Screen(self.score)
- self.screen.updateTime(globalClock.reset())
- self.bancadas = Bancadas(self)
- self.field = Field(self)
- self.ball = Ball(self)
- self.playerBlue = Player(self.ball,(0,14,0),(0,0,0),"playerBlueNode","runBlueNode")
- self.playerRed = Player(self.ball,(0,-14,0),(170,0,0),"playerRedNode","runRedNode")
- self.keeperRed = Keeper(self.ball,self.physics,(0,-88,0),(170,0,0),"keeperRedNode")
- self.keeperBlue = Keeper(self.ball,self.physics,(0,88,0),(0,0,0),"keeperBlueNode")
- base.disableMouse()
- self.queue = CollisionHandlerQueue()
- self.traverser = CollisionTraverser()
- self.traverser.addCollider(self.playerBlue.colNode, self.queue)
- self.traverser.addCollider(self.ball.colNode, self.queue)
- #self.traverser.showCollisions(render)
- self.traverser.addCollider(self.playerRed.colNode, self.queue)
- self.traverser.addCollider(self.ball.colNode, self.queue)
- #self.traverser.showCollisions(render)
- self.traverser.addCollider(self.keeperRed.colNode, self.queue)
- self.traverser.addCollider(self.ball.colNode, self.queue)
- #self.traverser.showCollisions(render)
- self.traverser.addCollider(self.keeperBlue.colNode, self.queue)
- self.traverser.addCollider(self.ball.colNode, self.queue)
- #self.traverser.showCollisions(render)
- #self.setKeys()
- self.baliza = {
- "Blue" : Baliza(self, "goalBlue", 88,(180,0,0)),
- "Red" : Baliza(self, "goalRed", -90,(0,0,0))
- }
- taskMgr.add(self.updateScene, "updateScene")
- self.physics.start(self.ball)
- self.started = True
- self.keyMap = {"leftBlue":0, "rightBlue":0, "forwardBlue":0, "backBlue":0, "cam-left":0, "cam-right":0,"leftRed":0, "rightRed":0, "forwardRed":0, "backRed":0}
- self.accept("arrow_left", self.setKey, ["leftBlue", 1])
- self.accept("arrow_right", self.setKey, ["rightBlue", 1])
- self.accept("arrow_up", self.setKey, ["forwardBlue", 1])
- self.accept("arrow_down", self.setKey, ["backBlue",1])
- self.accept("arrow_left-up", self.setKey, ["leftBlue", 0])
- self.accept("arrow_right-up", self.setKey, ["rightBlue", 0])
- self.accept("arrow_up-up", self.setKey, ["forwardBlue", 0])
- self.accept("arrow_down-up", self.setKey, ["backBlue", 0])
- self.accept("z", self.setKey, ["cam-left",1])
- self.accept("x", self.setKey, ["cam-right",1])
- self.accept("z-up", self.setKey, ["cam-left",0])
- self.accept("x-up", self.setKey, ["cam-right",0])
- self.accept("enter", self.playerBlue.kick)
- self.accept("a", self.setKey, ["leftRed", 1])
- self.accept("d", self.setKey, ["rightRed", 1])
- self.accept("w", self.setKey, ["forwardRed", 1])
- self.accept("s", self.setKey, ["backRed",1])
- self.accept("a-up", self.setKey, ["leftRed", 0])
- self.accept("d-up", self.setKey, ["rightRed", 0])
- self.accept("w-up", self.setKey, ["forwardRed", 0])
- self.accept("s-up", self.setKey, ["backRed", 0])
- self.accept("u", self.playerRed.walkBall)
- self.accept("space", self.playerRed.kick)
- self.accept("escape", self.quit)
- def setKey(self, key, value):
- self.keyMap[key] = value
- def quit(self):
- sys.exit()
- def updateScene(self, task):
- global flag
- self.playerBlue.update(self.keyMap)
- self.playerRed.update(self.keyMap)
- inRange = False
- self.traverser.traverse(render)
- self.screen.updateTime(startTime)
- if globalClock.getFrameTime()>=360:
- self.quit()
- # self.create_menu()
- # self.screen.updateTime(globalClock.reset())
- for i in range(self.queue.getNumEntries()):
- entry = self.queue.getEntry(i)
- fromName = entry.getFromNodePath().getName()
- intoName = entry.getIntoNodePath().getName()
- if fromName == "playerRedNode":#se for um player
- if intoName == "ballNode": #playerBlue na bola
- inRange = True
- elif intoName == "runRedNode" or intoName == "runBlueNode":
- pass
- elif intoName == "goalBlue" or intoName == "goalRed": #player nas balizas
- pass
- elif intoName == "playerBlueNode":
- pass
- elif intoName == "areaRedNode" or intoName == "areaBlueNode":#playerBlue na área
- pass
- #print("Jogador esta na area")
- else: #fronteira
- self.playerRed.retrocede()
- if fromName == "playerBlueNode":#se for um player
- if intoName == "ballNode": #playerBlue na bola
- inRange = True
- elif intoName == "runRedNode" or intoName == "runBlueNode":
- pass
- elif intoName == "goalBlue" or intoName == "goalRed": #player nas balizas
- pass
- #print("player esta na Baliza")
- elif intoName == "playerRedNode":
- pass
- elif intoName == "areaRedNode" or intoName == "areaBlueNode":#playerBlue na área
- pass
- #print("Jogador esta na area")
- else: #fronteira
- self.playerBlue.retrocede()
- if fromName == "runBlueNode":
- if intoName == "ballNode":
- print("runBlueNode")
- self.playerBlue.walkBall()
- else:
- pass
- if fromName == "runRedNode":
- if intoName == "ballNode":
- print("runRedNode")
- self.playerRed.walkBall()
- else:
- pass
- elif fromName == "keeperRedNode":
- if intoName == "ballNode":#Guarda-redes na bola
- inRange = True
- #print("Guarda-redes a beira da bola")
- elif intoName == "areaRedNode" and flag==1:#Guarda redes na area e a bola na area
- pass
- flag=0
- elif intoName == "playerRedNode" or intoName == "playerBlueNode":#Se jogador passar pelo guarda redes nao colide
- pass
- elif intoName == "runRedNode" or intoName == "runBlueNode":
- print("keeperNode")
- pass
- else:#bola fora da area
- self.keeperRed.resetPosition()
- elif fromName == "keeperBlueNode":
- if intoName == "ballNode":#Guarda-redes na bola
- inRange = True
- #print("Guarda-redes a beira da bola")
- elif intoName == "areaBlueNode" and flag==1:#Guarda redes na area e a bola na area
- pass
- flag=0
- elif intoName == "playerRedNode" or intoName == "playerBlueNode":#Se jogador passar pelo guarda redes nao colide
- pass
- elif intoName == "runRedNode" or intoName == "runBlueNode":
- print("keeperNode")
- pass
- else:#bola fora da area
- self.keeperBlue.resetPosition()
- elif fromName == "ballNode":#se for a bola
- if intoName == "playerBlueNode" or intoName == "playerRedNode":#bola no playerBlue
- pass
- flag=0
- #print("bola no playerBlue")
- elif intoName == "goalRed":#bola nas balizas
- self.score[intoName] += 1
- self.screen.update()
- flag=0
- soundGoloPorto.play()
- self.resetPositions()
- soundArbitro.play()
- elif intoName == "goalBlue":
- self.score[intoName] += 1
- self.screen.update()
- flag=0
- soundGoloBenfica.setVolume(0.5)
- soundGoloBenfica.play()
- self.resetPositions()
- soundArbitro.play()
- #print("bola na baliza")
- elif intoName == "keeperRedNode":#bola no guarda redes
- self.keeperRed.catch()
- #print("guarda redes apanhou bola")
- self.keeperRed.kick()
- #print("guarda redes rematou")
- flag=0
- elif intoName == "keeperBlueNode":#bola no guarda redes
- self.keeperBlue.catch()
- #print("guarda redes apanhou bola")
- self.keeperBlue.kick()
- #print("guarda redes rematou")
- flag=0
- elif intoName == "areaRedNode":#bola na area
- self.setAI(intoName)
- #print("Bola na areaVermelha")
- flag=1
- elif intoName == "areaBlueNode":
- self.setAI(intoName)
- flag=1
- elif intoName == "runRedNode":
- self.playerRed.walkBall()
- elif intoName == "runBlueNode":
- self.playerBlue.walkBall()
- pass
- #print("Bola na areaAZUL")
- #quando a bola colide contra alguma coisa que nao seja um player
- #é considerado uma fronteira, então chama se o metodo de colisão
- #do campo ou bola, que manda a bola para tras...
- else:#fronteira
- self.field.collide(self.ball, intoName)
- flag=0
- if self.playerBlue.isInRange() != inRange or self.playerRed.isInRange() != inRange:
- self.playerBlue.setInRange(inRange)
- self.playerRed.setInRange(inRange)
- return task.cont
- def setAI(self, intoName):
- self.AIworld= AIWorld(render)
- if intoName == "areaRedNode":
- self.AIchar = AICharacter("keeper",self.keeperRed, 5000, 0.05, 5)
- self.AIworld.addAiChar(self.AIchar)
- self.AIbehaviors = self.AIchar.getAiBehaviors()
- self.AIbehaviors.seek(self.ball.model)
- self.keeperRed.loop("run")
- self.keeperRed.update()
- taskMgr.add(self.AIUpdate,"AIUpdate")
- elif intoName == "areaBlueNode":
- self.AIchar = AICharacter("keeper",self.keeperBlue, 5000, 0.05, 5)
- self.AIworld.addAiChar(self.AIchar)
- self.AIbehaviors = self.AIchar.getAiBehaviors()
- self.AIbehaviors.seek(self.ball.model)
- self.keeperBlue.loop("run")
- self.keeperBlue.update()
- taskMgr.add(self.AIUpdate,"AIUpdate")
- def AIUpdate(self,task):
- self.AIworld.update()
- return Task.cont
- def resetPositions(self):
- self.ball.resetPosition()
- self.playerBlue.resetPosition()
- self.playerRed.resetPosition()
- self.keeperRed.resetPosition()
- self.keeperBlue.resetPosition()
- game = Game()
- game.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement