class GameBoard

Public Class Methods

new(parent = nil) click to toggle source
Calls superclass method
# File examples/tutorial/t13/gamebrd.rb, line 8
def initialize(parent = nil)
  super
  quit = Qt::PushButton.new('&Quit')
  quit.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))

  connect(quit, SIGNAL('clicked()'), $qApp, SLOT('quit()'))

  angle = LCDRange.new('ANGLE', self)
  angle.range = 5..70

  force = LCDRange.new('FORCE', self)
  force.range = 10..50

  @cannonField = CannonField.new(self)

  connect(angle, SIGNAL('valueChanged(int)'),
          @cannonField, SLOT('setAngle(int)'))
  connect(@cannonField, SIGNAL('angleChanged(int)'),
          angle, SLOT('setValue(int)'))

  connect(force, SIGNAL('valueChanged(int)'),
          @cannonField, SLOT('setForce(int)'))
  connect(@cannonField, SIGNAL('forceChanged(int)'),
          force, SLOT('setValue(int)'))

  connect(@cannonField, SIGNAL('hit()'),
              self, SLOT('hit()'))
  connect(@cannonField, SIGNAL('missed()'),
              self, SLOT('missed()'))

  shoot = Qt::PushButton.new('&Shoot', self)
  shoot.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))

  connect(shoot, SIGNAL('clicked()'), SLOT('fire()'))
  connect(@cannonField, SIGNAL('canShoot(bool)'),
              shoot, SLOT('setEnabled(bool)'))

  restart = Qt::PushButton.new('&New Game', self)
  restart.setFont(Qt::Font.new('Times', 18, Qt::Font::Bold))

  connect(restart, SIGNAL('clicked()'), self, SLOT('newGame()'))

  @hits = Qt::LCDNumber.new(2, self)
  @shotsLeft = Qt::LCDNumber.new(2, self)
  hitsLabel = Qt::Label.new('HITS', self)
  shotsLeftLabel = Qt::Label.new('SHOTS LEFT', self)

  topLayout = Qt::HBoxLayout.new
  topLayout.addWidget(shoot)
  topLayout.addWidget(@hits)
  topLayout.addWidget(hitsLabel)
  topLayout.addWidget(@shotsLeft)
  topLayout.addWidget(shotsLeftLabel)
  topLayout.addStretch(1)
  topLayout.addWidget(restart)

  leftLayout = Qt::VBoxLayout.new()
  leftLayout.addWidget(angle)
  leftLayout.addWidget(force)

  gridLayout = Qt::GridLayout.new
  gridLayout.addWidget(quit, 0, 0)
  gridLayout.addLayout(topLayout, 0, 1)
  gridLayout.addLayout(leftLayout, 1, 0)
  gridLayout.addWidget(@cannonField, 1, 1, 2, 1)
  gridLayout.setColumnStretch(1, 10)
  setLayout(gridLayout)

  angle.setValue(60)
  force.setValue(25)
  angle.setFocus()

  newGame()
end

Public Instance Methods

fire() click to toggle source
# File examples/tutorial/t13/gamebrd.rb, line 83
def fire()
  if @cannonField.gameOver() || @cannonField.isShooting()
    return
  end
  @shotsLeft.display(@shotsLeft.intValue() - 1)
  @cannonField.shoot()
end
hit() click to toggle source
# File examples/tutorial/t13/gamebrd.rb, line 91
def hit()
  @hits.display(@hits.intValue() + 1)
  if @shotsLeft.intValue() == 0
    @cannonField.setGameOver()
  else
    @cannonField.newTarget()
  end
end
missed() click to toggle source
# File examples/tutorial/t13/gamebrd.rb, line 100
def missed()
  if @shotsLeft.intValue() == 0
    @cannonField.setGameOver()
  end
end
newGame() click to toggle source
# File examples/tutorial/t13/gamebrd.rb, line 106
def newGame()
  @shotsLeft.display(15.0)
  @hits.display(0)
  @cannonField.restartGame()
  @cannonField.newTarget()
end