An open API service indexing awesome lists of open source software.

https://github.com/laggui/predator-simulator


https://github.com/laggui/predator-simulator

Last synced: about 2 months ago
JSON representation

Awesome Lists containing this project

README

        

# predator-simulator

Projet dans le cadre du cours de conception et analyse orientée objet.

## À PRENDRE EN CONSIDÉRATION QUAND VOUS "PULLEZ" LES CHANGEMENTS DU PROJET

Il semble y avoir un léger problème avec la compatibilité du projet sur différentes machines. En gros, deux problèmes peuvent causer des problèmes à la compilation:
- Version SDK du projet. On a peut-être des versions différentes, donc changer dans les propriétés du projet: (right-click sur le projet) Properties > Configuration Properties > General > Windows SDK Version: sélectionnez la vôtre.
- Propriétés Qt.
- Premièrement, sélectionnez la version de Qt que vous avez pour le projet: (right-click sur le projet) Qt Properties > Properties tab > Version: sélectionnez la vôtre.
- Deuxièmement, sélectionnez les modules Qt à utiliser: (right-click sur le projet) Qt Properties > Qt Modules tab: cochez Core, GUI et Widgets.

## Entités Dynamiques

QRunner, QPredator et QSuicideBomber

## Entités Statiques

QWall et QCloningZone.

## Act Of God

L'act of god va geler le déplacement des prédateurs pour un temps donné.

## Paramètres Initiaux

On doit avoir des sélecteurs qui permettent de définir le nombre de QRunner, QPredator et QSuicideBomber (au minimum). Si on veut, on peut aussi définir des attributs initiaux pour ces classes (ex: vitesse, dommage).

## Gestion de collision (interaction)

Exemple sua' coche: http://doc.qt.io/qt-5/qtwidgets-graphicsview-collidingmice-example.html. Par contre, dans notre cas, on n'a pas besoin d'éviter les collisions donc on peut tout simplement vérifier quand une collision se passe et effectuer les changements dans ce cas-ci.

Pour ce faire, dans la méthode *advance()* des items à action dominante (ex: les prédateurs **endommagent** les runners - action dominante), on vérifie à l'aide de [QGraphicsItem::collidingItems](http://doc.qt.io/qt-5/qgraphicsitem.html#collidingItems).

Pseudo code:

```cpp
void NotreClasse::advance(int phase)
{
// Récupérer les items qui sont en collision
QList collidingItems = collidingItems(); // Par défaut: les items qui overlap avec la shape de l'item et les items qui touchent au contour de l'item

// Itérer à travers les items et vérifier leur type
foreach (QGraphicsItem *item, collidingItems) {
if (auto classeUn = dynamic_cast(item)) {
...
}
else if (auto classeDeux = dynamic_cast(item)) {
...
}
...
}

}
```

## TO-DO

- [x] PredatorSimulator avec ActOfGod
- [x] QBasicItem
- [x] QWall
- [x] QCloningZone
- [x] QDynamicObject
- [x] QRunner
- [x] QPredator
- [x] QSuicideBomber
- [x] QEcosytem

- [x] **Rapport**
- [x] **UML**