upgrade
This commit is contained in:
@@ -0,0 +1,408 @@
|
||||
(function (MemoryGame, EventDispatcher, $) {
|
||||
|
||||
/**
|
||||
* Controls all the operations for each card.
|
||||
*
|
||||
* @class H5P.MemoryGame.Card
|
||||
* @extends H5P.EventDispatcher
|
||||
* @param {Object} image
|
||||
* @param {number} id
|
||||
* @param {string} alt
|
||||
* @param {Object} l10n Localization
|
||||
* @param {string} [description]
|
||||
* @param {Object} [styles]
|
||||
*/
|
||||
MemoryGame.Card = function (image, id, alt, l10n, description, styles, audio) {
|
||||
/** @alias H5P.MemoryGame.Card# */
|
||||
var self = this;
|
||||
|
||||
// Initialize event inheritance
|
||||
EventDispatcher.call(self);
|
||||
|
||||
var path, width, height, $card, $wrapper, removedState, flippedState, audioPlayer;
|
||||
|
||||
alt = alt || 'Missing description'; // Default for old games
|
||||
|
||||
if (image && image.path) {
|
||||
path = H5P.getPath(image.path, id);
|
||||
|
||||
if (image.width !== undefined && image.height !== undefined) {
|
||||
if (image.width > image.height) {
|
||||
width = '100%';
|
||||
height = 'auto';
|
||||
}
|
||||
else {
|
||||
height = '100%';
|
||||
width = 'auto';
|
||||
}
|
||||
}
|
||||
else {
|
||||
width = height = '100%';
|
||||
}
|
||||
}
|
||||
|
||||
if (audio) {
|
||||
// Check if browser supports audio.
|
||||
audioPlayer = document.createElement('audio');
|
||||
if (audioPlayer.canPlayType !== undefined) {
|
||||
// Add supported source files.
|
||||
for (var i = 0; i < audio.length; i++) {
|
||||
if (audioPlayer.canPlayType(audio[i].mime)) {
|
||||
var source = document.createElement('source');
|
||||
source.src = H5P.getPath(audio[i].path, id);
|
||||
source.type = audio[i].mime;
|
||||
audioPlayer.appendChild(source);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!audioPlayer.children.length) {
|
||||
audioPlayer = null; // Not supported
|
||||
}
|
||||
else {
|
||||
audioPlayer.controls = false;
|
||||
audioPlayer.preload = 'auto';
|
||||
|
||||
var handlePlaying = function () {
|
||||
if ($card) {
|
||||
$card.addClass('h5p-memory-audio-playing');
|
||||
self.trigger('audioplay');
|
||||
}
|
||||
};
|
||||
var handleStopping = function () {
|
||||
if ($card) {
|
||||
$card.removeClass('h5p-memory-audio-playing');
|
||||
self.trigger('audiostop');
|
||||
}
|
||||
};
|
||||
audioPlayer.addEventListener('play', handlePlaying);
|
||||
audioPlayer.addEventListener('ended', handleStopping);
|
||||
audioPlayer.addEventListener('pause', handleStopping);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the cards label to make it accessible to users with a readspeaker
|
||||
*
|
||||
* @param {boolean} isMatched The card has been matched
|
||||
* @param {boolean} announce Announce the current state of the card
|
||||
* @param {boolean} reset Go back to the default label
|
||||
*/
|
||||
self.updateLabel = function (isMatched, announce, reset) {
|
||||
|
||||
// Determine new label from input params
|
||||
var label = (reset ? l10n.cardUnturned : alt);
|
||||
if (isMatched) {
|
||||
label = l10n.cardMatched + ' ' + label;
|
||||
}
|
||||
|
||||
// Update the card's label
|
||||
$wrapper.attr('aria-label', l10n.cardPrefix.replace('%num', $wrapper.index() + 1) + ' ' + label);
|
||||
|
||||
// Update disabled property
|
||||
$wrapper.attr('aria-disabled', reset ? null : 'true');
|
||||
|
||||
// Announce the label change
|
||||
if (announce) {
|
||||
$wrapper.blur().focus(); // Announce card label
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Flip card.
|
||||
*/
|
||||
self.flip = function () {
|
||||
if (flippedState) {
|
||||
$wrapper.blur().focus(); // Announce card label again
|
||||
return;
|
||||
}
|
||||
|
||||
$card.addClass('h5p-flipped');
|
||||
self.trigger('flip');
|
||||
flippedState = true;
|
||||
|
||||
if (audioPlayer) {
|
||||
audioPlayer.play();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Flip card back.
|
||||
*/
|
||||
self.flipBack = function () {
|
||||
self.stopAudio();
|
||||
self.updateLabel(null, null, true); // Reset card label
|
||||
$card.removeClass('h5p-flipped');
|
||||
flippedState = false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Remove.
|
||||
*/
|
||||
self.remove = function () {
|
||||
$card.addClass('h5p-matched');
|
||||
removedState = true;
|
||||
};
|
||||
|
||||
/**
|
||||
* Reset card to natural state
|
||||
*/
|
||||
self.reset = function () {
|
||||
self.stopAudio();
|
||||
self.updateLabel(null, null, true); // Reset card label
|
||||
flippedState = false;
|
||||
removedState = false;
|
||||
$card[0].classList.remove('h5p-flipped', 'h5p-matched');
|
||||
};
|
||||
|
||||
/**
|
||||
* Get card description.
|
||||
*
|
||||
* @returns {string}
|
||||
*/
|
||||
self.getDescription = function () {
|
||||
return description;
|
||||
};
|
||||
|
||||
/**
|
||||
* Get image clone.
|
||||
*
|
||||
* @returns {H5P.jQuery}
|
||||
*/
|
||||
self.getImage = function () {
|
||||
return $card.find('img').clone();
|
||||
};
|
||||
|
||||
/**
|
||||
* Append card to the given container.
|
||||
*
|
||||
* @param {H5P.jQuery} $container
|
||||
*/
|
||||
self.appendTo = function ($container) {
|
||||
$wrapper = $('<li class="h5p-memory-wrap" tabindex="-1" role="button"><div class="h5p-memory-card">' +
|
||||
'<div class="h5p-front"' + (styles && styles.front ? styles.front : '') + '>' + (styles && styles.backImage ? '' : '<span></span>') + '</div>' +
|
||||
'<div class="h5p-back"' + (styles && styles.back ? styles.back : '') + '>' +
|
||||
(path ? '<img src="' + path + '" alt="' + alt + '" style="width:' + width + ';height:' + height + '"/>' + (audioPlayer ? '<div class="h5p-memory-audio-button"></div>' : '') : '<i class="h5p-memory-audio-instead-of-image">') +
|
||||
'</div>' +
|
||||
'</div></li>')
|
||||
.appendTo($container)
|
||||
.on('keydown', function (event) {
|
||||
switch (event.which) {
|
||||
case 13: // Enter
|
||||
case 32: // Space
|
||||
self.flip();
|
||||
event.preventDefault();
|
||||
return;
|
||||
case 39: // Right
|
||||
case 40: // Down
|
||||
// Move focus forward
|
||||
self.trigger('next');
|
||||
event.preventDefault();
|
||||
return;
|
||||
case 37: // Left
|
||||
case 38: // Up
|
||||
// Move focus back
|
||||
self.trigger('prev');
|
||||
event.preventDefault();
|
||||
return;
|
||||
case 35:
|
||||
// Move to last card
|
||||
self.trigger('last');
|
||||
event.preventDefault();
|
||||
return;
|
||||
case 36:
|
||||
// Move to first card
|
||||
self.trigger('first');
|
||||
event.preventDefault();
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
$wrapper.attr('aria-label', l10n.cardPrefix.replace('%num', $wrapper.index() + 1) + ' ' + l10n.cardUnturned);
|
||||
$card = $wrapper.children('.h5p-memory-card')
|
||||
.children('.h5p-front')
|
||||
.click(function () {
|
||||
self.flip();
|
||||
})
|
||||
.end();
|
||||
|
||||
if (audioPlayer) {
|
||||
$card.children('.h5p-back')
|
||||
.click(function () {
|
||||
if ($card.hasClass('h5p-memory-audio-playing')) {
|
||||
self.stopAudio();
|
||||
}
|
||||
else {
|
||||
audioPlayer.play();
|
||||
}
|
||||
})
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Re-append to parent container.
|
||||
*/
|
||||
self.reAppend = function () {
|
||||
var parent = $wrapper[0].parentElement;
|
||||
parent.appendChild($wrapper[0]);
|
||||
};
|
||||
|
||||
/**
|
||||
* Make the card accessible when tabbing
|
||||
*/
|
||||
self.makeTabbable = function () {
|
||||
if ($wrapper) {
|
||||
$wrapper.attr('tabindex', '0');
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Prevent tabbing to the card
|
||||
*/
|
||||
self.makeUntabbable = function () {
|
||||
if ($wrapper) {
|
||||
$wrapper.attr('tabindex', '-1');
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Make card tabbable and move focus to it
|
||||
*/
|
||||
self.setFocus = function () {
|
||||
self.makeTabbable();
|
||||
if ($wrapper) {
|
||||
$wrapper.focus();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if the card has been removed from the game, i.e. if has
|
||||
* been matched.
|
||||
*/
|
||||
self.isRemoved = function () {
|
||||
return removedState;
|
||||
};
|
||||
|
||||
/**
|
||||
* Stop any audio track that might be playing.
|
||||
*/
|
||||
self.stopAudio = function () {
|
||||
if (audioPlayer) {
|
||||
audioPlayer.pause();
|
||||
audioPlayer.currentTime = 0;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
// Extends the event dispatcher
|
||||
MemoryGame.Card.prototype = Object.create(EventDispatcher.prototype);
|
||||
MemoryGame.Card.prototype.constructor = MemoryGame.Card;
|
||||
|
||||
/**
|
||||
* Check to see if the given object corresponds with the semantics for
|
||||
* a memory game card.
|
||||
*
|
||||
* @param {object} params
|
||||
* @returns {boolean}
|
||||
*/
|
||||
MemoryGame.Card.isValid = function (params) {
|
||||
return (params !== undefined &&
|
||||
(params.image !== undefined &&
|
||||
params.image.path !== undefined) ||
|
||||
params.audio);
|
||||
};
|
||||
|
||||
/**
|
||||
* Checks to see if the card parameters should create cards with different
|
||||
* images.
|
||||
*
|
||||
* @param {object} params
|
||||
* @returns {boolean}
|
||||
*/
|
||||
MemoryGame.Card.hasTwoImages = function (params) {
|
||||
return (params !== undefined &&
|
||||
(params.match !== undefined &&
|
||||
params.match.path !== undefined) ||
|
||||
params.matchAudio);
|
||||
};
|
||||
|
||||
/**
|
||||
* Determines the theme for how the cards should look
|
||||
*
|
||||
* @param {string} color The base color selected
|
||||
* @param {number} invertShades Factor used to invert shades in case of bad contrast
|
||||
*/
|
||||
MemoryGame.Card.determineStyles = function (color, invertShades, backImage) {
|
||||
var styles = {
|
||||
front: '',
|
||||
back: '',
|
||||
backImage: !!backImage
|
||||
};
|
||||
|
||||
// Create color theme
|
||||
if (color) {
|
||||
var frontColor = shade(color, 43.75 * invertShades);
|
||||
var backColor = shade(color, 56.25 * invertShades);
|
||||
|
||||
styles.front += 'color:' + color + ';' +
|
||||
'background-color:' + frontColor + ';' +
|
||||
'border-color:' + frontColor +';';
|
||||
styles.back += 'color:' + color + ';' +
|
||||
'background-color:' + backColor + ';' +
|
||||
'border-color:' + frontColor +';';
|
||||
}
|
||||
|
||||
// Add back image for card
|
||||
if (backImage) {
|
||||
var backgroundImage = 'background-image:url(' + backImage + ')';
|
||||
|
||||
styles.front += backgroundImage;
|
||||
styles.back += backgroundImage;
|
||||
}
|
||||
|
||||
// Prep style attribute
|
||||
if (styles.front) {
|
||||
styles.front = ' style="' + styles.front + '"';
|
||||
}
|
||||
if (styles.back) {
|
||||
styles.back = ' style="' + styles.back + '"';
|
||||
}
|
||||
|
||||
return styles;
|
||||
};
|
||||
|
||||
/**
|
||||
* Convert hex color into shade depending on given percent
|
||||
*
|
||||
* @private
|
||||
* @param {string} color
|
||||
* @param {number} percent
|
||||
* @return {string} new color
|
||||
*/
|
||||
var shade = function (color, percent) {
|
||||
var newColor = '#';
|
||||
|
||||
// Determine if we should lighten or darken
|
||||
var max = (percent < 0 ? 0 : 255);
|
||||
|
||||
// Always stay positive
|
||||
if (percent < 0) {
|
||||
percent *= -1;
|
||||
}
|
||||
percent /= 100;
|
||||
|
||||
for (var i = 1; i < 6; i += 2) {
|
||||
// Grab channel and convert from hex to dec
|
||||
var channel = parseInt(color.substr(i, 2), 16);
|
||||
|
||||
// Calculate new shade and convert back to hex
|
||||
channel = (Math.round((max - channel) * percent) + channel).toString(16);
|
||||
|
||||
// Make sure to always use two digits
|
||||
newColor += (channel.length < 2 ? '0' + channel : channel);
|
||||
}
|
||||
|
||||
return newColor;
|
||||
};
|
||||
|
||||
})(H5P.MemoryGame, H5P.EventDispatcher, H5P.jQuery);
|
||||
@@ -0,0 +1,39 @@
|
||||
(function (MemoryGame) {
|
||||
|
||||
/**
|
||||
* Keeps track of the number of cards that has been turned
|
||||
*
|
||||
* @class H5P.MemoryGame.Counter
|
||||
* @param {H5P.jQuery} $container
|
||||
*/
|
||||
MemoryGame.Counter = function ($container) {
|
||||
/** @alias H5P.MemoryGame.Counter# */
|
||||
var self = this;
|
||||
|
||||
var current = 0;
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
var update = function () {
|
||||
$container[0].innerText = current;
|
||||
};
|
||||
|
||||
/**
|
||||
* Increment the counter.
|
||||
*/
|
||||
self.increment = function () {
|
||||
current++;
|
||||
update();
|
||||
};
|
||||
|
||||
/**
|
||||
* Revert counter back to its natural state
|
||||
*/
|
||||
self.reset = function () {
|
||||
current = 0;
|
||||
update();
|
||||
};
|
||||
};
|
||||
|
||||
})(H5P.MemoryGame);
|
||||
@@ -0,0 +1,86 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 225">
|
||||
<defs>
|
||||
<style>
|
||||
.cls-1 {
|
||||
isolation: isolate;
|
||||
}
|
||||
|
||||
.cls-2 {
|
||||
fill: #589b42;
|
||||
}
|
||||
|
||||
.cls-3 {
|
||||
fill: #8ac97a;
|
||||
}
|
||||
|
||||
.cls-4 {
|
||||
opacity: 0.2;
|
||||
mix-blend-mode: multiply;
|
||||
}
|
||||
|
||||
.cls-5 {
|
||||
fill: #f26262;
|
||||
}
|
||||
|
||||
.cls-6 {
|
||||
fill: #f7cf5c;
|
||||
}
|
||||
|
||||
.cls-7 {
|
||||
fill: none;
|
||||
}
|
||||
</style>
|
||||
</defs>
|
||||
<title>memmory game</title>
|
||||
<g class="cls-1">
|
||||
<g id="Layer_2" data-name="Layer 2">
|
||||
<g id="memmory_game" data-name="memmory game">
|
||||
<g>
|
||||
<g>
|
||||
<rect class="cls-2" x="131" y="42.5" width="37" height="39"/>
|
||||
<path class="cls-3" d="M166,45.5v31H133v-31h33m6-7H127v45h45v-45Z"/>
|
||||
</g>
|
||||
<g>
|
||||
<rect class="cls-2" x="184" y="42.5" width="38" height="39"/>
|
||||
<path class="cls-3" d="M218,45.5v31H186v-31h32m6-7H181v45h43v-45Z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g class="cls-4">
|
||||
<rect x="237" y="41.5" width="44" height="43"/>
|
||||
</g>
|
||||
<rect class="cls-5" x="235" y="38.5" width="43" height="45"/>
|
||||
</g>
|
||||
<g>
|
||||
<g class="cls-4">
|
||||
<rect x="131" y="94.5" width="43" height="44"/>
|
||||
</g>
|
||||
<rect class="cls-5" x="127" y="93.5" width="46" height="43"/>
|
||||
</g>
|
||||
<g>
|
||||
<rect class="cls-2" x="184" y="95.5" width="38" height="39"/>
|
||||
<path class="cls-3" d="M218,97.5v34H186v-34h32m6-4H181v43h43v-43Z"/>
|
||||
</g>
|
||||
<g>
|
||||
<rect class="cls-2" x="237" y="95.5" width="38" height="39"/>
|
||||
<path class="cls-3" d="M273,97.5v34H241v-34h32m4-4H235v43h42v-43Z"/>
|
||||
</g>
|
||||
<g>
|
||||
<rect class="cls-2" x="131" y="147.5" width="37" height="38"/>
|
||||
<path class="cls-3" d="M166,151.5v33H133v-33h33m6-6H127v44h45v-44Z"/>
|
||||
</g>
|
||||
<g>
|
||||
<rect class="cls-2" x="184" y="147.5" width="38" height="38"/>
|
||||
<path class="cls-3" d="M218,151.5v33H186v-33h32m6-6H181v44h43v-44Z"/>
|
||||
</g>
|
||||
<g>
|
||||
<rect class="cls-2" x="237" y="147.5" width="38" height="38"/>
|
||||
<path class="cls-3" d="M273,151.5v33H241v-33h32m4-6H235v44h42v-44Z"/>
|
||||
</g>
|
||||
<path class="cls-6" d="M162.47,111.19l-5.61,5.47,1.33,7.73a2.07,2.07,0,0,1,0,.31c0,.4-.19.77-.63.77a1.26,1.26,0,0,1-.62-.19L150,121.65l-6.94,3.65a1.31,1.31,0,0,1-.62.19c-.45,0-.65-.37-.65-.77a2.09,2.09,0,0,1,0-.31l1.33-7.73-5.63-5.47a1.2,1.2,0,0,1-.39-.74c0-.46.48-.65.87-.71l7.76-1.13,3.48-7c.14-.29.4-.63.76-.63s.62.34.76.63l3.48,7,7.76,1.13c.37.06.87.25.87.71A1.15,1.15,0,0,1,162.47,111.19Z"/>
|
||||
<path class="cls-6" d="M269.28,57.35l-5.61,5.47L265,70.55a2.07,2.07,0,0,1,0,.31c0,.4-.19.77-.63.77a1.26,1.26,0,0,1-.62-.19l-6.94-3.65-6.94,3.65a1.31,1.31,0,0,1-.62.19c-.45,0-.65-.37-.65-.77a2.09,2.09,0,0,1,0-.31L250,62.82l-5.63-5.47a1.2,1.2,0,0,1-.39-.74c0-.46.48-.65.87-.71l7.76-1.13,3.48-7c.14-.29.4-.63.76-.63s.62.34.76.63l3.48,7,7.76,1.13c.37.06.87.25.87.71A1.15,1.15,0,0,1,269.28,57.35Z"/>
|
||||
</g>
|
||||
<rect class="cls-7" width="400" height="225"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Cards",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Card",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Image"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Matching Image",
|
||||
"description": "An optional image to match against instead of using two cards with the same image."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Description",
|
||||
"description": "An optional short text that will pop up once the two matching cards are found."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Behavioural settings",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Position the cards in a square",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container."
|
||||
},
|
||||
{
|
||||
"label": "Number of cards to use",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards."
|
||||
},
|
||||
{
|
||||
"label": "Add button for retrying when the game is over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Look and feel",
|
||||
"description": "Control the visuals of the game.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Theme Color",
|
||||
"description": "Choose a color to create a theme for your card game."
|
||||
},
|
||||
{
|
||||
"label": "Card Back",
|
||||
"description": "Use a custom back for your cards."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localization",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Card turns text",
|
||||
"default": "Card turns"
|
||||
},
|
||||
{
|
||||
"label": "Time spent text",
|
||||
"default": "Time spent"
|
||||
},
|
||||
{
|
||||
"label": "Feedback text",
|
||||
"default": "Good work!"
|
||||
},
|
||||
{
|
||||
"label": "Try again button text",
|
||||
"default": "Try again?"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "البطاقات",
|
||||
"entity": "بطاقة",
|
||||
"field": {
|
||||
"label": "البطاقة",
|
||||
"fields": [
|
||||
{
|
||||
"label": "الصورة"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Matching Image",
|
||||
"description": "An optional image to match against instead of using two cards with the same image."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "الوصف",
|
||||
"description": "نص قصير يتم عرضه مرة واحدة علي اثنين من البطاقات متساوية"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Behavioural settings",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Position the cards in a square",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container."
|
||||
},
|
||||
{
|
||||
"label": "Number of cards to use",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards."
|
||||
},
|
||||
{
|
||||
"label": "Add button for retrying when the game is over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Look and feel",
|
||||
"description": "Control the visuals of the game.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Theme Color",
|
||||
"description": "Choose a color to create a theme for your card game."
|
||||
},
|
||||
{
|
||||
"label": "Card Back",
|
||||
"description": "Use a custom back for your cards."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "الأقلمة",
|
||||
"fields": [
|
||||
{
|
||||
"label": "نص تدوير البطاقة",
|
||||
"default": "Card turns"
|
||||
},
|
||||
{
|
||||
"label": "نص التوقيت الزمني",
|
||||
"default": "Time spent"
|
||||
},
|
||||
{
|
||||
"label": "نص الملاحظات",
|
||||
"default": "Good work!"
|
||||
},
|
||||
{
|
||||
"label": "Try again button text",
|
||||
"default": "Reset"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Karte",
|
||||
"entity": "karte",
|
||||
"field": {
|
||||
"label": "Karte",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Slika"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Ista slika",
|
||||
"description": "Opcionalna slika koja se koristi umjestodvije iste slike."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Opis",
|
||||
"description": "Kratak tekst koji će biti prikazan čim se pronađu dvije iste karte."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Podešavanje ponašanja",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Poredaj karte u redove ",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container."
|
||||
},
|
||||
{
|
||||
"label": "Broj karata za upotrebu",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards."
|
||||
},
|
||||
{
|
||||
"label": "Add button for retrying when the game is over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Look and feel",
|
||||
"description": "Control the visuals of the game.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Theme Color",
|
||||
"description": "Choose a color to create a theme for your card game."
|
||||
},
|
||||
{
|
||||
"label": "Card Back",
|
||||
"description": "Use a custom back for your cards."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Prijevod",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Tekst kad se okrene karta ",
|
||||
"default": "Okrenuta karta"
|
||||
},
|
||||
{
|
||||
"label": "Tekst za provedeno vrijeme",
|
||||
"default": "Provedeno vrijeme"
|
||||
},
|
||||
{
|
||||
"label": "Feedback tekst",
|
||||
"default": "BRAVO!"
|
||||
},
|
||||
{
|
||||
"label": "Tekst na dugmetu pokušaj ponovo",
|
||||
"default": "Pokušaj ponovo?"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Cards",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Card",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Image"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Matching Image",
|
||||
"description": "An optional image to match against instead of using two cards with the same image."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Description",
|
||||
"description": "An optional short text that will pop up once the two matching cards are found."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Behavioural settings",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Position the cards in a square",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container."
|
||||
},
|
||||
{
|
||||
"label": "Number of cards to use",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards."
|
||||
},
|
||||
{
|
||||
"label": "Add button for retrying when the game is over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Look and feel",
|
||||
"description": "Control the visuals of the game.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Theme Color",
|
||||
"description": "Choose a color to create a theme for your card game."
|
||||
},
|
||||
{
|
||||
"label": "Card Back",
|
||||
"description": "Use a custom back for your cards."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localization",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Card turns text",
|
||||
"default": "Card turns"
|
||||
},
|
||||
{
|
||||
"label": "Time spent text",
|
||||
"default": "Time spent"
|
||||
},
|
||||
{
|
||||
"label": "Feedback text",
|
||||
"default": "Good work!"
|
||||
},
|
||||
{
|
||||
"label": "Try again button text",
|
||||
"default": "Try again?"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Cards",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Card",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Image"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Matching Image",
|
||||
"description": "An optional image to match against instead of using two cards with the same image."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Description",
|
||||
"description": "An optional short text that will pop up once the two matching cards are found."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Behavioural settings",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Position the cards in a square",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container."
|
||||
},
|
||||
{
|
||||
"label": "Number of cards to use",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards."
|
||||
},
|
||||
{
|
||||
"label": "Add button for retrying when the game is over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Look and feel",
|
||||
"description": "Control the visuals of the game.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Theme Color",
|
||||
"description": "Choose a color to create a theme for your card game."
|
||||
},
|
||||
{
|
||||
"label": "Card Back",
|
||||
"description": "Use a custom back for your cards."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localization",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Card turns text",
|
||||
"default": "Card turns"
|
||||
},
|
||||
{
|
||||
"label": "Time spent text",
|
||||
"default": "Time spent"
|
||||
},
|
||||
{
|
||||
"label": "Feedback text",
|
||||
"default": "Good work!"
|
||||
},
|
||||
{
|
||||
"label": "Try again button text",
|
||||
"default": "Try again?"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Standard"
|
||||
}
|
||||
],
|
||||
"label": "Kort",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Kort",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Billede"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Matchende billede",
|
||||
"description": "Valgfrit billede som match i stedet for at have to kort med det samme billede."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Beskrivelse",
|
||||
"description": "Valgfri tekst, som popper op, når to matchende billeder er fundet."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Indstillinger",
|
||||
"description": "Disse indstillinger giver dig mulighed for at bestemme, hvordan spillet fremstår.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Placer kortene kvadratisk",
|
||||
"description": "Vil forsøge at matche antallet af kolonner og rækker, når kortene placeres. Efterfølgende vil størrelsen på kortene blive tilpasset."
|
||||
},
|
||||
{
|
||||
"label": "Antal kort i opgaven",
|
||||
"description": "Vælges et større tal end 2, vælges kort tilfældigt fra listen af kort."
|
||||
},
|
||||
{
|
||||
"label": "Tilføj knap for at prøve spillet igen, når spillet er afsluttet."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Udseende",
|
||||
"description": "Indstil spillets udseende.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Farvetema",
|
||||
"description": "Vælg en farve til bagsiden af dine kort."
|
||||
},
|
||||
{
|
||||
"label": "Bagsidebillede",
|
||||
"description": "Brug et billede som bagside på dine kort."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Oversættelse",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Tekst når kort vendes",
|
||||
"default": "Kort vendes"
|
||||
},
|
||||
{
|
||||
"label": "Tekst for tidsforbrug",
|
||||
"default": "Tidsforbrug"
|
||||
},
|
||||
{
|
||||
"label": "Feedback tekst",
|
||||
"default": "Godt klaret!"
|
||||
},
|
||||
{
|
||||
"label": "Prøv igen knaptekst",
|
||||
"default": "Prøv igen?"
|
||||
},
|
||||
{
|
||||
"label": "Luk knaptekst",
|
||||
"default": "Luk"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Eingabemaske"
|
||||
}
|
||||
],
|
||||
"label": "Karten",
|
||||
"entity": "Karte",
|
||||
"field": {
|
||||
"label": "Karte",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Bild"
|
||||
},
|
||||
{
|
||||
"label": "Alternativtext für das Bild",
|
||||
"description": "Beschreibt, was im Bild zu sehen ist. Dieser Text wird von Vorlesewerkzeugen für Sehbehinderte genutzt."
|
||||
},
|
||||
{
|
||||
"label": "Ton",
|
||||
"description": "Optionaler Ton, der abgespielt wird, wenn die Karte umgedreht wird."
|
||||
},
|
||||
{
|
||||
"label": "Zugehöriges Bild",
|
||||
"description": "Ein optionales zweites Bild, das mit dem ersten ein Paar bildet, anstatt zweimal das selbe Bild zu verwenden."
|
||||
},
|
||||
{
|
||||
"label": "Alternativtext für das zweite Bild",
|
||||
"description": "Beschreibt, was im Bild zu sehen ist. Dieser Text wird von Vorlesewerkzeugen für Sehbehinderte genutzt."
|
||||
},
|
||||
{
|
||||
"label": "Ton zum zweiten Bild",
|
||||
"description": "Optionaler Ton, der abgespielt wird, wenn die zweite Karte umgedreht wird."
|
||||
},
|
||||
{
|
||||
"label": "Beschreibung",
|
||||
"description": "Ein kurzer optionaler Text, der angezeigt wird, wenn das Kartenpaar gefunden wurde."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Verhaltenseinstellungen",
|
||||
"description": "Diese Optionen legen fest, wie das Spiel im Detail funktioniert.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Karten in einem Quadrat anordnen",
|
||||
"description": "Versucht die Karten in der gleichen Zahl von Reihen und Spalten zu anzuordnen. Danach wird die Kartengröße an den verfügbaren Platz angepasst."
|
||||
},
|
||||
{
|
||||
"label": "Anzahl der zu verwendenden Karten",
|
||||
"description": "Wenn die Anzahl größer als 2 ist, werden zufällige Karten aus der Liste ausgewählt."
|
||||
},
|
||||
{
|
||||
"label": "\"Wiederholen\"-Button anzeigen"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Erscheinungsbild",
|
||||
"description": "Legt fest, wie das Spiel aussieht.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Themenfarbe",
|
||||
"description": "Wähle eine Farbe, um das Spiel zu individualisieren."
|
||||
},
|
||||
{
|
||||
"label": "Kartenrückseite",
|
||||
"description": "Verwende eine benutzerdefinierte Rückseite für die Karten."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Bezeichnungen und Beschriftungen",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Text mit der Anzahl der Züge",
|
||||
"default": "Züge"
|
||||
},
|
||||
{
|
||||
"label": "Text mit der bisher benötigten Zeit",
|
||||
"default": "Benötigte Zeit"
|
||||
},
|
||||
{
|
||||
"label": "Rückmeldungstext",
|
||||
"default": "Gut gemacht!"
|
||||
},
|
||||
{
|
||||
"label": "Beschriftung des \"Wiederholen\"-Buttons",
|
||||
"default": "Nochmal spielen"
|
||||
},
|
||||
{
|
||||
"label": "Beschriftung des \"Schließen\"-Buttons",
|
||||
"default": "Schließen"
|
||||
},
|
||||
{
|
||||
"label": "Bezeichnung des Spiels",
|
||||
"default": "Memory - Finde die Kartenpaare!"
|
||||
},
|
||||
{
|
||||
"label": "Meldung, wenn das Spiel abgeschlossen wurde",
|
||||
"default": "Du hast alle Kartenpaare gefunden!"
|
||||
},
|
||||
{
|
||||
"label": "Beschriftung der Kartennummer",
|
||||
"default": "Karte %num:"
|
||||
},
|
||||
{
|
||||
"label": "Text, wenn eine Karte wieder zugedeckt wurde",
|
||||
"default": "Zugedeckt."
|
||||
},
|
||||
{
|
||||
"label": "Text, wenn ein Paar gefunden wurde",
|
||||
"default": "Paar gefunden."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Βασικό"
|
||||
}
|
||||
],
|
||||
"label": "Κάρτες",
|
||||
"entity": "καρτας",
|
||||
"field": {
|
||||
"label": "Κάρτα",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Εικόνα"
|
||||
},
|
||||
{
|
||||
"label": "Εναλλακτικό κείμενο εικόνας",
|
||||
"description": "Δώστε μια περιγραφή της εικόνας. Το κείμενο διαβάζεται από εργαλεία ανάγνωσης κειμένου (text-to-speech) που χρησιμοποιούνται από χρήστες με προβλήματα όρασης."
|
||||
},
|
||||
{
|
||||
"label": "Ήχος ανοίγματος",
|
||||
"description": "Ήχος που ακούγεται κάθε φορά που μια κάρτα ανοίγει (προαιρετικά)."
|
||||
},
|
||||
{
|
||||
"label": "Αντίστοιχη εικόνα",
|
||||
"description": "Αντίστοιχη εικόνα που μπορεί να χρησιμοποιηθεί προαιρετικά αντί της χρήσης της ίδιας εικόνας σε δύο κάρτες (προαιρετικά)."
|
||||
},
|
||||
{
|
||||
"label": "Εναλλακτικό κείμενο αντίστοιχης εικόνας",
|
||||
"description": "Δώστε μια περιγραφή της εικόνας. Το κείμενο διαβάζεται από εργαλεία ανάγνωσης κειμένου (text-to-speech) που χρησιμοποιούνται από χρήστες με προβλήματα όρασης."
|
||||
},
|
||||
{
|
||||
"label": "Ήχος αντιστοίχισης",
|
||||
"description": "Ήχος που ακούγεται κάθε φορά που δύο κάρτες αντιστοιχίζονται μεταξύ τους (προαιρετικά)."
|
||||
},
|
||||
{
|
||||
"label": "Κείμενο αντιστοίχισης",
|
||||
"description": "Σύντομο κείμενο που εμφανίζεται κάθε φορά που δύο κάρτες αντιστοιχίζονται μεταξύ τους (προαιρετικά)."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Ρυθμίσεις παιχνιδιού",
|
||||
"description": "Αυτές οι ρυθμίσεις σας επιτρέπουν να καθορίσετε τον τρόπο λειτουργίας του παιχνιδιού.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Διάταξη καρτών σε τετράγωνο",
|
||||
"description": "Κατά τη διάταξη των καρτών επιχειρείται ο αριθμός των στηλών να είναι ίδιος με τον αριθμό των γραμμών. Οι διαστάσεις των καρτών προσαρμόζονται."
|
||||
},
|
||||
{
|
||||
"label": "Αριθμός καρτών που χρησιμοποιούνται",
|
||||
"description": "Επιλέγοντας αριθμό μεγαλύτερο του δύο (2) οδηγείτε το παιχνίδι στην τυχαία επιλογή καρτών από τη συνολική λίστα."
|
||||
},
|
||||
{
|
||||
"label": "Προσθήκη κουμπιού νέας προσπάθειας μετά την ολοκλήρωση του παιχνιδιού"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Εμφάνιση",
|
||||
"description": "Έλεγχος της εμφάνισης του παιχνιδιού.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Χρώμα \"θέματος\"",
|
||||
"description": "Επιλέξτε ένα χρώμα για τη δημιουργία \"θέματος\" για το παιχνίδι μνήμης."
|
||||
},
|
||||
{
|
||||
"label": "Πίσω πλευρά καρτών",
|
||||
"description": "Χρησιμοποιήστε μια δική σας εικόνα για την πίσω πλευρά των καρτών."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Προσαρμογή",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Κείμενο ανοίγματος κάρτας",
|
||||
"default": "Άνοιγμα κάρτας"
|
||||
},
|
||||
{
|
||||
"label": "Time spent text",
|
||||
"default": "Χρόνος"
|
||||
},
|
||||
{
|
||||
"label": "Κείμενο ανατροφοδότησης",
|
||||
"default": "Μπράβο!"
|
||||
},
|
||||
{
|
||||
"label": "Κείμενο κουμπιού νέας προσπάθειας",
|
||||
"default": "Επανάληψη"
|
||||
},
|
||||
{
|
||||
"label": "Ετικέτα κουμπιού κλεισίματος",
|
||||
"default": "Κλείσιμο"
|
||||
},
|
||||
{
|
||||
"label": "Ετικέτα παιχνιδιού",
|
||||
"default": "Παιχνίδι μνήμης. Αντιστοίχισε τις κάρτες που ταιριάζουν μεταξύ τους."
|
||||
},
|
||||
{
|
||||
"label": "Ετικέτα ολοκλήρωσης παιχνιδιού",
|
||||
"default": "Έχουν αντιστοιχιστεί όλες οι κάρτες!"
|
||||
},
|
||||
{
|
||||
"label": "Ετικέτα ταξινόμησης κάρτας",
|
||||
"default": "Κάρτα %num:"
|
||||
},
|
||||
{
|
||||
"label": "Ετικέτα κλειστής κάρτας",
|
||||
"default": "Κλειστή."
|
||||
},
|
||||
{
|
||||
"label": "Ετικέτα κάρτας που έχει αντιστοιχιστεί",
|
||||
"default": "Έχει αντιστοιχιστεί."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Predeterminado"
|
||||
}
|
||||
],
|
||||
"label": "Tarjetas",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Tarjeta",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Imagen"
|
||||
},
|
||||
{
|
||||
"label": "Texto alternativo para la imagen",
|
||||
"description": "Describe lo que se puede ver en la foto. El texto es leído por una herramienta de conversion de texto a voz, a usuarios con discapacidad visual."
|
||||
},
|
||||
{
|
||||
"label": "Pista de Audio",
|
||||
"description": "Un sonido opcional que se reproduce cuando se voltea la carta."
|
||||
},
|
||||
{
|
||||
"label": "Imagen coincidente",
|
||||
"description": "Una imagen opcional para emparejar, en vez de usar dos tarjetas con la misma imagen."
|
||||
},
|
||||
{
|
||||
"label": "Texto alternativo para imagenes coincidentes",
|
||||
"description": "El texto es leído por una herramienta de conversion de texto a voz, a usuarios con discapacidad visual."
|
||||
},
|
||||
{
|
||||
"label": "Pista de Audio Coincidente",
|
||||
"description": "Un sonido opcional que se reproduce cuando se voltea la segunda carta."
|
||||
},
|
||||
{
|
||||
"label": "Descripción",
|
||||
"description": "Un breve texto opcional que aparecerá una vez se encuentren las dos cartas coincidentes."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Ajustes de comportamiento",
|
||||
"description": "Estas opciones le permitirán controlar cómo se comporta el juego.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Coloca las tarjetas en un cuadrado",
|
||||
"description": "Intentará igualar el número de columnas y filas al distribuir las tarjetas. Después, las tarjetas se escalarán para que se ajusten al contenedor."
|
||||
},
|
||||
{
|
||||
"label": "Número de tarjetas a utilizar",
|
||||
"description": "Establecer esto a un número mayor que 2 hará que el juego seleccione tarjetas aleatorias de la lista de tarjetas."
|
||||
},
|
||||
{
|
||||
"label": "Añadir botón para volver a intentarlo cuando el juego ha terminado"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Aspecto y comportamiento",
|
||||
"description": "Controla los efectos visuales del juego.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Color del tema",
|
||||
"description": "Elegir un color para crear un tema para su juego de cartas."
|
||||
},
|
||||
{
|
||||
"label": "Parte posterior de la tarjeta",
|
||||
"description": "Utilice una parte posterior personalizada para sus tarjetas."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localización",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Texto para los giros de tarjetas",
|
||||
"default": "Giros de tarjeta"
|
||||
},
|
||||
{
|
||||
"label": "Texto de tiempo usado",
|
||||
"default": "Tiempo usado"
|
||||
},
|
||||
{
|
||||
"label": "Texto de comentarios",
|
||||
"default": "¡Buen trabajo!"
|
||||
},
|
||||
{
|
||||
"label": "Texto del botón Intente de nuevo",
|
||||
"default": "¿Volver a intentarlo?"
|
||||
},
|
||||
{
|
||||
"label": "Texto del botón Cerrar",
|
||||
"default": "Cerrar"
|
||||
},
|
||||
{
|
||||
"label": "Texto del juego",
|
||||
"default": "Juego de memoria. Encuentra las cartas que hacen juego."
|
||||
},
|
||||
{
|
||||
"label": "Texto del juego terminado",
|
||||
"default": "Todas las cartas han sido encontradas."
|
||||
},
|
||||
{
|
||||
"label": "Texto de indexación de la tarjeta",
|
||||
"default": "Tarjeta %num:"
|
||||
},
|
||||
{
|
||||
"label": "Texto de tarjetas sin voltear",
|
||||
"default": "Sin voltear."
|
||||
},
|
||||
{
|
||||
"label": "Texto de la tarjeta coincidente",
|
||||
"default": "Coincidencia encontrada."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Predeterminado"
|
||||
}
|
||||
],
|
||||
"label": "Tarjetas",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Tarjeta",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Imagen"
|
||||
},
|
||||
{
|
||||
"label": "Texto alternativo para la imagen",
|
||||
"description": "Describe lo que se puede ver en la foto. El texto es leído por una herramienta de conversion de texto a voz, a usuarios con discapacidad visual."
|
||||
},
|
||||
{
|
||||
"label": "Pista de Audio",
|
||||
"description": "Un sonido opcional que se reproduce cuando se voltea la carta."
|
||||
},
|
||||
{
|
||||
"label": "Imagen coincidente",
|
||||
"description": "Una imagen opcional para emparejar, en vez de usar dos tarjetas con la misma imagen."
|
||||
},
|
||||
{
|
||||
"label": "Texto alternativo para imagenes coincidentes",
|
||||
"description": "El texto es leído por una herramienta de conversion de texto a voz, a usuarios con discapacidad visual."
|
||||
},
|
||||
{
|
||||
"label": "Pista de Audio Coincidente",
|
||||
"description": "Un sonido opcional que se reproduce cuando se voltea la segunda carta."
|
||||
},
|
||||
{
|
||||
"label": "Descripción",
|
||||
"description": "Un breve texto opcional que aparecerá una vez se encuentren las dos cartas coincidentes."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Ajustes de comportamiento",
|
||||
"description": "Estas opciones le permitirán controlar cómo se comporta el juego.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Coloca las tarjetas en un cuadrado",
|
||||
"description": "Intentará igualar el número de columnas y filas al distribuir las tarjetas. Después, las tarjetas se escalarán para que se ajusten al contenedor."
|
||||
},
|
||||
{
|
||||
"label": "Número de tarjetas a utilizar",
|
||||
"description": "Establecer esto a un número mayor que 2 hará que el juego seleccione tarjetas aleatorias de la lista de tarjetas."
|
||||
},
|
||||
{
|
||||
"label": "Añadir botón para volver a intentarlo cuando el juego ha terminado"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Aspecto y comportamiento",
|
||||
"description": "Controla los efectos visuales del juego.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Color del tema",
|
||||
"description": "Elegir un color para crear un tema para su juego de cartas."
|
||||
},
|
||||
{
|
||||
"label": "Parte posterior de la tarjeta",
|
||||
"description": "Utilice una parte posterior personalizada para sus tarjetas."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localización",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Texto para los giros de tarjetas",
|
||||
"default": "Giros de tarjeta"
|
||||
},
|
||||
{
|
||||
"label": "Texto de tiempo usado",
|
||||
"default": "Tiempo usado"
|
||||
},
|
||||
{
|
||||
"label": "Texto de comentarios",
|
||||
"default": "¡Buen trabajo!"
|
||||
},
|
||||
{
|
||||
"label": "Texto del botón Intente de nuevo",
|
||||
"default": "¿Volver a intentarlo?"
|
||||
},
|
||||
{
|
||||
"label": "Texto del botón Cerrar",
|
||||
"default": "Cerrar"
|
||||
},
|
||||
{
|
||||
"label": "Texto del juego",
|
||||
"default": "Juego de memoria. Encuentra las cartas que hacen juego."
|
||||
},
|
||||
{
|
||||
"label": "Texto del juego terminado",
|
||||
"default": "Todas las cartas han sido encontradas."
|
||||
},
|
||||
{
|
||||
"label": "Texto de indexación de la tarjeta",
|
||||
"default": "Tarjeta %num:"
|
||||
},
|
||||
{
|
||||
"label": "Texto de tarjetas sin voltear",
|
||||
"default": "Sin voltear."
|
||||
},
|
||||
{
|
||||
"label": "Texto de la tarjeta coincidente",
|
||||
"default": "Coincidencia encontrada."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Vaikimisi"
|
||||
}
|
||||
],
|
||||
"label": "Kaardid",
|
||||
"entity": "kaart",
|
||||
"field": {
|
||||
"label": "Kaart",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Pilt"
|
||||
},
|
||||
{
|
||||
"label": "Pildi alternatiivtekst",
|
||||
"description": "Kirjelda, mis pildil näha on. Tekst on mõeldud vaegnägijaile tekstilugeriga kuulamiseks."
|
||||
},
|
||||
{
|
||||
"label": "Heliriba",
|
||||
"description": "Valikheli, mida mängitakse kaardi pööramisel."
|
||||
},
|
||||
{
|
||||
"label": "Sobituv pilt",
|
||||
"description": "Valikuline pilt võrdlemiseks, selmet kasutada kahte kaarti sama pildiga."
|
||||
},
|
||||
{
|
||||
"label": "Sobituva pildi alternatiivtekst",
|
||||
"description": "Kirjelda, mis pildil näha on. Tekst on mõeldud vaegnägijaile tekstilugeriga kuulamiseks."
|
||||
},
|
||||
{
|
||||
"label": "Sobituv heliriba",
|
||||
"description": "Valikheli, mida mängitakse teise kaardi pööramisel."
|
||||
},
|
||||
{
|
||||
"label": "Kirjeldus",
|
||||
"description": "Valikuline lühitekst, mida näidatakse hüpikaknas peale kahe sobituva kaardi leidmist."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Käitumisseaded",
|
||||
"description": "Need valikud võimaldavad sul kontrollida mängu käitumist.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Aseta kaardid väljakule",
|
||||
"description": "Proovib sobitada ridade ja veergude arvu kaartide asetamisel. Peale seda muudetakse kaartide suurust, et täita neid hoidev raam."
|
||||
},
|
||||
{
|
||||
"label": "Kasutatav kaartide arv",
|
||||
"description": "Määrates selle arvu kahest suuremaks valib mäng kaartide loetelust juhuslikud kaardid."
|
||||
},
|
||||
{
|
||||
"label": "Lisa Proovi uuesti nupp lõppenud mängule"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Välimus",
|
||||
"description": "Säti mängu visuaali.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Teemavärv",
|
||||
"description": "Vali oma mängu teemavärv."
|
||||
},
|
||||
{
|
||||
"label": "Kaardi taust",
|
||||
"description": "Kasuta kohandatud kaarditausta."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Kohandamine",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Kaardi pööramise tekst",
|
||||
"default": "Kaart pöörab"
|
||||
},
|
||||
{
|
||||
"label": "Aega kulunud tekst",
|
||||
"default": "Aega kulunud"
|
||||
},
|
||||
{
|
||||
"label": "Tagasiside tekst",
|
||||
"default": "Hea töö!"
|
||||
},
|
||||
{
|
||||
"label": "Proovi uuesti nupu tekst",
|
||||
"default": "Proovida uuesti?"
|
||||
},
|
||||
{
|
||||
"label": "Sulge nupu tekst",
|
||||
"default": "Sulge"
|
||||
},
|
||||
{
|
||||
"label": "Mängu pealkiri",
|
||||
"default": "Mälumäng. Leida sobituvad kaardid."
|
||||
},
|
||||
{
|
||||
"label": "Mäng on lõppenud silt",
|
||||
"default": "Kõik kaardid on leitud."
|
||||
},
|
||||
{
|
||||
"label": "Kaardi indeksi silt",
|
||||
"default": "Kaart %num:"
|
||||
},
|
||||
{
|
||||
"label": "Kaart pööramata silt",
|
||||
"default": "Pööramata."
|
||||
},
|
||||
{
|
||||
"label": "Kaart sobitub silt",
|
||||
"default": "Vaste leitud."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Lehenetsia"
|
||||
}
|
||||
],
|
||||
"label": "Txartelak",
|
||||
"entity": "karta",
|
||||
"field": {
|
||||
"label": "Karta",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Irudia"
|
||||
},
|
||||
{
|
||||
"label": "Irudiaren ordezko testua",
|
||||
"description": "Deskribatu irudian ikusi daitekeena. Testua irakurketa tresna automatikoek irakurriko dute ikusmen urritasunak dituztenentzat."
|
||||
},
|
||||
{
|
||||
"label": "Audio Pista",
|
||||
"description": "Karta itzultzen denean erreproduzitzeko aukerazko soinua."
|
||||
},
|
||||
{
|
||||
"label": "Pareko irudia",
|
||||
"description": "Irudi bera duten bi karta ez erabiltzeko parekatzeko aukeran eskainiko den irudia."
|
||||
},
|
||||
{
|
||||
"label": "Pareko irudiaren ordezko irudia",
|
||||
"description": "Deskribatu argazkian ikusi daitekeena. Testua irakurketa tresna automatikoek irakurriko dute ikusmen urritasunak dituztenentzat."
|
||||
},
|
||||
{
|
||||
"label": "Pareko Audio Pista",
|
||||
"description": "Bigarren karta itzultzen denean erreproduzitzeko aukerazko soinua."
|
||||
},
|
||||
{
|
||||
"label": "Deskribapena",
|
||||
"description": "Bi karta parekatzen direnean bat-batean agertu den aukerako testu laburra."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Portaera-ezarpenak",
|
||||
"description": "Aukera hauen bidez kontrolatu ahal izango duzu zereginaren portaera.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Kokatu karta karratuan",
|
||||
"description": "Txartelak banatzean lerro eta zutabe kopurua betetzen saiatuko da. Gero, kartak eskalatuko dira."
|
||||
},
|
||||
{
|
||||
"label": "Erabiliko den karta kopurua",
|
||||
"description": "2 baino altuagoa den zenbaki bat ezarriz gero jokoak hausazko karta hartuko du karta-zerrendatik."
|
||||
},
|
||||
{
|
||||
"label": "Saiakera berria egiteko botoia txertatu jokoa amaitzerakoan"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Itxura",
|
||||
"description": "Jokoaren itxura kontrolatu",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Estiloaren kolorea",
|
||||
"description": "Aukeratu kolorea zure karta jokoarentzat estiloa sortzeko."
|
||||
},
|
||||
{
|
||||
"label": "Kartaren atzeko aldea",
|
||||
"description": "Erabili karta-atzeko alde pertsonalizatua."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Lokalizazioa",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Txartelak buelta ematen du testua",
|
||||
"default": "Txartelak buelta ematen du"
|
||||
},
|
||||
{
|
||||
"label": "Igarotako denboraren testua",
|
||||
"default": "Igarotako denbora"
|
||||
},
|
||||
{
|
||||
"label": "Feedback testua",
|
||||
"default": "Lan bikaina!"
|
||||
},
|
||||
{
|
||||
"label": "Saiatu berriro botoiaren",
|
||||
"default": "Saiatu berriro?"
|
||||
},
|
||||
{
|
||||
"label": "Itxi botoiaren etiketa",
|
||||
"default": "Itxi"
|
||||
},
|
||||
{
|
||||
"label": "Jokoaren etiketa",
|
||||
"default": "Memoria jokoa. Aurkitu pareko kartak."
|
||||
},
|
||||
{
|
||||
"label": "Amaitutako jokoaren etiketa",
|
||||
"default": "Karta guztiak aurkitu dira."
|
||||
},
|
||||
{
|
||||
"label": "Txartela zenbakiaren etiketa",
|
||||
"default": "%num. txartela:"
|
||||
},
|
||||
{
|
||||
"label": "buelta eman gabeko txartela",
|
||||
"default": "Itzuli gabe"
|
||||
},
|
||||
{
|
||||
"label": "Parekatutako txartelaren etiketa",
|
||||
"default": "Parekoa topatuta."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Oletus"
|
||||
}
|
||||
],
|
||||
"label": "Kortit",
|
||||
"entity": "kortti",
|
||||
"field": {
|
||||
"label": "Kortti",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Kuva"
|
||||
},
|
||||
{
|
||||
"label": "Vaihtoehtoinen teksti kuvalle.",
|
||||
"description": "Kuvaile tekstillä mitä kuvassa näkyy. Tämä teksti luetaan ruudunlukijasovelluksella henkilöille jotka käyttävät ko. sovelluksia."
|
||||
},
|
||||
{
|
||||
"label": "Audioraita.",
|
||||
"description": "Vapaaehtoinen äänitehoste joka soitetaan kun kortti käännetään."
|
||||
},
|
||||
{
|
||||
"label": "Vastattava kuva",
|
||||
"description": "Valinnainen kuva johon verrata korttia sen sijaan, että kortille etsitään toista samaa kuvaa pariksi."
|
||||
},
|
||||
{
|
||||
"label": "Vaihtoehtoinen teksti kuvapareille.",
|
||||
"description": "Kuvaile tekstillä mitä kuvassa näkyy. Tämä teksti luetaan ruudunlukijasovelluksella henkilöille jotka käyttävät ko. sovelluksia."
|
||||
},
|
||||
{
|
||||
"label": "Vastaavien parien audioraita.",
|
||||
"description": "Vapaaehtoinen äänitehoste joka soitetaan kun toinen kortti käännetään."
|
||||
},
|
||||
{
|
||||
"label": "Selite",
|
||||
"description": "Valinnainen lyhyt teksti, joka näytetään kun oikea pari on löydetty."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Yleisasetukset",
|
||||
"description": "Näillä valinnoilla voit muokata pelin asetuksia.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Aseta kortit säännöllisesti",
|
||||
"description": "Yrittää sovittaa kortit ruudukkomuotoon rivien sijaan."
|
||||
},
|
||||
{
|
||||
"label": "Korttien lukumäärä",
|
||||
"description": "Kun lukumäärä on suurempi kuin kaksi, annettu määrä kortteja arvotaan kaikista korteista pelattavaksi."
|
||||
},
|
||||
{
|
||||
"label": "Salli Yritä uudelleen -painike pelin päätyttyä"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Ulkoasu",
|
||||
"description": "Hallinnoi pelin ulkoasua.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Väriteema",
|
||||
"description": "Valitse väri luodaksesi teeman pelille."
|
||||
},
|
||||
{
|
||||
"label": "Kortin kääntöpuoli",
|
||||
"description": "Mukauta korttien kääntöpuoli."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Tekstit",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Kortteja käännetty",
|
||||
"default": "Kortteja käännetty"
|
||||
},
|
||||
{
|
||||
"label": "Aikaa kulunut",
|
||||
"default": "Aikaa kulunut"
|
||||
},
|
||||
{
|
||||
"label": "Palaute",
|
||||
"default": "Hyvää työtä!"
|
||||
},
|
||||
{
|
||||
"label": "Painikkeen Yritä uudelleen teksti",
|
||||
"default": "Yritä uudelleen?"
|
||||
},
|
||||
{
|
||||
"label": "Painikkeen Sulje teksti",
|
||||
"default": "Sulje"
|
||||
},
|
||||
{
|
||||
"label": "Pelin kuvaus",
|
||||
"default": "Muistipeli. Löydä parit."
|
||||
},
|
||||
{
|
||||
"label": "Peli päättynyt",
|
||||
"default": "Kaikki parit löydetty."
|
||||
},
|
||||
{
|
||||
"label": "Kortin yksilöllinen järjestysnumero",
|
||||
"default": "Kortti %num:"
|
||||
},
|
||||
{
|
||||
"label": "Kääntämätön",
|
||||
"default": "Kääntämätön."
|
||||
},
|
||||
{
|
||||
"label": "Pari löytynyt",
|
||||
"default": "Pari löydetty."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Par défaut"
|
||||
}
|
||||
],
|
||||
"label": "Cartes",
|
||||
"entity": "carte",
|
||||
"field": {
|
||||
"label": "Carte",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Image"
|
||||
},
|
||||
{
|
||||
"label": "Texte alternatif pour l'image",
|
||||
"description": "Décrivez ce que représente l'image. Le texte est lu par la synthèse vocale."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Image correspondante",
|
||||
"description": "Une image facultative à comparer au lieu d'utiliser deux cartes avec la même image."
|
||||
},
|
||||
{
|
||||
"label": "Texte alternatif pour l'image correspondante",
|
||||
"description": "Décrivez ce que représente l'image correspondante. Le texte est lu par la synthèse vocale."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Description",
|
||||
"description": "Un texte court optionnel qui apparaîtra une fois que les deux cartes correspondantes auront été trouvées."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Paramètres comportementaux",
|
||||
"description": "Ces options vous permettent de définir le \"comportement\" du jeu de mémoire.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Positionnez les cartes en carré",
|
||||
"description": "Essaiera de faire correspondre le nombre de colonnes et de rangées lors de la disposition des cartes. Ensuite, les cartes seront mises à l'échelle pour s'adapter au conteneur."
|
||||
},
|
||||
{
|
||||
"label": "Nombre de cartes à utiliser",
|
||||
"description": "Régler ce nombre sur un nombre supérieur à 2 fera que le jeu choisira des cartes aléatoires dans la liste des cartes."
|
||||
},
|
||||
{
|
||||
"label": "Ajoutez un bouton pour essayer à nouveau quand le jeu est terminé"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Apparence",
|
||||
"description": "Définissez l'apparence visuelle des éléments dans le jeu.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Couleur du thème",
|
||||
"description": "Choisissez une couleur pour créer un thème pour votre jeu de cartes."
|
||||
},
|
||||
{
|
||||
"label": "Dos des cartes",
|
||||
"description": "Utilisez un dos personnalisé pour vos cartes."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Interface",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Texte pour le nombre de cartes retournées",
|
||||
"default": "Cartes retournées :"
|
||||
},
|
||||
{
|
||||
"label": "Texte pour le temps passé",
|
||||
"default": "Temps écoulé :"
|
||||
},
|
||||
{
|
||||
"label": "Texte de l'appréciation finale",
|
||||
"default": "Bien joué !"
|
||||
},
|
||||
{
|
||||
"label": "Texte pour le bouton Réessayez",
|
||||
"default": "Réessayer"
|
||||
},
|
||||
{
|
||||
"label": "Texte du bouton Fermer",
|
||||
"default": "Fermer"
|
||||
},
|
||||
{
|
||||
"label": "Le nom du jeu",
|
||||
"default": "Jeu de mémoire. Trouver les cartes qui se correspondent."
|
||||
},
|
||||
{
|
||||
"label": "Texte pour Le jeu est terminé",
|
||||
"default": "Toutes les cartes ont été trouvées."
|
||||
},
|
||||
{
|
||||
"label": "Texte de numérotation des cartes",
|
||||
"default": "Carte %num:"
|
||||
},
|
||||
{
|
||||
"label": "Texte pour les cartes non retournées",
|
||||
"default": "Non retournées."
|
||||
},
|
||||
{
|
||||
"label": "Texte quand les cartes correspondent",
|
||||
"default": "Correspondance trouvée."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Cards",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Card",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Image"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Matching Image",
|
||||
"description": "An optional image to match against instead of using two cards with the same image."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Description",
|
||||
"description": "An optional short text that will pop up once the two matching cards are found."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Behavioural settings",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Position the cards in a square",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container."
|
||||
},
|
||||
{
|
||||
"label": "Number of cards to use",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards."
|
||||
},
|
||||
{
|
||||
"label": "Add button for retrying when the game is over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Look and feel",
|
||||
"description": "Control the visuals of the game.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Theme Color",
|
||||
"description": "Choose a color to create a theme for your card game."
|
||||
},
|
||||
{
|
||||
"label": "Card Back",
|
||||
"description": "Use a custom back for your cards."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localization",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Card turns text",
|
||||
"default": "Card turns"
|
||||
},
|
||||
{
|
||||
"label": "Time spent text",
|
||||
"default": "Time spent"
|
||||
},
|
||||
{
|
||||
"label": "Feedback text",
|
||||
"default": "Good work!"
|
||||
},
|
||||
{
|
||||
"label": "Try again button text",
|
||||
"default": "Try again?"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Cards",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Card",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Image"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Matching Image",
|
||||
"description": "An optional image to match against instead of using two cards with the same image."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Description",
|
||||
"description": "An optional short text that will pop up once the two matching cards are found."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Behavioural settings",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Position the cards in a square",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container."
|
||||
},
|
||||
{
|
||||
"label": "Number of cards to use",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards."
|
||||
},
|
||||
{
|
||||
"label": "Add button for retrying when the game is over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Look and feel",
|
||||
"description": "Control the visuals of the game.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Theme Color",
|
||||
"description": "Choose a color to create a theme for your card game."
|
||||
},
|
||||
{
|
||||
"label": "Card Back",
|
||||
"description": "Use a custom back for your cards."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localization",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Card turns text",
|
||||
"default": "Card turns"
|
||||
},
|
||||
{
|
||||
"label": "Time spent text",
|
||||
"default": "Time spent"
|
||||
},
|
||||
{
|
||||
"label": "Feedback text",
|
||||
"default": "Good work!"
|
||||
},
|
||||
{
|
||||
"label": "Try again button text",
|
||||
"default": "Try again?"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Carte",
|
||||
"entity": "carta",
|
||||
"field": {
|
||||
"label": "Carta",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Immagine"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Matching Image",
|
||||
"description": "An optional image to match against instead of using two cards with the same image."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Descrizione",
|
||||
"description": "Breve testo visualizzato quando due carte uguali vengono trovate."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Behavioural settings",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Position the cards in a square",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container."
|
||||
},
|
||||
{
|
||||
"label": "Number of cards to use",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards."
|
||||
},
|
||||
{
|
||||
"label": "Add button for retrying when the game is over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Look and feel",
|
||||
"description": "Control the visuals of the game.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Theme Color",
|
||||
"description": "Choose a color to create a theme for your card game."
|
||||
},
|
||||
{
|
||||
"label": "Card Back",
|
||||
"description": "Use a custom back for your cards."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localizzazione",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Testo Gira carta",
|
||||
"default": "Card turns"
|
||||
},
|
||||
{
|
||||
"label": "Testo Tempo trascorso",
|
||||
"default": "Time spent"
|
||||
},
|
||||
{
|
||||
"label": "Testo Feedback",
|
||||
"default": "Good work!"
|
||||
},
|
||||
{
|
||||
"label": "Try again button text",
|
||||
"default": "Reset"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "デフォルト"
|
||||
}
|
||||
],
|
||||
"label": "カード",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "カード",
|
||||
"fields": [
|
||||
{
|
||||
"label": "画像"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "一致させる画像",
|
||||
"description": "同じ画像の2枚のカードを使用する代わりに、別に一致させるためのオプション画像"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "説明",
|
||||
"description": "一致する2つのカードが見つかるとポップアップするオプションの短文テキスト。"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "動作設定",
|
||||
"description": "これらのオプションを使用して、ゲームの動作を制御できます。",
|
||||
"fields": [
|
||||
{
|
||||
"label": "カードを正方形に配置",
|
||||
"description": "カードをレイアウトするときに、列と行の数を一致させてみてください。そうすると、カードは、コンテナに合わせてスケーリングされます。"
|
||||
},
|
||||
{
|
||||
"label": "使用するカードの数",
|
||||
"description": "これを2よりも大きい数値に設定すると、カードのリストからランダムなカードが選ばれるようになります。"
|
||||
},
|
||||
{
|
||||
"label": "ゲームが終了したときに、リトライのためのボタンを追加"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "ルック&フィール",
|
||||
"description": "ゲームの外観を制御します。",
|
||||
"fields": [
|
||||
{
|
||||
"label": "テーマ色",
|
||||
"description": "カードゲームのテーマとなる色を選択してください。"
|
||||
},
|
||||
{
|
||||
"label": "カード裏",
|
||||
"description": "カードに独自の裏を使います。"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "ローカリゼーション",
|
||||
"fields": [
|
||||
{
|
||||
"label": "カードターン のテキスト",
|
||||
"default": "カードターン"
|
||||
},
|
||||
{
|
||||
"label": "経過時間のテキスト",
|
||||
"default": "経過時間"
|
||||
},
|
||||
{
|
||||
"label": "フィードバックテキスト",
|
||||
"default": "よくできました!"
|
||||
},
|
||||
{
|
||||
"label": "リトライボタンのテキスト",
|
||||
"default": "もう一度トライしますか ?"
|
||||
},
|
||||
{
|
||||
"label": "閉じるボタンのテキスト",
|
||||
"default": "閉じる"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Cards",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Card",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Image"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Matching Image",
|
||||
"description": "An optional image to match against instead of using two cards with the same image."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Description",
|
||||
"description": "An optional short text that will pop up once the two matching cards are found."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Behavioural settings",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Position the cards in a square",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container."
|
||||
},
|
||||
{
|
||||
"label": "Number of cards to use",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards."
|
||||
},
|
||||
{
|
||||
"label": "Add button for retrying when the game is over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Look and feel",
|
||||
"description": "Control the visuals of the game.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Theme Color",
|
||||
"description": "Choose a color to create a theme for your card game."
|
||||
},
|
||||
{
|
||||
"label": "Card Back",
|
||||
"description": "Use a custom back for your cards."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localization",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Card turns text",
|
||||
"default": "Card turns"
|
||||
},
|
||||
{
|
||||
"label": "Time spent text",
|
||||
"default": "Time spent"
|
||||
},
|
||||
{
|
||||
"label": "Feedback text",
|
||||
"default": "Good work!"
|
||||
},
|
||||
{
|
||||
"label": "Try again button text",
|
||||
"default": "Try again?"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Kort",
|
||||
"entity": "kort",
|
||||
"field": {
|
||||
"label": "Kort",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Bilde"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Tilhørende bilde",
|
||||
"description": "Et valgfritt bilde som brukes av kort nummer to istedenfor å bruke to kort med samme bilde."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Beskrivelse",
|
||||
"description": "En valgfri kort tekst som spretter opp når kort-paret er funnet."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Innstillinger for oppførsel",
|
||||
"description": "Disse instillingene lar deg bestemme hvordan spillet skal oppføre seg.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Plasser kortene i en firkant",
|
||||
"description": "Vil forsøk å samsvare antall kolonner og rader når kortene legges ut. Etterpå vil kortene bli skalert til å passe beholderen."
|
||||
},
|
||||
{
|
||||
"label": "Antall kort som skal brukes",
|
||||
"description": "Ved å sette antallet høyere enn 2 vil spillet plukke tilfeldige kort fra listen over kort."
|
||||
},
|
||||
{
|
||||
"label": "Legg til knapp for å prøve på nytt når spillet er over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Tilpass utseende",
|
||||
"description": "Kontroller de visuelle aspektene ved spillet.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Temafarge",
|
||||
"description": "Velg en farge for å skape et tema over kortspillet ditt."
|
||||
},
|
||||
{
|
||||
"label": "Kortbaksiden",
|
||||
"description": "Bruk en tilpasset kortbakside for kortene dine."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Oversettelser",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Etikett for antall vendte kort",
|
||||
"default": "Kort vendt"
|
||||
},
|
||||
{
|
||||
"label": "Etikett for tid brukt",
|
||||
"default": "Tid brukt"
|
||||
},
|
||||
{
|
||||
"label": "Tilbakemeldingstekst",
|
||||
"default": "Godt jobbet!"
|
||||
},
|
||||
{
|
||||
"label": "Prøv på nytt-tekst",
|
||||
"default": "Prøv på nytt?"
|
||||
},
|
||||
{
|
||||
"label": "Lukk knapp-merkelapp",
|
||||
"default": "Lukk"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Standaard"
|
||||
}
|
||||
],
|
||||
"label": "Kaarten",
|
||||
"entity": "kaart",
|
||||
"field": {
|
||||
"label": "Kaart",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Afbeelding"
|
||||
},
|
||||
{
|
||||
"label": "Bijpassende afbeelding",
|
||||
"description": "Een optionele afbeelding die past in plaats van 2 kaarten met dezelfde afbeelding."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Omschrijving",
|
||||
"description": "Een optionele korte tekst die zal verschijnen zodra de 2 overeenkomende kaarten zijn gevonden."
|
||||
},
|
||||
{
|
||||
"label": "De alternatieve tekst voor de bijpassende afbeelding",
|
||||
"description": "Omschrijf wat de afbeelding voorstelt. De tekst zal worden gelezen door tekst-naar-spraak tools voor slechtzienden."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Omschrijving",
|
||||
"description": "Een optionele korte tekst die zal verschijnen zodra de 2 overeenkomende kaarten zijn gevonden."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Gedragsinstellingen",
|
||||
"description": "Met deze opties kun je bepalen hoe het spel zich gedraagt.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Plaats de kaarten in een vierkant",
|
||||
"description": "Bij het leggen van de kaarten zullen het aantal kolommen en rijen op elkaar worden afgestemd. Daarna zal de omvang van de kaarten worden aangepast om in de beschikbare omgeving te passen."
|
||||
},
|
||||
{
|
||||
"label": "Het aantal te gebruiken kaarten",
|
||||
"description": "Als je dit getal instelt op een aantal groter dan 2, dan zal het spel willekeurig kaarten kiezen uit de complete lijst met kaarten."
|
||||
},
|
||||
{
|
||||
"label": "Voeg de knop 'Opnieuw proberen? toe als het spel is afgelopen"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "De vormgeving",
|
||||
"description": "Stel de beelden van het spel in.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Themakleur",
|
||||
"description": "Kies een themakleur voor kaarten van je geheugenspel."
|
||||
},
|
||||
{
|
||||
"label": "Achterkant kaart",
|
||||
"description": "Gebruik een aangepaste achterkant voor je kaarten."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localiseer",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Label gedraaide kaarten",
|
||||
"default": "Gedraaide kaarten"
|
||||
},
|
||||
{
|
||||
"label": "Label verstreken tijd",
|
||||
"default": "Verstreken tijd"
|
||||
},
|
||||
{
|
||||
"label": "Label feedback",
|
||||
"default": "Goed gedaan!"
|
||||
},
|
||||
{
|
||||
"label": "Label opnieuw proberen knop",
|
||||
"default": "Opnieuw proberen?"
|
||||
},
|
||||
{
|
||||
"label": "Label sluiten knop",
|
||||
"default": "Sluiten"
|
||||
},
|
||||
{
|
||||
"label": "Label spel",
|
||||
"default": "Geheugenspel. Vind de overeenkomende kaarten."
|
||||
},
|
||||
{
|
||||
"label": ":Label einde spel",
|
||||
"default": "Alle kaarten zijn gevonden."
|
||||
},
|
||||
{
|
||||
"label": "Label kaartenindex",
|
||||
"default": "Kaart %num:"
|
||||
},
|
||||
{
|
||||
"label": "Label niet gedraaide kaarten",
|
||||
"default": "Niet gedraaid."
|
||||
},
|
||||
{
|
||||
"label": "Label overeenkomende kaarten",
|
||||
"default": "Paar gevonden."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Cards",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Card",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Image"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Matching Image",
|
||||
"description": "An optional image to match against instead of using two cards with the same image."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Description",
|
||||
"description": "An optional short text that will pop up once the two matching cards are found."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Behavioural settings",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Position the cards in a square",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container."
|
||||
},
|
||||
{
|
||||
"label": "Number of cards to use",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards."
|
||||
},
|
||||
{
|
||||
"label": "Add button for retrying when the game is over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Look and feel",
|
||||
"description": "Control the visuals of the game.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Theme Color",
|
||||
"description": "Choose a color to create a theme for your card game."
|
||||
},
|
||||
{
|
||||
"label": "Card Back",
|
||||
"description": "Use a custom back for your cards."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localization",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Card turns text",
|
||||
"default": "Card turns"
|
||||
},
|
||||
{
|
||||
"label": "Time spent text",
|
||||
"default": "Time spent"
|
||||
},
|
||||
{
|
||||
"label": "Feedback text",
|
||||
"default": "Good work!"
|
||||
},
|
||||
{
|
||||
"label": "Try again button text",
|
||||
"default": "Try again?"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Cards",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Card",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Image"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Matching Image",
|
||||
"description": "An optional image to match against instead of using two cards with the same image."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Description",
|
||||
"description": "An optional short text that will pop up once the two matching cards are found."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Behavioural settings",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Position the cards in a square",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container."
|
||||
},
|
||||
{
|
||||
"label": "Number of cards to use",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards."
|
||||
},
|
||||
{
|
||||
"label": "Add button for retrying when the game is over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Look and feel",
|
||||
"description": "Control the visuals of the game.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Theme Color",
|
||||
"description": "Choose a color to create a theme for your card game."
|
||||
},
|
||||
{
|
||||
"label": "Card Back",
|
||||
"description": "Use a custom back for your cards."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localization",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Card turns text",
|
||||
"default": "Card turns"
|
||||
},
|
||||
{
|
||||
"label": "Time spent text",
|
||||
"default": "Time spent"
|
||||
},
|
||||
{
|
||||
"label": "Feedback text",
|
||||
"default": "Good work!"
|
||||
},
|
||||
{
|
||||
"label": "Try again button text",
|
||||
"default": "Try again?"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Padrão"
|
||||
}
|
||||
],
|
||||
"label": "Cartões",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Cartão",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Imagem"
|
||||
},
|
||||
{
|
||||
"label": "Texto alternativo para a imagem",
|
||||
"description": "Descreva o que pode ser visto na foto. O texto será lido para os usuários que necessitam utilizar leitores de tela."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Imagem-par",
|
||||
"description": "Uma imagem opcional para ser combinada ao invés de utilizar dois cartões com a mesma imagem."
|
||||
},
|
||||
{
|
||||
"label": "Texto alternativo para a Imagem-par",
|
||||
"description": "Descreva o que pode ser visto na foto. O texto será lido para os usuários que necessitam utilizar leitores de tela."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Descrição",
|
||||
"description": "Um texto curto opcional que aparecerá quando duas cartas forem combinadas corretamente."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Configurações comportamentais",
|
||||
"description": "Estas opções permitirão que você controle como o jogo funciona.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Posicionar os cartões em um quadrado",
|
||||
"description": "Tentará coincidir o número de linhas e colunas quando distribuir os cartões. Após, os cartões serão dimensionados para preencher o espaço."
|
||||
},
|
||||
{
|
||||
"label": "Número de cartas para serem usadas",
|
||||
"description": "Colocando um número maior que 2 fara com que o jogo escolha cartões aleatórios da lista de cartões."
|
||||
},
|
||||
{
|
||||
"label": "Adicionar botão para tentar novamente quando o jogo acabar"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Aparência e percepção",
|
||||
"description": "Controla o visual do jogo.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Cor tema",
|
||||
"description": "Escolha uma cor para criar um tema para seu jogo."
|
||||
},
|
||||
{
|
||||
"label": "Verso do cartão",
|
||||
"description": "Use um verso customizado para seus cartões."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localização",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Texto de virada de cartão",
|
||||
"default": "Cartão virou"
|
||||
},
|
||||
{
|
||||
"label": "Texto de tempo gasto",
|
||||
"default": "Tempo gasto"
|
||||
},
|
||||
{
|
||||
"label": "Texto de feedback",
|
||||
"default": "Bom trabalho!"
|
||||
},
|
||||
{
|
||||
"label": "Texto do botão Tentar Novamente",
|
||||
"default": "Tentar novamente?"
|
||||
},
|
||||
{
|
||||
"label": "Rótulo do botão Fechar",
|
||||
"default": "Fechar"
|
||||
},
|
||||
{
|
||||
"label": "Rótulo do jogo",
|
||||
"default": "Jogo da memória. Forme pares de cartões."
|
||||
},
|
||||
{
|
||||
"label": "Rótulo de fim de jogo",
|
||||
"default": "Todas os cartões foram encontrados."
|
||||
},
|
||||
{
|
||||
"label": "Rótulo de índice de cartão",
|
||||
"default": "Cartão %num:"
|
||||
},
|
||||
{
|
||||
"label": "Rótulo de cartão não virado",
|
||||
"default": "Não virado."
|
||||
},
|
||||
{
|
||||
"label": "Rótulo de combinação",
|
||||
"default": "Combinação encontrada."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Padrão"
|
||||
}
|
||||
],
|
||||
"label": "Cartões",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Cartão",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Imagem"
|
||||
},
|
||||
{
|
||||
"label": "Texto alternativo para a imagem",
|
||||
"description": "Descreva o que pode ser visto na foto. O texto será lido para os usuários que necessitam utilizar leitores de tela."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Imagem-par",
|
||||
"description": "Uma imagem opcional para ser combinada ao invés de utilizar dois cartões com a mesma imagem."
|
||||
},
|
||||
{
|
||||
"label": "Texto alternativo para a Imagem-par",
|
||||
"description": "Descreva o que pode ser visto na foto. O texto será lido para os usuários que necessitam utilizar leitores de tela."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Descrição",
|
||||
"description": "Um texto curto opcional que aparecerá quando duas cartas forem combinadas corretamente."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Configurações comportamentais",
|
||||
"description": "Estas opções permitirão que você controle como o jogo funciona.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Posicionar os cartões em um quadrado",
|
||||
"description": "Tentará coincidir o número de linhas e colunas quando distribuir os cartões. Após, os cartões serão dimensionados para preencher o espaço."
|
||||
},
|
||||
{
|
||||
"label": "Número de cartas para serem usadas",
|
||||
"description": "Colocando um número maior que 2 fara com que o jogo escolha cartões aleatórios da lista de cartões."
|
||||
},
|
||||
{
|
||||
"label": "Adicionar botão para tentar novamente quando o jogo acabar"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Aparência e percepção",
|
||||
"description": "Controla o visual do jogo.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Cor tema",
|
||||
"description": "Escolha uma cor para criar um tema para seu jogo."
|
||||
},
|
||||
{
|
||||
"label": "Verso do cartão",
|
||||
"description": "Use um verso customizado para seus cartões."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localização",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Texto de virada de cartão",
|
||||
"default": "Cartão virou"
|
||||
},
|
||||
{
|
||||
"label": "Texto de tempo gasto",
|
||||
"default": "Tempo gasto"
|
||||
},
|
||||
{
|
||||
"label": "Texto de feedback",
|
||||
"default": "Bom trabalho!"
|
||||
},
|
||||
{
|
||||
"label": "Texto do botão Tentar Novamente",
|
||||
"default": "Tentar novamente?"
|
||||
},
|
||||
{
|
||||
"label": "Rótulo do botão Fechar",
|
||||
"default": "Fechar"
|
||||
},
|
||||
{
|
||||
"label": "Rótulo do jogo",
|
||||
"default": "Jogo da memória. Forme pares de cartões."
|
||||
},
|
||||
{
|
||||
"label": "Rótulo de fim de jogo",
|
||||
"default": "Todas os cartões foram encontrados."
|
||||
},
|
||||
{
|
||||
"label": "Rótulo de índice de cartão",
|
||||
"default": "Cartão %num:"
|
||||
},
|
||||
{
|
||||
"label": "Rótulo de cartão não virado",
|
||||
"default": "Não virado."
|
||||
},
|
||||
{
|
||||
"label": "Rótulo de combinação",
|
||||
"default": "Combinação encontrada."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Cards",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Card",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Image"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Matching Image",
|
||||
"description": "An optional image to match against instead of using two cards with the same image."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Description",
|
||||
"description": "An optional short text that will pop up once the two matching cards are found."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Behavioural settings",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Position the cards in a square",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container."
|
||||
},
|
||||
{
|
||||
"label": "Number of cards to use",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards."
|
||||
},
|
||||
{
|
||||
"label": "Add button for retrying when the game is over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Look and feel",
|
||||
"description": "Control the visuals of the game.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Theme Color",
|
||||
"description": "Choose a color to create a theme for your card game."
|
||||
},
|
||||
{
|
||||
"label": "Card Back",
|
||||
"description": "Use a custom back for your cards."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localization",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Card turns text",
|
||||
"default": "Card turns"
|
||||
},
|
||||
{
|
||||
"label": "Time spent text",
|
||||
"default": "Time spent"
|
||||
},
|
||||
{
|
||||
"label": "Feedback text",
|
||||
"default": "Good work!"
|
||||
},
|
||||
{
|
||||
"label": "Try again button text",
|
||||
"default": "Try again?"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "По умолчанию"
|
||||
}
|
||||
],
|
||||
"label": "Карточки",
|
||||
"entity": "карточка",
|
||||
"field": {
|
||||
"label": "Карточка",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Изображение"
|
||||
},
|
||||
{
|
||||
"label": "Альтернативный текст для изображения",
|
||||
"description": "Опишите, что видно на фото. Текст читается с помощью инструментов преобразования текста в речь, необходимых пользователям с нарушениями зрения."
|
||||
},
|
||||
{
|
||||
"label": "Звуковая дорожка",
|
||||
"description": "Дополнительный звук, который воспроизводится при повороте карточки."
|
||||
},
|
||||
{
|
||||
"label": "Соответствующее изображения",
|
||||
"description": "Необязательное изображение для сравнения вместо использования двух карточек с одинаковым изображением."
|
||||
},
|
||||
{
|
||||
"label": "Альтернативный текст для соответствующего изображения",
|
||||
"description": "Describe what can be seen in the photo. Текст читается с помощью инструментов преобразования текста в речь, необходимых пользователям с нарушениями зрения."
|
||||
},
|
||||
{
|
||||
"label": "Соответствующая звуковая дорожка",
|
||||
"description": "Дополнительный звук, который воспроизводится при повороте второй карточки."
|
||||
},
|
||||
{
|
||||
"label": "Описание",
|
||||
"description": "Дополнительный короткий текст, который появится после того, как найдены две подходящие карточки."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Настройки поведения",
|
||||
"description": "Эти параметры позволят вам контролировать поведение игры.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Положение карточки на площадке",
|
||||
"description": "Постарайтесь сопоставить количество столбцов и строк при разложении карточек. После чего карточки будут масштабироваться до размера контейнера."
|
||||
},
|
||||
{
|
||||
"label": "Количество карточек для использования",
|
||||
"description": "Если установить значение больше 2, игра будет выбирать случайные карточки из списка."
|
||||
},
|
||||
{
|
||||
"label": "Добавить кнопку для повтора, когда игра закончена"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Смотреть и чувствовать",
|
||||
"description": "Управление визуальными эффектами игры.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Цвет темы",
|
||||
"description": "Выберите цвет, чтобы создать тему для своей карточной игры."
|
||||
},
|
||||
{
|
||||
"label": "Обратная сторона карточки",
|
||||
"description": "Использование произвольной спины для своих карточек."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Локализация",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Текст перевернутой карточки",
|
||||
"default": "Карточка перевернута"
|
||||
},
|
||||
{
|
||||
"label": "Текст затраченного времени",
|
||||
"default": "Затраченное время"
|
||||
},
|
||||
{
|
||||
"label": "Текст обратной связи",
|
||||
"default": "Хорошая работа!"
|
||||
},
|
||||
{
|
||||
"label": "Текст кнопки повтора",
|
||||
"default": "Попробовать еще раз?"
|
||||
},
|
||||
{
|
||||
"label": "Надпись кнопки закрытия",
|
||||
"default": "Закрыть"
|
||||
},
|
||||
{
|
||||
"label": "Надпись игры",
|
||||
"default": "Игра на запоминание. Найти подходящие карточки."
|
||||
},
|
||||
{
|
||||
"label": "Надпись завершения игры",
|
||||
"default": "Все карточки были найдены."
|
||||
},
|
||||
{
|
||||
"label": "Надпись номера карточки",
|
||||
"default": "Карточка %num:"
|
||||
},
|
||||
{
|
||||
"label": "Надпись неперевернутой карточки",
|
||||
"default": "Неперевернутая."
|
||||
},
|
||||
{
|
||||
"label": "Надпись подходящей карточки",
|
||||
"default": "Соответствие найдено."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Privzeto"
|
||||
}
|
||||
],
|
||||
"label": "Kartice",
|
||||
"entity": "kartica",
|
||||
"field": {
|
||||
"label": "Kartica",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Slika"
|
||||
},
|
||||
{
|
||||
"label": "Nadomestno besedilo za prvo kartico v paru",
|
||||
"description": "Besedilo opisuje videno na sliki in služi bralnikom zaslona."
|
||||
},
|
||||
{
|
||||
"label": "Avdiozapis",
|
||||
"description": "Neobvezen avdiozapis za spremljavo slike na prvi kartici para."
|
||||
},
|
||||
{
|
||||
"label": "Ujemajoča slika",
|
||||
"description": "Neobvezna slika za drugo kartico v paru. V nasprotnem primeru bosta par sestavljali kartici z enako sliko."
|
||||
},
|
||||
{
|
||||
"label": "Nadomestno besedilo za drugo kartico v paru",
|
||||
"description": "Besedilo opisuje videno na sliki in služi bralnikom zaslona."
|
||||
},
|
||||
{
|
||||
"label": "Avdiozapis za drugo kartico v paru",
|
||||
"description": "Neobvezen avdiozapis za spremljavo slike na drugi kartici para."
|
||||
},
|
||||
{
|
||||
"label": "Opis rešitve",
|
||||
"description": "Neobvezno besedilo ob uspešni povezavi kartic para."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Nastavitve interakcije",
|
||||
"description": "Nastavitve omogočajo nadzor nad interakcijo aktivnosti za udeležence.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Kartice poravnaj v pravokotnik",
|
||||
"description": "Kartice prikaže enakomerno v obliki pravokotnika in ne zgolj poravnano v eni vrsti."
|
||||
},
|
||||
{
|
||||
"label": "Uporabi naslednje število parov",
|
||||
"description": "V primeru večjega nabora pripravljenih parov kartic, lahko izvajalec tukaj omeji (najmanj 2), koliko parov se dejansko uporabi. Ob ponovitvi aktivnosti bodo pari kartic iz celotnega nabora spet izbrani naključno."
|
||||
},
|
||||
{
|
||||
"label": "Prikaži gumb za ponovitev aktivnosti po zaključku"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Vizualizacija",
|
||||
"description": "Nastavitve izgleda kartic.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Barvna shema",
|
||||
"description": "Izbira barvne sheme kartic."
|
||||
},
|
||||
{
|
||||
"label": "Slika hrbta kartic",
|
||||
"description": "Izbira slike za hrbet kartic."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Določitev kartic",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Besedilo za obrnjene kartice",
|
||||
"default": "Obrnjenih kartic"
|
||||
},
|
||||
{
|
||||
"label": "Besedilo za porabljen čas",
|
||||
"default": "Porabljen čas"
|
||||
},
|
||||
{
|
||||
"label": "Besedilo ob zaključku naloge",
|
||||
"default": "Dobro opravljeno!"
|
||||
},
|
||||
{
|
||||
"label": "Besedilo gumba za ponoven poskus",
|
||||
"default": "Poskusi ponovno?"
|
||||
},
|
||||
{
|
||||
"label": "Besedilo gumba Zapri",
|
||||
"default": "Zapri"
|
||||
},
|
||||
{
|
||||
"label": "Besedilo aktivnosti spomin",
|
||||
"default": "Poveži pare kartic."
|
||||
},
|
||||
{
|
||||
"label": "Besedilo ob zaključku naloge",
|
||||
"default": "Povezani so vsi pari."
|
||||
},
|
||||
{
|
||||
"label": "Besedilo za razlikovanje kartic",
|
||||
"default": "Kartica %num:"
|
||||
},
|
||||
{
|
||||
"label": "Besedilo za neobrnjene kartice",
|
||||
"default": "Neobrnjeno."
|
||||
},
|
||||
{
|
||||
"label": "Besedilo ob povezanem paru",
|
||||
"default": "Najden par."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Cards",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Card",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Image"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Matching Image",
|
||||
"description": "An optional image to match against instead of using two cards with the same image."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Description",
|
||||
"description": "An optional short text that will pop up once the two matching cards are found."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Behavioural settings",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Position the cards in a square",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container."
|
||||
},
|
||||
{
|
||||
"label": "Number of cards to use",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards."
|
||||
},
|
||||
{
|
||||
"label": "Add button for retrying when the game is over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Look and feel",
|
||||
"description": "Control the visuals of the game.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Theme Color",
|
||||
"description": "Choose a color to create a theme for your card game."
|
||||
},
|
||||
{
|
||||
"label": "Card Back",
|
||||
"description": "Use a custom back for your cards."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localization",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Card turns text",
|
||||
"default": "Card turns"
|
||||
},
|
||||
{
|
||||
"label": "Time spent text",
|
||||
"default": "Time spent"
|
||||
},
|
||||
{
|
||||
"label": "Feedback text",
|
||||
"default": "Good work!"
|
||||
},
|
||||
{
|
||||
"label": "Try again button text",
|
||||
"default": "Try again?"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Cards",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Card",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Image"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Matching Image",
|
||||
"description": "An optional image to match against instead of using two cards with the same image."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Description",
|
||||
"description": "An optional short text that will pop up once the two matching cards are found."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Behavioural settings",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Position the cards in a square",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container."
|
||||
},
|
||||
{
|
||||
"label": "Number of cards to use",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards."
|
||||
},
|
||||
{
|
||||
"label": "Add button for retrying when the game is over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Look and feel",
|
||||
"description": "Control the visuals of the game.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Theme Color",
|
||||
"description": "Choose a color to create a theme for your card game."
|
||||
},
|
||||
{
|
||||
"label": "Card Back",
|
||||
"description": "Use a custom back for your cards."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localization",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Card turns text",
|
||||
"default": "Card turns"
|
||||
},
|
||||
{
|
||||
"label": "Time spent text",
|
||||
"default": "Time spent"
|
||||
},
|
||||
{
|
||||
"label": "Feedback text",
|
||||
"default": "Good work!"
|
||||
},
|
||||
{
|
||||
"label": "Try again button text",
|
||||
"default": "Try again?"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Cards",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Card",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Image"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Matching Image",
|
||||
"description": "An optional image to match against instead of using two cards with the same image."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Description",
|
||||
"description": "An optional short text that will pop up once the two matching cards are found."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Behavioural settings",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Position the cards in a square",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container."
|
||||
},
|
||||
{
|
||||
"label": "Number of cards to use",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards."
|
||||
},
|
||||
{
|
||||
"label": "Add button for retrying when the game is over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Look and feel",
|
||||
"description": "Control the visuals of the game.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Theme Color",
|
||||
"description": "Choose a color to create a theme for your card game."
|
||||
},
|
||||
{
|
||||
"label": "Card Back",
|
||||
"description": "Use a custom back for your cards."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localization",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Card turns text",
|
||||
"default": "Card turns"
|
||||
},
|
||||
{
|
||||
"label": "Time spent text",
|
||||
"default": "Time spent"
|
||||
},
|
||||
{
|
||||
"label": "Feedback text",
|
||||
"default": "Good work!"
|
||||
},
|
||||
{
|
||||
"label": "Try again button text",
|
||||
"default": "Try again?"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Cards",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Card",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Image"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Matching Image",
|
||||
"description": "An optional image to match against instead of using two cards with the same image."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Description",
|
||||
"description": "An optional short text that will pop up once the two matching cards are found."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Behavioural settings",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Position the cards in a square",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container."
|
||||
},
|
||||
{
|
||||
"label": "Number of cards to use",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards."
|
||||
},
|
||||
{
|
||||
"label": "Add button for retrying when the game is over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Look and feel",
|
||||
"description": "Control the visuals of the game.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Theme Color",
|
||||
"description": "Choose a color to create a theme for your card game."
|
||||
},
|
||||
{
|
||||
"label": "Card Back",
|
||||
"description": "Use a custom back for your cards."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localization",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Card turns text",
|
||||
"default": "Card turns"
|
||||
},
|
||||
{
|
||||
"label": "Time spent text",
|
||||
"default": "Time spent"
|
||||
},
|
||||
{
|
||||
"label": "Feedback text",
|
||||
"default": "Good work!"
|
||||
},
|
||||
{
|
||||
"label": "Try again button text",
|
||||
"default": "Try again?"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Cards",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Card",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Image"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Matching Image",
|
||||
"description": "An optional image to match against instead of using two cards with the same image."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Description",
|
||||
"description": "An optional short text that will pop up once the two matching cards are found."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Behavioural settings",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Position the cards in a square",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container."
|
||||
},
|
||||
{
|
||||
"label": "Number of cards to use",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards."
|
||||
},
|
||||
{
|
||||
"label": "Add button for retrying when the game is over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Look and feel",
|
||||
"description": "Control the visuals of the game.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Theme Color",
|
||||
"description": "Choose a color to create a theme for your card game."
|
||||
},
|
||||
{
|
||||
"label": "Card Back",
|
||||
"description": "Use a custom back for your cards."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localization",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Card turns text",
|
||||
"default": "Card turns"
|
||||
},
|
||||
{
|
||||
"label": "Time spent text",
|
||||
"default": "Time spent"
|
||||
},
|
||||
{
|
||||
"label": "Feedback text",
|
||||
"default": "Good work!"
|
||||
},
|
||||
{
|
||||
"label": "Try again button text",
|
||||
"default": "Try again?"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Cards",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Card",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Image"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Matching Image",
|
||||
"description": "An optional image to match against instead of using two cards with the same image."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Description",
|
||||
"description": "An optional short text that will pop up once the two matching cards are found."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Behavioural settings",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Position the cards in a square",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container."
|
||||
},
|
||||
{
|
||||
"label": "Number of cards to use",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards."
|
||||
},
|
||||
{
|
||||
"label": "Add button for retrying when the game is over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Look and feel",
|
||||
"description": "Control the visuals of the game.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Theme Color",
|
||||
"description": "Choose a color to create a theme for your card game."
|
||||
},
|
||||
{
|
||||
"label": "Card Back",
|
||||
"description": "Use a custom back for your cards."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localization",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Card turns text",
|
||||
"default": "Card turns"
|
||||
},
|
||||
{
|
||||
"label": "Time spent text",
|
||||
"default": "Time spent"
|
||||
},
|
||||
{
|
||||
"label": "Feedback text",
|
||||
"default": "Good work!"
|
||||
},
|
||||
{
|
||||
"label": "Try again button text",
|
||||
"default": "Try again?"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "По умовчанню"
|
||||
}
|
||||
],
|
||||
"label": "Карточки",
|
||||
"entity": "карточка",
|
||||
"field": {
|
||||
"label": "Карточка",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Зображення"
|
||||
},
|
||||
{
|
||||
"label": "Альтернативний текст для зображення",
|
||||
"description": "Опишіть, що видно на фото. Текст читаеться за допомогою інструментів перетворення тексту в мову, необхідну користувачам з порушенням зору."
|
||||
},
|
||||
{
|
||||
"label": "Звукова доріжка",
|
||||
"description": "Додатковий звук, який відтворюється при повороті карточки."
|
||||
},
|
||||
{
|
||||
"label": "Відповідне зображення",
|
||||
"description": "Необов'язкове зображення для співставлення замість використання двох карточок з однаковими зображеннями."
|
||||
},
|
||||
{
|
||||
"label": "Альтернативний текст для відповідного зображення",
|
||||
"description": "Опишіть, що видно на фото. Текст читаеться за допомогою інструментів перетворення тексту в мову, необхідну користувачам з порушенням зору."
|
||||
},
|
||||
{
|
||||
"label": "Відповідна звукова доріжка",
|
||||
"description": "Додатковий звук, який відтворюється при повороті карточки."
|
||||
},
|
||||
{
|
||||
"label": "Опис",
|
||||
"description": "Додатковий короткий текст, який появиться після того, як знайдено дві відповідні карточки."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Настройки поведінки",
|
||||
"description": "Ці параметри дозволять вам контролювати поведінку гри.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Розміщення карточки на площадці",
|
||||
"description": "Постарайтеся співставити кількість стовпчиків і рядків при разкладанні карточок. Після чого карточки будуть масштабуватися до разміру контейнера."
|
||||
},
|
||||
{
|
||||
"label": "Кількість карточок для використання",
|
||||
"description": "Якщо встановити значення більше 2, гра будет обирати випадкові карточки із списку."
|
||||
},
|
||||
{
|
||||
"label": "Добавити кнопку для повтору, коли гра закінчена"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Дивитися і відчувати",
|
||||
"description": "Керування візуальними ефектами гри.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Колір теми",
|
||||
"description": "Оберіть колір, щоб створити тему для своеї карточної гри."
|
||||
},
|
||||
{
|
||||
"label": "Зворотня сторона карточки",
|
||||
"description": "Використання довільної сорочки для своїх карточок."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Локалізація",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Текст перевернутої карточки",
|
||||
"default": "Карточка перевернута"
|
||||
},
|
||||
{
|
||||
"label": "Текст витраченого часу",
|
||||
"default": "Витречено часу"
|
||||
},
|
||||
{
|
||||
"label": "Текст зворотнього зв'зку",
|
||||
"default": "Гарна робота!"
|
||||
},
|
||||
{
|
||||
"label": "Текст кнопки повтору",
|
||||
"default": "Спробувати ще раз?"
|
||||
},
|
||||
{
|
||||
"label": "Надпис кнопки закриття",
|
||||
"default": "Закрить"
|
||||
},
|
||||
{
|
||||
"label": "Надпис гри",
|
||||
"default": "Гра на запам'ятовування. Знайди відповідні карточки."
|
||||
},
|
||||
{
|
||||
"label": "Надпис завершення гри",
|
||||
"default": "Всі карточки були знайдені."
|
||||
},
|
||||
{
|
||||
"label": "Надпис номера карточки",
|
||||
"default": "Карточка %num:"
|
||||
},
|
||||
{
|
||||
"label": "Надпис неперевернутої карточки",
|
||||
"default": "Неперевернута."
|
||||
},
|
||||
{
|
||||
"label": "Надпис відповідної карточки",
|
||||
"default": "Відповідність знайдено."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Cards",
|
||||
"entity": "card",
|
||||
"field": {
|
||||
"label": "Card",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Image"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Matching Image",
|
||||
"description": "An optional image to match against instead of using two cards with the same image."
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Matching Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "Description",
|
||||
"description": "An optional short text that will pop up once the two matching cards are found."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Behavioural settings",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Position the cards in a square",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container."
|
||||
},
|
||||
{
|
||||
"label": "Number of cards to use",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards."
|
||||
},
|
||||
{
|
||||
"label": "Add button for retrying when the game is over"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Look and feel",
|
||||
"description": "Control the visuals of the game.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Theme Color",
|
||||
"description": "Choose a color to create a theme for your card game."
|
||||
},
|
||||
{
|
||||
"label": "Card Back",
|
||||
"description": "Use a custom back for your cards."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localization",
|
||||
"fields": [
|
||||
{
|
||||
"label": "Card turns text",
|
||||
"default": "Card turns"
|
||||
},
|
||||
{
|
||||
"label": "Time spent text",
|
||||
"default": "Time spent"
|
||||
},
|
||||
{
|
||||
"label": "Feedback text",
|
||||
"default": "Good work!"
|
||||
},
|
||||
{
|
||||
"label": "Try again button text",
|
||||
"default": "Try again?"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "预设"
|
||||
}
|
||||
],
|
||||
"label": "所有卡片",
|
||||
"entity": "卡片",
|
||||
"field": {
|
||||
"label": "卡片",
|
||||
"fields": [
|
||||
{
|
||||
"label": "图像"
|
||||
},
|
||||
{
|
||||
"label": "配对图像(非必要项)",
|
||||
"description": "如果游戏中要配对的不是同一张图像,那么可以在这里添加要配对的另一张图像。"
|
||||
},
|
||||
{
|
||||
"label": "音轨",
|
||||
"description": "翻转卡片时可选声音."
|
||||
},
|
||||
{
|
||||
"label": "配对成功文字(非必要项)",
|
||||
"description": "在找到配对时会显示的文字讯息。"
|
||||
},
|
||||
{
|
||||
"label": "配对图像的替代文字",
|
||||
"description": "在报读器上用、或是配对图像无法正常输出时的文字。"
|
||||
},
|
||||
{
|
||||
"label": "匹配音轨",
|
||||
"description": "翻转第二张卡片时可选声音."
|
||||
},
|
||||
{
|
||||
"label": "配对成功文字(非必要项)",
|
||||
"description": "在找到配对时会显示的文字讯息。"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "行为设置",
|
||||
"description": "让你控制游戏行为的一些设置。",
|
||||
"fields": [
|
||||
{
|
||||
"label": "将所有卡片显示在方形容器",
|
||||
"description": "在布置卡片时,将尝试匹配列数和行数。之后,卡片将被缩放以适合容器。"
|
||||
},
|
||||
{
|
||||
"label": "卡片的使用数量",
|
||||
"description": "游戏中配对的卡片组合数量,设定后会从卡片集中随机挑选指定组合数,数字必须大于 2。"
|
||||
},
|
||||
{
|
||||
"label": "显示「再试一次」按钮"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "外观",
|
||||
"description": "控制游戏的视觉效果。",
|
||||
"fields": [
|
||||
{
|
||||
"label": "主题色调",
|
||||
"description": "选择游戏环境要使用的色调。"
|
||||
},
|
||||
{
|
||||
"label": "背面图像(非必要项)",
|
||||
"description": "允许自定义卡片背景要使用的图片。"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "本地化",
|
||||
"fields": [
|
||||
{
|
||||
"label": "翻牌次数的显示文字",
|
||||
"default": "翻牌次数"
|
||||
},
|
||||
{
|
||||
"label": "花费时间的显示文字",
|
||||
"default": "花费时间"
|
||||
},
|
||||
{
|
||||
"label": "游戏过关的显示文字",
|
||||
"default": "干得好!"
|
||||
},
|
||||
{
|
||||
"label": "重试按钮的显示文字",
|
||||
"default": "再试一次"
|
||||
},
|
||||
{
|
||||
"label": "关闭按钮的显示文字",
|
||||
"default": "关闭"
|
||||
},
|
||||
{
|
||||
"label": "游戏说明的显示文字",
|
||||
"default": "卡片记忆游戏,找出配对的所有图片吧!"
|
||||
},
|
||||
{
|
||||
"label": "游戏结束的显示文字",
|
||||
"default": "已配对完所有卡片。"
|
||||
},
|
||||
{
|
||||
"label": "卡片索引的显示文字",
|
||||
"default": "%num: 张卡片"
|
||||
},
|
||||
{
|
||||
"label": "卡片未翻开的显示文字",
|
||||
"default": "还没翻开。"
|
||||
},
|
||||
{
|
||||
"label": "卡片已配对的显示文字",
|
||||
"default": "配对成功。"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "預設"
|
||||
}
|
||||
],
|
||||
"label": "所有卡片",
|
||||
"entity": "卡片",
|
||||
"field": {
|
||||
"label": "卡片",
|
||||
"fields": [
|
||||
{
|
||||
"label": "圖像"
|
||||
},
|
||||
{
|
||||
"label": "配對圖像(非必要項)",
|
||||
"description": "如果遊戲中要配對的不是同一張圖像,那麼可以在這裡添加要配對的另一張圖像。"
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "配對成功文字(非必要項)",
|
||||
"description": "在找到配對時會跳出的文字訊息。"
|
||||
},
|
||||
{
|
||||
"label": "配對圖像的替代文字",
|
||||
"description": "在報讀器上用、或是配對圖像無法正常輸出時顯示的文字。"
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "配對成功文字(非必要項)",
|
||||
"description": "在找到配對時會跳出的文字訊息。"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "行為設置",
|
||||
"description": "讓你控制遊戲行為的一些設置。",
|
||||
"fields": [
|
||||
{
|
||||
"label": "將所有卡片顯示在方形容器",
|
||||
"description": "在佈置卡片時,將嘗試匹配列數和行數。之後,卡片將被縮放以適合容器。"
|
||||
},
|
||||
{
|
||||
"label": "卡片的使用數量",
|
||||
"description": "遊戲中配對的卡片組合數量,設定後會從卡片集中隨機挑選指定組合數,數字必須大於 2。"
|
||||
},
|
||||
{
|
||||
"label": "顯示「再試一次」按鈕"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "外觀",
|
||||
"description": "控制遊戲的視覺效果。",
|
||||
"fields": [
|
||||
{
|
||||
"label": "主題色調",
|
||||
"description": "選擇遊戲環境要使用的色調。"
|
||||
},
|
||||
{
|
||||
"label": "背面圖像(非必要項)",
|
||||
"description": "允許自訂卡片背景要使用的圖片。"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "本地化",
|
||||
"fields": [
|
||||
{
|
||||
"label": "翻牌次數的顯示文字",
|
||||
"default": "翻牌次數"
|
||||
},
|
||||
{
|
||||
"label": "花費時間的顯示文字",
|
||||
"default": "花費時間"
|
||||
},
|
||||
{
|
||||
"label": "遊戲過關的顯示文字",
|
||||
"default": "幹得好!"
|
||||
},
|
||||
{
|
||||
"label": "重試按鈕的顯示文字",
|
||||
"default": "再試一次"
|
||||
},
|
||||
{
|
||||
"label": "關閉按鈕的顯示文字",
|
||||
"default": "關閉"
|
||||
},
|
||||
{
|
||||
"label": "遊戲說明的顯示文字",
|
||||
"default": "卡片記憶遊戲,找出配對的所有卡片吧!"
|
||||
},
|
||||
{
|
||||
"label": "遊戲結束的的顯示文字",
|
||||
"default": "已配對完所有卡片。"
|
||||
},
|
||||
{
|
||||
"label": "卡片索引的顯示文字",
|
||||
"default": "%num: 張卡片"
|
||||
},
|
||||
{
|
||||
"label": "卡片未翻開的顯示文字",
|
||||
"default": "還沒翻開。"
|
||||
},
|
||||
{
|
||||
"label": "卡片已配對的顯示文字",
|
||||
"default": "配對成功。"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
{
|
||||
"semantics": [
|
||||
{
|
||||
"widgets": [
|
||||
{
|
||||
"label": "預設"
|
||||
}
|
||||
],
|
||||
"label": "記憶牌",
|
||||
"entity": "記憶牌",
|
||||
"field": {
|
||||
"label": "記憶牌",
|
||||
"fields": [
|
||||
{
|
||||
"label": "圖示"
|
||||
},
|
||||
{
|
||||
"label": "Alternative text for Image",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned."
|
||||
},
|
||||
{
|
||||
"label": "相稱圖示",
|
||||
"description": "可選用一張與主圖示相稱的圖示,並非使用兩張相同的圖示."
|
||||
},
|
||||
{
|
||||
"label": "相稱圖示的替代文字",
|
||||
"description": "請描述此張圖示中可以看到什麼. 此段文字將做為閱讀器導讀文字,對視障使用者更為友善."
|
||||
},
|
||||
{
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned."
|
||||
},
|
||||
{
|
||||
"label": "描述",
|
||||
"description": "選填。當找到兩張相稱圖示時所顯示的文字."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "行為設定",
|
||||
"description": "這些選項可以讓你控制遊戲的行為.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "將記憶牌顯示於正方形中",
|
||||
"description": "當設定多組記憶牌時,將依組數平均分配顯示行列數及顯示大小."
|
||||
},
|
||||
{
|
||||
"label": "使用的記憶牌組數量",
|
||||
"description": "設定大於2的組數時,即可讓遊戲隨機顯示記憶牌."
|
||||
},
|
||||
{
|
||||
"label": "遊戲結束後顯示重試功能鈕"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "外觀視覺",
|
||||
"description": "控制遊戲的視覺效果.",
|
||||
"fields": [
|
||||
{
|
||||
"label": "主題顏色",
|
||||
"description": "為您的翻轉記憶牌遊戲設定一種顏色主題."
|
||||
},
|
||||
{
|
||||
"label": "記憶牌背面圖示",
|
||||
"description": "為您的卡片背面設定圖示."
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "在地化",
|
||||
"fields": [
|
||||
{
|
||||
"label": "翻轉記憶牌功能鈕名稱",
|
||||
"default": "翻轉記憶牌"
|
||||
},
|
||||
{
|
||||
"label": "花費時間",
|
||||
"default": "實際花費時間"
|
||||
},
|
||||
{
|
||||
"label": "回饋文字",
|
||||
"default": "做得好!"
|
||||
},
|
||||
{
|
||||
"label": "重試功能鈕名稱",
|
||||
"default": "重試?"
|
||||
},
|
||||
{
|
||||
"label": "關閉功能鈕名稱",
|
||||
"default": "關閉"
|
||||
},
|
||||
{
|
||||
"label": "遊戲名稱",
|
||||
"default": "翻轉記憶牌遊戲. 請找出相稱的記憶牌."
|
||||
},
|
||||
{
|
||||
"label": "遊戲完成名稱",
|
||||
"default": "所有的記憶牌皆已找出."
|
||||
},
|
||||
{
|
||||
"label": "記憶牌索引名稱",
|
||||
"default": "記憶牌數量 %num:"
|
||||
},
|
||||
{
|
||||
"label": "未翻轉記憶牌名稱",
|
||||
"default": "未翻轉."
|
||||
},
|
||||
{
|
||||
"label": "相稱記憶牌名稱",
|
||||
"default": "已找到相稱的記憶牌."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"title": "Memory Game",
|
||||
"description": "See how many cards you can remember!",
|
||||
"majorVersion": 1,
|
||||
"minorVersion": 3,
|
||||
"patchVersion": 4,
|
||||
"runnable": 1,
|
||||
"author": "Joubel",
|
||||
"license": "MIT",
|
||||
"machineName": "H5P.MemoryGame",
|
||||
"preloadedCss": [
|
||||
{
|
||||
"path": "memory-game.css"
|
||||
}
|
||||
],
|
||||
"preloadedJs": [
|
||||
{
|
||||
"path": "memory-game.js"
|
||||
},
|
||||
{
|
||||
"path": "card.js"
|
||||
},
|
||||
{
|
||||
"path": "counter.js"
|
||||
},
|
||||
{
|
||||
"path": "popup.js"
|
||||
},
|
||||
{
|
||||
"path": "timer.js"
|
||||
}
|
||||
],
|
||||
"preloadedDependencies": [
|
||||
{
|
||||
"machineName": "H5P.Timer",
|
||||
"majorVersion": 0,
|
||||
"minorVersion": 4
|
||||
},
|
||||
{
|
||||
"machineName": "FontAwesome",
|
||||
"majorVersion": 4,
|
||||
"minorVersion": 5
|
||||
}
|
||||
],
|
||||
"editorDependencies": [
|
||||
{
|
||||
"machineName": "H5PEditor.ColorSelector",
|
||||
"majorVersion": 1,
|
||||
"minorVersion": 2
|
||||
},
|
||||
{
|
||||
"machineName": "H5PEditor.VerticalTabs",
|
||||
"majorVersion": 1,
|
||||
"minorVersion": 3
|
||||
},
|
||||
{
|
||||
"machineName": "H5PEditor.AudioRecorder",
|
||||
"majorVersion": 1,
|
||||
"minorVersion": 0
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,345 @@
|
||||
.h5p-memory-game {
|
||||
overflow: hidden;
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-hidden-read {
|
||||
position: absolute;
|
||||
top: -1px;
|
||||
left: -1px;
|
||||
width: 1px;
|
||||
height: 1px;
|
||||
color: transparent;
|
||||
}
|
||||
.h5p-memory-game > ul {
|
||||
list-style: none !important;
|
||||
padding: 0.25em 0.5em !important;
|
||||
margin: 0 !important;
|
||||
overflow: hidden !important;
|
||||
font-size: 16px;
|
||||
box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-card,
|
||||
.h5p-memory-game .h5p-memory-card .h5p-back,
|
||||
.h5p-memory-game .h5p-memory-card .h5p-front {
|
||||
width: 6.25em;
|
||||
height: 6.25em;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
.h5p-memory-game img {
|
||||
-webkit-user-drag: none;
|
||||
display: inline-block !important;
|
||||
margin: auto !important;
|
||||
vertical-align: middle;
|
||||
position: relative;
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-wrap {
|
||||
float: left;
|
||||
text-align: center;
|
||||
background-image: none !important;
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-card {
|
||||
display: inline-block;
|
||||
outline: none;
|
||||
position: relative;
|
||||
margin: 0.75em 0.5em;
|
||||
padding: 0;
|
||||
background: transparent;
|
||||
-webkit-perspective: 25em;
|
||||
-moz-perspective: 25em;
|
||||
perspective: 25em;
|
||||
-webkit-transition: opacity 0.4s, filter 0.4s;
|
||||
-moz-transition: opacity 0.4s, filter 0.4s;
|
||||
transition: opacity 0.4s, filter 0.4s;
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-card .h5p-back,
|
||||
.h5p-memory-game .h5p-memory-card .h5p-front {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #cfcfcf;
|
||||
background-size: cover;
|
||||
border: 2px solid #d0d0d0;
|
||||
box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
border-radius: 4px;
|
||||
-webkit-backface-visibility: hidden;
|
||||
-moz-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
-webkit-transform: translateZ(0);
|
||||
-moz-transform: translateZ(0);
|
||||
transform: translateZ(0);
|
||||
-webkit-transition: -webkit-transform 0.6s;
|
||||
-moz-transition: -moz-transform 0.6s;
|
||||
transition: transform 0.6s;
|
||||
-webkit-transform-style: preserve-3d;
|
||||
-moz-transform-style: preserve-3d;
|
||||
transform-style: preserve-3d;
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-card .h5p-front {
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
color: #909090;
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-card .h5p-front:before,
|
||||
.h5p-memory-game .h5p-memory-card .h5p-back:before,
|
||||
.h5p-memory-game .h5p-memory-image:before {
|
||||
position: absolute;
|
||||
display: block;
|
||||
content: "";
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #fff;
|
||||
opacity: 0;
|
||||
}
|
||||
.h5p-memory-game.h5p-invert-shades .h5p-memory-card .h5p-front:before,
|
||||
.h5p-memory-game.h5p-invert-shades .h5p-memory-card .h5p-back:before,
|
||||
.h5p-memory-game.h5p-invert-shades .h5p-memory-image:before {
|
||||
background: #000;
|
||||
}
|
||||
|
||||
.h5p-memory-game .h5p-memory-card .h5p-front:hover:before {
|
||||
opacity: 0.4;
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-card .h5p-front > span:before {
|
||||
position: relative;
|
||||
content: "?";
|
||||
font-size: 3.75em;
|
||||
line-height: 1.67em;
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-card .h5p-front:after {
|
||||
content: "";
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 85%;
|
||||
height: 50%;
|
||||
width: 100%;
|
||||
-webkit-transform: rotateX(90deg);
|
||||
-moz-transform: rotateX(90deg);
|
||||
transform: rotateX(90deg);
|
||||
background-image: -webkit-radial-gradient(ellipse closest-side, rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0) 100%);
|
||||
background-image: -moz-radial-gradient(ellipse closest-side, rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0) 100%);
|
||||
background-image: radial-gradient(ellipse closest-side, rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0) 100%);
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-card .h5p-back {
|
||||
line-height: 5.83em;
|
||||
text-align: center;
|
||||
background-color: #f0f0f0;
|
||||
-webkit-transform: rotateY(-180deg);
|
||||
-moz-transform: rotateY(-180deg);
|
||||
transform: rotateY(-180deg);
|
||||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
|
||||
-ms-transform: scale(0,1.1);
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-card .h5p-back:before,
|
||||
.h5p-memory-game .h5p-memory-image:before {
|
||||
opacity: 0.5;
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-card.h5p-flipped .h5p-back {
|
||||
-webkit-transform: rotateY(0deg);
|
||||
-moz-transform: rotateY(0deg);
|
||||
transform: rotateY(0deg);
|
||||
-ms-transform: scale(1,1);
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-card.h5p-flipped .h5p-front {
|
||||
-webkit-transform: rotateY(180deg);
|
||||
-moz-transform: rotateY(180deg);
|
||||
-ms-transform: rotateY(180deg);
|
||||
transform: rotateY(180deg);
|
||||
-ms-transform: scale(0,1.1);
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-card.h5p-matched {
|
||||
opacity: 0.3;
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-card.h5p-matched img {
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
|
||||
.h5p-memory-game .h5p-feedback {
|
||||
clear: both;
|
||||
float: right;
|
||||
line-height: 1.5em;
|
||||
margin-right: 1em;
|
||||
font-size: 2em;
|
||||
visibility: hidden;
|
||||
-webkit-transform: scale(0,0) rotate(90deg);
|
||||
-moz-transform: scale(0,0) rotate(90deg);
|
||||
-ms-transform: scale(0,0) rotate(90deg);
|
||||
transform: scale(0,0) rotate(90deg);
|
||||
-webkit-transition: -webkit-transform 0.2s;
|
||||
-moz-transition: -webkit-transform 0.2s;
|
||||
transition: -webkit-transform 0.2s;
|
||||
}
|
||||
.h5p-memory-game .h5p-feedback.h5p-show {
|
||||
visibility: visible;
|
||||
-webkit-transform: scale(1,1) rotate(0deg);
|
||||
-moz-transform: scale(1,1) rotate(0deg);
|
||||
-ms-transform: scale(1,1) rotate(0deg);
|
||||
transform: scale(1,1) rotate(0deg);
|
||||
}
|
||||
|
||||
.h5p-memory-game .h5p-status {
|
||||
clear: left;
|
||||
padding: 0 1em;
|
||||
margin: 0.25em 0 1em 0;
|
||||
}
|
||||
.h5p-memory-game .h5p-status > dt {
|
||||
float: left;
|
||||
margin: 0 1em 0 0;
|
||||
font-weight: bold;
|
||||
}
|
||||
.h5p-memory-game .h5p-status > dd {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.h5p-memory-game .h5p-memory-pop {
|
||||
display: none;
|
||||
background: #fff;
|
||||
padding: 0.25em;
|
||||
width: 24em;
|
||||
max-width: 90%;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
box-shadow: 0 0 2em #666;
|
||||
border-radius: 0.25em;
|
||||
-webkit-transform: translate(-50%,-50%);
|
||||
-moz-transform: translate(-50%,-50%);
|
||||
transform: translate(-50%,-50%);
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-top {
|
||||
padding: 0em 1em;
|
||||
background-color: #f0f0f0;
|
||||
background-size: cover;
|
||||
text-align: center;
|
||||
margin-bottom: 1.75em;
|
||||
border-bottom: 1px solid #d0d0d0;
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-image {
|
||||
display: inline-block;
|
||||
line-height: 5.83em;
|
||||
position: relative;
|
||||
top: 1.5em;
|
||||
left: -0.5em;
|
||||
border: 2px solid #d0d0d0;
|
||||
box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
border-radius: 4px;
|
||||
background: #f0f0f0;
|
||||
width: 6.25em;
|
||||
height: 6.25em;
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 0 1em rgba(125,125,125,0.5);
|
||||
background-size: cover;
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-image:first-child {
|
||||
top: 1em;
|
||||
left: 0;
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-two-images .h5p-memory-image:first-child {
|
||||
left: 0.5em;
|
||||
}
|
||||
.h5p-memory-game .h5p-row-break {
|
||||
clear: left;
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-desc {
|
||||
padding: 1em;
|
||||
margin-bottom: 0.5em;
|
||||
text-align: center;
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-close {
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
top: 0.5em;
|
||||
right: 0.5em;
|
||||
font-size: 2em;
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
text-align: center;
|
||||
color: #888;
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-close:before {
|
||||
content: "\00D7"
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-close:hover {
|
||||
color: #666;
|
||||
}
|
||||
.h5p-memory-game .h5p-memory-close:focus {
|
||||
outline: 2px solid #a5c7fe;
|
||||
}
|
||||
.h5p-memory-reset {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%,-50%) scale(1) rotate(0);
|
||||
cursor: pointer;
|
||||
line-height: 1.2;
|
||||
white-space: nowrap;
|
||||
padding: 0.5em 1.25em;
|
||||
border-radius: 2em;
|
||||
background: #1a73d9;
|
||||
color: #ffffff;
|
||||
box-shadow: 0 0.5em 1em #999;
|
||||
opacity: 1;
|
||||
transition: box-shadow 200ms linear, margin 200ms linear, transform 300ms ease-out, opacity 300ms ease-out;
|
||||
}
|
||||
.h5p-memory-reset:before {
|
||||
font-family: 'H5PFontAwesome4';
|
||||
content: "\f01e";
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
.h5p-memory-reset:hover,
|
||||
.h5p-memory-reset:focus {
|
||||
background: #1356a3;
|
||||
box-shadow: 0 1em 1.5em #999;
|
||||
margin-top: -0.2em;
|
||||
}
|
||||
.h5p-memory-reset:focus {
|
||||
outline: 2px solid #a5c7fe;
|
||||
}
|
||||
.h5p-memory-transin {
|
||||
transform: translate(-50%,-50%) scale(0) rotate(180deg);
|
||||
opacity: 0;
|
||||
}
|
||||
.h5p-memory-transout {
|
||||
transform: translate(-50%,-450%) scale(0) rotate(360deg);
|
||||
opacity: 0;
|
||||
}
|
||||
.h5p-memory-complete {
|
||||
display: none;
|
||||
}
|
||||
.h5p-memory-game .h5p-programatically-focusable {
|
||||
outline: none;
|
||||
}
|
||||
.h5p-memory-audio-instead-of-image {
|
||||
font-family: 'H5PFontAwesome4';
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
font-style: normal;
|
||||
color: #404040;
|
||||
font-size: 2em;
|
||||
}
|
||||
.h5p-memory-audio-button {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
font-family: 'H5PFontAwesome4';
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
line-height: 1;
|
||||
}
|
||||
.h5p-memory-audio-instead-of-image:before,
|
||||
.h5p-memory-audio-button:before {
|
||||
content: "\f026";
|
||||
}
|
||||
.h5p-memory-audio-playing .h5p-memory-audio-instead-of-image:before,
|
||||
.h5p-memory-audio-playing .h5p-memory-audio-button:before {
|
||||
content: "\f028";
|
||||
}
|
||||
@@ -0,0 +1,565 @@
|
||||
H5P.MemoryGame = (function (EventDispatcher, $) {
|
||||
|
||||
// We don't want to go smaller than 100px per card(including the required margin)
|
||||
var CARD_MIN_SIZE = 100; // PX
|
||||
var CARD_STD_SIZE = 116; // PX
|
||||
var STD_FONT_SIZE = 16; // PX
|
||||
var LIST_PADDING = 1; // EMs
|
||||
var numInstances = 0;
|
||||
|
||||
/**
|
||||
* Memory Game Constructor
|
||||
*
|
||||
* @class H5P.MemoryGame
|
||||
* @extends H5P.EventDispatcher
|
||||
* @param {Object} parameters
|
||||
* @param {Number} id
|
||||
*/
|
||||
function MemoryGame(parameters, id) {
|
||||
/** @alias H5P.MemoryGame# */
|
||||
var self = this;
|
||||
|
||||
// Initialize event inheritance
|
||||
EventDispatcher.call(self);
|
||||
|
||||
var flipped, timer, counter, popup, $bottom, $taskComplete, $feedback, $wrapper, maxWidth, numCols, audioCard;
|
||||
var cards = [];
|
||||
var flipBacks = []; // Que of cards to be flipped back
|
||||
var numFlipped = 0;
|
||||
var removed = 0;
|
||||
numInstances++;
|
||||
|
||||
// Add defaults
|
||||
parameters = $.extend(true, {
|
||||
l10n: {
|
||||
cardTurns: 'Card turns',
|
||||
timeSpent: 'Time spent',
|
||||
feedback: 'Good work!',
|
||||
tryAgain: 'Reset',
|
||||
closeLabel: 'Close',
|
||||
label: 'Memory Game. Find the matching cards.',
|
||||
done: 'All of the cards have been found.',
|
||||
cardPrefix: 'Card %num: ',
|
||||
cardUnturned: 'Unturned.',
|
||||
cardMatched: 'Match found.'
|
||||
}
|
||||
}, parameters);
|
||||
|
||||
/**
|
||||
* Check if these two cards belongs together.
|
||||
*
|
||||
* @private
|
||||
* @param {H5P.MemoryGame.Card} card
|
||||
* @param {H5P.MemoryGame.Card} mate
|
||||
* @param {H5P.MemoryGame.Card} correct
|
||||
*/
|
||||
var check = function (card, mate, correct) {
|
||||
if (mate !== correct) {
|
||||
// Incorrect, must be scheduled for flipping back
|
||||
flipBacks.push(card);
|
||||
flipBacks.push(mate);
|
||||
|
||||
// Wait for next click to flip them back…
|
||||
if (numFlipped > 2) {
|
||||
// or do it straight away
|
||||
processFlipBacks();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Update counters
|
||||
numFlipped -= 2;
|
||||
removed += 2;
|
||||
|
||||
var isFinished = (removed === cards.length);
|
||||
|
||||
// Remove them from the game.
|
||||
card.remove(!isFinished);
|
||||
mate.remove();
|
||||
|
||||
var desc = card.getDescription();
|
||||
if (desc !== undefined) {
|
||||
// Pause timer and show desciption.
|
||||
timer.pause();
|
||||
var imgs = [card.getImage()];
|
||||
if (card.hasTwoImages) {
|
||||
imgs.push(mate.getImage());
|
||||
}
|
||||
popup.show(desc, imgs, cardStyles ? cardStyles.back : undefined, function (refocus) {
|
||||
if (isFinished) {
|
||||
// Game done
|
||||
card.makeUntabbable();
|
||||
finished();
|
||||
}
|
||||
else {
|
||||
// Popup is closed, continue.
|
||||
timer.play();
|
||||
|
||||
if (refocus) {
|
||||
card.setFocus();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
else if (isFinished) {
|
||||
// Game done
|
||||
card.makeUntabbable();
|
||||
finished();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Game has finished!
|
||||
* @private
|
||||
*/
|
||||
var finished = function () {
|
||||
timer.stop();
|
||||
$taskComplete.show();
|
||||
$feedback.addClass('h5p-show'); // Announce
|
||||
$bottom.focus();
|
||||
|
||||
// Create and trigger xAPI event 'completed'
|
||||
var completedEvent = self.createXAPIEventTemplate('completed');
|
||||
completedEvent.setScoredResult(1, 1, self, true, true);
|
||||
completedEvent.data.statement.result.duration = 'PT' + (Math.round(timer.getTime() / 10) / 100) + 'S';
|
||||
self.trigger(completedEvent);
|
||||
|
||||
if (parameters.behaviour && parameters.behaviour.allowRetry) {
|
||||
// Create retry button
|
||||
var retryButton = createButton('reset', parameters.l10n.tryAgain || 'Reset', function () {
|
||||
// Trigger handler (action)
|
||||
|
||||
retryButton.classList.add('h5p-memory-transout');
|
||||
setTimeout(function () {
|
||||
// Remove button on nextTick to get transition effect
|
||||
$wrapper[0].removeChild(retryButton);
|
||||
}, 300);
|
||||
|
||||
resetGame();
|
||||
});
|
||||
retryButton.classList.add('h5p-memory-transin');
|
||||
setTimeout(function () {
|
||||
// Remove class on nextTick to get transition effectupd
|
||||
retryButton.classList.remove('h5p-memory-transin');
|
||||
}, 0);
|
||||
|
||||
// Same size as cards
|
||||
retryButton.style.fontSize = (parseFloat($wrapper.children('ul')[0].style.fontSize) * 0.75) + 'px';
|
||||
|
||||
$wrapper[0].appendChild(retryButton); // Add to DOM
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Shuffle the cards and restart the game!
|
||||
* @private
|
||||
*/
|
||||
var resetGame = function () {
|
||||
|
||||
// Reset cards
|
||||
removed = 0;
|
||||
|
||||
// Remove feedback
|
||||
$feedback[0].classList.remove('h5p-show');
|
||||
$taskComplete.hide();
|
||||
|
||||
// Reset timer and counter
|
||||
timer.reset();
|
||||
counter.reset();
|
||||
|
||||
// Randomize cards
|
||||
H5P.shuffleArray(cards);
|
||||
|
||||
setTimeout(function () {
|
||||
// Re-append to DOM after flipping back
|
||||
for (var i = 0; i < cards.length; i++) {
|
||||
cards[i].reAppend();
|
||||
}
|
||||
for (var j = 0; j < cards.length; j++) {
|
||||
cards[j].reset();
|
||||
}
|
||||
|
||||
// Scale new layout
|
||||
$wrapper.children('ul').children('.h5p-row-break').removeClass('h5p-row-break');
|
||||
maxWidth = -1;
|
||||
self.trigger('resize');
|
||||
cards[0].setFocus();
|
||||
}, 600);
|
||||
};
|
||||
|
||||
/**
|
||||
* Game has finished!
|
||||
* @private
|
||||
*/
|
||||
var createButton = function (name, label, action) {
|
||||
var buttonElement = document.createElement('div');
|
||||
buttonElement.classList.add('h5p-memory-' + name);
|
||||
buttonElement.innerHTML = label;
|
||||
buttonElement.setAttribute('role', 'button');
|
||||
buttonElement.tabIndex = 0;
|
||||
buttonElement.addEventListener('click', function () {
|
||||
action.apply(buttonElement);
|
||||
}, false);
|
||||
buttonElement.addEventListener('keypress', function (event) {
|
||||
if (event.which === 13 || event.which === 32) { // Enter or Space key
|
||||
event.preventDefault();
|
||||
action.apply(buttonElement);
|
||||
}
|
||||
}, false);
|
||||
return buttonElement;
|
||||
};
|
||||
|
||||
/**
|
||||
* Adds card to card list and set up a flip listener.
|
||||
*
|
||||
* @private
|
||||
* @param {H5P.MemoryGame.Card} card
|
||||
* @param {H5P.MemoryGame.Card} mate
|
||||
*/
|
||||
var addCard = function (card, mate) {
|
||||
card.on('flip', function () {
|
||||
if (audioCard) {
|
||||
audioCard.stopAudio();
|
||||
}
|
||||
|
||||
// Always return focus to the card last flipped
|
||||
for (var i = 0; i < cards.length; i++) {
|
||||
cards[i].makeUntabbable();
|
||||
}
|
||||
card.makeTabbable();
|
||||
|
||||
popup.close();
|
||||
self.triggerXAPI('interacted');
|
||||
// Keep track of time spent
|
||||
timer.play();
|
||||
|
||||
// Keep track of the number of flipped cards
|
||||
numFlipped++;
|
||||
|
||||
// Announce the card unless it's the last one and it's correct
|
||||
var isMatched = (flipped === mate);
|
||||
var isLast = ((removed + 2) === cards.length);
|
||||
card.updateLabel(isMatched, !(isMatched && isLast));
|
||||
|
||||
if (flipped !== undefined) {
|
||||
var matie = flipped;
|
||||
// Reset the flipped card.
|
||||
flipped = undefined;
|
||||
|
||||
setTimeout(function () {
|
||||
check(card, matie, mate);
|
||||
}, 800);
|
||||
}
|
||||
else {
|
||||
if (flipBacks.length > 1) {
|
||||
// Turn back any flipped cards
|
||||
processFlipBacks();
|
||||
}
|
||||
|
||||
// Keep track of the flipped card.
|
||||
flipped = card;
|
||||
}
|
||||
|
||||
// Count number of cards turned
|
||||
counter.increment();
|
||||
});
|
||||
card.on('audioplay', function () {
|
||||
if (audioCard) {
|
||||
audioCard.stopAudio();
|
||||
}
|
||||
audioCard = card;
|
||||
});
|
||||
card.on('audiostop', function () {
|
||||
audioCard = undefined;
|
||||
});
|
||||
|
||||
/**
|
||||
* Create event handler for moving focus to the next or the previous
|
||||
* card on the table.
|
||||
*
|
||||
* @private
|
||||
* @param {number} direction +1/-1
|
||||
* @return {function}
|
||||
*/
|
||||
var createCardChangeFocusHandler = function (direction) {
|
||||
return function () {
|
||||
// Locate next card
|
||||
for (var i = 0; i < cards.length; i++) {
|
||||
if (cards[i] === card) {
|
||||
// Found current card
|
||||
|
||||
var nextCard, fails = 0;
|
||||
do {
|
||||
fails++;
|
||||
nextCard = cards[i + (direction * fails)];
|
||||
if (!nextCard) {
|
||||
return; // No more cards
|
||||
}
|
||||
}
|
||||
while (nextCard.isRemoved());
|
||||
|
||||
card.makeUntabbable();
|
||||
nextCard.setFocus();
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
// Register handlers for moving focus to next and previous card
|
||||
card.on('next', createCardChangeFocusHandler(1));
|
||||
card.on('prev', createCardChangeFocusHandler(-1));
|
||||
|
||||
/**
|
||||
* Create event handler for moving focus to the first or the last card
|
||||
* on the table.
|
||||
*
|
||||
* @private
|
||||
* @param {number} direction +1/-1
|
||||
* @return {function}
|
||||
*/
|
||||
var createEndCardFocusHandler = function (direction) {
|
||||
return function () {
|
||||
var focusSet = false;
|
||||
for (var i = 0; i < cards.length; i++) {
|
||||
var j = (direction === -1 ? cards.length - (i + 1) : i);
|
||||
if (!focusSet && !cards[j].isRemoved()) {
|
||||
cards[j].setFocus();
|
||||
focusSet = true;
|
||||
}
|
||||
else if (cards[j] === card) {
|
||||
card.makeUntabbable();
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
// Register handlers for moving focus to first and last card
|
||||
card.on('first', createEndCardFocusHandler(1));
|
||||
card.on('last', createEndCardFocusHandler(-1));
|
||||
|
||||
cards.push(card);
|
||||
};
|
||||
|
||||
/**
|
||||
* Will flip back two and two cards
|
||||
*/
|
||||
var processFlipBacks = function () {
|
||||
flipBacks[0].flipBack();
|
||||
flipBacks[1].flipBack();
|
||||
flipBacks.splice(0, 2);
|
||||
numFlipped -= 2;
|
||||
};
|
||||
|
||||
/**
|
||||
* @private
|
||||
*/
|
||||
var getCardsToUse = function () {
|
||||
var numCardsToUse = (parameters.behaviour && parameters.behaviour.numCardsToUse ? parseInt(parameters.behaviour.numCardsToUse) : 0);
|
||||
if (numCardsToUse <= 2 || numCardsToUse >= parameters.cards.length) {
|
||||
// Use all cards
|
||||
return parameters.cards;
|
||||
}
|
||||
|
||||
// Pick random cards from pool
|
||||
var cardsToUse = [];
|
||||
var pickedCardsMap = {};
|
||||
|
||||
var numPicket = 0;
|
||||
while (numPicket < numCardsToUse) {
|
||||
var pickIndex = Math.floor(Math.random() * parameters.cards.length);
|
||||
if (pickedCardsMap[pickIndex]) {
|
||||
continue; // Already picked, try again!
|
||||
}
|
||||
|
||||
cardsToUse.push(parameters.cards[pickIndex]);
|
||||
pickedCardsMap[pickIndex] = true;
|
||||
numPicket++;
|
||||
}
|
||||
|
||||
return cardsToUse;
|
||||
};
|
||||
|
||||
var cardStyles, invertShades;
|
||||
if (parameters.lookNFeel) {
|
||||
// If the contrast between the chosen color and white is too low we invert the shades to create good contrast
|
||||
invertShades = (parameters.lookNFeel.themeColor &&
|
||||
getContrast(parameters.lookNFeel.themeColor) < 1.7 ? -1 : 1);
|
||||
var backImage = (parameters.lookNFeel.cardBack ? H5P.getPath(parameters.lookNFeel.cardBack.path, id) : null);
|
||||
cardStyles = MemoryGame.Card.determineStyles(parameters.lookNFeel.themeColor, invertShades, backImage);
|
||||
}
|
||||
|
||||
// Initialize cards.
|
||||
var cardsToUse = getCardsToUse();
|
||||
for (var i = 0; i < cardsToUse.length; i++) {
|
||||
var cardParams = cardsToUse[i];
|
||||
if (MemoryGame.Card.isValid(cardParams)) {
|
||||
// Create first card
|
||||
var cardTwo, cardOne = new MemoryGame.Card(cardParams.image, id, cardParams.imageAlt, parameters.l10n, cardParams.description, cardStyles, cardParams.audio);
|
||||
|
||||
if (MemoryGame.Card.hasTwoImages(cardParams)) {
|
||||
// Use matching image for card two
|
||||
cardTwo = new MemoryGame.Card(cardParams.match, id, cardParams.matchAlt, parameters.l10n, cardParams.description, cardStyles, cardParams.matchAudio);
|
||||
cardOne.hasTwoImages = cardTwo.hasTwoImages = true;
|
||||
}
|
||||
else {
|
||||
// Add two cards with the same image
|
||||
cardTwo = new MemoryGame.Card(cardParams.image, id, cardParams.imageAlt, parameters.l10n, cardParams.description, cardStyles, cardParams.audio);
|
||||
}
|
||||
|
||||
// Add cards to card list for shuffeling
|
||||
addCard(cardOne, cardTwo);
|
||||
addCard(cardTwo, cardOne);
|
||||
}
|
||||
}
|
||||
H5P.shuffleArray(cards);
|
||||
|
||||
/**
|
||||
* Attach this game's html to the given container.
|
||||
*
|
||||
* @param {H5P.jQuery} $container
|
||||
*/
|
||||
self.attach = function ($container) {
|
||||
this.triggerXAPI('attempted');
|
||||
// TODO: Only create on first attach!
|
||||
$wrapper = $container.addClass('h5p-memory-game').html('');
|
||||
if (invertShades === -1) {
|
||||
$container.addClass('h5p-invert-shades');
|
||||
}
|
||||
|
||||
// Add cards to list
|
||||
var $list = $('<ul/>', {
|
||||
role: 'application',
|
||||
'aria-labelledby': 'h5p-intro-' + numInstances
|
||||
});
|
||||
for (var i = 0; i < cards.length; i++) {
|
||||
cards[i].appendTo($list);
|
||||
}
|
||||
cards[0].makeTabbable();
|
||||
|
||||
if ($list.children().length) {
|
||||
$('<div/>', {
|
||||
id: 'h5p-intro-' + numInstances,
|
||||
'class': 'h5p-memory-hidden-read',
|
||||
html: parameters.l10n.label,
|
||||
appendTo: $container
|
||||
});
|
||||
$list.appendTo($container);
|
||||
|
||||
$bottom = $('<div/>', {
|
||||
'class': 'h5p-programatically-focusable',
|
||||
tabindex: '-1',
|
||||
appendTo: $container
|
||||
});
|
||||
$taskComplete = $('<div/>', {
|
||||
'class': 'h5p-memory-complete h5p-memory-hidden-read',
|
||||
html: parameters.l10n.done,
|
||||
appendTo: $bottom
|
||||
});
|
||||
|
||||
$feedback = $('<div class="h5p-feedback">' + parameters.l10n.feedback + '</div>').appendTo($bottom);
|
||||
|
||||
// Add status bar
|
||||
var $status = $('<dl class="h5p-status">' +
|
||||
'<dt>' + parameters.l10n.timeSpent + ':</dt>' +
|
||||
'<dd class="h5p-time-spent"><time role="timer" datetime="PT0M0S">0:00</time><span class="h5p-memory-hidden-read">.</span></dd>' +
|
||||
'<dt>' + parameters.l10n.cardTurns + ':</dt>' +
|
||||
'<dd class="h5p-card-turns">0<span class="h5p-memory-hidden-read">.</span></dd>' +
|
||||
'</dl>').appendTo($bottom);
|
||||
|
||||
timer = new MemoryGame.Timer($status.find('time')[0]);
|
||||
counter = new MemoryGame.Counter($status.find('.h5p-card-turns'));
|
||||
popup = new MemoryGame.Popup($container, parameters.l10n);
|
||||
|
||||
$container.click(function () {
|
||||
popup.close();
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Will try to scale the game so that it fits within its container.
|
||||
* Puts the cards into a grid layout to make it as square as possible –
|
||||
* which improves the playability on multiple devices.
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
var scaleGameSize = function () {
|
||||
|
||||
// Check how much space we have available
|
||||
var $list = $wrapper.children('ul');
|
||||
|
||||
var newMaxWidth = parseFloat(window.getComputedStyle($list[0]).width);
|
||||
if (maxWidth === newMaxWidth) {
|
||||
return; // Same size, no need to recalculate
|
||||
}
|
||||
else {
|
||||
maxWidth = newMaxWidth;
|
||||
}
|
||||
|
||||
// Get the card holders
|
||||
var $elements = $list.children();
|
||||
if ($elements.length < 4) {
|
||||
return; // No need to proceed
|
||||
}
|
||||
|
||||
// Determine the optimal number of columns
|
||||
var newNumCols = Math.ceil(Math.sqrt($elements.length));
|
||||
|
||||
// Do not exceed the max number of columns
|
||||
var maxCols = Math.floor(maxWidth / CARD_MIN_SIZE);
|
||||
if (newNumCols > maxCols) {
|
||||
newNumCols = maxCols;
|
||||
}
|
||||
|
||||
if (numCols !== newNumCols) {
|
||||
// We need to change layout
|
||||
numCols = newNumCols;
|
||||
|
||||
// Calculate new column size in percentage and round it down (we don't
|
||||
// want things sticking out…)
|
||||
var colSize = Math.floor((100 / numCols) * 10000) / 10000;
|
||||
$elements.css('width', colSize + '%').each(function (i, e) {
|
||||
if (i === numCols) {
|
||||
$(e).addClass('h5p-row-break');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Calculate how much one percentage of the standard/default size is
|
||||
var onePercentage = ((CARD_STD_SIZE * numCols) + STD_FONT_SIZE) / 100;
|
||||
var paddingSize = (STD_FONT_SIZE * LIST_PADDING) / onePercentage;
|
||||
var cardSize = (100 - paddingSize) / numCols;
|
||||
var fontSize = (((maxWidth * (cardSize / 100)) * STD_FONT_SIZE) / CARD_STD_SIZE);
|
||||
|
||||
// We use font size to evenly scale all parts of the cards.
|
||||
$list.css('font-size', fontSize + 'px');
|
||||
popup.setSize(fontSize);
|
||||
// due to rounding errors in browsers the margins may vary a bit…
|
||||
};
|
||||
|
||||
if (parameters.behaviour && parameters.behaviour.useGrid && cardsToUse.length) {
|
||||
self.on('resize', scaleGameSize);
|
||||
}
|
||||
}
|
||||
|
||||
// Extends the event dispatcher
|
||||
MemoryGame.prototype = Object.create(EventDispatcher.prototype);
|
||||
MemoryGame.prototype.constructor = MemoryGame;
|
||||
|
||||
/**
|
||||
* Determine color contrast level compared to white(#fff)
|
||||
*
|
||||
* @private
|
||||
* @param {string} color hex code
|
||||
* @return {number} From 1 to Infinity.
|
||||
*/
|
||||
var getContrast = function (color) {
|
||||
return 255 / ((parseInt(color.substr(1, 2), 16) * 299 +
|
||||
parseInt(color.substr(3, 2), 16) * 587 +
|
||||
parseInt(color.substr(5, 2), 16) * 144) / 1000);
|
||||
};
|
||||
|
||||
return MemoryGame;
|
||||
})(H5P.EventDispatcher, H5P.jQuery);
|
||||
@@ -0,0 +1,79 @@
|
||||
(function (MemoryGame, $) {
|
||||
|
||||
/**
|
||||
* A dialog for reading the description of a card.
|
||||
*
|
||||
* @class H5P.MemoryGame.Popup
|
||||
* @param {H5P.jQuery} $container
|
||||
* @param {Object.<string, string>} l10n
|
||||
*/
|
||||
MemoryGame.Popup = function ($container, l10n) {
|
||||
/** @alias H5P.MemoryGame.Popup# */
|
||||
var self = this;
|
||||
|
||||
var closed;
|
||||
|
||||
var $popup = $('<div class="h5p-memory-pop" role="dialog"><div class="h5p-memory-top"></div><div class="h5p-memory-desc h5p-programatically-focusable" tabindex="-1"></div><div class="h5p-memory-close" role="button" tabindex="0" title="' + (l10n.closeLabel || 'Close') + '" aria-label="' + (l10n.closeLabel || 'Close') + '"></div></div>').appendTo($container);
|
||||
var $desc = $popup.find('.h5p-memory-desc');
|
||||
var $top = $popup.find('.h5p-memory-top');
|
||||
|
||||
// Hook up the close button
|
||||
$popup.find('.h5p-memory-close').on('click', function () {
|
||||
self.close(true);
|
||||
}).on('keypress', function (event) {
|
||||
if (event.which === 13 || event.which === 32) {
|
||||
self.close(true);
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Show the popup.
|
||||
*
|
||||
* @param {string} desc
|
||||
* @param {H5P.jQuery[]} imgs
|
||||
* @param {function} done
|
||||
*/
|
||||
self.show = function (desc, imgs, styles, done) {
|
||||
$desc.html(desc);
|
||||
$top.html('').toggleClass('h5p-memory-two-images', imgs.length > 1);
|
||||
for (var i = 0; i < imgs.length; i++) {
|
||||
$('<div class="h5p-memory-image"' + (styles ? styles : '') + '></div>').append(imgs[i]).appendTo($top);
|
||||
}
|
||||
$popup.show();
|
||||
$desc.focus();
|
||||
closed = done;
|
||||
};
|
||||
|
||||
/**
|
||||
* Close the popup.
|
||||
*
|
||||
* @param {boolean} refocus Sets focus after closing the dialog
|
||||
*/
|
||||
self.close = function (refocus) {
|
||||
if (closed !== undefined) {
|
||||
$popup.hide();
|
||||
closed(refocus);
|
||||
closed = undefined;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Sets popup size relative to the card size
|
||||
*
|
||||
* @param {number} fontSize
|
||||
*/
|
||||
self.setSize = function (fontSize) {
|
||||
// Set image size
|
||||
$top[0].style.fontSize = fontSize + 'px';
|
||||
|
||||
// Determine card size
|
||||
var cardSize = fontSize * 6.25; // From CSS
|
||||
|
||||
// Set popup size
|
||||
$popup[0].style.minWidth = (cardSize * 2.5) + 'px';
|
||||
$popup[0].style.minHeight = cardSize + 'px';
|
||||
};
|
||||
};
|
||||
|
||||
})(H5P.MemoryGame, H5P.jQuery);
|
||||
@@ -0,0 +1,228 @@
|
||||
[
|
||||
{
|
||||
"name": "cards",
|
||||
"type": "list",
|
||||
"widgets": [
|
||||
{
|
||||
"name": "VerticalTabs",
|
||||
"label": "Default"
|
||||
}
|
||||
],
|
||||
"label": "Cards",
|
||||
"importance": "high",
|
||||
"entity": "card",
|
||||
"min": 2,
|
||||
"max": 100,
|
||||
"field": {
|
||||
"type": "group",
|
||||
"name": "card",
|
||||
"label": "Card",
|
||||
"importance": "high",
|
||||
"fields": [
|
||||
{
|
||||
"name": "image",
|
||||
"type": "image",
|
||||
"label": "Image",
|
||||
"importance": "high",
|
||||
"ratio": 1
|
||||
},
|
||||
{
|
||||
"name": "imageAlt",
|
||||
"type": "text",
|
||||
"label": "Alternative text for Image",
|
||||
"importance": "high",
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"name": "audio",
|
||||
"type": "audio",
|
||||
"importance": "high",
|
||||
"label": "Audio Track",
|
||||
"description": "An optional sound that plays when the card is turned.",
|
||||
"optional": true,
|
||||
"widgetExtensions": ["AudioRecorder"]
|
||||
},
|
||||
{
|
||||
"name": "match",
|
||||
"type": "image",
|
||||
"label": "Matching Image",
|
||||
"importance": "low",
|
||||
"optional": true,
|
||||
"description": "An optional image to match against instead of using two cards with the same image.",
|
||||
"ratio": 1
|
||||
},
|
||||
{
|
||||
"name": "matchAlt",
|
||||
"type": "text",
|
||||
"label": "Alternative text for Matching Image",
|
||||
"importance": "low",
|
||||
"optional": true,
|
||||
"description": "Describe what can be seen in the photo. The text is read by text-to-speech tools needed by visually impaired users."
|
||||
},
|
||||
{
|
||||
"name": "matchAudio",
|
||||
"type": "audio",
|
||||
"importance": "low",
|
||||
"label": "Matching Audio Track",
|
||||
"description": "An optional sound that plays when the second card is turned.",
|
||||
"optional": true,
|
||||
"widgetExtensions": ["AudioRecorder"]
|
||||
},
|
||||
{
|
||||
"name": "description",
|
||||
"type": "text",
|
||||
"label": "Description",
|
||||
"importance": "low",
|
||||
"maxLength": 150,
|
||||
"optional": true,
|
||||
"description": "An optional short text that will pop up once the two matching cards are found."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "behaviour",
|
||||
"type": "group",
|
||||
"label": "Behavioural settings",
|
||||
"importance": "low",
|
||||
"description": "These options will let you control how the game behaves.",
|
||||
"optional": true,
|
||||
"fields": [
|
||||
{
|
||||
"name": "useGrid",
|
||||
"type": "boolean",
|
||||
"label": "Position the cards in a square",
|
||||
"description": "Will try to match the number of columns and rows when laying out the cards. Afterward, the cards will be scaled to fit the container.",
|
||||
"importance": "low",
|
||||
"default": true
|
||||
},
|
||||
{
|
||||
"name": "numCardsToUse",
|
||||
"type": "number",
|
||||
"label": "Number of cards to use",
|
||||
"description": "Setting this to a number greater than 2 will make the game pick random cards from the list of cards.",
|
||||
"importance": "low",
|
||||
"optional": true,
|
||||
"min": 2
|
||||
},
|
||||
{
|
||||
"name": "allowRetry",
|
||||
"type": "boolean",
|
||||
"label": "Add button for retrying when the game is over",
|
||||
"importance": "low",
|
||||
"default": true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "lookNFeel",
|
||||
"type": "group",
|
||||
"label": "Look and feel",
|
||||
"importance": "low",
|
||||
"description": "Control the visuals of the game.",
|
||||
"optional": true,
|
||||
"fields": [
|
||||
{
|
||||
"name": "themeColor",
|
||||
"type": "text",
|
||||
"label": "Theme Color",
|
||||
"importance": "low",
|
||||
"description": "Choose a color to create a theme for your card game.",
|
||||
"optional": true,
|
||||
"default": "#909090",
|
||||
"widget": "colorSelector",
|
||||
"spectrum": {
|
||||
"showInput": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "cardBack",
|
||||
"type": "image",
|
||||
"label": "Card Back",
|
||||
"importance": "low",
|
||||
"optional": true,
|
||||
"description": "Use a custom back for your cards.",
|
||||
"ratio": 1
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"label": "Localization",
|
||||
"importance": "low",
|
||||
"name": "l10n",
|
||||
"type": "group",
|
||||
"common": true,
|
||||
"fields": [
|
||||
{
|
||||
"label": "Card turns text",
|
||||
"importance": "low",
|
||||
"name": "cardTurns",
|
||||
"type": "text",
|
||||
"default": "Card turns"
|
||||
},
|
||||
{
|
||||
"label": "Time spent text",
|
||||
"importance": "low",
|
||||
"name": "timeSpent",
|
||||
"type": "text",
|
||||
"default": "Time spent"
|
||||
},
|
||||
{
|
||||
"label": "Feedback text",
|
||||
"importance": "low",
|
||||
"name": "feedback",
|
||||
"type": "text",
|
||||
"default": "Good work!"
|
||||
},
|
||||
{
|
||||
"label": "Try again button text",
|
||||
"importance": "low",
|
||||
"name": "tryAgain",
|
||||
"type": "text",
|
||||
"default": "Reset"
|
||||
},
|
||||
{
|
||||
"label": "Close button label",
|
||||
"importance": "low",
|
||||
"name": "closeLabel",
|
||||
"type": "text",
|
||||
"default": "Close"
|
||||
},
|
||||
{
|
||||
"label": "Game label",
|
||||
"importance": "low",
|
||||
"name": "label",
|
||||
"type": "text",
|
||||
"default": "Memory Game. Find the matching cards."
|
||||
},
|
||||
{
|
||||
"label": "Game finished label",
|
||||
"importance": "low",
|
||||
"name": "done",
|
||||
"type": "text",
|
||||
"default": "All of the cards have been found."
|
||||
},
|
||||
{
|
||||
"label": "Card indexing label",
|
||||
"importance": "low",
|
||||
"name": "cardPrefix",
|
||||
"type": "text",
|
||||
"default": "Card %num:"
|
||||
},
|
||||
{
|
||||
"label": "Card unturned label",
|
||||
"importance": "low",
|
||||
"name": "cardUnturned",
|
||||
"type": "text",
|
||||
"default": "Unturned."
|
||||
},
|
||||
{
|
||||
"label": "Card matched label",
|
||||
"importance": "low",
|
||||
"name": "cardMatched",
|
||||
"type": "text",
|
||||
"default": "Match found."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,55 @@
|
||||
(function (MemoryGame, Timer) {
|
||||
|
||||
/**
|
||||
* Adapter between memory game and H5P.Timer
|
||||
*
|
||||
* @class H5P.MemoryGame.Timer
|
||||
* @extends H5P.Timer
|
||||
* @param {Element} element
|
||||
*/
|
||||
MemoryGame.Timer = function (element) {
|
||||
/** @alias H5P.MemoryGame.Timer# */
|
||||
var self = this;
|
||||
|
||||
// Initialize event inheritance
|
||||
Timer.call(self, 100);
|
||||
|
||||
/** @private {string} */
|
||||
var naturalState = element.innerText;
|
||||
|
||||
/**
|
||||
* Set up callback for time updates.
|
||||
* Formats time stamp for humans.
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
var update = function () {
|
||||
var time = self.getTime();
|
||||
|
||||
var minutes = Timer.extractTimeElement(time, 'minutes');
|
||||
var seconds = Timer.extractTimeElement(time, 'seconds') % 60;
|
||||
|
||||
// Update duration attribute
|
||||
element.setAttribute('datetime', 'PT' + minutes + 'M' + seconds + 'S');
|
||||
|
||||
// Add leading zero
|
||||
if (seconds < 10) {
|
||||
seconds = '0' + seconds;
|
||||
}
|
||||
|
||||
element.innerText = minutes + ':' + seconds;
|
||||
};
|
||||
|
||||
// Setup default behavior
|
||||
self.notify('every_tenth_second', update);
|
||||
self.on('reset', function () {
|
||||
element.innerText = naturalState;
|
||||
self.notify('every_tenth_second', update);
|
||||
});
|
||||
};
|
||||
|
||||
// Inheritance
|
||||
MemoryGame.Timer.prototype = Object.create(Timer.prototype);
|
||||
MemoryGame.Timer.prototype.constructor = MemoryGame.Timer;
|
||||
|
||||
})(H5P.MemoryGame, H5P.Timer);
|
||||
@@ -0,0 +1,45 @@
|
||||
var H5PUpgrades = H5PUpgrades || {};
|
||||
|
||||
H5PUpgrades['H5P.MemoryGame'] = (function () {
|
||||
return {
|
||||
1: {
|
||||
/**
|
||||
* Asynchronous content upgrade hook.
|
||||
* Upgrades content parameters to support Memory Game 1.1.
|
||||
*
|
||||
* Move card images into card object as this allows for additonal
|
||||
* properties for each card.
|
||||
*
|
||||
* @params {object} parameters
|
||||
* @params {function} finished
|
||||
*/
|
||||
1: function (parameters, finished) {
|
||||
for (var i = 0; i < parameters.cards.length; i++) {
|
||||
parameters.cards[i] = {
|
||||
image: parameters.cards[i]
|
||||
};
|
||||
}
|
||||
|
||||
finished(null, parameters);
|
||||
},
|
||||
|
||||
/**
|
||||
* Asynchronous content upgrade hook.
|
||||
* Upgrades content parameters to support Memory Game 1.2.
|
||||
*
|
||||
* Add default behavioural settings for the new options.
|
||||
*
|
||||
* @params {object} parameters
|
||||
* @params {function} finished
|
||||
*/
|
||||
2: function (parameters, finished) {
|
||||
|
||||
parameters.behaviour = {};
|
||||
parameters.behaviour.useGrid = false;
|
||||
parameters.behaviour.allowRetry = false;
|
||||
|
||||
finished(null, parameters);
|
||||
}
|
||||
}
|
||||
};
|
||||
})();
|
||||
Reference in New Issue
Block a user