En aquesta secció, ens centrarem en la implementació pràctica dels conceptes físics apresos al llarg del curs i en com realitzar proves efectives per assegurar que el nostre projecte final funcioni correctament. Aquesta etapa és crucial per garantir que el joc no només sigui divertit, sinó també realista i lliure de bugs.
- Implementació de la Física en el Projecte
 
1.1. Integració dels Conceptes Físics
Abans de començar amb la implementació, és important revisar els conceptes físics que hem après i com aplicar-los al nostre projecte. Aquí teniu una llista de verificació per assegurar-vos que no us deixeu res:
- Cinemàtica i Dinàmica: Assegureu-vos que els moviments dels objectes segueixin les lleis de Newton i altres principis de la cinemàtica.
 - Col·lisions: Implementar la detecció i resolució de col·lisions per garantir que els objectes interactuïn correctament.
 - Rigid Bodies: Utilitzar simulacions de rigid bodies per objectes sòlids.
 - Partícules: Aplicar sistemes de partícules per efectes visuals com foc, fum o aigua.
 - Física Avançada: Integrar elements com soft bodies o ragdoll physics si el vostre projecte ho requereix.
 
1.2. Estructura del Codi
Organitzar el codi de manera clara i modular és essencial per facilitar la implementació i el manteniment. Aquí teniu una estructura suggerida:
project/ │ ├── assets/ │ ├── models/ │ ├── textures/ │ └── sounds/ │ ├── scripts/ │ ├── physics/ │ │ ├── kinematics.js │ │ ├── collisions.js │ │ └── rigidBodies.js │ │ │ ├── particles/ │ │ ├── particleSystem.js │ │ └── fluidSimulation.js │ │ │ ├── advanced/ │ │ ├── softBodies.js │ │ └── ragdoll.js │ │ │ └── main.js │ └── index.html
1.3. Exemple de Codi
A continuació, es mostra un exemple de com implementar la detecció de col·lisions en JavaScript:
// scripts/physics/collisions.js
class Collider {
    constructor(object1, object2) {
        this.object1 = object1;
        this.object2 = object2;
    }
    detectCollision() {
        const dx = this.object1.x - this.object2.x;
        const dy = this.object1.y - this.object2.y;
        const distance = Math.sqrt(dx * dx + dy * dy);
        if (distance < this.object1.radius + this.object2.radius) {
            return true;
        }
        return false;
    }
    resolveCollision() {
        if (this.detectCollision()) {
            // Simple elastic collision response
            const tempVx = this.object1.vx;
            const tempVy = this.object1.vy;
            this.object1.vx = this.object2.vx;
            this.object1.vy = this.object2.vy;
            this.object2.vx = tempVx;
            this.object2.vy = tempVy;
        }
    }
}
export default Collider;
- Proves del Projecte
 
2.1. Tipus de Proves
És important realitzar diferents tipus de proves per assegurar que el projecte funcioni correctament:
- Proves Unitàries: Provar cada mòdul de codi per separat per assegurar que funcionen correctament.
 - Proves d'Integració: Assegurar que els diferents mòduls funcionin bé junts.
 - Proves de Rendiment: Verificar que el joc funcioni de manera fluida i sense retards.
 - Proves de Jugabilitat: Assegurar que el joc sigui divertit i que la física no interfereixi negativament en l'experiència del jugador.
 
2.2. Eines de Prova
Algunes eines que podeu utilitzar per realitzar proves són:
- Unit Testing Frameworks: Mocha, Jasmine
 - Performance Testing Tools: WebPageTest, Lighthouse
 - Debugging Tools: Chrome DevTools, Firefox Developer Tools
 
2.3. Exemple de Prova Unitària
A continuació, es mostra un exemple de prova unitària per a la detecció de col·lisions utilitzant Mocha:
// test/collisions.test.js
import { expect } from 'chai';
import Collider from '../scripts/physics/collisions.js';
describe('Collider', () => {
    it('should detect a collision between two objects', () => {
        const object1 = { x: 0, y: 0, radius: 10, vx: 1, vy: 1 };
        const object2 = { x: 5, y: 5, radius: 10, vx: -1, vy: -1 };
        const collider = new Collider(object1, object2);
        const result = collider.detectCollision();
        expect(result).to.be.true;
    });
    it('should not detect a collision when objects are far apart', () => {
        const object1 = { x: 0, y: 0, radius: 10, vx: 1, vy: 1 };
        const object2 = { x: 50, y: 50, radius: 10, vx: -1, vy: -1 };
        const collider = new Collider(object1, object2);
        const result = collider.detectCollision();
        expect(result).to.be.false;
    });
});2.4. Proves de Jugabilitat
Per a les proves de jugabilitat, podeu seguir aquests passos:
- Crear Escenaris de Prova: Definir situacions específiques dins del joc per provar.
 - Reclutar Beta Testers: Convidar jugadors a provar el joc i proporcionar feedback.
 - Recollir i Analitzar Dades: Observar com els jugadors interactuen amb el joc i identificar problemes potencials.
 - Iterar i Millorar: Fer ajustos basats en el feedback rebut i repetir el procés.
 
- Conclusió
 
La implementació i les proves són passos crítics en el desenvolupament del vostre projecte final. Assegureu-vos de seguir una estructura clara, utilitzar eines adequades i realitzar proves exhaustives per garantir que el vostre joc funcioni correctament i proporcioni una experiència de joc satisfactòria. Amb aquests passos, estareu ben preparats per presentar un projecte final de qualitat.
Física de Videojocs
Mòdul 1: Introducció a la Física en Videojocs
Mòdul 2: Cinemàtica i Dinàmica
- Moviment Rectilini Uniforme (MRU)
 - Moviment Rectilini Uniformement Accelerat (MRUA)
 - Lleis de Newton
 - Moviment Circular
 
Mòdul 3: Col·lisions i Respostes
Mòdul 4: Física de Rigid Bodies
- Introducció a Rigid Bodies
 - Simulació de Rigid Bodies
 - Interaccions entre Rigid Bodies
 - Constraints i Joints
 
