diff --git a/src/activities/activities.txt b/src/activities/activities.txt index be6b07605..c87a16dcf 100644 --- a/src/activities/activities.txt +++ b/src/activities/activities.txt @@ -1,125 +1,126 @@ # The list of activities that will be loaded at GCompris start. # Keep it sorted advanced_colors algebra_by algebra_div algebra_minus algebra_plus algorithm align4 align4-2players alphabet-sequence babymatch babyshapes baby_wordprocessor balancebox ballcatch braille_alphabets braille_fun canal_lock chess chess_2players chess_partyend chronos clickanddraw clickgame click_on_letter click_on_letter_up clockgame color_mix color_mix_light colors +crane details drawnumber enumerate erase erase_2clic erase_clic explore_farm_animals explore_monuments explore_world_animals explore_world_music fifteen followline football geo-country geography gletters gnumch-equality gnumch-factors gnumch-inequality gnumch-multiples gnumch-primes graph-coloring guessnumber hangman hanoi hanoi_real hexagon imagename instruments intro_gravity land_safe lang leftright lightsoff louis-braille magic-hat-minus magic-hat-plus maze mazeinvisible mazerelative melody memory memory-enumerate memory-math-add memory-math-add-minus memory-math-add-minus-mult-div memory-math-add-minus-mult-div-tux memory-math-add-minus-tux memory-math-add-tux memory-math-div memory-math-div-tux memory-math-minus memory-math-minus-tux memory-math-mult memory-math-mult-div memory-math-mult-div-tux memory-math-mult-tux memory-sound memory-sound-tux memory-tux memory-wordnumber mining missing-letter money money_back money_back_cents money_cents mosaic numbers-odd-even paintings penalty photo_hunter planegame readingh readingv redraw redraw_symmetrical renewable_energy reversecount scalesboard scalesboard_weight scalesboard_weight_avoirdupois simplepaint smallnumbers smallnumbers2 sudoku superbrain tangram target tic_tac_toe tic_tac_toe_2players traffic watercycle wordsgame diff --git a/src/activities/crane/ActivityInfo.qml b/src/activities/crane/ActivityInfo.qml new file mode 100644 index 000000000..42edbbc19 --- /dev/null +++ b/src/activities/crane/ActivityInfo.qml @@ -0,0 +1,35 @@ +/* GCompris - ActivityInfo.qml + * + * Copyright (C) 2016 Your Name + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import GCompris 1.0 + +ActivityInfo { + name: "crane/Crane.qml" + difficulty: 1 + icon: "crane/crane.svg" + author: "Your Name <yy@zz.org>" + demo: true + title: "Build the same model" + description: "" + //intro: "put here in comment the text for the intro voice" + goal: "" + prerequisite: "" + manual: "" + credit: "" + section: "puzzle" + createdInVersion: 6000 +} diff --git a/src/activities/crane/CMakeLists.txt b/src/activities/crane/CMakeLists.txt new file mode 100644 index 000000000..1b23a4c19 --- /dev/null +++ b/src/activities/crane/CMakeLists.txt @@ -0,0 +1 @@ +GCOMPRIS_ADD_RCC(activities/crane *.qml *.svg *.js resource/*) diff --git a/src/activities/crane/Crane.qml b/src/activities/crane/Crane.qml new file mode 100644 index 000000000..6f75b2ea7 --- /dev/null +++ b/src/activities/crane/Crane.qml @@ -0,0 +1,187 @@ +/* GCompris - Crane.qml + * + * Copyright (C) 2016 Stefan Toncu + * + * Authors: + * (GTK+ version) + * Stefan Toncu (Qt Quick port) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +import QtQuick 2.1 + +import "../../core" +import "crane.js" as Activity + +ActivityBase { + id: activity + + onStart: focus = true + onStop: {} + + pageComponent: Image { + id: background + anchors.fill: parent + // source: "resource/crane-bg.svgz" + + signal start + signal stop + + Component.onCompleted: { + activity.start.connect(start) + activity.stop.connect(stop) + } + + // Add here the QML items you need to access in javascript + QtObject { + id: items + property Item main: activity.main + property alias background: background + property alias bar: bar + property alias bonus: bonus + property alias board: board + property alias grid: grid + property alias repeater: repeater + property alias repeater2: repeater2 + property var names + property var names2 + property int selected + property int columns + property int rows + } + + onStart: { Activity.start(items) } + onStop: { Activity.stop() } + + Keys.onPressed: { + if (event.key === Qt.Key_Left) { + if (items.selected % items.columns != 0) { + Activity.makeMove(-1) + } + } else if (event.key === Qt.Key_Right) { + if ((items.selected+1) % items.columns != 0) { + Activity.makeMove(1) + } + } else if (event.key === Qt.Key_Up) { + if (items.selected > items.columns-1) { + Activity.makeMove(-items.columns) + } + } else if (event.key === Qt.Key_Down) { + if (items.selected < (items.repeater.count-items.columns)) { + Activity.makeMove(items.columns) + } + } else if (event.key === Qt.Key_Space || event.key === Qt.Key_Tab) { + items.selected = Activity.getNextIndex(items.selected) + } + } + + Rectangle { + id: board + color: "lightblue" + x: 10 + y: 10 + width: 600 + height: 550 + + Grid { + id: grid + columns: items.columns + rows: items.rows +// spacing: 5 + + Repeater { + id: repeater + + Image { + id: figure + width: board.width/items.columns + height: board.height/items.rows + + property bool showSelected: false + property alias selected: selected + // make current index accessible from outside + property int _index: index + + // select a figure + MouseArea { + anchors.fill: parent + onClicked: source != "" ? items.selected = index : undefined + } + + // selected marker + Image { + id: selected + source: "resource/selected.png" + width: parent.width + height: parent.height + // show only on the selected figure + opacity: parent._index == items.selected ? 1 : 0 + } + } + } + } + } + + Rectangle { + id: board2 + color: "pink" + x: 650 + y: 10 + width: 600 + height: 550 + + Grid { + id: grid2 + columns: items.columns + rows: items.rows +// spacing: 5 + + Repeater { + id: repeater2 + + Image { + id: figure2 + width: board.width/items.columns + height: board.height/items.rows + } + } + } + } + + + + + DialogHelp { + id: dialogHelp + onClose: home() + } + + Bar { + id: bar + content: BarEnumContent { value: help | home | level } + onHelpClicked: { + displayDialog(dialogHelp) + } + onPreviousLevelClicked: Activity.previousLevel() + onNextLevelClicked: Activity.nextLevel() + onHomeClicked: activity.home() + } + + Bonus { + id: bonus + Component.onCompleted: win.connect(Activity.nextLevel) + } + } + +} diff --git a/src/activities/crane/crane.js b/src/activities/crane/crane.js new file mode 100644 index 000000000..e35e9af93 --- /dev/null +++ b/src/activities/crane/crane.js @@ -0,0 +1,160 @@ +/* GCompris - crane.js + * + * Copyright (C) 2016 Stefan Toncu + * + * Authors: + * (GTK+ version) + * Stefan Toncu (Qt Quick port) + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ +.pragma library +.import QtQuick 2.0 as Quick + +var currentLevel = 0 +var numberOfLevel = 6 +var items +var url = "qrc:/gcompris/src/activities/crane/resource/" + +var howManyFigures = [4,5,6,7,7,7] +var allNames = ["resource/bulb.png","resource/letter-a.png","resource/letter-b.png", + "resource/rectangle1.png","resource/rectangle2.png","resource/square1.png", + "resource/square2.png","resource/triangle1.png","resource/triangle2.png", + "resource/tux.png","resource/water_drop1.png","resource/water_drop2.png", + "resource/water_spot1.png","resource/water_spot2.png"] + + +function start(items_) { + items = items_ + currentLevel = 0 + initLevel() +} + +function stop() { +} + +function initLevel() { + items.bar.level = currentLevel + 1 + + init() +} + +function init() { + items.columns = 7 + items.rows = 6 + + setRandomModel() + items.selected = getNextIndex(0) +} + +function shuffle(input) { + for (var i = input.length-1; i >= 0; i--) { + + var randomIndex = Math.floor(Math.random()*(i+1)); + var itemAtIndex = input[randomIndex]; + + input[randomIndex] = input[i]; + input[i] = itemAtIndex; + } +} + +function setRandomModel(){ + // randomize the names + shuffle(allNames) + + var numbers = [] + var names = [] + var names2 = [] + + for (var i = 0; i < items.columns * items.rows; i++){ + names[i] = "" // reset the board + names2[i] = "" + numbers[i] = i; // generate columns*rows numbers + } + + //get "howManyFigures[currentLevel]" random numbers + shuffle(numbers) + + for (i = 0; i < howManyFigures[currentLevel]; i++) + names[numbers[i]] = allNames[i] + + shuffle(numbers) + + for (i = 0; i < howManyFigures[currentLevel]; i++) + names2[numbers[i]] = allNames[i] + + //DEBUGGING +// print("names: ",names) +// print("names2: ",names2) + + items.repeater.model = names.length + items.repeater2.model = names2.length + + for (i = 0; i < names.length; i++) { + items.repeater.itemAt(i).source = names[i] + items.repeater2.itemAt(i).source = names2[i] + } +} + + +function getNextIndex(index) { + var i + var length = items.repeater.count + for(i = index-1; i >= 0; i--) { + if (items.repeater.itemAt(i).source != ""){ + return i + } + } + for(i = length-1; i > index; i--) { + if (items.repeater.itemAt(i).source != ""){ + return i + } + } + return -1; +} + +function makeMove(add) { + if (items.repeater.itemAt(items.selected+add).source == "") { + items.repeater.itemAt(items.selected+add).source = items.repeater.itemAt(items.selected).source + items.repeater.itemAt(items.selected).source = "" + items.selected += add; + checkAnswer() + } +} + +function checkAnswer() { + var count = 0 + for (var i = 0; i < items.repeater.count; i++) { + if (items.repeater.itemAt(i).source != items.repeater2.itemAt(i).source){ + count = -1 + } + } + if (count == 0) { + items.bonus.good("flower") + } +} + +function nextLevel() { + if(numberOfLevel <= ++currentLevel ) { + currentLevel = 0 + } + initLevel(); +} + +function previousLevel() { + if(--currentLevel < 0) { + currentLevel = numberOfLevel - 1 + } + initLevel(); +} diff --git a/src/activities/crane/crane.svg b/src/activities/crane/crane.svg new file mode 100644 index 000000000..5829caf5e --- /dev/null +++ b/src/activities/crane/crane.svg @@ -0,0 +1,222 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/activities/crane/resource/arrow_b.png b/src/activities/crane/resource/arrow_b.png new file mode 100644 index 000000000..77451b4c0 Binary files /dev/null and b/src/activities/crane/resource/arrow_b.png differ diff --git a/src/activities/crane/resource/arrow_down.png b/src/activities/crane/resource/arrow_down.png new file mode 100644 index 000000000..77451b4c0 Binary files /dev/null and b/src/activities/crane/resource/arrow_down.png differ diff --git a/src/activities/crane/resource/arrow_l.png b/src/activities/crane/resource/arrow_l.png new file mode 100644 index 000000000..633d9fce6 Binary files /dev/null and b/src/activities/crane/resource/arrow_l.png differ diff --git a/src/activities/crane/resource/arrow_left.png b/src/activities/crane/resource/arrow_left.png new file mode 100644 index 000000000..633d9fce6 Binary files /dev/null and b/src/activities/crane/resource/arrow_left.png differ diff --git a/src/activities/crane/resource/arrow_r.png b/src/activities/crane/resource/arrow_r.png new file mode 100644 index 000000000..cedfc9b59 Binary files /dev/null and b/src/activities/crane/resource/arrow_r.png differ diff --git a/src/activities/crane/resource/arrow_right.png b/src/activities/crane/resource/arrow_right.png new file mode 100644 index 000000000..cedfc9b59 Binary files /dev/null and b/src/activities/crane/resource/arrow_right.png differ diff --git a/src/activities/crane/resource/arrow_u.png b/src/activities/crane/resource/arrow_u.png new file mode 100644 index 000000000..932707060 Binary files /dev/null and b/src/activities/crane/resource/arrow_u.png differ diff --git a/src/activities/crane/resource/arrow_up.png b/src/activities/crane/resource/arrow_up.png new file mode 100644 index 000000000..932707060 Binary files /dev/null and b/src/activities/crane/resource/arrow_up.png differ diff --git a/src/activities/crane/resource/bulb.png b/src/activities/crane/resource/bulb.png new file mode 100644 index 000000000..fa264ae02 Binary files /dev/null and b/src/activities/crane/resource/bulb.png differ diff --git a/src/activities/crane/resource/crane-bg.svgz b/src/activities/crane/resource/crane-bg.svgz new file mode 100644 index 000000000..234b2404d Binary files /dev/null and b/src/activities/crane/resource/crane-bg.svgz differ diff --git a/src/activities/crane/resource/letter-a.png b/src/activities/crane/resource/letter-a.png new file mode 100644 index 000000000..4850047ea Binary files /dev/null and b/src/activities/crane/resource/letter-a.png differ diff --git a/src/activities/crane/resource/letter-b.png b/src/activities/crane/resource/letter-b.png new file mode 100644 index 000000000..630bca81c Binary files /dev/null and b/src/activities/crane/resource/letter-b.png differ diff --git a/src/activities/crane/resource/rectangle1.png b/src/activities/crane/resource/rectangle1.png new file mode 100644 index 000000000..d3abc82a0 Binary files /dev/null and b/src/activities/crane/resource/rectangle1.png differ diff --git a/src/activities/crane/resource/rectangle2.png b/src/activities/crane/resource/rectangle2.png new file mode 100644 index 000000000..89b18aaa1 Binary files /dev/null and b/src/activities/crane/resource/rectangle2.png differ diff --git a/src/activities/crane/resource/selected.png b/src/activities/crane/resource/selected.png new file mode 100644 index 000000000..272c8f9a4 Binary files /dev/null and b/src/activities/crane/resource/selected.png differ diff --git a/src/activities/crane/resource/square1.png b/src/activities/crane/resource/square1.png new file mode 100644 index 000000000..cfc1dd883 Binary files /dev/null and b/src/activities/crane/resource/square1.png differ diff --git a/src/activities/crane/resource/square2.png b/src/activities/crane/resource/square2.png new file mode 100644 index 000000000..eb606d0b0 Binary files /dev/null and b/src/activities/crane/resource/square2.png differ diff --git a/src/activities/crane/resource/triangle1.png b/src/activities/crane/resource/triangle1.png new file mode 100644 index 000000000..c047d79b8 Binary files /dev/null and b/src/activities/crane/resource/triangle1.png differ diff --git a/src/activities/crane/resource/triangle2.png b/src/activities/crane/resource/triangle2.png new file mode 100644 index 000000000..6f10adc70 Binary files /dev/null and b/src/activities/crane/resource/triangle2.png differ diff --git a/src/activities/crane/resource/tux.png b/src/activities/crane/resource/tux.png new file mode 100644 index 000000000..df6a985b7 Binary files /dev/null and b/src/activities/crane/resource/tux.png differ diff --git a/src/activities/crane/resource/water_drop1.png b/src/activities/crane/resource/water_drop1.png new file mode 100644 index 000000000..224d2693c Binary files /dev/null and b/src/activities/crane/resource/water_drop1.png differ diff --git a/src/activities/crane/resource/water_drop2.png b/src/activities/crane/resource/water_drop2.png new file mode 100644 index 000000000..76ad72837 Binary files /dev/null and b/src/activities/crane/resource/water_drop2.png differ diff --git a/src/activities/crane/resource/water_spot1.png b/src/activities/crane/resource/water_spot1.png new file mode 100644 index 000000000..ad9148085 Binary files /dev/null and b/src/activities/crane/resource/water_spot1.png differ diff --git a/src/activities/crane/resource/water_spot2.png b/src/activities/crane/resource/water_spot2.png new file mode 100644 index 000000000..1ed5e708d Binary files /dev/null and b/src/activities/crane/resource/water_spot2.png differ