Source Code (Use browser search to find items of interest.)

Class Index

kasteroids'KAstTopLevel (./kdegames/kasteroids/toplevel.h:15)

class KAstTopLevel : public KFixedTopWidget
{
    Q_OBJECT
public:
    KAstTopLevel();
    virtual ~KAstTopLevel();

private:
    void createMenuBar();
    void readSettings();
    void playSound( const char *snd );
    void readSoundMapping();

protected:
    virtual void keyPressEvent( QKeyEvent *event );
    virtual void keyReleaseEvent( QKeyEvent *event );
    virtual void focusInEvent( QFocusEvent *event );
    virtual void focusOutEvent( QFocusEvent *event );

private slots:
    void slotNewGame();
    void slotQuit();

    void slotShipKilled();
    void slotRockHit( int size );
    void slotRocksRemoved();

private:
    KAsteroidsView *view;
    KMenuBar *menu;
    QLCDNumber *scoreLCD;
    QLCDNumber *levelLCD;
    QLCDNumber *shipsLCD;

    bool   sound;
    QDict<QString> soundDict;

    // waiting for user to press Enter to launch a ship
    bool waitShip;

    int shipsRemain;
    int score;
    int level;
};

kasteroids'KAstTopLevel::KAstTopLevel() (./kdegames/kasteroids/toplevel.cpp:74)

KAstTopLevel::KAstTopLevel() : KFixedTopWidget()
{
    setCaption( kapp->caption() );

    QWidget *mainWin = new QWidget( this );

    view = new KAsteroidsView( mainWin );
    connect( view, SIGNAL( shipKilled() ), SLOT( slotShipKilled() ) );
    connect( view, SIGNAL( rockHit(int) ), SLOT( slotRockHit(int) ) );
    connect( view, SIGNAL( rocksRemoved() ), SLOT( slotRocksRemoved() ) );

    QVBoxLayout *vb = new QVBoxLayout( mainWin );
    QHBoxLayout *hb = new QHBoxLayout;
    vb->addLayout( hb );

    QFont labelFont( "helvetica", 24 );
    QColorGroup grp( darkGreen, black, QColor( 128, 128, 128 ),
	    QColor( 64, 64, 64 ), black, darkGreen, black );
    QPalette pal( grp, grp, grp );

    mainWin->setPalette( pal );

    hb->addSpacing( 10 );

    QLabel *label;
    label = new QLabel( i18n("Score"), mainWin );
    label->setFont( labelFont );
    label->setPalette( pal );
    label->setFixedWidth( label->sizeHint().width() );
    hb->addWidget( label );

    scoreLCD = new QLCDNumber( 6, mainWin );
    scoreLCD->setFrameStyle( QFrame::NoFrame );
    scoreLCD->setSegmentStyle( QLCDNumber::Flat );
    scoreLCD->setFixedWidth( 150 );
    scoreLCD->setPalette( pal );
    hb->addWidget( scoreLCD );
    hb->addStretch( 10 );

    label = new QLabel( i18n("Level"), mainWin );
    label->setFont( labelFont );
    label->setPalette( pal );
    label->setFixedWidth( label->sizeHint().width() );
    hb->addWidget( label );

    levelLCD = new QLCDNumber( 2, mainWin );
    levelLCD->setFrameStyle( QFrame::NoFrame );
    levelLCD->setSegmentStyle( QLCDNumber::Flat );
    levelLCD->setFixedWidth( 70 );
    levelLCD->setPalette( pal );
    hb->addWidget( levelLCD );
    hb->addStretch( 10 );

    label = new QLabel( i18n("Ships"), mainWin );
    label->setFont( labelFont );
    label->setFixedWidth( label->sizeHint().width() );
    label->setPalette( pal );
    hb->addWidget( label );

    shipsLCD = new QLCDNumber( 1, mainWin );
    shipsLCD->setFrameStyle( QFrame::NoFrame );
    shipsLCD->setSegmentStyle( QLCDNumber::Flat );
    shipsLCD->setFixedWidth( 40 );
    shipsLCD->setPalette( pal );
    hb->addWidget( shipsLCD );

    hb->addStrut( 30 );

    QFrame *sep = new QFrame( mainWin );
    sep->setMaximumHeight( 5 );
    sep->setFrameStyle( QFrame::HLine | QFrame::Raised );
    sep->setPalette( pal );

    vb->addWidget( sep );

    vb->addWidget( view, 10 );
    vb->freeze( 640, 480 );

    createMenuBar();

    menu->show();
    setView( mainWin );
    setMenu( menu );

    setFocusPolicy( StrongFocus );
    setFocus();

    readSettings();
}


kasteroids'KAstTopLevel::~KAstTopLevel() (./kdegames/kasteroids/toplevel.cpp:164)

KAstTopLevel::~KAstTopLevel()
{
}


kasteroids'KAstTopLevel::createMenuBar() (./kdegames/kasteroids/toplevel.cpp:168)

void KAstTopLevel::createMenuBar()
{
    menu = new KMenuBar( this );
    CHECK_PTR( menu );

    QPopupMenu *fileMenu = new QPopupMenu;
    CHECK_PTR( fileMenu );
    fileMenu->insertItem( i18n( "&New Game" ), this,
	SLOT(slotNewGame()), CTRL+Key_N );
    fileMenu->insertSeparator( );
    fileMenu->insertItem( i18n( "&Quit" ), this, SLOT(slotQuit()),
	CTRL+Key_Q );

    KHelpMenu *help = new KHelpMenu(this,
                                    i18n("Asteroids %1\n\n"
                                         "by Martin R. Jones (mjones@kde.org)")
                                    .arg(KASTEROIDS_VERSION)); 

    menu->insertItem( i18n( "&File" ), fileMenu );
    menu->insertSeparator();
    menu->insertItem( i18n( "&Help" ), help->menu() );
}


kasteroids'KAstTopLevel::readSettings() (./kdegames/kasteroids/toplevel.cpp:191)

void KAstTopLevel::readSettings()
{
    KConfig *config = kapp->config();
    config->setGroup( "Sounds" );

    QString qs;

    for ( int i = 0; soundEvents[i]; i++ )
    {
	qs = config->readEntry( soundEvents[i] );
	if ( !qs.isEmpty() )
	    soundDict.insert( soundEvents[i], 
		new QString( locate("appdata", qs)) );
	else
	    soundDict.insert( soundEvents[i], 
		new QString( locate("appdata", soundDefaults[i])) );
    }

    qs = config->readEntry( "PlaySounds" );
    if ( qs.isEmpty() || qs != "Yes" )
	sound = false;
    else
	sound = true;
}


kasteroids'KAstTopLevel::playSound() (./kdegames/kasteroids/toplevel.cpp:216)

void KAstTopLevel::playSound( const char *snd )
{
    QString *filename = soundDict[ snd ];
    if (filename)
        KAudioPlayer::play( *filename );
}


kasteroids'KAstTopLevel::keyPressEvent() (./kdegames/kasteroids/toplevel.cpp:223)

void KAstTopLevel::keyPressEvent( QKeyEvent *event )
{
    switch ( event->key() )
    {
	case Key_Left:
	    view->rotateLeft( true );
	    event->accept();
	    break;

	case Key_Right:
	    view->rotateRight( true );
	    event->accept();
	    break;

	case Key_Up:
	    view->thrust( true );
	    event->accept();
	    break;

	case Key_Space:
	    view->shoot( true );
	    event->accept();
	    break;

	default:
	    event->ignore();
    }
}


kasteroids'KAstTopLevel::keyReleaseEvent() (./kdegames/kasteroids/toplevel.cpp:252)

void KAstTopLevel::keyReleaseEvent( QKeyEvent *event )
{
    switch ( event->key() )
    {
	case Key_Left:
	    view->rotateLeft( false );
	    event->accept();
	    break;

	case Key_Right:
	    view->rotateRight( false );
	    event->accept();
	    break;

	case Key_Up:
	    view->thrust( false );
	    event->accept();
	    break;

	case Key_Return:
	    if ( waitShip )
	    {
		view->newShip();
		event->accept();
		waitShip = false;
		view->hideText();
	    }
	    break;

	case Key_Space:
	    view->shoot( false );
	    event->accept();
	    break;

	default:
	    event->ignore();
    }
}


kasteroids'KAstTopLevel::focusInEvent() (./kdegames/kasteroids/toplevel.cpp:291)

void KAstTopLevel::focusInEvent( QFocusEvent * )
{
    XAutoRepeatOff( qt_xdisplay() );
}


kasteroids'KAstTopLevel::focusOutEvent() (./kdegames/kasteroids/toplevel.cpp:296)

void KAstTopLevel::focusOutEvent( QFocusEvent * )
{
    XAutoRepeatOn( qt_xdisplay() );
}


kasteroids'KAstTopLevel::slotNewGame() (./kdegames/kasteroids/toplevel.cpp:301)

void KAstTopLevel::slotNewGame()
{
    score = 0;
    scoreLCD->display( 0 );
    level = 0;
    levelLCD->display( level );
    shipsRemain = 5;
    shipsLCD->display( shipsRemain-1 );
    view->newGame();
    view->setRockSpeed( levels[0].rockSpeed );
    view->addRocks( levels[0].nrocks );
    view->showText( i18n( "Press Enter to launch." ), yellow );
    waitShip = true;
}


kasteroids'KAstTopLevel::slotQuit() (./kdegames/kasteroids/toplevel.cpp:316)

void KAstTopLevel::slotQuit()
{
    kapp->quit();
}


kasteroids'KAstTopLevel::slotShipKilled() (./kdegames/kasteroids/toplevel.cpp:321)

void KAstTopLevel::slotShipKilled()
{
    shipsRemain--;
    shipsLCD->display( shipsRemain-1 );

    playSound( "ShipDestroyed" );

    if ( shipsRemain )
    {
	waitShip = true;
	view->showText( i18n( "Ship Destroyed.  Press Enter to launch."), yellow );
    }
    else
    {
	QMessageBox::information(0,
	    i18n("Asteriods"),
	    i18n("Game Over!"),
	    i18n("OK"));
	view->endGame();
    }
}


kasteroids'KAstTopLevel::slotRockHit() (./kdegames/kasteroids/toplevel.cpp:343)

void KAstTopLevel::slotRockHit( int size )
{
    switch ( size )
    {
	case 0:
	    score += 10;
	    break;

	case 1:
	    score += 20;
	    break;

	default:
	    score += 40;
    }

    playSound( "RockDestroyed" );

    scoreLCD->display( score );
}


kasteroids'KAstTopLevel::slotRocksRemoved() (./kdegames/kasteroids/toplevel.cpp:364)

void KAstTopLevel::slotRocksRemoved()
{
    level++;

    if ( level >= MAX_LEVELS )
	level = MAX_LEVELS - 1;

    view->setRockSpeed( levels[level-1].rockSpeed );
    view->addRocks( levels[level-1].nrocks );

    levelLCD->display( level );
}