Hello community, here is the log from the commit of package kblocks for openSUSE:Factory checked in at 2016-05-29 03:10:09 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kblocks (Old) and /work/SRC/openSUSE:Factory/.kblocks.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kblocks" Changes: -------- --- /work/SRC/openSUSE:Factory/kblocks/kblocks.changes 2016-04-05 10:42:57.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.kblocks.new/kblocks.changes 2016-05-29 03:10:10.000000000 +0200 @@ -1,0 +2,25 @@ +Sat May 7 10:18:02 UTC 2016 - [email protected] + +- Update to KDE Applications 16.04.1 + * KDE Applications 16.04.1 + * https://www.kde.org/announcements/announce-applications-16.04.1.php + + +------------------------------------------------------------------- +Sun Apr 17 05:57:08 UTC 2016 - [email protected] + +- Update to KDE Applications 16.04.0 + * KDE Applications 16.04.0 + * https://www.kde.org/announcements/announce-applications-16.04.0.php + + +------------------------------------------------------------------- +Mon Apr 11 06:34:37 UTC 2016 - [email protected] + +- Update to KDE Applications 16.03.90 + * KDE Applications 16.04.0 RC + * https://www.kde.org/announcements/announce-applications-16.04-rc.php + +- Drop upstreamed patches Unbreak-startup.patch and Use-KCrash.patch + +------------------------------------------------------------------- Old: ---- Unbreak-startup.patch Use-KCrash.patch kblocks-15.12.3.tar.xz New: ---- kblocks-16.04.1.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kblocks.spec ++++++ --- /var/tmp/diff_new_pack.L3YUiN/_old 2016-05-29 03:10:11.000000000 +0200 +++ /var/tmp/diff_new_pack.L3YUiN/_new 2016-05-29 03:10:11.000000000 +0200 @@ -42,13 +42,9 @@ License: LGPL-2.1+ Group: Amusements/Games/Strategy/Real Time Url: http://www.kde.org -Version: 15.12.3 +Version: 16.04.1 Release: 0 Source0: kblocks-%{version}.tar.xz -# PATCH-FIX-UPSTREAM Use-KCrash.patch boo#958086 -- initialize KDE's Crash dialog -Patch0: Use-KCrash.patch -# PATCH-FIX-UPSTREAM Unbreak-startup.patch kde#357408 -- fixes desktop freezing while kblocks is running and showing an error when it is closed -Patch1: Unbreak-startup.patch Obsoletes: %{name}5 < %{version} Provides: %{name}5 = %{version} BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -58,8 +54,6 @@ %prep %setup -q -n kblocks-%{version} -%patch0 -p1 -%patch1 -p1 %build %cmake_kf5 -d build @@ -84,7 +78,7 @@ %{_kf5_configkcfgdir}/kblocks.kcfg %{_kf5_configdir}/kblocks.knsrc %dir %_datadir/appdata -%_datadir/appdata/kblocks.appdata.xml +%_datadir/appdata/org.kde.kblocks.appdata.xml %_datadir/kxmlgui5/kblocks/ %changelog ++++++ kblocks-15.12.3.tar.xz -> kblocks-16.04.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kblocks-15.12.3/AI/KBlocksAILog.cpp new/kblocks-16.04.1/AI/KBlocksAILog.cpp --- old/kblocks-15.12.3/AI/KBlocksAILog.cpp 2016-02-28 20:46:10.000000000 +0100 +++ new/kblocks-16.04.1/AI/KBlocksAILog.cpp 2016-03-28 14:16:41.000000000 +0200 @@ -227,7 +227,7 @@ print(piece->getPosY()); println(")"); println("Cells: "); - for (int i = 0; i < KBlocksPiece_CellCount; i++) { + for (int i = 0; i < KBlocksPiece_CellCount; ++i) { if (x != -1) { gotoXY(x, y++); } @@ -249,12 +249,12 @@ { int w = field->getWidth(); int h = field->getHeight(); - for (int j = 0; j < h; j++) { + for (int j = 0; j < h; ++j) { if (x != -1) { gotoXY(x, y + j); } print("|"); - for (int i = 0; i < w; i++) { + for (int i = 0; i < w; ++i) { if (field->getCell(i, j)) { print("*"); } else { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kblocks-15.12.3/CMakeLists.txt new/kblocks-16.04.1/CMakeLists.txt --- old/kblocks-15.12.3/CMakeLists.txt 2016-02-28 20:46:10.000000000 +0100 +++ new/kblocks-16.04.1/CMakeLists.txt 2016-03-28 14:16:41.000000000 +0200 @@ -2,21 +2,25 @@ cmake_minimum_required (VERSION 2.8.12 FATAL_ERROR) set (QT_MIN_VERSION "5.3.0") +set (KF5_MIN_VERSION "5.15.0") find_package(ECM 1.7.0 REQUIRED CONFIG) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR}) -find_package(Qt5 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Widgets Svg Network ) -find_package(KF5 REQUIRED COMPONENTS +find_package(Qt5 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Widgets Svg Network) +find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS + Config + ConfigWidgets + CoreAddons + Crash DocTools + DBusAddons I18n + WidgetsAddons XmlGui - ) +) find_package(KF5KDEGames 4.9.0 REQUIRED) -find_package(Phonon4Qt5 CONFIG REQUIRED) - -include_directories(BEFORE ${PHONON_INCLUDES}) include(FeatureSummary) include(ECMInstallIcons) @@ -28,8 +32,9 @@ add_definitions(-DQT_USE_FAST_CONCATENATION -DQT_USE_FAST_OPERATOR_PLUS) -add_subdirectory( themes ) -add_subdirectory( doc ) +add_subdirectory(themes) +add_subdirectory(sounds) +add_subdirectory(doc) ########### next target ############### @@ -74,7 +79,8 @@ AI/KBlocksAIPlannerExtend.cpp AI/KBlocksAIEvaluation.cpp AI/KBlocksAIFeature.cpp - AI/KBlocksAILog.cpp ) + AI/KBlocksAILog.cpp +) kconfig_add_kcfg_files(kblocks_SRCS settings.kcfgc ) @@ -83,19 +89,28 @@ add_executable(kblocks ${kblocks_SRCS}) -target_link_libraries(kblocks KF5KDEGames KF5KDEGamesPrivate Phonon::phonon4qt5 Qt5::Network KF5::XmlGui KF5::I18n Qt5::Svg) +target_link_libraries(kblocks + KF5KDEGames + KF5KDEGamesPrivate + Qt5::Network + KF5::Crash + KF5::DBusAddons + KF5::XmlGui + KF5::I18n + Qt5::Svg +) install(TARGETS kblocks ${KDE_INSTALL_TARGETS_DEFAULT_ARGS} ) ########### install files ############### -install( PROGRAMS org.kde.kblocks.desktop DESTINATION ${KDE_INSTALL_APPDIR} ) -install( FILES kblocks.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR} ) -install( FILES kblocks.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR} ) -install( FILES kblocksui.rc DESTINATION ${KDE_INSTALL_KXMLGUI5DIR}/kblocks ) -install( FILES kblocks.knsrc DESTINATION ${KDE_INSTALL_CONFDIR} ) +install(PROGRAMS org.kde.kblocks.desktop DESTINATION ${KDE_INSTALL_APPDIR}) +install(FILES org.kde.kblocks.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR}) +install(FILES kblocks.kcfg DESTINATION ${KDE_INSTALL_KCFGDIR}) +install(FILES kblocksui.rc DESTINATION ${KDE_INSTALL_KXMLGUI5DIR}/kblocks) +install(FILES kblocks.knsrc DESTINATION ${KDE_INSTALL_CONFDIR}) -ecm_install_icons( ICONS 128-apps-kblocks.png 16-apps-kblocks.png 22-apps-kblocks.png 32-apps-kblocks.png 48-apps-kblocks.png 64-apps-kblocks.png DESTINATION ${KDE_INSTALL_ICONDIR} THEME hicolor ) +ecm_install_icons(ICONS 128-apps-kblocks.png 16-apps-kblocks.png 22-apps-kblocks.png 32-apps-kblocks.png 48-apps-kblocks.png 64-apps-kblocks.png DESTINATION ${KDE_INSTALL_ICONDIR} THEME hicolor) feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kblocks-15.12.3/KBlocksGameLogic.cpp new/kblocks-16.04.1/KBlocksGameLogic.cpp --- old/kblocks-15.12.3/KBlocksGameLogic.cpp 2016-02-28 20:46:10.000000000 +0100 +++ new/kblocks-16.04.1/KBlocksGameLogic.cpp 2016-03-28 14:16:41.000000000 +0200 @@ -234,7 +234,11 @@ if (mGameCount == 0) { return false; } - deleteSingleGames(); + + for (int i = 0; i < mGameCount; ++i) { + maGameList[i]->stopGame(); + } + emit allGamesStopped(); return true; } @@ -284,6 +288,8 @@ for (int i = 0; i < mGameCount; i++) { maGameList[i] = new KBlocksSingleGame(i); + connect(maGameList[i], &KBlocksSingleGame::gameStopped, + this, &KBlocksGameLogic::stopGame); maGameList[i]->setGameStandbyMode(mStandbyMode); maGameList[i]->setGameInterval(mGameInterval); maGameList[i]->setGameRecorder(mpGameRecorder); @@ -293,12 +299,18 @@ delete[] seedList; } -void KBlocksGameLogic::deleteSingleGames() +bool KBlocksGameLogic::deleteSingleGames() { + if (mGameCount == 0) { + return false; + } + for (int i = 0; i < mGameCount; i++) { maGameList[i]->stopGame(); delete maGameList[i]; maGameList[i] = 0; } mGameCount = 0; + + return true; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kblocks-15.12.3/KBlocksGameLogic.h new/kblocks-16.04.1/KBlocksGameLogic.h --- old/kblocks-15.12.3/KBlocksGameLogic.h 2016-02-28 20:46:10.000000000 +0100 +++ new/kblocks-16.04.1/KBlocksGameLogic.h 2016-03-28 14:16:41.000000000 +0200 @@ -11,6 +11,7 @@ #define KBLOCKSGAMELOGIC_H #include <stdlib.h> +#include <QObject> #include "GameLogicInterface.h" #include "SingleGameInterface.h" @@ -22,8 +23,10 @@ #include "KBlocksSingleGame.h" -class KBlocksGameLogic : public GameLogicInterface +class KBlocksGameLogic : public QObject, public GameLogicInterface { + Q_OBJECT + public: explicit KBlocksGameLogic(int capacity, bool record = false); explicit KBlocksGameLogic(KBlocksGameReplayer *p); @@ -49,14 +52,20 @@ void setLevelUpInterval(int interval); bool startGame(int gameCount); - bool stopGame(); void pauseGame(bool pauseFlag); void continueGame(); + bool deleteSingleGames(); + +public slots: + bool stopGame(); + +signals: + void allGamesStopped(); + private: void createSingleGames(int gameCount); - void deleteSingleGames(); protected: KBlocksSingleGame **maGameList; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kblocks-15.12.3/KBlocksKeyboardPlayer.cpp new/kblocks-16.04.1/KBlocksKeyboardPlayer.cpp --- old/kblocks-15.12.3/KBlocksKeyboardPlayer.cpp 2016-02-28 20:46:10.000000000 +0100 +++ new/kblocks-16.04.1/KBlocksKeyboardPlayer.cpp 2016-03-28 14:16:41.000000000 +0200 @@ -122,6 +122,7 @@ } else { mpGame->setCurrentPiece(-1, 0, 0); } + emit blockMoved(); } void KBlocksKeyboardPlayer::moveRight() @@ -134,6 +135,7 @@ } else { mpGame->setCurrentPiece(1, 0, 0); } + emit blockMoved(); } void KBlocksKeyboardPlayer::moveDown() @@ -146,6 +148,7 @@ } else { mpGame->setCurrentPiece(0, 1, 0); } + emit blockMoved(); } void KBlocksKeyboardPlayer::pushDown() @@ -159,6 +162,7 @@ while (mpGame->setCurrentPiece(0, 1, 0)) ; mpGame->forceUpdateGame(); } + emit blockDropped(); } void KBlocksKeyboardPlayer::rotateCW() @@ -171,6 +175,7 @@ } else { mpGame->setCurrentPiece(0, 0, -1); } + emit blockMoved(); } void KBlocksKeyboardPlayer::rotateCCW() @@ -183,4 +188,5 @@ } else { mpGame->setCurrentPiece(0, 0, 1); } + emit blockMoved(); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kblocks-15.12.3/KBlocksKeyboardPlayer.h new/kblocks-16.04.1/KBlocksKeyboardPlayer.h --- old/kblocks-15.12.3/KBlocksKeyboardPlayer.h 2016-02-28 20:46:10.000000000 +0100 +++ new/kblocks-16.04.1/KBlocksKeyboardPlayer.h 2016-03-28 14:16:41.000000000 +0200 @@ -42,6 +42,10 @@ private: void bindKeys(); +signals: + void blockMoved(); + void blockDropped(); + private slots: void moveLeft(); void moveRight(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kblocks-15.12.3/KBlocksScene.cpp new/kblocks-16.04.1/KBlocksScene.cpp --- old/kblocks-15.12.3/KBlocksScene.cpp 2016-02-28 20:46:10.000000000 +0100 +++ new/kblocks-16.04.1/KBlocksScene.cpp 2016-03-28 14:16:41.000000000 +0200 @@ -34,7 +34,7 @@ QString themeFile(Settings::theme()); mpGrafx = new KBlocksGraphics(themeFile); - mpSnd = new KBlocksSound(themeFile); + mpSnd = new KBlocksSound(); int width = (capacity >= mSceneGamesPerLine) ? mSceneGamesPerLine : (capacity % mSceneGamesPerLine); int height = (int)(capacity / (mSceneGamesPerLine + 1)) + 1; @@ -158,7 +158,6 @@ { if (mpGrafx->theme()->fileName() != Settings::theme()) { mpGrafx->loadTheme(Settings::theme()); - mpSnd->loadTheme(Settings::theme()); mpGrafx->adjustForSize(viewSize); updateDimensions(); } @@ -316,6 +315,10 @@ emit scoreChanged(i, maGameScoreList[i]->getScorePoint(), maGameScoreList[i]->getLineCount(), maGameScoreList[i]->getGameLevel()); + // Play sound only for human player + if (i == 0) { + mpSnd->playSound(Sound::BlockRemove); + } } else if (removedLines[i] == -1) { maGroupList[i]->stopGame(); if (mGroupCount == 1) { @@ -360,6 +363,16 @@ } } +void KBlocksScene::playMoveSound() +{ + mpSnd->playSound(Sound::BlockMove); +} + +void KBlocksScene::playDropSound() +{ + mpSnd->playSound(Sound::BlockFall); +} + void KBlocksScene::drawBackground(QPainter *painter, const QRectF &rect) { if (mpGrafx->renderer()->isValid()) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kblocks-15.12.3/KBlocksScene.h new/kblocks-16.04.1/KBlocksScene.h --- old/kblocks-15.12.3/KBlocksScene.h 2016-02-28 20:46:10.000000000 +0100 +++ new/kblocks-16.04.1/KBlocksScene.h 2016-03-28 14:16:41.000000000 +0200 @@ -75,6 +75,10 @@ void updateGame(); void readyForAction(int groupID); +public slots: + void playMoveSound(); + void playDropSound(); + protected: void drawBackground(QPainter *painter, const QRectF &rect); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kblocks-15.12.3/KBlocksSingleGame.cpp new/kblocks-16.04.1/KBlocksSingleGame.cpp --- old/kblocks-15.12.3/KBlocksSingleGame.cpp 2016-02-28 20:46:10.000000000 +0100 +++ new/kblocks-16.04.1/KBlocksSingleGame.cpp 2016-03-28 14:16:41.000000000 +0200 @@ -219,7 +219,10 @@ int KBlocksSingleGame::stopGame() { - mCurrentGameState = GameState_Stop; + if (mCurrentGameState != GameState_Stop) { + mCurrentGameState = GameState_Stop; + emit gameStopped(); + } return mCurrentGameState; } @@ -309,8 +312,8 @@ prepareNextPiece(); if (checkPieceTouchGround(mpPieceList[0])) { *gameResult = GameResult_Game_Over; - mCurrentGameState = GameState_Stop; mpGameMessage->putGameResult(-1); + stopGame(); } if (mpGameRecorder) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kblocks-15.12.3/KBlocksSingleGame.h new/kblocks-16.04.1/KBlocksSingleGame.h --- old/kblocks-15.12.3/KBlocksSingleGame.h 2016-02-28 20:46:10.000000000 +0100 +++ new/kblocks-16.04.1/KBlocksSingleGame.h 2016-03-28 14:16:41.000000000 +0200 @@ -11,6 +11,7 @@ #define KBLOCKSSINGLEGAME_H #include <sys/time.h> +#include <QObject> #include "SingleGameInterface.h" @@ -23,8 +24,10 @@ #include "KBlocksDefine.h" -class KBlocksSingleGame : public SingleGameInterface +class KBlocksSingleGame : public QObject, public SingleGameInterface { + Q_OBJECT + public: explicit KBlocksSingleGame(int gameIndex, int fieldWidth = 10, int fieldHeight = 20, int showPieceCount = 2, int messagePoolSize = 256); ~KBlocksSingleGame(); @@ -57,6 +60,9 @@ bool pickGameResult(int *result); bool pickGameAction(int *type, int *action); +signals: + void gameStopped(); + private: int doUpdateGame(bool force); bool runGameOneStep(int *gameResult); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kblocks-15.12.3/KBlocksSound.cpp new/kblocks-16.04.1/KBlocksSound.cpp --- old/kblocks-15.12.3/KBlocksSound.cpp 2016-02-28 20:46:10.000000000 +0100 +++ new/kblocks-16.04.1/KBlocksSound.cpp 2016-03-28 14:16:41.000000000 +0200 @@ -11,87 +11,53 @@ //Uses routines from Kapman sound manager (game.cpp) #include "KBlocksSound.h" -#include <QDebug> -#include <QFile> -#include <QFileInfo> +#include "settings.h" -#define USE_UNSTABLE_LIBKDEGAMESPRIVATE_API -#include <libkdegamesprivate/kgametheme.h> +#include <kgsound.h> -#include "settings.h" +#include <QDebug> +#include <QStandardPaths> -KBlocksSound::KBlocksSound(const QString &themeFile) +KBlocksSound::KBlocksSound() { - m_media1 = 0; - m_media2 = 0; - m_theme = new KGameTheme(); - if (!m_theme->load(themeFile)) { - qWarning() << "Error loading KBlocks .desktop theme" << themeFile << endl; - m_theme->loadDefault(); - qWarning() << "Load default sound theme." << endl; - } - readThemeValues(); + m_blockFallSound = new KgSound(QStandardPaths::locate( + QStandardPaths::DataLocation, "sounds/block-fall.ogg")); + m_blockMoveSound = new KgSound(QStandardPaths::locate( + QStandardPaths::DataLocation, "sounds/block-move.ogg")); + m_blockRemoveSound = new KgSound(QStandardPaths::locate( + QStandardPaths::DataLocation, "sounds/block-remove.ogg")); setSoundsEnabled(Settings::sounds()); } KBlocksSound::~KBlocksSound() { - delete m_theme; - delete m_media1; - delete m_media2; -} - -bool KBlocksSound::loadTheme(const QString &themeFile) -{ - if (!m_theme->load(themeFile)) { - qWarning() << "Error loading KBlocks .desktop theme" << themeFile << endl; - return false; - } - readThemeValues(); - return true; -} - -void KBlocksSound::readThemeValues() -{ - //Extract sound directory info - //This functionality should be exposed by KGameTheme - QFile themefile(m_theme->path()); - sndDirectory = QFileInfo(themefile).absolutePath() + '/'; - themefile.close(); + delete m_blockFallSound; + delete m_blockMoveSound; + delete m_blockRemoveSound; } void KBlocksSound::setSoundsEnabled(bool p_enabled) { sndActive = p_enabled; - if (p_enabled) { - if (!m_media1) { - m_media1 = Phonon::createPlayer(Phonon::GameCategory); - } - if (!m_media2) { - m_media2 = Phonon::createPlayer(Phonon::GameCategory); - } - } else { - delete m_media1; - delete m_media2; - m_media1 = 0; - m_media2 = 0; - } } -void KBlocksSound::playSound(const QString &p_soundkey) +void KBlocksSound::playSound(Sound soundType) { - Phonon::MediaObject *m_usedMedia; - QString p_sound = sndDirectory + m_theme->themeProperty(p_soundkey); - //qDebug() << "Playing sound : " << p_sound << endl; if (sndActive) { - // Choose the media object with the smallest remaining time - if (m_media1->remainingTime() <= m_media2->remainingTime()) { - m_usedMedia = m_media1; - } else { - m_usedMedia = m_media2; + switch (soundType) { + case Sound::BlockFall: + m_blockFallSound->start(); + break; + case Sound::BlockMove: + m_blockMoveSound->start(); + break; + case Sound::BlockRemove: + m_blockRemoveSound->start(); + break; + default: + qDebug() << "Unknown Sound requested for playback."; + break; } - m_usedMedia->setCurrentSource(p_sound); - m_usedMedia->play(); } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kblocks-15.12.3/KBlocksSound.h new/kblocks-16.04.1/KBlocksSound.h --- old/kblocks-15.12.3/KBlocksSound.h 2016-02-28 20:46:10.000000000 +0100 +++ new/kblocks-16.04.1/KBlocksSound.h 2016-03-28 14:16:41.000000000 +0200 @@ -11,31 +11,28 @@ #ifndef KBLOCKSSOUND_H #define KBLOCKSSOUND_H -class KGameTheme; -#include <QHash> -#include <Phonon/MediaObject> +class KgSound; + +enum class Sound { + BlockFall, + BlockMove, + BlockRemove +}; class KBlocksSound { public: - explicit KBlocksSound(const QString &themeFile); - virtual ~KBlocksSound(); + KBlocksSound(); + ~KBlocksSound(); public: - bool loadTheme(const QString &themeFile); - void readThemeValues(); void setSoundsEnabled(bool p_enabled); - void playSound(const QString &p_sound); - KGameTheme *theme() - { - return m_theme; - } + void playSound(Sound soundType); private: - KGameTheme *m_theme; - QString sndDirectory; - Phonon::MediaObject *m_media1; - Phonon::MediaObject *m_media2; + KgSound *m_blockFallSound; + KgSound *m_blockMoveSound; + KgSound *m_blockRemoveSound; bool sndActive; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kblocks-15.12.3/KBlocksWin.cpp new/kblocks-16.04.1/KBlocksWin.cpp --- old/kblocks-15.12.3/KBlocksWin.cpp 2016-02-28 20:46:10.000000000 +0100 +++ new/kblocks-16.04.1/KBlocksWin.cpp 2016-03-28 14:16:41.000000000 +0200 @@ -44,10 +44,18 @@ mMaxGameCapacity = capacity; mGameCount = gamecount; mpGameLogic = p; + connect(mpGameLogic, &KBlocksGameLogic::allGamesStopped, + this, &KBlocksWin::onAllGamesStopped); + mpPlayManager = pM; mpGameScene = new KBlocksScene(mpGameLogic, capacity); + connect(mpKBPlayer, &KBlocksKeyboardPlayer::blockMoved, + mpGameScene, &KBlocksScene::playMoveSound); + connect(mpKBPlayer, &KBlocksKeyboardPlayer::blockDropped, + mpGameScene, &KBlocksScene::playDropSound); + mpGameView = new KBlocksView(mpGameScene, this); mpGameView->show(); setCentralWidget(mpGameView); @@ -121,17 +129,17 @@ } mScore->setText(i18n("Points: %1 - Lines: %2 - Level: %3", 0, 0, 0)); + + m_pauseAction->setEnabled(true); + m_pauseAction->setChecked(false); } void KBlocksWin::stopGame() { - if (mpGameLogic->stopGame()) { - mpPlayManager->stopGame(); - + if (mpGameLogic->deleteSingleGames()) { + // Clear the game field mpGameScene->stopGame(); mpGameScene->deleteGameItemGroups(); - - Kg::difficulty()->setGameRunning(false); } } @@ -141,9 +149,19 @@ mpPlayManager->pauseGame(m_pauseAction->isChecked()); mpGameScene->pauseGame(m_pauseAction->isChecked()); + mpKBPlayer->pauseGame(m_pauseAction->isChecked()); + mpAIPlayer->pauseGame(m_pauseAction->isChecked()); + Kg::difficulty()->setGameRunning(!m_pauseAction->isChecked()); } +void KBlocksWin::onAllGamesStopped() +{ + mpPlayManager->stopGame(); + m_pauseAction->setEnabled(false); + Kg::difficulty()->setGameRunning(false); +} + void KBlocksWin::singleGame() { mpPlayManager->stopGame(); @@ -260,6 +278,7 @@ m_pauseAction = KStandardGameAction::pause(this, SLOT(pauseGame()), actionCollection()); actionCollection()->addAction(QStringLiteral("pauseGame"), m_pauseAction); + m_pauseAction->setEnabled(false); action = KStandardGameAction::highscores(this, SLOT(showHighscore()), actionCollection()); actionCollection()->addAction(QStringLiteral("showHighscores"), action); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kblocks-15.12.3/KBlocksWin.h new/kblocks-16.04.1/KBlocksWin.h --- old/kblocks-15.12.3/KBlocksWin.h 2016-02-28 20:46:10.000000000 +0100 +++ new/kblocks-16.04.1/KBlocksWin.h 2016-03-28 14:16:41.000000000 +0200 @@ -52,6 +52,7 @@ void showHighscore(); void onScoreChanged(int index, int points, int lines, int level); void onIsHighscore(int index, int points, int level); + void onAllGamesStopped(); void levelChanged(); void setSoundsEnabled(bool enabled); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kblocks-15.12.3/kblocks.appdata.xml new/kblocks-16.04.1/kblocks.appdata.xml --- old/kblocks-15.12.3/kblocks.appdata.xml 2016-02-28 20:46:10.000000000 +0100 +++ new/kblocks-16.04.1/kblocks.appdata.xml 1970-01-01 01:00:00.000000000 +0100 @@ -1,116 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<component type="desktop"> - <id>org.kde.kblocks.desktop</id> - <metadata_license>CC0-1.0</metadata_license> - <project_license>GPL-2.0+</project_license> - <name>KBlocks</name> - <name xml:lang="ast">KBlocks</name> - <name xml:lang="bs">KBlocks</name> - <name xml:lang="ca">KBlocks</name> - <name xml:lang="ca-valencia">KBlocks</name> - <name xml:lang="cs">KBlocks</name> - <name xml:lang="da">KBlocks</name> - <name xml:lang="de">KBlocks</name> - <name xml:lang="en-GB">KBlocks</name> - <name xml:lang="es">KBlock</name> - <name xml:lang="et">KBlocks</name> - <name xml:lang="fi">KBlocks</name> - <name xml:lang="gl">KBlocks</name> - <name xml:lang="it">KBlocks</name> - <name xml:lang="ko">KBlocks</name> - <name xml:lang="nl">KBlocks</name> - <name xml:lang="nn">KBlocks</name> - <name xml:lang="pl">KBloki</name> - <name xml:lang="pt">KBlocks</name> - <name xml:lang="pt-BR">KBlocks</name> - <name xml:lang="ro">KBlocks</name> - <name xml:lang="ru">KBlocks</name> - <name xml:lang="sk">KBlocks</name> - <name xml:lang="sl">KBlocks</name> - <name xml:lang="sr">К‑блокови</name> - <name xml:lang="sr-Latn">K‑blokovi</name> - <name xml:lang="sr-ijekavian">К‑блокови</name> - <name xml:lang="sr-ijekavianlatin">K‑blokovi</name> - <name xml:lang="sv">Kblock</name> - <name xml:lang="tr">KBlocks</name> - <name xml:lang="uk">KBlocks</name> - <name xml:lang="x-test">xxKBlocksxx</name> - <name xml:lang="zh-CN">KBlocks</name> - <name xml:lang="zh-TW">KBlocks</name> - <summary>Falling Blocks Game</summary> - <summary xml:lang="ast">Xuegu de bloques que cayen</summary> - <summary xml:lang="bs">Igra padajući blokovi</summary> - <summary xml:lang="ca">Joc de blocs que cauen</summary> - <summary xml:lang="ca-valencia">Joc de blocs que cauen</summary> - <summary xml:lang="cs">Hra s padajícími bloky</summary> - <summary xml:lang="de">„Tetris“-Spiel</summary> - <summary xml:lang="en-GB">Falling Blocks Game</summary> - <summary xml:lang="es">Juego de caída de bloques</summary> - <summary xml:lang="et">Langevate klotside mäng</summary> - <summary xml:lang="fi">Putoavien kappaleiden peli</summary> - <summary xml:lang="gl">Xogo no que caen bloques</summary> - <summary xml:lang="it">Gioco con oggetti che cadono</summary> - <summary xml:lang="ko">떨어지는 블록 게임</summary> - <summary xml:lang="nl">Vallende blokken-spel</summary> - <summary xml:lang="nn">Spel med fallande brikker</summary> - <summary xml:lang="pl">Gra w spadające bloki</summary> - <summary xml:lang="pt">Jogo de Blocos em Queda</summary> - <summary xml:lang="pt-BR">Jogo estilo Tetris</summary> - <summary xml:lang="ro">Joc de blocuri căsătoare</summary> - <summary xml:lang="ru">Клон игры Тетрис</summary> - <summary xml:lang="sk">Hra s padajúcimi blokmi</summary> - <summary xml:lang="sl">Igra padajočih kock</summary> - <summary xml:lang="sr">Игра падајућих блокова</summary> - <summary xml:lang="sr-Latn">Igra padajućih blokova</summary> - <summary xml:lang="sr-ijekavian">Игра падајућих блокова</summary> - <summary xml:lang="sr-ijekavianlatin">Igra padajućih blokova</summary> - <summary xml:lang="sv">Spel med fallande block</summary> - <summary xml:lang="tr">Düşen Bloklar Oyunu</summary> - <summary xml:lang="uk">Гра з блоками, що падають</summary> - <summary xml:lang="x-test">xxFalling Blocks Gamexx</summary> - <summary xml:lang="zh-CN">俄罗斯方块游戏</summary> - <summary xml:lang="zh-TW">類似俄羅斯方塊遊戲</summary> - <description> - <p> - KBlocks is the classic falling blocks game. The idea is to stack the falling blocks to create horizontal - lines without any gaps. When a line is completed it is removed, and more space is available in the play area. - When there is not enough space for blocks to fall, the game is over. - </p> - <p xml:lang="ast">KBlocks ye'l xuegu clásicu de los bloque que cayen. La idea ye amontonar los bloques que cayen pa crear llinies horizontales ensin güecos. Cuando una llinia se completa, hai disponible más espaciu nel area de xuegu. Cuando nun hai espaciu abondo pa los bloques que cayen, la partida fínase.</p> - <p xml:lang="ca">El KBlocks és el joc clàssic de blocs que cauen. La idea és apilar els blocs que cauen per crear línies horitzontals sense cap forat. Quan s'ha completat una línia, aquesta s'elimina i queda més espai disponible a l'àrea de joc. Quan no hi ha espai suficient per als blocs que cauen el joc finalitza.</p> - <p xml:lang="ca-valencia">El KBlocks és el joc clàssic de blocs que cauen. La idea és apilar els blocs que cauen per crear línies horitzontals sense cap forat. Quan s'ha completat una línia, esta s'elimina i queda més espai disponible a l'àrea de joc. Quan no hi ha espai suficient per als blocs que cauen el joc finalitza.</p> - <p xml:lang="de">KBlocks ist ein klassisches Tetris-Spiel. Die herunterfallenden Blöcke müssen so gestapelt werden, dass sie waagerechte Zeilen ohne Lücken bilden. Eine solche Zeile verschwindet dann, und im Spielfeld ist wieder mehr Platz. Wenn es keinen Platz mehr für herunterfallende Blöcke gibt, ist das Spiel zu Ende.</p> - <p xml:lang="en-GB">KBlocks is the classic falling blocks game. The idea is to stack the falling blocks to create horizontal lines without any gaps. When a line is completed it is removed, and more space is available in the play area. When there is not enough space for blocks to fall, the game is over.</p> - <p xml:lang="es">KBlocks es un juego clásico de caída de bloques. La idea es apilar los bloques que van cayendo para crear líneas horizontaes sin huecos. Cuando se completa una línea se elimina, y hay más espacio disponible en la zona de juego. Cuando no queda más sitio para que los bloques caigan, se termina el juego.</p> - <p xml:lang="et">KBlocks on klassikaline langevate klotside mäng. Selle mõte on asetada langevad klotsid nii, et read saaksid rõhtsuunas täis. Kui rida on täis, see eemaldatakse ning mänguväljale tekib ruumi juurde. Kui klotsil ei ole enam ruumi langeda, on mäng läbi.</p> - <p xml:lang="fi">KBlock on perinteinen putoavien kappaleiden peli. Tavoitteena on kasata putoavat kappaleet aukottomiksi vaakariveiksi. Kun rivi on valmis, se poistetaan ja pelialue kasvaa. Kun kappaleilla ei ole enää tilaa pudota, peli on lopussa.</p> - <p xml:lang="gl">KBlocks é o xogo clásico dos bloques que caen A idea é amorear os bloques que caen de xeito que se formen liñas horizontais completas, sen ocos. Cando se completa unha liña, esta elimínase e amplíase o espazo dispoñíbel na área de xogo. Cando non fica espazo abondo para que caian os bloques, a partida acaba.</p> - <p xml:lang="it">KBlocks è il classico gioco di blocchi in caduta. L'idea è impilarli in modo da riempire completamente delle righe. Quando una riga è completata viene rimossa, e c'è più spazio a disposizione nell'area di gioco. Quando manca lo spazio per far cadere i blocchi, la partita finisce. </p> - <p xml:lang="ko">KBlocks는 떨어지는 블록 게임입니다. 떨어지는 블록을 맞추어서 빈틈 없는 수평선을 만드는 것이 목표입니다. 줄을 맞추면 지워져서 더 많은 공간이 생기며, 더 이상 블록이 내려올 수 없으면 게임이 끝납니다.</p> - <p xml:lang="nl">KBlocks is het klassieke spel met vallende blokken Het idee is de vallende blokken zo op te stapelen dat horizontale lijnen volledig zijn opgevuld. Wanneer een lijn volledig is opgevuld wordt deze verwijderd en komt er meer ruimte in het speelgebied. Wanneer er onvoldoende ruimte over is om een blok te laten vallen is het spel over.</p> - <p xml:lang="nn">KBlocks er eit klassisk spel med fallande brikker. Du må stabla brikkene oppå kvarandre slik at det ikkje vert nokon mellomrom mellom brikkene bortover. Når ei heil linje er fylt, vert ho fjerna, og du har meir plass til nye brikker. Når du ikkje har nok plass til fleire brikker, er spelet slutt.</p> - <p xml:lang="pl">KBloki jest klasyczną grą w spadające bloki. Celem jest takie układanie spadających bloków, aby tworzyły one poziome linie bez przerw. Po ułożeniu takiej linii jest ona usuwana zwalniając miejsce w obszarze gry. Brak miejsca na spadające bloki oznacza przegraną.</p> - <p xml:lang="pt">O KBlocks é o clássico jogo de blocos em queda. A ideia é empilhar os blocos em queda para criar linhas horizontais sem lacunas. Quando uma linha ficar completa, será removida, ficando mais espaço disponível na área de jogo. Quando não existir mais espaço para os blocos caírem, o jogo terminou.</p> - <p xml:lang="pt-BR">KBlocks é o clássico jogo de encaixar blocos A ideia é empilhar os blocos para criar linhas horizontais sem lacunas. Quando completa-se uma linha, a mesma é removida, abrindo mais espaço na área de jogo. O jogo acaba quando não há mais espaço suficiente para os blocos caírem.</p> - <p xml:lang="ru">KBlocks — клон игры Тетрис. Нужно складывать падающий блоки так, чтобы получались горизонтальные ряды без пропусков. Когда ряд заполнен, он удаляется, освобождая место на игровом поле. Игра заканчивается, когда блоку негде упасть.</p> - <p xml:lang="sk">KBlocks je klasická hra padajúcich blokov. Cieľom je na seba padajúcimi blokmi vytvoriť horizontálne línie bez medzier. Ak je linka dokončená, je odstránená, a viac priestoru je k dispozícii na hru. Keď nie je dostatok miesta pre bloky na padanie, hra sa končí.</p> - <p xml:lang="sl">KBlocks je klasična igra padajočih kock. V igri združujete padajoče kocke v vodoravne vrste brez vmesnih praznin. Ko se vrsta odstrani, se sprosti tudi igralna površina. Igre je konec, ko zmanjka prostora za padajoče kocke.</p> - <p xml:lang="sr">К‑блокови је класична игра падајућих блокова. Идеја је да се падајући блокови слажу у водоравне редове без процепа. Ред се уклања када се доврши, остављајући више простора у зони игре. Када више нема простора за нове блокове, партија је готова.</p> - <p xml:lang="sr-Latn">K‑blokovi je klasična igra padajućih blokova. Ideja je da se padajući blokovi slažu u vodoravne redove bez procepa. Red se uklanja kada se dovrši, ostavljajući više prostora u zoni igre. Kada više nema prostora za nove blokove, partija je gotova.</p> - <p xml:lang="sr-ijekavian">К‑блокови је класична игра падајућих блокова. Идеја је да се падајући блокови слажу у водоравне редове без процепа. Ред се уклања када се доврши, остављајући више простора у зони игре. Када више нема простора за нове блокове, партија је готова.</p> - <p xml:lang="sr-ijekavianlatin">K‑blokovi je klasična igra padajućih blokova. Ideja je da se padajući blokovi slažu u vodoravne redove bez procepa. Red se uklanja kada se dovrši, ostavljajući više prostora u zoni igre. Kada više nema prostora za nove blokove, partija je gotova.</p> - <p xml:lang="sv">Kblock är det klassiska spelet med fallande block. Idén är att lägga de fallande blocken för att skapa horisontella rader utan några mellanrum. När en rad är färdig tas den bort, och mer utrymme blir tillgängligt i spelområdet. När det inte finns tillräckligt med utrymme för block att falla är spelet slut.</p> - <p xml:lang="tr">KBlocks klasik bir düşen bloklar oyunudur. Buradaki fikir düşen blokları yatay satırlar oluşturacak şekilde dizmektir. Bir satır tamamlandığında o kaldırılır ve oyun için daha fazla alan açılmış olur. Düşecek bloklar için yer kalmadığında oyun bitmiş olur.</p> - <p xml:lang="uk">KBlocks — це класична гра з блоками, що падають. Мета гри полягає у тому, щоб розташовувати блоки так, щоб вони повністю заповнювали горизонтальні ряди. Після повного заповнення ряду його буде вилучено, і у області для гри з’явиться більше простору. Якщо для падіння наступного блоку місця вже не буде, гру буде завершено.</p> - <p xml:lang="x-test">xxKBlocks is the classic falling blocks game. The idea is to stack the falling blocks to create horizontal lines without any gaps. When a line is completed it is removed, and more space is available in the play area. When there is not enough space for blocks to fall, the game is over.xx</p> - <p xml:lang="zh-TW">KBlocks 是類似俄羅斯方塊的遊戲。俄羅斯方塊的玩法還需要多做介紹嗎?</p> - </description> - <url type="bugtracker">https://bugs.kde.org/enter_bug.cgi?format=guided&product=kblocks</url> - <url type="help">http://docs.kde.org/stable/en/kdegames/kblocks/index.html</url> - <screenshots> - <screenshot type="default"> - <image>http://kde.org/images/screenshots/kblocks.png</image> - </screenshot> - </screenshots> - <project_group>KDE</project_group> -</component> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kblocks-15.12.3/main.cpp new/kblocks-16.04.1/main.cpp --- old/kblocks-15.12.3/main.cpp 2016-02-28 20:46:10.000000000 +0100 +++ new/kblocks-16.04.1/main.cpp 2016-03-28 14:16:41.000000000 +0200 @@ -13,13 +13,14 @@ #include <vector> #include <KAboutData> +#include <KCrash> +#include <KDBusService> #include <KLocalizedString> #include <QString> #include <QList> #include <QByteArray> #include <QApplication> -#include <KLocalizedString> #include <QCommandLineParser> #include <QCommandLineOption> #include <Kdelibs4ConfigMigrator> @@ -325,6 +326,7 @@ // Command line argument options QCommandLineParser parser; KAboutData::setApplicationData(aboutData); + KCrash::initialize(); parser.addVersionOption(); parser.addHelpOption(); parser.addOption(QCommandLineOption(QStringList() << QStringLiteral("mode"), i18n("Setup kblocks game running mode.\n\t0 = Desktop Mode\t1 = Game Engine Mode\n\t2 = Gui Mode\t3 = Player Mode"), QStringLiteral("game mode"), QStringLiteral("0"))); @@ -333,6 +335,7 @@ aboutData.setupCommandLine(&parser); parser.process(app); aboutData.processCommandLine(&parser); + KDBusService service; app.setWindowIcon(QIcon::fromTheme(QStringLiteral("kblocks"))); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kblocks-15.12.3/org.kde.kblocks.appdata.xml new/kblocks-16.04.1/org.kde.kblocks.appdata.xml --- old/kblocks-15.12.3/org.kde.kblocks.appdata.xml 1970-01-01 01:00:00.000000000 +0100 +++ new/kblocks-16.04.1/org.kde.kblocks.appdata.xml 2016-03-28 14:16:41.000000000 +0200 @@ -0,0 +1,113 @@ +<?xml version="1.0" encoding="utf-8"?> +<component type="desktop"> + <id>org.kde.kblocks.desktop</id> + <metadata_license>CC0-1.0</metadata_license> + <project_license>GPL-2.0+</project_license> + <name>KBlocks</name> + <name xml:lang="ast">KBlocks</name> + <name xml:lang="bs">KBlocks</name> + <name xml:lang="ca">KBlocks</name> + <name xml:lang="ca-valencia">KBlocks</name> + <name xml:lang="cs">KBlocks</name> + <name xml:lang="da">KBlocks</name> + <name xml:lang="de">KBlocks</name> + <name xml:lang="en-GB">KBlocks</name> + <name xml:lang="es">KBlock</name> + <name xml:lang="fi">KBlocks</name> + <name xml:lang="gl">KBlocks</name> + <name xml:lang="it">KBlocks</name> + <name xml:lang="ko">KBlocks</name> + <name xml:lang="nl">KBlocks</name> + <name xml:lang="nn">KBlocks</name> + <name xml:lang="pl">KBloki</name> + <name xml:lang="pt">KBlocks</name> + <name xml:lang="pt-BR">KBlocks</name> + <name xml:lang="ro">KBlocks</name> + <name xml:lang="ru">KBlocks</name> + <name xml:lang="sk">KBlocks</name> + <name xml:lang="sl">KBlocks</name> + <name xml:lang="sr">К‑блокови</name> + <name xml:lang="sr-Latn">K‑blokovi</name> + <name xml:lang="sr-ijekavian">К‑блокови</name> + <name xml:lang="sr-ijekavianlatin">K‑blokovi</name> + <name xml:lang="sv">Kblock</name> + <name xml:lang="tr">KBlocks</name> + <name xml:lang="uk">KBlocks</name> + <name xml:lang="x-test">xxKBlocksxx</name> + <name xml:lang="zh-CN">KBlocks</name> + <name xml:lang="zh-TW">KBlocks</name> + <summary>Falling Blocks Game</summary> + <summary xml:lang="ast">Xuegu de bloques que cayen</summary> + <summary xml:lang="bs">Igra padajući blokovi</summary> + <summary xml:lang="ca">Joc de blocs que cauen</summary> + <summary xml:lang="ca-valencia">Joc de blocs que cauen</summary> + <summary xml:lang="cs">Hra s padajícími bloky</summary> + <summary xml:lang="de">„Tetris“-Spiel</summary> + <summary xml:lang="en-GB">Falling Blocks Game</summary> + <summary xml:lang="es">Juego de caída de bloques</summary> + <summary xml:lang="fi">Putoavien kappaleiden peli</summary> + <summary xml:lang="gl">Xogo no que caen bloques</summary> + <summary xml:lang="it">Gioco con oggetti che cadono</summary> + <summary xml:lang="ko">떨어지는 블록 게임</summary> + <summary xml:lang="nl">Vallende blokken-spel</summary> + <summary xml:lang="nn">Spel med fallande brikker</summary> + <summary xml:lang="pl">Gra w spadające bloki</summary> + <summary xml:lang="pt">Jogo de Blocos em Queda</summary> + <summary xml:lang="pt-BR">Jogo estilo Tetris</summary> + <summary xml:lang="ro">Joc de blocuri căsătoare</summary> + <summary xml:lang="ru">Клон игры Тетрис</summary> + <summary xml:lang="sk">Hra s padajúcimi blokmi</summary> + <summary xml:lang="sl">Igra padajočih kock</summary> + <summary xml:lang="sr">Игра падајућих блокова</summary> + <summary xml:lang="sr-Latn">Igra padajućih blokova</summary> + <summary xml:lang="sr-ijekavian">Игра падајућих блокова</summary> + <summary xml:lang="sr-ijekavianlatin">Igra padajućih blokova</summary> + <summary xml:lang="sv">Spel med fallande block</summary> + <summary xml:lang="tr">Düşen Bloklar Oyunu</summary> + <summary xml:lang="uk">Гра з блоками, що падають</summary> + <summary xml:lang="x-test">xxFalling Blocks Gamexx</summary> + <summary xml:lang="zh-CN">俄罗斯方块游戏</summary> + <summary xml:lang="zh-TW">類似俄羅斯方塊遊戲</summary> + <description> + <p> + KBlocks is the classic falling blocks game. The idea is to stack the falling blocks to create horizontal + lines without any gaps. When a line is completed it is removed, and more space is available in the play area. + When there is not enough space for blocks to fall, the game is over. + </p> + <p xml:lang="ast">KBlocks ye'l xuegu clásicu de los bloque que cayen. La idea ye amontonar los bloques que cayen pa crear llinies horizontales ensin güecos. Cuando una llinia se completa, hai disponible más espaciu nel area de xuegu. Cuando nun hai espaciu abondo pa los bloques que cayen, la partida fínase.</p> + <p xml:lang="ca">El KBlocks és el joc clàssic de blocs que cauen. La idea és apilar els blocs que cauen per crear línies horitzontals sense cap forat. Quan s'ha completat una línia, aquesta s'elimina i queda més espai disponible a l'àrea de joc. Quan no hi ha espai suficient per als blocs que cauen el joc finalitza.</p> + <p xml:lang="ca-valencia">El KBlocks és el joc clàssic de blocs que cauen. La idea és apilar els blocs que cauen per crear línies horitzontals sense cap forat. Quan s'ha completat una línia, esta s'elimina i queda més espai disponible a l'àrea de joc. Quan no hi ha espai suficient per als blocs que cauen el joc finalitza.</p> + <p xml:lang="de">KBlocks ist ein klassisches Tetris-Spiel. Die herunterfallenden Blöcke müssen so gestapelt werden, dass sie waagerechte Zeilen ohne Lücken bilden. Eine solche Zeile verschwindet dann, und im Spielfeld ist wieder mehr Platz. Wenn es keinen Platz mehr für herunterfallende Blöcke gibt, ist das Spiel zu Ende.</p> + <p xml:lang="en-GB">KBlocks is the classic falling blocks game. The idea is to stack the falling blocks to create horizontal lines without any gaps. When a line is completed it is removed, and more space is available in the play area. When there is not enough space for blocks to fall, the game is over.</p> + <p xml:lang="es">KBlocks es un juego clásico de caída de bloques. La idea es apilar los bloques que van cayendo para crear líneas horizontaes sin huecos. Cuando se completa una línea se elimina, y hay más espacio disponible en la zona de juego. Cuando no queda más sitio para que los bloques caigan, se termina el juego.</p> + <p xml:lang="fi">KBlock on perinteinen putoavien kappaleiden peli. Tavoitteena on kasata putoavat kappaleet aukottomiksi vaakariveiksi. Kun rivi on valmis, se poistetaan ja pelialue kasvaa. Kun kappaleilla ei ole enää tilaa pudota, peli on lopussa.</p> + <p xml:lang="gl">KBlocks é o xogo clásico dos bloques que caen A idea é amorear os bloques que caen de xeito que se formen liñas horizontais completas, sen ocos. Cando se completa unha liña, esta elimínase e amplíase o espazo dispoñíbel na área de xogo. Cando non fica espazo abondo para que caian os bloques, a partida acaba.</p> + <p xml:lang="it">KBlocks è il classico gioco di blocchi in caduta. L'idea è impilarli in modo da riempire completamente delle righe. Quando una riga è completata viene rimossa, e c'è più spazio a disposizione nell'area di gioco. Quando manca lo spazio per far cadere i blocchi, la partita finisce. </p> + <p xml:lang="ko">KBlocks는 떨어지는 블록 게임입니다. 떨어지는 블록을 맞추어서 빈틈 없는 수평선을 만드는 것이 목표입니다. 줄을 맞추면 지워져서 더 많은 공간이 생기며, 더 이상 블록이 내려올 수 없으면 게임이 끝납니다.</p> + <p xml:lang="nl">KBlocks is het klassieke spel met vallende blokken Het idee is de vallende blokken zo op te stapelen dat horizontale lijnen volledig zijn opgevuld. Wanneer een lijn volledig is opgevuld wordt deze verwijderd en komt er meer ruimte in het speelgebied. Wanneer er onvoldoende ruimte over is om een blok te laten vallen is het spel over.</p> + <p xml:lang="nn">KBlocks er eit klassisk spel med fallande brikker. Du må stabla brikkene oppå kvarandre slik at det ikkje vert nokon mellomrom mellom brikkene bortover. Når ei heil linje er fylt, vert ho fjerna, og du har meir plass til nye brikker. Når du ikkje har nok plass til fleire brikker, er spelet slutt.</p> + <p xml:lang="pl">KBloki jest klasyczną grą w spadające bloki. Celem jest takie układanie spadających bloków, aby tworzyły one poziome linie bez przerw. Po ułożeniu takiej linii jest ona usuwana zwalniając miejsce w obszarze gry. Brak miejsca na spadające bloki oznacza przegraną.</p> + <p xml:lang="pt">O KBlocks é o clássico jogo de blocos em queda. A ideia é empilhar os blocos em queda para criar linhas horizontais sem lacunas. Quando uma linha ficar completa, será removida, ficando mais espaço disponível na área de jogo. Quando não existir mais espaço para os blocos caírem, o jogo terminou.</p> + <p xml:lang="pt-BR">KBlocks é o clássico jogo de encaixar blocos A ideia é empilhar os blocos para criar linhas horizontais sem lacunas. Quando completa-se uma linha, a mesma é removida, abrindo mais espaço na área de jogo. O jogo acaba quando não há mais espaço suficiente para os blocos caírem.</p> + <p xml:lang="ru">KBlocks — клон игры Тетрис. Нужно складывать падающий блоки так, чтобы получались горизонтальные ряды без пропусков. Когда ряд заполнен, он удаляется, освобождая место на игровом поле. Игра заканчивается, когда блоку негде упасть.</p> + <p xml:lang="sk">KBlocks je klasická hra padajúcich blokov. Cieľom je na seba padajúcimi blokmi vytvoriť horizontálne línie bez medzier. Ak je linka dokončená, je odstránená, a viac priestoru je k dispozícii na hru. Keď nie je dostatok miesta pre bloky na padanie, hra sa končí.</p> + <p xml:lang="sl">KBlocks je klasična igra padajočih kock. V igri združujete padajoče kocke v vodoravne vrste brez vmesnih praznin. Ko se vrsta odstrani, se sprosti tudi igralna površina. Igre je konec, ko zmanjka prostora za padajoče kocke.</p> + <p xml:lang="sr">К‑блокови је класична игра падајућих блокова. Идеја је да се падајући блокови слажу у водоравне редове без процепа. Ред се уклања када се доврши, остављајући више простора у зони игре. Када више нема простора за нове блокове, партија је готова.</p> + <p xml:lang="sr-Latn">K‑blokovi je klasična igra padajućih blokova. Ideja je da se padajući blokovi slažu u vodoravne redove bez procepa. Red se uklanja kada se dovrši, ostavljajući više prostora u zoni igre. Kada više nema prostora za nove blokove, partija je gotova.</p> + <p xml:lang="sr-ijekavian">К‑блокови је класична игра падајућих блокова. Идеја је да се падајући блокови слажу у водоравне редове без процепа. Ред се уклања када се доврши, остављајући више простора у зони игре. Када више нема простора за нове блокове, партија је готова.</p> + <p xml:lang="sr-ijekavianlatin">K‑blokovi je klasična igra padajućih blokova. Ideja je da se padajući blokovi slažu u vodoravne redove bez procepa. Red se uklanja kada se dovrši, ostavljajući više prostora u zoni igre. Kada više nema prostora za nove blokove, partija je gotova.</p> + <p xml:lang="sv">Kblock är det klassiska spelet med fallande block. Idén är att lägga de fallande blocken för att skapa horisontella rader utan några mellanrum. När en rad är färdig tas den bort, och mer utrymme blir tillgängligt i spelområdet. När det inte finns tillräckligt med utrymme för block att falla är spelet slut.</p> + <p xml:lang="tr">KBlocks klasik bir düşen bloklar oyunudur. Buradaki fikir düşen blokları yatay satırlar oluşturacak şekilde dizmektir. Bir satır tamamlandığında o kaldırılır ve oyun için daha fazla alan açılmış olur. Düşecek bloklar için yer kalmadığında oyun bitmiş olur.</p> + <p xml:lang="uk">KBlocks — це класична гра з блоками, що падають. Мета гри полягає у тому, щоб розташовувати блоки так, щоб вони повністю заповнювали горизонтальні ряди. Після повного заповнення ряду його буде вилучено, і у області для гри з’явиться більше простору. Якщо для падіння наступного блоку місця вже не буде, гру буде завершено.</p> + <p xml:lang="x-test">xxKBlocks is the classic falling blocks game. The idea is to stack the falling blocks to create horizontal lines without any gaps. When a line is completed it is removed, and more space is available in the play area. When there is not enough space for blocks to fall, the game is over.xx</p> + <p xml:lang="zh-TW">KBlocks 是類似俄羅斯方塊的遊戲。俄羅斯方塊的玩法還需要多做介紹嗎?</p> + </description> + <url type="bugtracker">https://bugs.kde.org/enter_bug.cgi?format=guided&product=kblocks</url> + <url type="help">http://docs.kde.org/stable/en/kdegames/kblocks/index.html</url> + <screenshots> + <screenshot type="default"> + <image>http://kde.org/images/screenshots/kblocks.png</image> + </screenshot> + </screenshots> + <project_group>KDE</project_group> +</component> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kblocks-15.12.3/sounds/CMakeLists.txt new/kblocks-16.04.1/sounds/CMakeLists.txt --- old/kblocks-15.12.3/sounds/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/kblocks-16.04.1/sounds/CMakeLists.txt 2016-03-28 14:16:41.000000000 +0200 @@ -0,0 +1,3 @@ + +install( FILES block-fall.ogg block-move.ogg block-remove.ogg DESTINATION ${KDE_INSTALL_DATADIR}/kblocks/sounds ) +
