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 );
}