Giter Site home page Giter Site logo

jdisgames-2020's People

Contributors

blond11516 avatar francishamel avatar lamachinecaron avatar res260 avatar zelarpmaster avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

jdisgames-2020's Issues

Fix real time stats badges in readme

README real time stats badges are currently broken because they rely on GitLab artifacts urls. Gonna have to figure out how to get the artifacts from GitHub actions. (Also the badges are not event generated right now)

Figure out ce qu'il rest à faire pour terminer le jeu

Features actuelles

  • tank purchase

    • speed
    • fire rate
    • projectile damage
    • max hp
    • body damage
    • hp regen
  • set target

  • set destination

  • shoot

  • collisions

  • hp regen

  • débris

  • respawn after death

  • time corrections

  • score

  • experience -> upgrade tokens

  • main and secondary game

    • start, stop, kill, spectate
  • team registration

  • scoreboard

  • frontend

    • spectate
      • follow team

Trucs à refactor

  • phoenix best practices
  • ecto best practices
  • release best practices (config)
  • architecture (boundary)
  • tests best practices

Trucs à faire

  • js starter pack?
  • nouvelles upgrades?
  • upgrades majeures?

Repenser le fire rate

les autres upgrades ont des diminuting returns, mais pas le fire rate (c'est le même problème que le Cooldown reduction, passer de 0% CDR à 20%CDR donne un moins bon résultat que de passer de 20%CDR à 40%CDR, même si les deux sont un bon de 20%CDR)

Déplacer fabric en dépendance npm

Présentement, fabric est téléchargé par le client via une balise script dans ./lib/diep_io_web/templates/page/spectate.html.leex`. Il faudrait plutôt l'installer comme dépendance npm afin de centraliser toutes les dépendances au même endroit.

Valider le format des actions envoyées par les bots

En ce moment rien ne garantit le format des actions envoyées au serveur par les bots. En cas d'action invalide, le process du channel lève une ArgumentError et plante.

Il faudrait au moins valider le format des actions dans les clients, mais idéalement dans le serveur aussi de façon à pouvoir retourner une erreur claire.

Réusiner l'implémentation Python de channels

Notre implémentation homemade des channels leak pas mal de détails d'implémentation dans les autres couches. Il y a un risque que ça nous complique la vie si on doit faire des quick fixes dans le starter pack pendant la compé.

Je propose de réusiner ça un peu pour que ça ressemble plus à la lib JS.

Enlever gettext

Gettxt est setup dans le projet mais n'est pas utilisé. Il faudrait l'enlever pour réduire la charge de maintenance.

Real time constraints test fail

The real time constraint for broadcast standard_deviation currently fails. I suspect this is because of the recent decoupling of game logic tick rate and client update rate.

Since client broadcasts are currently emitted by the gameloop, the client update rate can only be respected if it is a divisor of the game logic tick rate.

We should probably use separate processes for handling these two loops.

Some collision tests fails with specific seeds

Some collision tests fail with specific seeds:

  • 284189

    Test output
    18:05:40.441 [info]  Already up
    Excluding tags: [:RT]
    
    ..................................................................................
    
    1) test handle_collisions/1 does not decrease hp of tank hit by it's own projectile (GameStateTest)
      test/diep_io/core/game_state_test.exs:217
      Assertion with == failed
      code:  assert Map.fetch!(updated_game_state.tanks(), @user_id) == tank
      left:  %Diep.Io.Core.Tank{body_damage: 20, cannon_angle: -132.84216689386466, cooldown: 25, destination: nil, fire_rate: 25, has_died: false, hp_regen: 0.4, id: 420, max_hp: 100, name: "SomeUsername", position: {7851, 8412}, projectile_damage: 20, speed: 10, target: {2411, 2546}, upgrade_levels: %{body_damage: 0, fire_rate: 0, hp_regen: 0, max_hp: 0, projectile_damage: 0, speed: 0}, current_hp: 90, experience: 25, score: 25, upgrade_tokens: 2}
      right: %Diep.Io.Core.Tank{body_damage: 20, cannon_angle: -132.84216689386466, cooldown: 25, destination: nil, fire_rate: 25, has_died: false, hp_regen: 0.4, id: 420, max_hp: 100, name: "SomeUsername", position: {7851, 8412}, projectile_damage: 20, speed: 10, target: {2411, 2546}, upgrade_levels: %{body_damage: 0, fire_rate: 0, hp_regen: 0, max_hp: 0, projectile_damage: 0, speed: 0}, current_hp: 100, experience: 0, score: 0, upgrade_tokens: 0}
      stacktrace:
        test/diep_io/core/game_state_test.exs:226: (test)
    
    ................................................................................
    
    Finished in 2.5 seconds
    165 tests, 1 failure, 2 excluded
    
    Randomized with seed 284189
    [os_mon] memory supervisor port (memsup): Erlang has closed
    [os_mon] cpu supervisor port (cpu_sup): Erlang has closed
    
  • 440815

    Test output
    08:24:44.060 [info]  Already up
    Excluding tags: [:RT]
    
    ......................................................................................
    
    1) test handle_collisions/1 decreases hp of all tanks hit by projectiles (GameStateTest)
      test/diep_io/core/game_state_test.exs:208
      Assertion with == failed
      code:  assert Map.fetch!(updated_game_state.tanks(), tank.id()).current_hp() == Tank.hit(tank, tank.projectile_damage()).current_hp()
      left:  70
      right: 80
      stacktrace:
        test/diep_io/core/game_state_test.exs:213: (test)
    
    ............................................................................
    
    Finished in 2.3 seconds
    165 tests, 1 failure, 2 excluded
    
    Randomized with seed 440815
    [os_mon] memory supervisor port (memsup): Erlang has closed
    [os_mon] cpu supervisor port (cpu_sup): Erlang has closed
    
  • 795773

    Test output
    08:28:54.965 [info]  Already up
    Excluding tags: [:RT]
    
    ......................................................................................
    
    1) test handle_collisions/1 does not decrease hp of tank hit by it's own projectile (GameStateTest)
       test/diep_io/core/game_state_test.exs:217
       Assertion with == failed
       code:  assert Map.fetch!(updated_game_state.tanks(), @user_id) == tank
       left:  %Diep.Io.Core.Tank{body_damage: 20, cannon_angle: 173.92307439303102, cooldown: 25, destination: nil, experience: 0, fire_rate: 25, has_died: false, hp_regen: 0.4, id: 420, max_hp: 100, name: "SomeUsername", position: {6958, 7870}, projectile_damage: 20, score: 0, speed: 10, target: {5070, 8071}, upgrade_levels: %{body_damage: 0, fire_rate: 0, hp_regen: 0, max_hp: 0, projectile_damage: 0, speed: 0}, upgrade_tokens: 0, current_hp: 90}
       right: %Diep.Io.Core.Tank{body_damage: 20, cannon_angle: 173.92307439303102, cooldown: 25, destination: nil, experience: 0, fire_rate: 25, has_died: false, hp_regen: 0.4, id: 420, max_hp: 100, name: "SomeUsername", position: {6958, 7870}, projectile_damage: 20, score: 0, speed: 10, target: {5070, 8071}, upgrade_levels: %{body_damage: 0, fire_rate: 0, hp_regen: 0, max_hp: 0, projectile_damage: 0, speed: 0}, upgrade_tokens: 0, current_hp: 100}
       stacktrace:
         test/diep_io/core/game_state_test.exs:226: (test)
    
    ............................................................................
    
    Finished in 2.3 seconds
    165 tests, 1 failure, 2 excluded
    
    Randomized with seed 795773
    [os_mon] memory supervisor port (memsup): Erlang has closed
    [os_mon] cpu supervisor port (cpu_sup): Erlang has closed
    

Il est possible de gagner des points dans la hot zone même si plusieurs joueurs y sont présents

Le problème est dans entity grid, on considère seulement la cell qui contient directement l'entité et les 9 cells directement adjacentes. La hot zone est beaucoup plus grosse que ça, donc si on est sur le bord de la hot zone, on est pas considéré par l'algo de collision.

Il faudrait modifier l'algo de construction de la grille d'entités pour supporter des entités qui peuvent être plus grandes qu'une cellule.

Impémenter une "hot zone"

Ajouter un système de "hot zone"/roi de la montagne.

Idées d'implémentation:

  • spawn une zone at random
  • on gagne des points chaque seconde qu'on est à l'intérieur/après être resté dedans X secondes
  • la zone disparait après un certain temps
  • no points si ya plusieurs personnes dans la zone
  • ça pourrait aussi être une zone statique sur la map
  • pourrait avoir des zones qui donnent des points et d'autres qui donnent de l'xp

Inscrire des équipes

Right now on seed des users bidons sans nom précis, ça va prendre un mécanisme pour inscrire des users avec des bons nom de team et leur partager leur secret key

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.