Differences

This shows you the differences between two versions of the page.

Link to this comparison view

spg:teme:2021:01 [2021/11/24 18:44]
andrei.lambru
— (current)
Line 1: Line 1:
-<​hidden>​ 
-==== Tema 1 - Joc de dame ==== 
  
-  * **Responsabili:​** 
-  * **Lansare:​** 
-  * **Termen de predare:** 
-  * **Regulament:​** https://​ocw.cs.pub.ro/​courses/​spg/​regulament_general 
-  * **Notă: Orice informație ce nu a fost acoperită în acest document este la latitudinea voastră!** 
- 
-În cadrul acestei teme va trebui să implementați un joc simplu de dame. Un demo ce înfățișează o posibilă implementare îl puteți viziona în continuare: 
- 
-<​html>​ 
-<p style="​text-align:​center;​margin:​auto;">​ 
-<iframe width="​560"​ height="​315"​ src="​https://​www.youtube.com/​embed/​cTGfcyJUHnY"​ frameborder="​0"​ allow="​accelerometer;​ autoplay; clipboard-write;​ encrypted-media;​ gyroscope; picture-in-picture"​ allowfullscreen></​iframe>​ 
-</p> 
-</​html>​ 
- 
-=== Logica jocului === 
- 
-Regulile pe care le aveți de implementat nu trebuie să acopere toate mecanicile folosite în jocul real de dame, ci doar un subset de mișcări simple. Jocul începe într-o configurație prezentată în imaginea de mai jos. Pentru simplitate, ambele seturi de piese vor fi controlate de către jucător (nu trebuie sa implementați un algoritm pentru adversar). În fiecare tură, jucătorul poate deplasa o singură piesă. Scopul jocului este capturarea tuturor pieselor adversarului. Subsetul de mișcări pe care le aveți de implementat sunt: 
- 
-   * Deplasarea normală (fără atac): Piesele pot fi deplasate numai pe diagonală, in căsuțele adiacente (cele mai apropiate), atât timp cât respectivele căsuțe nu sunt ocupate de alte piese. Deplasarea se va realiza numai în față (către piesele adversarului),​ astfel încât nu vor exista mișcări valide pe diagonelele din spatele piesei. 
- 
-   * Capturarea pieselor: Jucătorul poate captura piesele adversarului care sunt situate în căsuțele adiacente pe diagonalele din față (relativ la piesa selectată). Piesa jucătorului trebuie sa sară peste piesa adversarului (deplasare 2 căsuțe pe diagonală),​ iar capturarea se poate realiza atât timp cat locația destinație nu este ocupată de alta piesă. În urma capturării piesei, aceasta dispare de pe tabla de joc. 
- 
-Nu trebuie să implementați atacuri multiple sau alte reguli de joc pentru funcționalitățile obligatorii. 
- 
-**<poza configuratie initiala, poza deplasare normala, poza atac>** 
- 
-=== Obiectele 3D === 
- 
-Obiectele pe care trebuie să le realizați sunt tabla de joc si piesele pentru fiecare adversar. ​ 
- 
-   * Generarea tablei de joc 
- 
-Tabla de joc va avea un layout de 8x8 (64 de căsuțe). Va trebui să implementați un mecanism pentru selectarea si deplasarea pieselor folosind cursorul, așadar fiecare căsuța va fi realizată plecând de la un mesh de quad. Căsuțele vor fi colorate alternativ și translatate corespunzător configurației. 
- 
-   * Generarea pieselor de joc. Suprafețe de rotație 
- 
-Pentru generarea pieselor de joc se vor folosi cel puțin 3 suprafețe de rotație. Două exemple de astfel de suprafețe pot fi văzute în imaginea de mai jos. Acestea reprezintă geometria pieselor din demo. Cele 3 suprafețe de rotație care compun geometria obiectului sunt marcate prin culori diferite. Curba utilizată pentru obținerea suprafeței se află în stânga fiecărei imagini. Pentru a calcula pozițiile punctelor de control ale curbei bezier se pot folosi aplicații online, precum cea de aici: https://​www.desmos.com/​calculator/​d1ofwre0fr. 
- 
-{{ :​spg:​teme:​2021:​suprafata-rotatie.png?​800|}} 
- 
-<note important>​ 
-Nu trebuie să fie create piesele din demo. Aveți libertate asupra geometriei finale a pieselor. Singura observație este că fiecare trebuie să conțină cel puțin 3 suprafețe de rotație. 
-</​note>​ 
- 
-   * Reflexia tablei și a pieselor de joc 
- 
-Mediul înconjurător se va reflecta pe suprafața tablei și a pieselor de joc. Așadar, va fi necesar să implementați un cubemap texturat. Pentru simplitate, reflexia se va realiza utilizând numai acest cubemap (nu trebuie să implementați reflexia dintre piese sau self-reflection). 
- 
-{{ :​spg:​teme:​2021:​gif-reflections.gif?​400 |}} 
- 
-=== Mecanica pentru deplasarea pieselor === 
- 
-   * Selectarea pieselor de joc 
- 
-**<Text Cristi. Sistem de selectare folosind mouse-ul/​highlight pe tabla de joc...>​** 
- 
-   * Deplasarea pieselor de joc 
- 
-Aceasta se va realiza printr-o animație continuă. În momentul în care a fost selectată căsuța destinație (prin click-stânga),​ piesa se va deplasa pe o traiectorie definită de voi (de exemplu sinusoidală,​ vezi demo). Atât timp cât piesa își desfășoară animația de mișcare, jucătorul nu va putea selecta/​deplasa alte piese de pe tabla de joc. 
- 
-=== Sistem de particule === 
- 
-Capturarea unei piese va fi recompensată de un efect de “spulberare”. Pentru a obține acest efect, în momentul în care piesa adversarului dispare (la finalizarea animației de capturare), va trebui să implementați un sistem de particule care sa emită din poziția piesei capturate si pe direcția normală la tabla de joc. 
- 
-{{ :​spg:​teme:​2021:​gif-particles.gif?​400 |}} 
- 
-=== Notare (150p) === 
-   * Regulile de joc (15p) 
-   * Obiecte (65p) 
-     * Tabla de joc (10p) 
-     * Piesele primului jucător, generare folosind suprafețe de rotație (20p) 
-     * Piesele celui de-al doilea jucător, generare folosind suprafețe de rotație (20p) 
-     * Cubemap (5p) 
-   * Reflexia (20p) 
-     * Tablei de joc (10p) 
-     * Pieselor de joc (10p) 
-   * Mecanică deplasare si capturare (50p) 
-     * Selecția pieselor (20p)  
-       * Highlight piese (10p) 
-       * Highlight căsuțe (10p) 
-     * Deplasarea pieselor (animația) (10p) 
-     * Efect capturare piese (sistem de particule) (20p)  
- 
-=== Bonusuri Posibile === 
- 
-   * Reguli de joc mai avansate 
-   * Logica de joc (AI) pentru adversar 
-   * Model de reflexie mai complex, de exemplu Screen Space Reflections (SSR) 
-   * Animatia formei/​texturii piesei (folosing shadere) cat timp este selectata. 
-   * Implementarea unui skydome în locul skybox-ului 
-   * Alte efecte de post-procesare,​ exemple: Depth of Field (DoF), Bloom, Screen Space Ambient Occlusion (SSAO) 
- 
-=== Indicații Suplimentare === 
- 
-Tema va fi implementată în OpenGL și C++. Este indicat să folosiți framework-ul și Visual Studio. ​ 
- 
-Pentru implementarea temei, in folderul __**src/​lab_m2**__ puteti crea un nou folder, de exemplu Tema1, cu fisierele Tema1.cpp si Tema1.h (pentru implementare POO, este indicat sa aveti si alte fisiere). Pentru a vedea fisierele nou create in Visual Studio in Solution Explorer, apasati click dreapta pe filtrul lab_m2 si selectati Add→New Filter. Dupa ce creati un nou filtru, de exemplu Tema1, dati click dreapta si selectati Add→Existing Item. Astfel adaugati toate fisierele din folderul nou creat. In fisierul lab_list.h trebuie adaugata si calea catre header-ul temei. De exemplu: #include “lab_m2/​Tema1/​Tema1.h” 
- 
-=== Arhivarea ​ proiectului === 
- 
-<​note>​ 
-  * In mod normal arhiva trebuie sa contina toate resursele necesare compilarii si rularii 
-  * inainte de a face arhiva asigurati-va ca ati curatat proiectul Visual Studio: 
-      * click dreapta pe proiect in **Solution Explorer** -> **Clean Solution** 
-      * si stergeti folderul __**/​build/​.vs**__ (daca nu il vedeti, **este posibil sa fie ascuns**) 
-    * SAU stergeti complet folderul __**/​build**__ 
-  * in cazul in care arhiva tot depaseste limita de 50MB (nu ar trebui), puteti sa stergeti si folderul __**/​deps**__ sau __**/​assets**__ intrucat se pot adauga la testare. Nu este recomandat sa faceti acest lucru intrucat ingreuneaza mult testarea in cazul in care versiunea curenta a librariilor/​resurselor difera de versiunea utilizata la momentul scrierii temei. 
-</​note>​ 
- 
-</​hidden>​ 
spg/teme/2021/01.1637772272.txt.gz · Last modified: 2021/11/24 18:44 by andrei.lambru
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0