Giter Club home page Giter Club logo

kurve's Introduction

Github Actions mit license kurve

Kurve is a remake of the popular game "Achtung, die Kurve!" using C++ and OpenGL.

Table of contents

Getting Started

Install using snap

Kurve is available in the Snap Store under the name "kurve".

Get it from the Snap Store

$ sudo snap install kurve

To get kurve as a rolling release

$ sudo snap install kurve --edge

Install from the source

Clone this project

$ git clone https://github.com/h-valdes/kurve.git

Install all the dependencies:

In Ubuntu 20.04

$ sudo apt install libglfw3-dev libfreetype-dev nlohmann-json3-dev cmake

In archlinux or Manjaro

$ sudo pacman -Syu glfw-x11 freetype2 nlohmann-json 

In Fedora

$ sudo dnf install glfw-devel freetype-devel json-devel mesa-libGLw mesa-libGLU-devel

Build and install the project

Install from the bash script (default on /usr/local)

$ sudo sh scripts/install.sh

Build and install manually:

$ cd kurve
$ mkdir Release
$ cd Release
$ cmake -DCMAKE_BUILD_TYPE=Release ..
$ sudo make install

Enjoy

$ kurve

Debug

To play without installing the game in your computer (you still need to install the dependencies):

$ cd kurve
$ mkdir Debug
$ cd Debug
$ cmake -DCMAKE_BUILD_TYPE=Debug ..
$ make
$ ./kurve

Or from the script:

$ sh scripts/debug.sh

Roadmap

  • v0.1-alpha
    • Minimal working implementation of "Achtung, die Kurve". It has all the features from the 1995 DOS version
    • Random start position of the players
    • Random length of lines (defined in a specific range)
    • Menu to select the players
    • Game Over screen
  • v0.2-alpha
    • Sort the name of the players in the Game Over screen depending on the number of points
    • Make the terminal output less verbose when the build type is release
    • Read the configuration of the players from a json file
    • Generate a snap package (.snap) with snapcraft
    • End the game when pressing Escape in the Menu
    • Full Screen support
    • Generate a debian package (.deb) with cmake
    • Migrate from the self built classes Point and Vector to GLM
  • v0.3-alpha
    • Use a constant or max. fps. In Manjaro was unplayable, because the fps were too high
    • Add a starting direction arrow in the transition zone (before starting)
    • Improve the scoring system and add a minimum differences to win
    • Reorganize the static files and structure of the repository
    • Improve the font rendering and the class Font in general. Add blinking text throught the class, different types of font (bold, italic, etc) and different sizes
    • Create an AI to play against
    • Add a new general Menu (to choose between different options: config, exit the game, etc)
    • Create an abstraction for the Scenes and a SceneManager replacing the changes in the class Game
    • Change the style to differ with the Flash Remake of "Achtung, die Kurve"
    • Generate an AppImage package
    • Generate a Flatpak package
    • Render textures (images) for example the logo of kurve in the main Menu

License and Authors

This Project started as a final project for the class Multimedia at the TU Bergakademie Freiberg by Simon Al Nomer and Hernán Valdés. The final version for the class corresponds the Release v0.1-alpha.

The class was taught by Jonas Treumer and Ben Lorenz and inside of the project are still traces of the C code programmed by them as an example of the functionality of OpenGL and GLFW.

Screenshots

kurve's People

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

kurve's Issues

Generate a Flatpak pkg

As an alternative for snap package, the automatic generation of a flatpak (and posterior publication on flathub would be neat.

Make the release build less verbose

The Debug and Release builds are equally verbose and it can be annoying for users starting the game through the terminal (once install). A solution could be adding a Macro under a def/ifndef definition to separate them from the rest of the code.

Create an AI

It is not always possible to play against other Humans!
Add some fellow robots (AI) to play against.

Exit the game in menu

Until now the game cannot be closed. It can be directly closed from window decorators or shortcuts, but there is no implemented way to close the game from the game.

Improve the scoring system

The actual scoring system is inconsistent and not so clear for new players.
New possible scoring system for p players and be m a position between first and last player:

  • last player = 0 points
  • first player = p - 1 points
    And therefore in general:
  • m-th player = p - m points

The max amount of point can stay the same (p * 5, eg: 2 players -> 10 points), but include a system with min. amount of points of difference between 1st and 2nd place (2, maybe?).

The scoring is calculated and updated in player_manager.cpp.

Create a Debian package (.deb)

As an alternative to using cmake as an installation method would be neat if there is at least a .deb package for Debian/Ubuntu. It can be created using cmake and cpack.

Improve the AI

The AI works (it can take some decisions) but it sucks! It really sucks.
It generates a bottleneck and the fps are going down, really fast.
The planning algorithm can be improve, research some Path Planning Algorithms. The actual algorithms only waits until one of the edge conditions are meet and than take a decision. Maybe a better approach would be to set goals for the AI to reach and then try to reach them (with some tolerance) and then set a new goal. That would generate some sort of human feeling about the decisions that the AI takes. A consequence of that would be, that the game would be turned to something very similar as the Snake Game. This Process could be use to train a Machine Learning Algorithm for the AI.

Generate an AppImage package

AppImage is a good packaging alternative to snaps (less controversial).
It would be nice to create it automatically through the CMakeLists.txt, similar to the creation of the DEB package (see #9) and add it in the release files. I don't know if there is some sort of store for AppImages.

The window doesn't have a max. size

The window has a min. size, but it can be even bigger than the display if the user just try it.
Take the size of the primary display (see full screen solution for issue #10) and use it as a max. boundary.

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.