Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Tablica w której pod kolejnymi indeksami przechowujemy identyfikaty kart.
- // Jeśli tablica ma elementy [0,1,2,0,1,2] to znaczy, że karta 0 powtarza się
- // pod indeksami 0 i 3, karta 1 pod indeksami 1 i 4, karta 2 pod indeksami 2 i 5.
- var zawartoscKart;
- // Tablica pamiętająca odsłonięte "nie na stałe" karty, w kolejności ich odsłaniania.
- // ostatnieKarty[0] to indek najstarszej odsłoniętej karty, ostatnieKarty[1] drugiej
- // najstarszej itd.
- var ostatnieKarty;
- // Tablica wartości logicznych (typu "Boolean"). Pod indeksem 'i' pamiętamy, czy karta
- // numer i (zawratoscKart[i]) została już odsłonięta na stałe (jeśli tak to
- // pamiętamy wartość 'true', w przeciwnym przypadku wartość 'false')
- var znalezioneObrazki;
- // N.
- var iloscJednakowychKart;
- /**
- * Funkcja wywoływana na początku gry. Upewnij się, że czyścisz w niej wszystkie wykorzystywane zmienne.
- *
- * @karty - tablica zawierająca rozłożenie obrazków w grze
- */
- function przygotujDaneGry(karty,pIloscJednakowych){
- zawartoscKart = karty;
- ostatnieKarty = [];
- iloscJednakowychKart = pIloscJednakowych;
- znalezioneObrazki = new Array(karty.length).fill(false);
- screen.clear();
- screen.log('Początek gry!');
- }
- /**
- * Funkcja przyjmuje parametry:
- * @indeks - indeks klikniętej karty
- *
- * Zwracane wartości:
- * nic - brak akcji po stronie GUI <zrobione>
- * obroc_aktualna_karte - obraza aktualnie klikniętą kartę <zrobione>
- * obroc_dwie_karty - obraca aktualnie klikniętą kartę oraz najstarszą pokazaną kartę
- * znaleziony_zestaw - jeśli kliknięto znaleziony zestaw kart
- * koniec - koniec gry
- */
- function uzytkownikKliknalNaKarte(indeks){
- var debugMsg ='';
- for(var i=0;i<ostatnieKarty.length;++i){
- debugMsg += ostatnieKarty[i]+",";
- }
- if(uzytkownikKliknalNaTaSamaKarteCoPoprzednio(indeks)===true || uzytkownikKliknalNaJuzZnalezionymObrazku(indeks)===true){
- return "nic";
- }
- screen.log("klik: " + indeks + ", ostatnie: " +debugMsg);
- if(uzytkownikKliknalNaTaSamaKarteCoPoprzednio(indeks)===false || uzytkownikKliknalNaJuzZnalezionymObrazku(indeks)===false){
- ostatnieKarty.push(indeks);
- if(ostatnieKarty.length===N){
- if(saTeSameObrazki()===true){
- zaznaczZnalezioneObrazki();
- if(znalezioneObrazki.every(isTrue)===true){
- return "koniec";
- }
- else{
- zaznaczZnalezioneObrazki()
- ostatnieKarty.length = 0;
- return "znaleziony_zestaw";
- }
- }
- ostatnieKarty.shift();
- return "obroc_dwie_karty";
- }
- return "obroc_aktualna_karte";
- }
- // TODO Kod poniżej jest błędny, musisz napisać go od nowa (wzoruj się na
- // funkcji 'uzytkownikKliknalNaKarte' w zadaniu 2a).
- // weź pod uwagę, że funkcje poniżej mogą ułatwić Ci implementację rozwiązania
- }
- function saTeSameObrazki(){
- if ( ostatnieKarty.length===0){
- return false;
- }
- var first = zawartoscKart[ostatnieKarty[0]];
- var theSame = true;
- screen.log("check: "+first);
- for(var i=1;theSame && i<ostatnieKarty.length;++i){
- theSame = theSame && (first === zawartoscKart[ostatnieKarty[i]]);
- }
- return theSame;
- }
- function uzytkownikKliknalNaTaSamaKarteCoPoprzednio(indeks){
- for(var i=0;i<ostatnieKarty.length;++i){
- if ( indeks === ostatnieKarty[i]){
- return true;
- }
- }
- return false;
- }
- function uzytkownikKliknalNaJuzZnalezionymObrazku(indeks){
- return znalezioneObrazki[indeks];
- }
- function zaznaczZnalezioneObrazki(){
- for(var i=0;i<ostatnieKarty.length;++i){
- znalezioneObrazki[ostatnieKarty[i]] = true;
- }
- }
- function isTrue(checkedItem){
- if(checkedItem===true){
- return true;
- }else{
- return false;
- }
- }
- function StolikDoGry(iloscJednakowychKart){
- this.obrazki = [];
- this.karty = [];
- this.dlugoscKolejki=iloscJednakowychKart-1;
- this.kolejkaObrazkow = [];
- this.iloscJednakowychKart = iloscJednakowychKart;
- this.iloscKlikniec = 0;
- }
- StolikDoGry.prototype.dodajObrazek = function(url){
- for(var i=0;i<this.iloscJednakowychKart;i++){
- this.karty.push(this.obrazki.length);
- }
- this.obrazki.push(url);
- };
- StolikDoGry.prototype.potasuj = function(){
- // Odkomentuj ponizsza linie aby karty byly zawsze tak samo potasowane.
- // return
- for (let i=0; i < this.karty.length-1; ++i) {
- let j = losowaLiczbaCalkowita(i, this.karty.length);
- let k = this.karty[i];
- this.karty[i] = this.karty[j];
- this.karty[j] = k;
- }
- };
- StolikDoGry.prototype.rozdajKarty = function(){
- let stolik = document.getElementById('stolik');
- for (let i=0; i<this.karty.length; ++i) {
- let elementKarty = document.createElement('div');
- elementKarty.stolikDoGry = this;
- elementKarty.obroc = function() {
- if ( contains(this.classList, 'odkryta') ){
- this.classList.remove('odkryta')
- }else{
- this.classList.add('odkryta')
- }
- }
- elementKarty.className = 'karta';
- elementKarty.onclick = obslugaKlikniecia(i);
- stolik.appendChild(elementKarty);
- let awers = document.createElement('img');
- awers.className = 'awers';
- awers.src = this.obrazki[this.karty[i]];
- elementKarty.appendChild(awers);
- let rewers = document.createElement('div');
- rewers.className = 'rewers';
- elementKarty.appendChild(rewers);
- }
- przygotujDaneGry(this.karty, this.iloscJednakowychKart);
- }
- StolikDoGry.prototype.dodajKlikniecie = function(){
- this.iloscKlikniec++;
- }
- StolikDoGry.prototype.dodajKarteDoKolejki = function(karta){
- this.kolejkaObrazkow.push(karta);
- if ( this.kolejkaObrazkow.length > this.dlugoscKolejki){
- return this.kolejkaObrazkow.shift();
- }
- return null;
- }
- StolikDoGry.prototype.czyscKolejke = function(){
- this.kolejkaObrazkow = new Array();
- }
- function losowaLiczbaCalkowita(min, max) {
- let x = Math.random(); // Losowa liczba rzeczywista z zakresu [0, 1)
- x = x * (max-min); // Zakres [0, max-min)
- x = x + min; // Zakres [min, max)
- return Math.floor(x); // Zaokrąglamy w dół do liczby całkowitej, zakres wciąż [min, max)
- }
- function obslugaKlikniecia(nrKarty) {
- return function() {
- kliknietoKarte(nrKarty);
- };
- }
- function kliknietoKarte(nrKarty) {
- let karta = document.getElementsByClassName('karta')[nrKarty];
- stolikDoGry = karta.stolikDoGry;
- let akcja = uzytkownikKliknalNaKarte(nrKarty);
- switch(akcja){
- case "nic":
- return;
- case "obroc_aktualna_karte":
- karta.obroc();
- stolikDoGry.dodajKlikniecie()
- stolikDoGry.dodajKarteDoKolejki(karta)
- document.getElementById("status").innerHTML = "Gdzie może być kolejna karta?"
- break;
- case "obroc_dwie_karty":
- stolikDoGry.dodajKlikniecie()
- karta.obroc();
- var ostatnia = stolikDoGry.dodajKarteDoKolejki(karta);
- if ( ostatnia ){
- ostatnia.obroc()
- }
- document.getElementById("status").innerHTML = "Niestety to nie te."
- break;
- case "znaleziony_zestaw":
- stolikDoGry.dodajKlikniecie()
- karta.obroc()
- stolikDoGry.czyscKolejke()
- document.getElementById("status").innerHTML = "Znalazłaś pasujące karty!"
- return;
- case "koniec":
- stolikDoGry.dodajKlikniecie()
- karta.obroc()
- document.getElementById("status").innerHTML = "Gratulacje! Koniec gry! Obróciłaś karty: "
- + stolikDoGry.iloscKlikniec + " razy.";
- break;
- default:
- alert("Zwrócono nieobsługiwaną wartość: " + akcja);
- break;
- }
- }
- function contains(a, obj) {
- var i = a.length;
- while (i--) {
- if (a[i] === obj) {
- return true;
- }
- }
- return false;
- }
- /**
- * Kod w tym pliku jest odpowiedzialny za dostarczenie możliwości logowania wyniku na ekranie
- */
- function Screen(){
- this.screenElement = document.createElement('pre')
- this.screenElement.style="color: white;"
- }
- Screen.prototype.log = function(wiadomosc){
- this.screenElement.innerHTML += wiadomosc + "\n"
- }
- Screen.prototype.clear = function(){
- this.screenElement.innerHTML = ''
- }
- Screen.prototype.embedd = function(){
- document.body.appendChild(this.screenElement)
- }
- var screen = new Screen();
- screen.embedd();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement