Giter VIP home page Giter VIP logo

tank's Introduction

Tank Game

Latest unstable build Latest release

GitHub license Github All Releases

Windows Linux macOS

This game is some kind of a clone of the game Cannonhill based on Monogame using the OpenGL Rendering engine. The game can be played on Mac, Linux and Windows.

Used Technologies and Software

This project is based on the MonoGame framework. The graphics (Spritesheets) are created with the software Aseprite. The sound effects, like the explosions are created with Bfrx or Chiptone. The music was created with Bosca Ceoil. The game is getting developed on Windows with Visual Studio 2019/2022.

External resources

Beside the Technologie and software listed above the following dependencies are integrated into the game.

The VT323 font is used for all the text in the game.

Get a playable build

Right now there is no stable release. The project will be packed with each push to the devlop branch.

To find a build to download and test the game please go to the release page and download the version for your operation system. Those builds are only really tested by me for Windows so if it is not starting on another operation system feel free to create an issue so I can take a look. I will not be able to test the game on MacOs.

Right now the builds are zipped so you will need to unpack it and search for the Tank or Tank.exe file.

On Windows you should be able to click the Tank.exe and the game should start.

Starting the game on Linux

On Linux you will need to run sudo chmod +x Tank and start it with ./Tank while being in the folder of the build.

Controls

Right now there is nothing changeable inside the game and nothing is getting shown. The controls are the following

  • W/S -> Increase/Decrease strength for shooting
  • A/D -> Move Barrel to left or right
  • Space -> Shoot

Keep in mind that right now there is no visual to see the barrel position. The strength can be seen on the bar to the right of the screen.

Important

The settings for the game will be saved in your Application folder. It will create a folder there with some files in it, feel free to delete it to reset your settings or if you do not want to play the game anymore.

License

The project is licensed with the MIT.

Contributors

GitHub Contributors Image

tank's People

Contributors

xanatosx avatar

Stargazers

 avatar  avatar

Watchers

 avatar

tank's Issues

Adding the possibilities for effects

It would be a nice addition if we could apply affects to players. As example some kind of acid which damage your vehicle every time your round begins

This effects could be negative or positive. Maybe they could be triggered by getting hit by an projectile or by using some sort of item.

[FEATURE] Add proper aseprite file import

Is your feature request related to a problem? Please describe.
Add the possiblity to use the aseprite json array export to fully descripe spritesheets

Describe the solution you'd like
A way to import those files and be ready to use them right away

Describe alternatives you've considered

Additional context

Rework the projectile classes

At the moment it is not possible to include projectiles with different effects or behavior. To fulfill this requirement it is necessary to rework the class or structure

Rework terrain data structure

Right now the terrain consists of an array with Color as content. This should be changed to a class/struct with mutliple fields.

The new approach would allow to define more data per pixel, such as a type or a hardness. This allows for more interactions with the terrain.

Rework the GUI system

The GUI system should be changed so that everything is based on the same interface. With this change we could use a single list to store all the different GUI objects.

This will clean up a lot of messy code in the screens.

[FEATURE] Add version of build to the game

Is your feature request related to a problem? Please describe.

Describe the solution you'd like
The version of the build displayed in the corner of the main menu to help with creating bug reports.

#71 could be important for this ticket

Describe alternatives you've considered

Additional context

Rework the entity classes

At the moment the entity classes are so badly written that implementing an AI is extremly difficult. The whole entity structure should be refactored and decoupled for simpler improving later on.

Parts of the screen not visible

It looks like there is a problem with the view port class, if you move or resize the screen it can happen that the left side is not visible anymore.

Before moving the window

grafik

After moving the window

grafik

[FEATURE] use new aseprite spritesheet classes for animation

Is your feature request related to a problem? Please describe.
Since the new aseprite #60 import is getting finished slowly the animation system should switch to the new data.

Describe the solution you'd like
Use new spritesheet class to load animation data

Describe alternatives you've considered
-.

Additional context

[REAFACTOR] Rework the screen system

Is your feature request related to a problem? Please describe.
At the moment there is only the entity component system after #18 got merged. I think we will need some kind of screens to represents the menus or the game.

Possible screens

  • Main Menu
    • Scoreboard
    • Settings menu
    • Lobby
    • Game screen

Describe the solution you'd like
We need to think about a good solution to implement screens into the game without breaking the idea of the entity component system.

Additional context
We need to research first how this could be solved "correctly"

Allow the usage of different projectiles

This is blocked by #6

It would be nice if a player could choose between more than one projectile which behave different. It would be awesome if the projectiles would not only differ in damage but also in behavior or effect.

Thinking about something like

  • Missiles which fly up to a target
  • Acid projectiles

TakeScreenshot in render system is not running async

It looks like method TakeScreenshot in class RenderSystem is not runnins async since nothing is getting awaited.

We should take a look if it is possible to make the method async and rename it to TakeScreenshotAsync. If it is not possible to make the method async we shold make it sync and remove the missleading keyword

[FEATURE] Add a render system to the engine library

Is your feature request related to a problem? Please describe.
Add a system for rendering to the engine library. Add the required components as well.

Required features

  • Sprite rendering
  • sprite sorting on z
  • text rendering (own system?)
  • postprocessing with shaders
  • shaders for single sprites

Describe the solution you'd like
A default render system usable out of the box

Describe alternatives you've considered

Additional context

[BUG] Projectiles not spawning from time to time

Describe the bug
Sometimes projectiles are not getting spawend for tanks

To Reproduce

  1. Enter a game
  2. Shoot with all the tanks
  3. Some tanks will not always spawn a projectile

Expected behavior
A projectile is getting spawned with every press of the space bar

Create the lobby screen

We should rework the lobby that each player can select a vehicle on there own.
There should be an option to enter a player name.

[BUG] Terrain not removed properly

Describe the bug
The terrain is not removed correctly after a projectile did hit the terrain.

To Reproduce
Clone the develop branch after #18 got merged or use the branch of the PR, start the game and press f2 a couple of times to spawn projectiles which will hit the ground. The terrain getting removed by the hits will be wrong from time to time. There are situations where the terrain is not removed at all

Expected behavior
The terrain gets removed inside of the explosion animation.

Screenshots
grafik
grafik

[FEATURE] Create animation system in the engine library

Is your feature request related to a problem? Please describe.

Describe the solution you'd like
Create an animation system in the engine library. The system should work fine togheter with the render system #62 and use the new aseprite import to allow generation for the animation components.

  • forward and backward animation
  • ping pong animation
  • loop animation
  • multiple animations per entity executeable by name
  • activate or disable a animation

Describe alternatives you've considered

Additional context

Rework the settings

The settings should be reworked as a non static class
The options should be cleaned to keep only what we need.

Rework the screen manager and screen system

The whole screen system is messy and badly written. This should be changed to some sort of finite state machine and the interfaces between the entities and the screens should be identical.

[FEATURE] Add link to github issue tracker.

Is your feature request related to a problem? Please describe.

Describe the solution you'd like
A link to the github issue tracker to create a bug ticket if something goes wrong. Should be placed in the main menu and the menu if you pause a game.

Describe alternatives you've considered

Additional context

[FEATURE] Adjust actions to allow builds for Linux and Macos as well

Is your feature request related to a problem? Please describe.

Describe the solution you'd like
A build for linux and mac os

Describe alternatives you've considered

Additional context

  1. Extend the github action to check linux and mac builds on PR
  2. Extend the gituhb actions to create linux and mac builds for unstable release

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.