DEV Community

Cover image for Splinter Cell + Objetos
Raphael da Silva
Raphael da Silva

Posted on • Updated on

Splinter Cell + Objetos

Anos atrás eu criei algumas classes para representar o jogo Splinter Cell através de objetos e com um uso de interfaces para mostrar tipos sendo compartilhados. Basicamente, é a representação de elementos (personagens e equipamentos) do jogo Splinter Cell da ubisoft através do paradigma da orientação a objetos.

Por exemplo, Sam Fisher (o protagonista do jogo) é composto por nightvision googles (óculos e visão noturna) com injeção de dependência e implementa a interface que define um agente especial.

<?php

namespace SplinterCellOOP;

use SplinterCellOOP\ThirdEchelonAgent;
use SplinterCellOOP\FourthEchelonAgent;
use SplinterCellOOP\Goggles;

/**
 *
 * @author Raphael da Silva
 *
 */
class SamFisher implements FourthEchelonAgent
{

    private $goggles;

    public function __construct(
        Goggles $goggles
    ){

        $this->goggles = $goggles;

    }

    public function actStealth()
    {

        $this->goggles->enable();

    }

}
Enter fullscreen mode Exit fullscreen mode

Ao implementar a inteface FourthEchelonAgent, o personagem também implementa a interface ThirdEchelonAgent, pois a primeira é uma extensão da segunda, já que na história do jogo, a FourthEchelon é a sucessora da ThirdEchelon.

<?php

namespace SplinterCellOOP;

use SplinterCellOOP\ThirdEchelonAgent;

/**
 *
 * @author Raphael da Silva
 *
 */
interface FourthEchelonAgent extends ThirdEchelonAgent
{

}
Enter fullscreen mode Exit fullscreen mode

Além de Sam Fisher, outros agentes podem implementar a mesma interface, pois fazem parte da mesma organização (sendo do mesmo tipo).

<?php

namespace SplinterCellOOP;

use SplinterCellOOP\FourthEchelonAgent;
use SplinterCellOOP\Weapon;
use SplinterCellOOP\Goggles;

/**
 *
 * @author Raphael da Silva
 *
 */
class IssacBriggs implements FourthEchelonAgent
{

    private $weapon;
    private $goggles;

    public function __construct(
        Weapon $weapon,
        Goggles $goggles
    ){

        $this->weapon  = $weapon;
        $this->goggles = $goggles;

    }

    public function actStealth()
    {

        $this->goggles->enable();
        $this->weapon->use();

    }

}
Enter fullscreen mode Exit fullscreen mode

É isso! Segue o link para todo o código no repositório.

Top comments (0)