Advertisement
Guest User

Game.py

a guest
Aug 4th, 2011
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 13.51 KB | None | 0 0
  1.  
  2. from direct.showbase.ShowBase import ShowBase
  3. from pandac.PandaModules import*
  4. from direct.task import Task
  5. #import direct.directbase.DirectStart
  6. from panda3d.ai import *
  7.  
  8. import sys,__builtin__
  9.  
  10. from physics import Physics
  11. from field import Field
  12. from ball import Ball
  13. from player import Player
  14. from baliza import Baliza
  15. from keeper import Keeper
  16. from screen import Screen
  17. from menu import Menu
  18. from bancadas import Bancadas
  19.  
  20.  
  21. class Game(ShowBase):
  22.     def __init__(self):
  23.         ShowBase.__init__(self)
  24.        
  25.         #adding your sound setup at the very start of the application
  26.         self.setupSound()
  27.         self.setupClock()
  28.        
  29.         self.soundMenu.play()
  30.  
  31.         self.create_menu()
  32.  
  33.     def create_menu(self):
  34.         self.menu = Menu(self)
  35.         self.started = False
  36.    
  37.     #setting up clock as class attribute
  38.     def setupClock(self):
  39.         __builtin__.startTime = self.startTime = globalClock.getFrameTime()
  40.         __builtin__.tempo = self.tempo = 0
  41.         __builtin__.flag = self.flag = 0
  42.         __builtin__.cont = self.cont = 0
  43.    
  44.     #loading your sound inside this function
  45.     def setupSound(self):
  46.         __builtin__.soundAplaud1 = self.soundAplaud1 = loader.loadSfx("models/som1.wav")
  47.         __builtin__.soundMenu = self.soundMenu = loader.loadSfx("models/musica_menu.mp3")
  48.         __builtin__.soundArbitro = self.soundArbitro = loader.loadSfx("models/arbitro.mp3")
  49.         __builtin__.soundGoloPorto = self.soundGoloPorto = loader.loadSfx("models/golo_porto.mp3")
  50.         __builtin__.soundGoloBenfica = self.soundGoloBenfica = loader.loadSfx("models/golo_benfica.mp3")
  51.         __builtin__.soundSuperDragoes = self.soundSuperDragoes = loader.loadSfx("models/super_dragoes.mp3")
  52.    
  53.     def startGame(self):
  54.         self.menu.hide()
  55.        
  56.         #also changing your variables in other to be attributes of the class
  57.         # which in this case is Game
  58.         self.soundMenu.stop()
  59.         self.soundArbitro.play()
  60.         self.soundAplaud1.play()
  61.         self.soundSuperDragoes.setLoop(True)
  62.         self.soundSuperDragoes.play()
  63.         self.soundSuperDragoes.setVolume(0.4)
  64.  
  65.         self.physics = Physics()
  66.  
  67.         self.score = {"goalBlue":0,"goalRed":0}
  68.         self.screen=Screen(self.score)
  69.  
  70.         self.screen.updateTime(globalClock.reset())
  71.  
  72.         self.bancadas = Bancadas(self)
  73.  
  74.         self.field = Field(self)
  75.         self.ball = Ball(self)
  76.         self.playerBlue = Player(self.ball,(0,14,0),(0,0,0),"playerBlueNode","runBlueNode")
  77.         self.playerRed = Player(self.ball,(0,-14,0),(170,0,0),"playerRedNode","runRedNode")
  78.         self.keeperRed = Keeper(self.ball,self.physics,(0,-88,0),(170,0,0),"keeperRedNode")
  79.         self.keeperBlue = Keeper(self.ball,self.physics,(0,88,0),(0,0,0),"keeperBlueNode")
  80.  
  81.         base.disableMouse()
  82.  
  83.         self.queue = CollisionHandlerQueue()
  84.         self.traverser = CollisionTraverser()
  85.  
  86.         self.traverser.addCollider(self.playerBlue.colNode, self.queue)
  87.         self.traverser.addCollider(self.ball.colNode, self.queue)
  88.         #self.traverser.showCollisions(render)
  89.  
  90.         self.traverser.addCollider(self.playerRed.colNode, self.queue)
  91.         self.traverser.addCollider(self.ball.colNode, self.queue)
  92.         #self.traverser.showCollisions(render)
  93.  
  94.         self.traverser.addCollider(self.keeperRed.colNode, self.queue)
  95.         self.traverser.addCollider(self.ball.colNode, self.queue)
  96.         #self.traverser.showCollisions(render)
  97.  
  98.         self.traverser.addCollider(self.keeperBlue.colNode, self.queue)
  99.         self.traverser.addCollider(self.ball.colNode, self.queue)
  100.         #self.traverser.showCollisions(render)
  101.  
  102.         #self.setKeys()
  103.         self.baliza = {
  104.             "Blue" : Baliza(self, "goalBlue", 88,(180,0,0)),
  105.             "Red" : Baliza(self, "goalRed", -90,(0,0,0))
  106.         }
  107.  
  108.         taskMgr.add(self.updateScene, "updateScene")
  109.         self.physics.start(self.ball)
  110.  
  111.         self.started = True
  112.  
  113.         self.keyMap = {"leftBlue":0, "rightBlue":0, "forwardBlue":0, "backBlue":0, "cam-left":0, "cam-right":0,"leftRed":0, "rightRed":0, "forwardRed":0, "backRed":0}
  114.  
  115.         self.accept("arrow_left", self.setKey, ["leftBlue", 1])
  116.         self.accept("arrow_right", self.setKey, ["rightBlue", 1])
  117.         self.accept("arrow_up", self.setKey, ["forwardBlue", 1])
  118.         self.accept("arrow_down", self.setKey, ["backBlue",1])
  119.  
  120.         self.accept("arrow_left-up", self.setKey, ["leftBlue", 0])
  121.         self.accept("arrow_right-up", self.setKey, ["rightBlue", 0])
  122.         self.accept("arrow_up-up", self.setKey, ["forwardBlue", 0])
  123.         self.accept("arrow_down-up", self.setKey, ["backBlue", 0])
  124.  
  125.         self.accept("z", self.setKey, ["cam-left",1])
  126.         self.accept("x", self.setKey, ["cam-right",1])
  127.         self.accept("z-up", self.setKey, ["cam-left",0])
  128.         self.accept("x-up", self.setKey, ["cam-right",0])
  129.  
  130.         self.accept("enter", self.playerBlue.kick)
  131.  
  132.         self.accept("a", self.setKey, ["leftRed", 1])
  133.         self.accept("d", self.setKey, ["rightRed", 1])
  134.         self.accept("w", self.setKey, ["forwardRed", 1])
  135.         self.accept("s", self.setKey, ["backRed",1])
  136.  
  137.         self.accept("a-up", self.setKey, ["leftRed", 0])
  138.         self.accept("d-up", self.setKey, ["rightRed", 0])
  139.         self.accept("w-up", self.setKey, ["forwardRed", 0])
  140.         self.accept("s-up", self.setKey, ["backRed", 0])
  141.  
  142.         self.accept("u", self.playerRed.walkBall)
  143.         self.accept("space", self.playerRed.kick)
  144.  
  145.  
  146.         self.accept("escape", self.quit)
  147.  
  148.  
  149.     def setKey(self, key, value):
  150.         self.keyMap[key] = value
  151.  
  152.     def quit(self):
  153.         sys.exit()
  154.  
  155.     def updateScene(self, task):
  156.  
  157.         global flag
  158.         self.playerBlue.update(self.keyMap)
  159.         self.playerRed.update(self.keyMap)
  160.         inRange = False
  161.         self.traverser.traverse(render)
  162.  
  163.         self.screen.updateTime(startTime)
  164.         if globalClock.getFrameTime()>=360:
  165.             self.quit()
  166.         #    self.create_menu()
  167.         #    self.screen.updateTime(globalClock.reset())
  168.  
  169.  
  170.         for i in range(self.queue.getNumEntries()):
  171.             entry = self.queue.getEntry(i)
  172.             fromName = entry.getFromNodePath().getName()
  173.             intoName = entry.getIntoNodePath().getName()
  174.  
  175.             if fromName == "playerRedNode":#se for um player
  176.                 if intoName == "ballNode": #playerBlue na bola
  177.                     inRange = True
  178.                 elif intoName == "runRedNode" or intoName == "runBlueNode":
  179.                     pass
  180.                 elif intoName == "goalBlue" or intoName == "goalRed": #player nas balizas
  181.                     pass
  182.                 elif intoName == "playerBlueNode":
  183.                         pass
  184.                 elif intoName == "areaRedNode" or intoName == "areaBlueNode":#playerBlue na área
  185.                     pass
  186.                     #print("Jogador esta na area")
  187.                 else: #fronteira
  188.                     self.playerRed.retrocede()
  189.  
  190.  
  191.             if fromName == "playerBlueNode":#se for um player
  192.                 if intoName == "ballNode": #playerBlue na bola
  193.                     inRange = True
  194.                 elif intoName == "runRedNode" or intoName == "runBlueNode":
  195.                     pass
  196.                 elif intoName == "goalBlue" or intoName == "goalRed": #player nas balizas
  197.                     pass
  198.                     #print("player esta na Baliza")
  199.                 elif intoName == "playerRedNode":
  200.                         pass
  201.                 elif intoName == "areaRedNode" or intoName == "areaBlueNode":#playerBlue na área
  202.                     pass
  203.                     #print("Jogador esta na area")
  204.                 else: #fronteira
  205.                     self.playerBlue.retrocede()
  206.  
  207.             if fromName == "runBlueNode":
  208.                 if intoName == "ballNode":
  209.                     print("runBlueNode")
  210.                     self.playerBlue.walkBall()
  211.                 else:
  212.                      pass
  213.  
  214.             if fromName == "runRedNode":
  215.                  if intoName == "ballNode":
  216.                      print("runRedNode")
  217.                      self.playerRed.walkBall()
  218.                  else:
  219.                      pass
  220.  
  221.             elif fromName == "keeperRedNode":
  222.                 if intoName == "ballNode":#Guarda-redes na bola
  223.                     inRange = True
  224.                     #print("Guarda-redes a beira da bola")
  225.                 elif intoName == "areaRedNode" and flag==1:#Guarda redes na area e a bola na area
  226.                     pass
  227.                     flag=0
  228.                 elif intoName == "playerRedNode" or intoName == "playerBlueNode":#Se jogador passar pelo guarda redes nao colide
  229.                     pass
  230.                 elif intoName == "runRedNode" or intoName == "runBlueNode":
  231.                     print("keeperNode")
  232.                     pass
  233.                 else:#bola fora da area
  234.                     self.keeperRed.resetPosition()
  235.  
  236.             elif fromName == "keeperBlueNode":
  237.                 if intoName == "ballNode":#Guarda-redes na bola
  238.                     inRange = True
  239.                     #print("Guarda-redes a beira da bola")
  240.                 elif intoName == "areaBlueNode" and flag==1:#Guarda redes na area e a bola na area
  241.                     pass
  242.                     flag=0
  243.                 elif intoName == "playerRedNode" or intoName == "playerBlueNode":#Se jogador passar pelo guarda redes nao colide
  244.                     pass
  245.                 elif intoName == "runRedNode" or intoName == "runBlueNode":
  246.                     print("keeperNode")
  247.                     pass
  248.                 else:#bola fora da area
  249.                     self.keeperBlue.resetPosition()
  250.  
  251.  
  252.             elif fromName == "ballNode":#se for a bola
  253.                 if intoName == "playerBlueNode" or intoName == "playerRedNode":#bola no playerBlue
  254.                     pass
  255.                     flag=0
  256.                     #print("bola no playerBlue")
  257.                 elif intoName == "goalRed":#bola nas balizas
  258.                     self.score[intoName] += 1
  259.                     self.screen.update()
  260.                     flag=0
  261.                     soundGoloPorto.play()
  262.                     self.resetPositions()
  263.                     soundArbitro.play()
  264.                 elif intoName == "goalBlue":
  265.                     self.score[intoName] += 1
  266.                     self.screen.update()
  267.                     flag=0
  268.                     soundGoloBenfica.setVolume(0.5)
  269.                     soundGoloBenfica.play()
  270.  
  271.                     self.resetPositions()
  272.                     soundArbitro.play()
  273.                     #print("bola na baliza")
  274.                 elif intoName == "keeperRedNode":#bola no guarda redes
  275.                     self.keeperRed.catch()
  276.                     #print("guarda redes apanhou bola")
  277.                     self.keeperRed.kick()
  278.                     #print("guarda redes rematou")
  279.                     flag=0
  280.  
  281.                 elif intoName == "keeperBlueNode":#bola no guarda redes
  282.                     self.keeperBlue.catch()
  283.                     #print("guarda redes apanhou bola")
  284.                     self.keeperBlue.kick()
  285.                     #print("guarda redes rematou")
  286.                     flag=0
  287.  
  288.                 elif intoName == "areaRedNode":#bola na area
  289.                     self.setAI(intoName)
  290.                     #print("Bola na areaVermelha")
  291.                     flag=1
  292.                 elif intoName == "areaBlueNode":
  293.                     self.setAI(intoName)
  294.                     flag=1
  295.                 elif intoName == "runRedNode":
  296.                     self.playerRed.walkBall()
  297.                 elif intoName == "runBlueNode":
  298.                     self.playerBlue.walkBall()
  299.                     pass
  300.                     #print("Bola na areaAZUL")
  301.                 #quando a bola colide contra alguma coisa que nao seja um player
  302.                 #é considerado uma fronteira, então chama se o metodo de colisão
  303.                 #do campo ou bola, que manda a bola para tras...
  304.                 else:#fronteira
  305.                     self.field.collide(self.ball, intoName)
  306.                     flag=0
  307.  
  308.  
  309.  
  310.         if self.playerBlue.isInRange() != inRange or self.playerRed.isInRange() != inRange:
  311.             self.playerBlue.setInRange(inRange)
  312.             self.playerRed.setInRange(inRange)
  313.         return task.cont
  314.  
  315.     def setAI(self, intoName):
  316.         self.AIworld= AIWorld(render)
  317.         if intoName == "areaRedNode":
  318.             self.AIchar = AICharacter("keeper",self.keeperRed, 5000, 0.05, 5)
  319.             self.AIworld.addAiChar(self.AIchar)
  320.             self.AIbehaviors = self.AIchar.getAiBehaviors()
  321.  
  322.             self.AIbehaviors.seek(self.ball.model)
  323.             self.keeperRed.loop("run")
  324.  
  325.             self.keeperRed.update()
  326.             taskMgr.add(self.AIUpdate,"AIUpdate")
  327.  
  328.         elif intoName == "areaBlueNode":
  329.             self.AIchar = AICharacter("keeper",self.keeperBlue, 5000, 0.05, 5)
  330.             self.AIworld.addAiChar(self.AIchar)
  331.             self.AIbehaviors = self.AIchar.getAiBehaviors()
  332.  
  333.             self.AIbehaviors.seek(self.ball.model)
  334.             self.keeperBlue.loop("run")
  335.  
  336.             self.keeperBlue.update()
  337.             taskMgr.add(self.AIUpdate,"AIUpdate")
  338.  
  339.  
  340.  
  341.  
  342.     def AIUpdate(self,task):
  343.         self.AIworld.update()
  344.         return Task.cont
  345.  
  346.     def resetPositions(self):
  347.         self.ball.resetPosition()
  348.         self.playerBlue.resetPosition()
  349.         self.playerRed.resetPosition()
  350.         self.keeperRed.resetPosition()
  351.         self.keeperBlue.resetPosition()
  352. game = Game()
  353. game.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement