⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interface.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 CPP
字号:
/************************************************************************ Copyright (C) 2000-2002 Trolltech AS.  All rights reserved.**** This file is part of the Qtopia Environment.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include "interface.h"#include <qtopia/resource.h>#include <qtopia/qpetoolbar.h>#include <qtoolbutton.h>#include <qstyle.h>#include <qapplication.h>#include <qmessagebox.h>SnakeGame::SnakeGame(QWidget* parent, const char* name, WFlags f) :    QMainWindow(parent,name,f),    canvas(232, 258),    ob_top(NULL), ob_bottom(NULL),    border_north(NULL), border_south(NULL),    border_east(NULL), border_west(NULL){    setCaption( tr("Snake") );    QPixmap bg = Resource::loadPixmap("grass");    canvas.setBackgroundPixmap(bg);    canvas.setUpdatePeriod(100);    snake = 0;    cv = new QCanvasView(&canvas, this);    setToolBarsMovable( FALSE );    QPEToolBar* toolbar = new QPEToolBar( this);    toolbar->setHorizontalStretchable( TRUE );    (void)new QToolButton(Resource::loadIconSet("Snake"), tr("New Game"), 0,                            this, SLOT(newGame()), toolbar, "New Game");    scorelabel = new QLabel(toolbar);    showScore(0);    scorelabel->setBackgroundMode( PaletteButton );    scorelabel->setAlignment( AlignRight | AlignVCenter | ExpandTabs );    toolbar->setStretchableWidget( scorelabel );    setFocusPolicy(StrongFocus);    setCentralWidget(cv);    gamestopped = true;     waitover = true;}SnakeGame::~SnakeGame(){   delete snake;}void SnakeGame::resizeEvent(QResizeEvent *){    QSize s = centralWidget()->size();    int fw = style().defaultFrameWidth();    canvas.resize( s.width() - fw - 2, s.height() - fw - 2);    if (snake) {	newGame();    } else {	setupWalls();    }}void SnakeGame::focusOutEvent(QFocusEvent *) {    if (snake)	snake->pause();}void SnakeGame::focusInEvent(QFocusEvent *) {    if (snake)	snake->pause();}void SnakeGame::newGame(){       clear();    snake = new Snake(&canvas);    connect(snake, SIGNAL(dead()), this, SLOT(gameOver()) );    connect(snake, SIGNAL(targethit()), this, SLOT(levelUp()) );    connect(snake, SIGNAL(scorechanged()), this, SLOT(scoreInc()) );    connect(this, SIGNAL(moveFaster()), snake, SLOT(increaseSpeed()) );    last = 0;    targetamount = 1;    notargets = 1;    level = 1;    stage = 1;    showScore(0);    gamestopped = false;    waitover = true;    setupWalls();    createTargets();}//// Create walls and obstacles.//voidSnakeGame::setupWalls(void){    if (ob_top) {	    // if one is setup, all are setup	delete ob_top;	delete ob_bottom;	delete border_north;	delete border_west;	delete border_east;	delete border_south;    }    ob_top = new Obstacle(&canvas, 64);    ob_bottom = new Obstacle(&canvas, canvas.height() - 50);    border_north = new Border(&canvas, Border::North);    border_west = new Border(&canvas, Border::West);    border_east = new Border(&canvas, Border::East);    border_south = new Border(&canvas, Border::South);}void SnakeGame::showScore(int score){    scorelabel->setText(tr("     Score :    %1   ").arg(score) );}void SnakeGame::scoreInc(){   showScore( snake->getScore() );}void SnakeGame::levelUp(){   notargets--;   if (notargets == 0) {        stage++;       if (stage == 3) {          level++;          emit moveFaster();          targetamount++;          stage = 0;       }       createTargets();   }}void SnakeGame::createTargets(){      Target  *foo;    int	    new_target_count = 0;    for (int i = 0; i < targetamount; i++) {	foo = new Target(&canvas);	if(foo->position() == FALSE) {	    delete foo;		// ran out of room for targets	} else {	    foo->show();	    new_target_count++;	}    }    notargets = targetamount = new_target_count;}void SnakeGame::clear(){   delete snake;   snake = 0;   QCanvasItemList l = canvas.allItems();   for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) {        delete *it;   }      ob_top = NULL;    ob_bottom = NULL;    border_north = NULL;    border_west = NULL;    border_east = NULL;    border_south = NULL;}void SnakeGame::gameOver(){   int score = snake->getScore();   QString scoreoutput="";   scoreoutput.setNum(score);   QCanvasText* gameover = new QCanvasText(tr("GAME OVER!\n Your Score: %1").arg( scoreoutput), &canvas);     gameover->setZ(100);   gameover->setColor(yellow);   gameover->setFont( QFont("times", 18, QFont::Bold) );   int w = gameover->boundingRect().width();   gameover->move(canvas.width()/2 -w/2, canvas.height()/2 -50);   gameover->show();   gamestopped = true;   waitover = false;}void SnakeGame::keyPressEvent(QKeyEvent* event){    if (gamestopped) {        if (waitover)            newGame();        else            return;   }   else {        int newkey = event->key();       snake->go(newkey);   }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -