Przejdź do treści

Centrum Kształcenia Zawodowego i Ustawicznego w Mrągowie

JS: Prosta gra

wtorek,

JS: Prosta gra

Prezentowana aplikacja jest bardzo prosta, jednak stanowi krok milowy wobec gier typu „Zgadnij liczbę”. W rozgrywce użytkownik mierzy się z komputerem, zwycięzca określany jest na podstawie wylosowanych kart. Nie uwzględniono żadnego starszeństwa kolorów.

Gra

Kod HTML

Kod HTML to standardowy kontener DIV oraz dwa elementy FIGURE zawierające obraz i jako jego podpis oznaczenie gracza. Dla uatrakcyjnienia wyglądu w demonstracji dołączono także kod CSS, nie został on zaprezentowany, ponieważ nie ma wpływu na działanie kodu JavaScript. Aby odseparować działanie Javascript od innych elementów strony, kontener DIV otrzymał identyfikator (atrybut id).

<div id="gra">
	<figure>
	  <img src="karty/null.png" alt="Karta">
	  <figcaption>Gracz</figcaption>
	</figure>
	<figure>
	  <img src="karty/null.png" alt="Karta">
	  <figcaption>Komputer</figcaption>
	</figure>
	<p>Zagrasz?</p>
	<p><a href="#">Graj!</a></p>
</div>

Kod JavaScript

Sterowanie grą odbywa się za pomocą zdarzenia polegającego na kliknięciu znajdującego się w kontenerze gry odnośnika (wiersz nr 2). Dla ułatwienia implementacji, pliki graficzne poszczególnych kart otrzymały dające się łatwo porównywać nazwy. „9ka” oznacza dziewiątkę karo, „14tr” asa trefl. Jak wspomniano, w grze nie uwzględnia się hierarchii kolorów, jednak mogą one przydać się podczas tworzenia innej aplikacji, dodatkowo pliki muszą mieć unikalną nazwę.

W kolejnym bloku skryptu operacje realizowane oddzielnie dla gracza i dla komputera, co w efekcie ich dwukrotne wywoływanie w różnych kontekstach. Fabryczna metoda splice() obiektu Array posłużyła do usuwania elementów tablicy zawierającej karty. Zwraca ona usunięte elementy w postaci tablicy, w tym przypadku jest to tablica jednolelementowa, bo usuwa się tylko pojedynczy element (drugi argument metody to 1). Aby gra nie była przewidywalna, indeks karty do usunięcia jest losowany. Zwrócone przez metodę elementy zapisywane są w zmiennych a i b. Przy kolejnym kliknięciu wylosowane karty wracają do gry.

W kolejnej fazie osiągany jest efekt wizualny, na podstawie wylosowanych nazw na stronę wstawiane są odpowiednie pliki prezentujące karty. Metoda parseInt() przetwarza argument w postaci łańcucha znaków i zwraca liczbę całkowitą typu integer, w przypadku przyjętej w grze konwencji nazw po prostu „ucina” w nazwie litery. Otrzymane wartości numeryczne można z sobą porównać w celu ustalenia zwycięzcy. W końcowej fazie skryptu do kodu HTML wstawiany jest tekst informujący o rozstrzygnięciu rozgrywki i zwracana jest wartość false, ponieważ kliknięcie odnośnika nie powinno wywoływać jego standardowej funkcji.

window.onload = function() {
  document.getElementById('gra').getElementsByTagName('a')[0].onclick = function() {
  	var a,b,i,k;
	var k = [
		'9ka','9ki','9pi','9tr',
		'10ka','10ki','10pi','10tr',
		'11ka','11ki','11pi','11tr',
		'12ka','12ki','12pi','12tr',
		'13ka','13ki','13pi','13tr',
		'14ka','14ki','14pi','14tr'
	];

	a=k.splice(Math.floor(Math.random() * k.length),1)[0];
	b=k.splice(Math.floor(Math.random() * k.length),1)[0];

	document.getElementById('gra').getElementsByTagName('img')[0].src='karty/'+a+'.png';
	document.getElementById('gra').getElementsByTagName('img')[1].src='karty/'+b+'.png';

	a=parseInt(a);
	b=parseInt(b);

	if(a>b) k = 'Wygrałeś';
	else if(a<b) k = 'Przegrałeś';
	else if(a==b) k = 'Remis';

	document.getElementById('gra').getElementsByTagName('p')[0].innerHTML=k;
	return false;
  }
}

Możliwe usprawnienia gry

Prezentowana gra jest mało ciekawa, można ją trochę uatrakcyjnić, np.:

  • zaimplementować liczniki i tury, dające możliwość ustalenia zwycięzcy dopiero po np. pięciu losowaniach;
  • uwzględniając pierwszą ewentualną modyfikację, można zaimplementować dodatkowo tasowanie i trwałe usuwanie karty po wylosowaniu, wtedy można wykonać grę „Oczko”, „Blackjack” i podobne.
  • uwzględniając poprzednie, można wykonać grę „Wojna” i podobne.

Jak widać, mimo swojej prostoty, prezentowana gra może być punktem wyjścia do otrzymania wielu gier karcianych.

Trzy miesiące temu na naszej stronie…

Artykuł: Intel Core i9

Intel Core i9

Artykuł: Święto Lotnictwa Polskiego

Święto Lotnictwa Polskiego

Artykuł: Sabayon Linux

Sabayon Linux

Artykuł: Władysław Wiśniewski

Władysław Wiśniewski

Artykuł: Quiz: Robert Lewandowski

Quiz: Robert Lewandowski

Artykuł: Bogumił Nowotny

Bogumił Nowotny

Artykuł: Stanisław Wyspiański

Stanisław Wyspiański

Nasze technikum

Technik informatyk

Szkoły dla dorosłych

Nasza szkoła

Pełna oferta edukacyjna

Oferta szkoły