NioTrivia done

This commit is contained in:
Kaloian Venkov 2021-03-13 01:39:47 +02:00
parent c875270a3d
commit b9f625f2ac
27 changed files with 949 additions and 453 deletions

View File

@ -4,5 +4,6 @@
<div class="contnets" *ngFor="let card of getCards()" class="card">
<app-card [card]="card"></app-card>
</div>
<div style="margin: auto;" *ngIf="getCards().length === 0">Вие нямате карти</div>
</div>
</div>

View File

@ -10,14 +10,13 @@ import { UserdataService } from '../userdata.service';
export class DashboardCardsComponent implements OnInit {
constructor(
private db: DbService,
private userdata: UserdataService,
) { }
ngOnInit(): void {
}
getCards(): Card[] {
return this.db.getAllCards().map(v => v.el);
return this.userdata.getOwnedCards();
}
}

View File

@ -1,4 +1,7 @@
import { Injectable } from '@angular/core';
import { mock_card_types } from './mock.card_types';
import { mock_minigames } from './mock.minigames';
import { mock_questions } from './mock.questions';
export interface Minigame {
name: string;
@ -35,411 +38,20 @@ export interface Saved<T> {
providedIn: 'root'
})
export class DbService {
private mock_minigames: Saved<Minigame>[] = [
{
id: '0',
el: {
name: 'Рециклиране',
url: '/minigames/conveyor-belt',
comingSoon: true,
}
},
{
id: '0',
el: {
name: 'BioTrivia',
url: '/minigames/biotrivia',
}
}
];
private mock_card_types: Saved<Card>[] = [
{
id: '0',
el: {
name: 'Пингвин',
types: ['normal'],
imageUrl: '/assets/images/cards/pingvin.jpg',
info: [
{
content: 'Тъй като нямат естествен враг на сушата, пингвините не показват страх, а любопитство когато към тях се приближи човек.',
heading: 'Интересно'
}
]
}
},
{
id: '1',
el: {
name: 'Пингвин',
types: ['normal'],
imageUrl: '/assets/images/cards/pingvin2.jpg',
info: [
{
content: 'Пингвините мътят яйцата си на смени. Когато мъжкият отиде да яде, той не може да намери пътя обратно към гнездото и започва да крещи шумно. Женските разпознават гласовете на партньорите си сред хиляди други и крещят в отговор, така че те да знаят къде да се върнат.',
heading: 'Интересно'
}
]
}
},
{
id: '2',
el: {
name: 'Делфин',
types: ['normal'],
imageUrl: '/assets/images/cards/delfin.jpg',
info: [
{
content: 'Делфините общуват по между си с помощта на звуци, като всеки звук може да изразява различно настроение.',
heading: 'Интересно'
}
]
}
},
{
id: '3',
el: {
name: 'Делфин',
types: ['normal'],
imageUrl: '/assets/images/cards/delfin2.jpg',
info: [
{
content: 'Делфините никога не заспиват напълно. Докато си почиват, едната половина на мозъка им продължава да бъде активна. Ето защо дори и по време на сън едното им око остава отворено.',
heading: 'Интересно'
}
]
},
},
{
id: '4',
el: {
name: 'Син кит',
types: ['normal'],
imageUrl: '/assets/images/cards/sinkit.jpg',
info: [
{
content: 'Освен най-едрото, синият кит е и най-шумното животно звукът, който издава е от порядъка на 188 децибела и може да бъде чут на разстояние до 800 км. За сравнение, звукът на пътнически самолет е „едва” 120 децибела.',
heading: 'Интересно'
}
]
}
},
{
id: '5',
el: {
name: 'Син кит',
types: ['normal'],
imageUrl: '/assets/images/cards/sinkit2.jpg',
info: [
{
content: 'Езикът на кита тежи около 4,7 тона',
heading: 'Интересно'
}
]
}
},
{
id: '6',
el: {
name: 'Пор',
types: ['endangered'],
imageUrl: '/assets/images/cards/por.jpg',
info: [
{
heading: 'Морфология на "пор"',
content: 'Думата "пор" произлиза от латински и означава "крадец".',
},
{
heading: 'Застрашен вид',
content: 'Загубата на местообитания и бракониерството, са причина днес те или техните следи да се наблюдават изключително рядко.',
},
],
},
},
{
id: '7',
el: {
name: 'Кафява мечка',
types: ['endangered'],
imageUrl: '/assets/images/cards/kafqva-mechka.jpg',
info: [
{
heading: 'Сладки сънища',
content: 'Учените вярват, че мечките могат да сънуват.',
},
{
heading: 'Fast as f',
content: 'Макар да изглеждат тромави,мечките могат да тичат с до 60 км/ч.',
},
{
heading: 'Застрашен вид',
content: 'За съжаление хората им нанасят непоправими щети, като разкъсват с пътища и огради ареала им, унищожават горите и ги избиват.',
},
],
},
},
{
id: '8',
el: {
name: 'Балканска дива коза',
types: ['endangered'],
imageUrl: '/assets/images/cards/koza.jpg',
info: [
{
heading: 'Властелина на пръстените',
content: 'Знаехте ли, че всяка година се прибавя по още един пръстен върху рогата на дивата коза, като така може да се определи възрастта на даденото животно.',
},
{
heading: 'И ся почваме да бегами',
content: 'На света няма друго животно, което да притежава по-голяма ловкост и бързина на придвижване по хлъзгави и стръмни терени.',
},
],
},
},
{
id: '9',
el: {
name: 'Прилеп',
types: ['endangered'],
imageUrl: '/assets/images/cards/prilep.jpg',
info: [
{
heading: 'Напаст пещерна',
content: 'най-голямата колония от прилепи в света наброява над 20 милиона броя от тези летящи създания.',
},
{
heading: 'Ехо .... (ехо)',
content: 'Прилепите използват ехолокация, за да се заобиколят в тъмното.',
},
{
heading: 'Защитен вид',
content: 'Според българското законодателство, прилепите са защитени видове.',
},
],
},
},
{
id: '10',
el: {
name: 'Лалугер',
types: ['endangered'],
imageUrl: '/assets/images/cards/laluger.jpg',
info: [
{
heading: 'Втори братовчед на ленивеца',
content: 'Когато е студено, той заспива зимен сън и се събужда едва през пролетта.',
},
{
heading: 'Мали ша са напикая',
content: 'Когато е изплашен, той застава на задните си лапи.',
},
{
heading: 'Защитен вид',
content: 'Интензивно селско стопанство и използване на пестициди причиняват бързото изчезване на този вид.',
},
],
},
},
{
id: '11',
el: {
name: 'Етруската земеровка',
types: ['endangered'],
imageUrl: '/assets/images/cards/zemerovka.jpg',
info: [
{
heading: 'Размер',
content: 'Един от най-дребните бозайници на планетата с размери едва 3,6 до 5,2 см и тегло от 1,25 до 2,34 грама!',
},
{
heading: 'Лакомници',
content: 'Етруската земеровка трява да яде непрекъснато за да може да живее.',
},
],
},
},
{
id: '12',
el: {
name: 'Тюленът монах',
types: ['endangered'],
imageUrl: '/assets/images/cards/tuleni.jpg',
info: [
{
heading: 'Техния живот',
content: 'Те се крият в подводни пещери, където си почиват и раждат своите малки.',
},
],
},
},
{
id: '13',
el: {
name: 'Видра',
types: ['endangered'],
imageUrl: '/assets/images/cards/vidra.jpg',
info: [
{
heading: 'Мали колко сладко',
content: 'Морските видри се държат за ръце докато спят, за да не бъдат разделени от теченията докато се носят по водната повърхност.',
},
{
heading: 'NO MERCY',
content: 'В момент на опасност видрите показват бебетата си на хищниците, за да предизвикат съчувствие и по този начин да избегнат атаката.',
},
],
},
},
{
id: '14',
el: {
name: 'Ловен сокол',
types: ['endangered'],
imageUrl: '/assets/images/cards/sokol.jpg',
info: [
{
heading: 'Ловни навици',
content: 'Те не ловуват близо до гнездата си, а се опитват да летят доколкото е възможно.',
},
{
heading: 'Застрашен вид',
content: 'Има опасност от изчезване. Основната причина, поради която населението на ловния сокол намалява, е човешката дейност.',
},
],
},
},
];
private mock_questions: Saved<Question>[] = [
{
id: '0',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/slon.jpg' ],
question: 'Защо бройката на слоновете в Африка намалява?',
answer: {
choises: [
'Убиван е от други животни',
'Липса на храна',
'Убивани са от бракониери',
'Замърсяване на въздуха'
],
correctChoise: 'Убивани са от бракониери',
}
}
},
{
id: '1',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/carski orel.jpg' ],
question: 'Каква е главната причина за намаляването на бройките Царски орли?',
answer: {
choises: [
'Бракониери',
'Замърсяване',
'Отсичане на горите',
'Електрически стълбове'
],
correctChoise: 'Електрически стълбове',
}
}
},
{
id: '2',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/carski orel.jpg' ],
question: 'Каква е главната причина за намаляването на бройките Царски орли?',
answer: {
choises: [
'Бракониери',
'Замърсяване',
'Отсичане на горите',
'Електрически стълбове'
],
correctChoise: 'Електрически стълбове',
}
}
},
{
id: '3',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/zlatna zhaba.png' ],
question: 'Каква е причината за изчезването на Златната жаба?',
answer: {
choises: [
'Глобално затопляне',
'Замърсяване на реките',
'Отсичане на горите',
'Недостиг на храна'
],
correctChoise: 'Глобално затопляне',
}
}
},
{
id: '4',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/shtigga.png' ],
question: 'Каква е причината за намаляването на бройките на Черният щъркел?',
answer: {
choises: [
'Замърсяването на блатата и езерата',
'Недостиг на храна',
'Глобално затопляне',
'Естествени врагове',
],
correctChoise: 'Замърсяването на блатата и езерата',
}
}
},
{
id: '5',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/tulen.jpg' ],
question: 'Вярно или грешно. От 1996г. тюлените в Черно море намаляват, като днес те са почти изчезнали у нас.',
answer: {
choises: [
'Вярно',
'Грешно',
],
correctChoise: 'Грешно',
}
}
},
{
id: '6',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/ris.jpg' ],
question: 'Каква е причината за намаляването на бройките рисове в България?',
answer: {
choises: [
'Глобално затопляне',
'Незаконно избиване за козината им',
'Разрушаването на местообитанията им',
'Убиван е от естествени врагове',
],
correctChoise: 'Незаконно избиване за козината им',
}
}
},
];
private mock_question_categories: string[] = [ 'animals' ];
private mock_minigames: Saved<Minigame>[] = mock_minigames;
private mock_card_types: Saved<Card>[] = mock_card_types;
private mock_questions: Saved<Question>[] = mock_questions;
private getRandomEls<T>(array: T[], n: number): T[] {
const result: T[] = new Array(n);
let len = array.length;
const taken = new Array(len);
if (n > len)
throw new RangeError("getRandom: more elements taken than available");
while (n--) {
const x = Math.floor(Math.random() * len);
result[n] = array[x in taken ? taken[x] : x];
taken[x] = --len in taken ? taken[len] : len;
const result: T[] = [];
for (let i = 0; i < n; i++) {
const index = Math.floor(Math.random() * array.length);
result.push(array.splice(index, 1)[0]);
}
array.push(...result);
return result;
}
@ -462,15 +74,21 @@ export class DbService {
if (index < 0) return null;
else return this.mock_card_types[index].el;
}
getRandomCardId(endangeredBias: number): string {
const normal = this.getAllCards().filter(v => !v.el.types.includes('endangered'));
const endangered = this.getAllCards().filter(v => v.el.types.includes('endangered'));
getRandomQuestions(n: number, category: string): Question[] {
if (Math.random() < endangeredBias) {
return this.getRandomEls(endangered, 1)[0].id;
}
else {
return this.getRandomEls(normal, 1)[0].id;
}
}
getRandomQuestions(n: number): Question[] {
return this.getRandomEls(this.mock_questions
.filter(v => v.el.category === category)
.map(v => v.el), n);
}
getRandomCategory(): string {
return this.getRandomEls(this.mock_question_categories, 1)[0];
}
constructor() { }
}

View File

@ -12,31 +12,37 @@
<div class="question dialog" *ngIf="stage === 'ongoing' || stage === 'starting-ongoing' || stage === 'ongoing-ended'" #ongoingDialog
style="opacity: 0;">
<igx-linear-bar [max]="questions.length" [value]="currQuestionN - 1" class="progress"></igx-linear-bar>
<h6>{{currQuestion.question}}</h6>
<div class="container2">
<h6>{{currQuestion.question}}</h6>
<div style="color: red;" *ngIf="displayError">Нужен е отговор, за да продължите</div>
<div style="color: red;" *ngIf="displayError">Нужен е отговор, за да продължите</div>
<igx-radio *ngFor="let choise of currAnswers" name="choise" value="{{choise}}"
[checked]="selectedAnswer === choise" (change)="selectedAnswer = choise" [required]="true">{{choise}}
</igx-radio>
<button igxButton igxRipple (click)=" submitAnswer()">Следващ въпрос</button>
<igx-radio *ngFor="let choise of currAnswers" name="choise" value="{{choise}}"
[checked]="selectedAnswer === choise" (change)="selectedAnswer = choise" [required]="true">{{choise}}
</igx-radio>
<button igxButton igxRipple (click)=" submitAnswer()">Следващ въпрос</button>
</div>
</div>
<div class="question dialog" style="opacity: 0;" *ngIf="stage === 'ended' || stage === 'ongoing-ended'" #endDialog>
<h4>Завършихте викторината</h4>
Верни отговори:
<igx-linear-bar [max]="questions.length" [value]="guessedQuestions"></igx-linear-bar>
<div *ngIf="guessedQuestions < questions.length">
<h6>Грешни отговори:</h6>
<div class="wrongAnswers">
<div *ngFor="let answer of getIncorrectAnswers()">
<b>{{answer.index}}. {{answer.question.question}}</b><br>
<div><div class="identation"></div> Вашият отговор: {{answer.answer}}</div>
<div><div class="identation"></div> Правилен отговор: {{answer.question.answer.correctChoise}}</div>
<div class="dialog" style="opacity: 0;" *ngIf="stage === 'ended' || stage === 'ongoing-ended'" #endDialog>
<h4>Завършихте викторината</h4>
Верни отговори:
<igx-linear-bar [max]="questions.length" [value]="guessedQuestions"></igx-linear-bar>
<div *ngIf="guessedQuestions < questions.length">
<h6>Грешни отговори:</h6>
<div class="wrongAnswers">
<div *ngFor="let answer of getIncorrectAnswers()">
<b>{{answer.index}}. {{answer.question.question}}</b><br>
<div><div class="identation"></div> Вашият отговор: {{answer.answer}}</div>
<div><div class="identation"></div> Правилен отговор: {{answer.question.answer.correctChoise}}</div>
</div>
</div>
</div>
</div>
<button igxButton igxRipple routerLink="">Върни се в началния екран</button>
<button igxButton igxRipple (click)="restartGame()">Играй отново</button>
<div class="wonCard" style="display: flex; flex-direction: column; align-items: center;" *ngIf="wonCard">
<h4>You've won this card:</h4>
<app-card [card]="wonCard" style="margin: auto; display: block;"></app-card>
</div>
<button igxButton igxRipple routerLink="">Върни се в началния екран</button>
<button igxButton igxRipple (click)="restartGame()">Играй отново</button>
</div>
</div>

View File

@ -41,15 +41,20 @@
margin: .25em;
}
}
.question {
padding: 0;
.container2 {
padding: 2em;
padding-top: 0;
}
}
.progress {
position: absolute;
top: 0;
left: 0;
width: 100%;
}
.wrongAnswers {
max-height: 50vh;
max-height: 25vh;
overflow-y: auto;
}

View File

@ -1,7 +1,7 @@
import { Component, ElementRef, NgZone, OnInit, ViewChild, ViewChildren } from '@angular/core';
import { IgxRadioComponent, IgxRadioGroupDirective } from 'igniteui-angular';
import { Observable, Subject } from 'rxjs';
import { Answer, DbService, Question } from '../db.service';
import { Answer, Card, DbService, Question, Saved } from '../db.service';
import { UserdataService } from '../userdata.service';
@ -26,6 +26,8 @@ export class MinigameBiotriviaComponent implements OnInit {
currQuestion: Question;
currAnswers: string[];
wonCard: Card = null;
answers: Array<{ question: Question, answer: string }> = [];
selectedAnswer = '';
@ -41,6 +43,36 @@ export class MinigameBiotriviaComponent implements OnInit {
ngOnInit(): void {
}
endGame(): void {
this.stage = 'ongoing-ended';
const successRate = (this.guessedQuestions) / this.questions.length;
if (successRate > 0.5) {
const owned = this.userdata.getOwnedCardIds();
let newCard = null;
do {
newCard = this.db.getRandomCardId(successRate - .5);
} while (owned.includes(newCard));
this.userdata.addCard(newCard);
this.wonCard = this.db.getCard(newCard);
}
setTimeout(() => {
this.endingElementRef.first.nativeElement.style.opacity = 0;
this.animateElements(
this.ongoingElementRef.first.nativeElement,
this.endingElementRef.first.nativeElement
// tslint:disable-next-line: deprecation
).subscribe(() => {
this.stage = 'ended';
});
}, 10);
}
submitAnswer(): void {
if (!this.isAnswered()) {
this.displayError = true;
@ -56,18 +88,7 @@ export class MinigameBiotriviaComponent implements OnInit {
});
if (this.currQuestionN >= this.questions.length) {
this.stage = 'ongoing-ended';
setTimeout(() => {
this.endingElementRef.first.nativeElement.style.opacity = 0;
this.animateElements(
this.ongoingElementRef.first.nativeElement,
this.endingElementRef.first.nativeElement
// tslint:disable-next-line: deprecation
).subscribe(() => {
this.stage = 'ended';
});
}, 10);
this.endGame();
return;
}
@ -128,7 +149,7 @@ export class MinigameBiotriviaComponent implements OnInit {
startingEl.style.position = 'absolute';
this.stage = 'starting-ongoing';
this.questions = this.db.getRandomQuestions(5, this.db.getRandomCategory());
this.questions = this.db.getRandomQuestions(1);
this.loadNextQuestion();
setTimeout(() => {
@ -176,7 +197,7 @@ export class MinigameBiotriviaComponent implements OnInit {
this.stage = 'ongoing-ended';
this.questions = this.db.getRandomQuestions(5, this.db.getRandomCategory());
this.questions = this.db.getRandomQuestions(1);
this.displayError = false;
@ -186,6 +207,8 @@ export class MinigameBiotriviaComponent implements OnInit {
this.selectedAnswer = '';
this.wonCard = null;
this.loadNextQuestion();
setTimeout(() => {

View File

@ -0,0 +1,556 @@
import { Card, Saved } from "./db.service";
export const mock_card_types: Saved<Card>[] = [
{
id: '0',
el: {
name: 'Пингвин',
types: ['normal'],
imageUrl: '/assets/images/cards/pingvin.jpg',
info: [
{
content: 'Тъй като нямат естествен враг на сушата, пингвините не показват страх, а любопитство когато към тях се приближи човек.',
heading: 'Интересно'
}
]
}
},
{
id: '1',
el: {
name: 'Пингвин',
types: ['normal'],
imageUrl: '/assets/images/cards/pingvin2.jpg',
info: [
{
content: 'Пингвините мътят яйцата си на смени. Когато мъжкият отиде да яде, той не може да намери пътя обратно към гнездото и започва да крещи шумно. Женските разпознават гласовете на партньорите си сред хиляди други и крещят в отговор, така че те да знаят къде да се върнат.',
heading: 'Интересно'
}
]
}
},
{
id: '2',
el: {
name: 'Делфин',
types: ['normal'],
imageUrl: '/assets/images/cards/delfin.jpg',
info: [
{
content: 'Делфините общуват по между си с помощта на звуци, като всеки звук може да изразява различно настроение.',
heading: 'Интересно'
}
]
}
},
{
id: '3',
el: {
name: 'Делфин',
types: ['normal'],
imageUrl: '/assets/images/cards/delfin2.jpg',
info: [
{
content: 'Делфините никога не заспиват напълно. Докато си почиват, едната половина на мозъка им продължава да бъде активна. Ето защо дори и по време на сън едното им око остава отворено.',
heading: 'Интересно'
}
]
},
},
{
id: '4',
el: {
name: 'Син кит',
types: ['normal'],
imageUrl: '/assets/images/cards/sinkit.jpg',
info: [
{
content: 'Освен най-едрото, синият кит е и най-шумното животно звукът, който издава е от порядъка на 188 децибела и може да бъде чут на разстояние до 800 км. За сравнение, звукът на пътнически самолет е „едва” 120 децибела.',
heading: 'Интересно'
}
]
}
},
{
id: '5',
el: {
name: 'Син кит',
types: ['normal'],
imageUrl: '/assets/images/cards/sinkit2.jpg',
info: [
{
content: 'Езикът на кита тежи около 4,7 тона',
heading: 'Интересно'
}
]
}
},
{
id: '6',
el: {
name: 'Пор',
types: ['endangered'],
imageUrl: '/assets/images/cards/por.jpg',
info: [
{
heading: 'Морфология на "пор"',
content: 'Думата "пор" произлиза от латински и означава "крадец".',
},
{
heading: 'Застрашен вид',
content: 'Загубата на местообитания и бракониерството, са причина днес те или техните следи да се наблюдават изключително рядко.',
},
],
},
},
{
id: '7',
el: {
name: 'Кафява мечка',
types: ['endangered'],
imageUrl: '/assets/images/cards/kafqva-mechka.jpg',
info: [
{
heading: 'Сладки сънища',
content: 'Учените вярват, че мечките могат да сънуват.',
},
{
heading: 'Fast as f',
content: 'Макар да изглеждат тромави,мечките могат да тичат с до 60 км/ч.',
},
{
heading: 'Застрашен вид',
content: 'За съжаление хората им нанасят непоправими щети, като разкъсват с пътища и огради ареала им, унищожават горите и ги избиват.',
},
],
},
},
{
id: '8',
el: {
name: 'Балканска дива коза',
types: ['endangered'],
imageUrl: '/assets/images/cards/koza.jpg',
info: [
{
heading: 'Властелина на пръстените',
content: 'Знаехте ли, че всяка година се прибавя по още един пръстен върху рогата на дивата коза, като така може да се определи възрастта на даденото животно.',
},
{
heading: 'И ся почваме да бегами',
content: 'На света няма друго животно, което да притежава по-голяма ловкост и бързина на придвижване по хлъзгави и стръмни терени.',
},
],
},
},
{
id: '9',
el: {
name: 'Прилеп',
types: ['endangered'],
imageUrl: '/assets/images/cards/prilep.jpg',
info: [
{
heading: 'Напаст пещерна',
content: 'най-голямата колония от прилепи в света наброява над 20 милиона броя от тези летящи създания.',
},
{
heading: 'Ехо .... (ехо)',
content: 'Прилепите използват ехолокация, за да се заобиколят в тъмното.',
},
{
heading: 'Защитен вид',
content: 'Според българското законодателство, прилепите са защитени видове.',
},
],
},
},
{
id: '10',
el: {
name: 'Лалугер',
types: ['endangered'],
imageUrl: '/assets/images/cards/laluger.jpg',
info: [
{
heading: 'Втори братовчед на ленивеца',
content: 'Когато е студено, той заспива зимен сън и се събужда едва през пролетта.',
},
{
heading: 'Мали ша са напикая',
content: 'Когато е изплашен, той застава на задните си лапи.',
},
{
heading: 'Защитен вид',
content: 'Интензивно селско стопанство и използване на пестициди причиняват бързото изчезване на този вид.',
},
],
},
},
{
id: '11',
el: {
name: 'Етруската земеровка',
types: ['endangered'],
imageUrl: '/assets/images/cards/zemerovka.jpg',
info: [
{
heading: 'Размер',
content: 'Един от най-дребните бозайници на планетата с размери едва 3,6 до 5,2 см и тегло от 1,25 до 2,34 грама!',
},
{
heading: 'Лакомници',
content: 'Етруската земеровка трява да яде непрекъснато за да може да живее.',
},
],
},
},
{
id: '12',
el: {
name: 'Тюленът монах',
types: ['endangered'],
imageUrl: '/assets/images/cards/tuleni.jpg',
info: [
{
heading: 'Техния живот',
content: 'Те се крият в подводни пещери, където си почиват и раждат своите малки.',
},
],
},
},
{
id: '13',
el: {
name: 'Видра',
types: ['endangered'],
imageUrl: '/assets/images/cards/vidra.jpg',
info: [
{
heading: 'Мали колко сладко',
content: 'Морските видри се държат за ръце докато спят, за да не бъдат разделени от теченията докато се носят по водната повърхност.',
},
{
heading: 'NO MERCY',
content: 'В момент на опасност видрите показват бебетата си на хищниците, за да предизвикат съчувствие и по този начин да избегнат атаката.',
},
],
},
},
{
id: '14',
el: {
name: 'Ловен сокол',
types: ['endangered'],
imageUrl: '/assets/images/cards/sokol.jpg',
info: [
{
heading: 'Ловни навици',
content: 'Те не ловуват близо до гнездата си, а се опитват да летят доколкото е възможно.',
},
{
heading: 'Застрашен вид',
content: 'Има опасност от изчезване. Основната причина, поради която населението на ловния сокол намалява, е човешката дейност.',
},
],
},
},
{
id: "15",
el: {
name: "Иглика",
imageUrl: "/assets/images/cards/image_1.jpg",
types: [
"normal"
],
info: [
{
heading: "Интересно",
content: "Доказано е, че в разгара на зимата депресиите силно подтискат хората, намаляват обичайната им жизненост и работоспособност, а при психически по-неустойчивите се развиват болестни симптоми. И без евтина реклама доказано е също, че едно малко, но изумително красиво растение разцъфнала иглика, прави понякога повече за настроението в мрачните студени дни, отколкото скъпоструващи медикаменти и психотерапии. Дори и без депресия, саксийката с иглика ще ви донесе истинска радост."
}
]
}
},
{
id: "16",
el: {
name: "Карамфил",
imageUrl: "/assets/images/cards/image_2.jpg",
types: [
"normal"
],
info: [
{
heading: "Интересно",
content: "Карамфилът е известен като подправка с изтънчен вкус от незапомнени времена. Карамфилът е родом от Молукас, известен като Островите на подправките в Индия. Той е консумиран в Азия от преди повече от 2000 години. Благодарение на сладкия си и ароматен вкус, китайските царедворци са използвали карамфила, за да освежават дъха си, когато е трябвало да се обръщат към императора."
}
]
}
},
{
id: "17",
el: {
name: "Лале",
imageUrl: "/assets/images/cards/image_3.jpg",
types: [
"normal"
],
info: [
{
heading: "Интересно",
content: "В общия случай се приема, че лалетата символизират любовта и пристигането на пролетта. Червените лалета са израз на истинска любов, докато с белите можете да поискате прошка, лилавите пък са знак за царственост. Интересното е, че многоцветният букет се смята за комплимент към очите на получателя."
}
]
}
},
{
id: "18",
el: {
name: "Нарцис",
imageUrl: "/assets/images/cards/image_4.jpg",
types: [
"normal"
],
info: [
{
heading: "Интересно",
content: "На всички ни е известен терминът от психологията \"нарцисизъм\" - с него се определят самовлюбените и горди хора."
}
]
}
},
{
id: "19",
el: {
name: "Божур",
imageUrl: "/assets/images/cards/image_5.jpg",
types: [
"normal"
],
info: [
{
heading: "Интересно",
content: "Ароматното растение е символ на успех и просперитет, привлича богатството и помага в професионалното израстване."
}
]
}
},
{
id: "20",
el: {
name: "Маслодайна роза",
imageUrl: "/assets/images/cards/image_6.jpg",
types: [
"endangered"
],
info: [
{
heading: "Интересно",
content: "Розовото масло преди всичко е благоуханно удоволствие за сетивата. Наричано „течно злато“, заради уникалните му свойства и високата цена, розовото масло е природен еликсир с неизброими ползи. "
}
]
}
},
{
id: "21",
el: {
name: "Жасмин",
imageUrl: "/assets/images/cards/image_7.jpg",
types: [
"normal"
],
info: [
{
heading: "Интересно",
content: "Жасминовите цветя са важни в хиндуистки церемонии и са споменати в религиозни текстове. И мъжете и жените в Индия отдавна използват жасминовото масло като афродизиак, като тоник във фризьорството и козметиката, както и не на последно място в парфюмерията."
}
]
}
},
{
id: "22",
el: {
name: "Еделвайс",
imageUrl: "/assets/images/cards/image_8.jpg",
types: [
"endangered"
],
info: [
{
heading: "Интересно",
content: " Пчелите го обичат заради медоносните цветове, макар че го намират рядко. Поради безразборното бране има опасност еделвайсът да изчезне от нашите планини, затова късането му е забранено със закон и растението е включено в \"Червената книга на България\". Цветовете на еделвайса се използват в медицината за приготвяне на лекарства против болести на белите дробове, сърцето и др. B Стара Планина специално за опазването му е създаден резерват \"Козя стена\"."
}
]
}
},
{
id: "23",
el: {
name: "Бегония",
imageUrl: "/assets/images/cards/image_9.jpg",
types: [
"normal"
],
info: [
{
heading: "Интересно",
content: "Според вярванията бегонията е голям помощник на здравето.Тя не само възстановява здравето на възрастните хора, а и предпазва това на по-младите.Бегонията е знак за удължаване на живота на човека, който я е получил като подарък."
}
]
}
},
{
id: "24",
el: {
name: "Орхидея",
imageUrl: "/assets/images/cards/image_10.jpg",
types: [
"endangered"
],
info: [
{
heading: "Интересно",
content: "Феята на цветята. Символичен заряд носят и различните цветове: бели орхидеи за невинност, чистота и елегантност; розови - за женственост, благодат и радост; жълти за приятелство и ново начало; пурпурни за възхищение и в знак на уважение към близък човек."
}
]
}
},
{
id: '25',
el: {
name: 'Гепард',
imageUrl: '/assets/images/cards/gepard.jpg',
types: [ 'normal' ],
info: [
{
heading: 'Тишината е злато',
content: 'Интересното е, че гепардът не може да реве. Всъщност те мъркат.'
},
{
heading: 'Бърз като вятъра',
content: 'Нормалната скорост на преследване за гепард е 80кмч.'
},
],
},
},
{
id: '26',
el: {
name: 'Лъв',
imageUrl: '/assets/images/cards/luv.jpg',
types: [ 'normal' ],
info: [
{
heading: 'Гръмогласни',
content: 'Ревът на възрастен лъв може да се чуе на разстояние от 8 километра.'
},
],
},
},
{
id: '27',
el: {
name: 'Тигър',
imageUrl: '/assets/images/cards/tigar.jpg',
types: [ 'endangered' ],
info: [
{
heading: 'Интересно',
content: 'Няма два тигъра с еднакви ивици.'
},
{
heading: 'Скок на височина',
content: 'Тигрите могат да прескачат разстояния на дължина над 6м и да скачат на 5м височина вертикално.'
},
],
},
},
{
id: '28',
el: {
name: 'Панда',
imageUrl: '/assets/images/cards/panda.jpg',
types: [ 'endangered' ],
info: [
{
heading: 'Лакомници',
content: 'Пандите могат да надебелеят с 28 килограма на ден, хранейки се само с бамбукови клони.'
},
{
heading: 'Застрашени',
content: 'За съжаление тези красиви мечки са застрашени и се смята, че само около 1000 остават в дивата природа.'
},
],
},
},
{
id: "29",
el: {
name: "Блатно кокиче",
types: ['endangered'],
imageUrl: "/assets/images/cards/image_11.jpg",
info: [
{
heading: "Интересно",
content: "Най-лечебната билка, която е успяла да спаси не един и два детски живота, всъщност е билката блатно кокиче.Лечебните свойства на растението са доказани през годините. От него се прави и лекарството „Нивалин”.",
},
],
},
},
{
id: "30",
el: {
name: "Родопско лале",
types: ['endangered'],
imageUrl: "/assets/images/cards/image_12.jpg",
info: [
{
heading: "Интересно",
content: "Цветовете на родопското лале се разтварят само когато слънцето залее със светлина и топлина местата, където то расте. Покрият ли тежки облаци небето и от тях рукне дъжд, цветовете бързо се затварят и по този начин се предпазват от прекомерно изстудяване и от наранявания от силен дъжд и вятър. Това явление се наблюдава и всяка вечер, щом падне нощният мрак. ",
},
],
},
},
{
id: "31",
el: {
name: "Алпийско сграбиче",
types: ['endangered'],
imageUrl: "/assets/images/cards/image_13.jpg",
info: [
{
heading: "Интересно",
content: "В Червена книга на Народна Република България - том 1, видът е категоризиран като \"рядък\". В същият източник като заплахи за вида са посочени: \"деградацията на хабитата, в който той се среща, причинена от залесяване, туризъм и процесите на естествено разширяване на гората\".",
},
],
},
},
{
id: "32",
el: {
name: "Жълт планински крем",
types: ['endangered'],
imageUrl: "/assets/images/cards/image_14.jpg",
info: [
{
heading: "Интересно",
content: "Планинският крем е защитен вид и е включен в Червената книга на България, Не опитвайте да го късате, тъй като стъблото е много жилаво и се изтръгва до самата луковица, което го обрича на загиване.",
},
],
},
},
{
id: "33",
el: {
name: "Дива циклама",
types: ['endangered'],
imageUrl: "/assets/images/cards/image_15.jpg",
info: [
{
heading: "Интересно",
content: "Защитен вид и рядко се среща. Лекува бронхит, упорита кашлица и възпалено гърло.",
},
],
},
},
];

View File

@ -0,0 +1,288 @@
import { Question, Saved } from "./db.service";
export const mock_questions: Saved<Question>[] = [
{
id: '0',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/slon.jpg' ],
question: 'Защо бройката на слоновете в Африка намалява?',
answer: {
choises: [
'Убиван е от други животни',
'Липса на храна',
'Убивани са от бракониери',
'Замърсяване на въздуха'
],
correctChoise: 'Убивани са от бракониери',
}
}
},
{
id: '1',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/carski orel.jpg' ],
question: 'Каква е главната причина за намаляването на бройките Царски орли?',
answer: {
choises: [
'Бракониери',
'Замърсяване',
'Отсичане на горите',
'Електрически стълбове'
],
correctChoise: 'Електрически стълбове',
}
}
},
{
id: '2',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/carski orel.jpg' ],
question: 'Каква е главната причина за намаляването на бройките Царски орли?',
answer: {
choises: [
'Бракониери',
'Замърсяване',
'Отсичане на горите',
'Електрически стълбове'
],
correctChoise: 'Електрически стълбове',
}
}
},
{
id: '3',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/zlatna zhaba.png' ],
question: 'Каква е причината за изчезването на Златната жаба?',
answer: {
choises: [
'Глобално затопляне',
'Замърсяване на реките',
'Отсичане на горите',
'Недостиг на храна'
],
correctChoise: 'Глобално затопляне',
}
}
},
{
id: '4',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/shtigga.png' ],
question: 'Каква е причината за намаляването на бройките на Черният щъркел?',
answer: {
choises: [
'Замърсяването на блатата и езерата',
'Недостиг на храна',
'Глобално затопляне',
'Естествени врагове',
],
correctChoise: 'Замърсяването на блатата и езерата',
}
}
},
{
id: '5',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/tulen.jpg' ],
question: 'Вярно или грешно. От 1996г. тюлените в Черно море намаляват, като днес те са почти изчезнали у нас.',
answer: {
choises: [
'Вярно',
'Грешно',
],
correctChoise: 'Грешно',
}
}
},
{
id: '6',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/ris.jpg' ],
question: 'Каква е причината за намаляването на бройките рисове в България?',
answer: {
choises: [
'Глобално затопляне',
'Незаконно избиване за козината им',
'Разрушаването на местообитанията им',
'Убиван е от естествени врагове',
],
correctChoise: 'Незаконно избиване за козината им',
}
}
},
{
id: '7',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/nosorog.png' ],
question: 'Вярно или грешно. Африканският черен носорог е изчезнал заради Глобалното затопляне.',
answer: {
choises: [
'Вярно',
'Грешно',
],
correctChoise: 'Грешно',
}
}
},
{
id: '8',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/kozirog.png' ],
question: 'Вярно или невярно. През 2009г. е клониран Пиринейският козирог,който е изчезнал през 2000г.',
answer: {
choises: [
'Вярно',
'Грешно',
],
correctChoise: 'Вярно',
}
}
},
{
id: '9',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/kozirog.png' ],
question: 'Вярно или невярно. През 2009г. е клониран Пиринейският козирог,който е изчезнал през 2000г.',
answer: {
choises: [
'Вярно',
'Грешно',
],
correctChoise: 'Вярно',
}
}
},
{
id: '10',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/ara.jpg' ],
question: 'Посочете невярното твърдение. Спиксовия ара е изчезнал поради:',
answer: {
choises: [
'Унищожаването на местообитанията им',
'Незаконният лов',
'Незаконната търговия',
'Глобално затопляне',
],
correctChoise: 'Глобално затопляне',
}
}
},
{
id: '11',
el: {
category: 'recycling',
photoUrlsAbove: [ '/assets/images/questions/teniski.png' ],
question: 'Колко литра вода отнема да се направи една тениска?',
answer: {
choises: [
'26л.',
'260л.',
'1000л.',
'2600л.',
],
correctChoise: '2600л.',
}
}
},
{
id: '12',
el: {
category: 'recycling',
photoUrlsAbove: [ '/assets/images/questions/dunki.png' ],
question: 'Колко горе долу литра вода отнема да се направят един чифт дънки?',
answer: {
choises: [
'1000л.',
'200л.',
'5000л.',
'7000л.',
],
correctChoise: '7000л.',
}
}
},
{
id: '13',
el: {
category: 'recycling',
photoUrlsAbove: [ '/assets/images/questions/bonishte.png' ],
question: 'Колко процента от нещата, заровени в сметищета,могат да бъдат рециклирани.',
answer: {
choises: [
'20',
'30',
'50',
'80',
'90',
'0',
],
correctChoise: '80',
}
}
},
{
id: '14',
el: {
category: 'recycling',
photoUrlsAbove: [ '/assets/images/questions/kapeshto kranche.png' ],
question: 'Колко литра вода губи едно капещо кранче за ден?',
answer: {
choises: [
'1',
'5',
'10',
'50',
'100',
'120',
],
correctChoise: '120',
}
}
},
{
id: '15',
el: {
category: 'recycling',
photoUrlsAbove: [ '/assets/images/questions/roklq.png' ],
question: 'За около колко години се разгражда една рокля от полиестер?',
answer: {
choises: [
'50',
'100',
'200',
'150',
'Над 200',
],
correctChoise: '200',
}
}
},
{
id: '16',
el: {
category: 'recycling',
photoUrlsAbove: [ '/assets/images/questions/roklq.png' ],
question: 'Вярно или грешно. Миенето на чинии ръчно хаби почти толкова вода, колкото със съдомиялна машина.',
answer: {
choises: [
'Вярно',
'Грешно',
],
correctChoise: 'Грешно',
}
}
},
];

View File

@ -49,7 +49,7 @@ export class UserdataService {
const cardsRaw = localStorage.cards;
if (cardsRaw) return JSON.parse(cardsRaw);
else {
localStorage.cards = [];
localStorage.cards = JSON.stringify([]);
return [];
}
}
@ -69,7 +69,7 @@ export class UserdataService {
if (saved.includes(id)) throw new Error("Can't add a card that already exists!");
saved = [...saved, id];
localStorage.cards = saved;
localStorage.cards = JSON.stringify(saved);
}
constructor(

Binary file not shown.

After

Width:  |  Height:  |  Size: 655 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 440 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 730 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 569 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 521 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 520 KiB

View File

Before

Width:  |  Height:  |  Size: 917 KiB

After

Width:  |  Height:  |  Size: 917 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 446 KiB