• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Szachy a obiektowy JavaScript.

Object Storage Arubacloud
+1 głos
1,605 wizyt
pytanie zadane 30 listopada 2015 w JavaScript przez Agr Użytkownik (980 p.)

Witam, jako że nauka JS przez pisanie prostych gier wydaje mi się ciekawsza niż przez pisanie skryptów na strony, to postanowiłem tym razem napisać szachy. Pomyślałem że to będzie dobry sposób na poćwiczenie obiekowego JS.  Niestety gdy napisałem jakieś 150 lini i spojrzałem na swój kod poczułem się jak Janusz obiektowości. W uproszczeniu wygląda on tak.

$('img').on('mousedown',function(){
	 var obj = new figura(figure, colour, position);
});


function figura (figure,colour, position) {
	     this.figure = figure;
	     this.colour = colour;
	     this.position = position;
	     this.possibleMoves = function(){ 
		   switch (this.figure){
			 case 'pionek':
              //logika licząca wszystke możliwe ruchy pionka
              break;
              case: 'wieza'
  itd.........

Jak widać po kliknięciu na obrazek figury uruchamia sie funkcja która przekazuje 3 parametry do konstruktora,  na podstawie którego, jest tworzony obiekt który ma obliczone wszystkie możliwe ruchy

Mógłby ktoś powiedzieć czy to ma w ogóle jakiś sens, żeby w konstruktorze robić takiego switcha?

A jeśli nie bardzo to jak wszystko sensownie napisać. Z góry dzięki za pomoc i jeśli komuś mózg wypadł po spojrzeniu na kod to jedynie mogę się usprawiedliwić że to moje pierwsze zetknięcie z programowaniem obiektowym.

4 odpowiedzi

+2 głosów
odpowiedź 30 listopada 2015 przez event15 Szeryf (93,790 p.)

żeby w konstruktorze robić takiego switcha?

 Akurat w konstruktorze unikałbym stosowania switchów i jakichkolwiek instrukcji warunkowych. Nie wiem co by musiało być żeby tam dać takie coś. 

Janusz obiektowości

Genialne laugh 

komentarz 30 listopada 2015 przez ZakosiliMiNeta Nałogowiec (30,870 p.)

Fajnie że autor ma poczucie humorusmiley taka podświadoma motywacja laugh

+2 głosów
odpowiedź 30 listopada 2015 przez Comandeer Guru (601,450 p.)

Widziałbym co najmniej 3 klasy:

  • Game → cały obiekt operujący grą: odpala grę, sprawdza poprawność ruchy, pilnuje tur graczy itd; tutaj wypadałoby zaimplentować jakiś prosty event loop
  • Board → czyli klasa przedstawiająca planszę, w tym również jej renderowanie (rendery mogą być osobnymi klasami)
  • Figure → figura szachowa; każda figura rzecz jasna dziedziczyła by po tej klasie

Dodatkowo poczytaj na MDN o prototypach, bo bez tego nie da się napisać nic sensownego w JS w OOP. A jak już poznasz prototypy, to poczytaj sobie o klasach w ES6.

Co do switcha w konstruktorze: cała ta metoda powinna zostać przeniesiona do prototypu. Konstruktor jest od deklarowania inicjalnego stanu obiektu, nie definiowania jego metod.

komentarz 1 grudnia 2015 przez Schizohatter Nałogowiec (39,600 p.)
W takim razie sposób wykonywania ruchu deklarować przy figurze (bo to funkcja figury), czy w game, a przy figurze tylko jej typ? ( ͠° ͟ʖ ͡°)

Ja bym zrobił move() w Game, a sposób ruchu w figurze.
komentarz 1 grudnia 2015 przez Comandeer Guru (601,450 p.)
Ruch jest metodą figury, ale to gra kontroluje kiedy dany ruch zostanie wykonany, prawda? ;)
0 głosów
odpowiedź 30 listopada 2015 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
Na wstępie powiem tak na JS się nie znam ale powiem swoje przemyślenia, jeszcze podkreślę, że OP mi troszkę przyrdzewiał bo go stosunkowo długo nie używałem.

Przechodząc do meritum sprawy ja bym zrobił to tak by zrobić klasę do każdego bierka ( czyli wieża, pionek itd. ), klasę abstrakcyjną na figurę oraz tablice [8][8] ( jako planszę ) gdzie będzie trzymana klasa figury lub None w poszczególnym polu i potem zrobienie logiki gry czyli ruchy, bicia itd.
0 głosów
odpowiedź 2 grudnia 2015 przez Agr Użytkownik (980 p.)
Dzięki wszyskim za odpowiedź, tak właśnie podejrzewałem, że mój kod delikatnie mówiąc nie jest zbyt dobrze przemślany. Najrozsądniej chyba będzie na jakiś czas przerwać pisanie i zająć się czytaniem.

Podobne pytania

0 głosów
1 odpowiedź 1,175 wizyt
pytanie zadane 30 marca 2019 w C i C++ przez waslaw89 Nowicjusz (150 p.)
0 głosów
2 odpowiedzi 134 wizyt
0 głosów
1 odpowiedź 233 wizyt
pytanie zadane 17 marca 2019 w C i C++ przez MrChick888 Obywatel (1,020 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...