Code Monkey home page Code Monkey logo

cute-animals's Introduction

Software Engineering 2019/2020 - Final project

Build Release

Team: Julia Cichosz, Klaudia Goska, Marek Grzelak, Hubert Jaremko, Anna Misiewicz, Łukasz Sereda

Project description

Cute Animals is a dark fantasy single-user dungeon RPG made as a semester project for the Software Engineering course at Jagiellonian University
The game is available at https://io-rpg.herokuapp.com/.

Gameplay

The game is using a text-user-interface inspired by the Single-User Dungeon genre (ex. Otchłań (pol)). The player interacts with the world by typing in proper commands such as go, investigate or pick. Full list of available commands is in the Documentation section.

The game flow is as follows:

  1. First, the player picks his character's class.
  2. Every class offers unique abilities.
  3. The player goes through successive locations, where he has the opportunity to explore, interact with other characters (e.g. conversation, fight), and collect items.
  4. At each stage of the game, there are different possible courses of the game.
  5. The collected items can be used in the further course of the game (depending on the item: for combat, defense, or to increase a given attribute)
  6. As the player overcomes successive obstacles, the player will gain experience and develop individual attributes.

Screenshots

Used technologies

  • Server
    • Java 11
    • Spring MVC
    • PostgreSQL
    • Heroku
  • Client
    • xterm.js
  • Tests
    • JUnit 5
    • Mockito
    • AssertJ

Building

./gradlew build -x test

Required environment variables

SPRING_DATASOURCE_URL : jdbc:postgresql://localhost:5432/<database name>
SPRING_DATASOURCE_USERNAME : postgres
SPRING_DATASOURCE_PASSWORD : your password
SPRING_PROFILES_ACTIVE : dev or prod

Documentation

Full documentation, test and coverage reports, binary files are in artifacts.

UML diagrams are here.

Avaiable commands

  • start - starts the game
  • investigate - provides a description of the current location
  • talk <character_name> - allows you to talk to individual characters
  • go <location_name> - allows you to go to another location
  • pick <item_name> - allows you to pick up an item and put it in your backpack
  • throw <item_name> - allows you to discard an item out of the backpack
  • equip <item_name> - allows you to put on an item from a backpack
  • off <item_name>- allows you to unequip an item and put it in the backpack
  • backpack - lists the current state of the backpack
  • eq - lists the currently equipped items
  • stats - lists the character's statistics
  • skills - lists the character's abilities
  • fight <character_name> - allows you to fight individual characters
  • attack - allows you to attack in combat mode
  • block - reduces damage in the next two turns in combat mode
  • use <item_name> - allows you to use an item
  • cast <skill_name> - allows the use of a given skill in combat mode
  • suicide - allows you to reset the game to its initial state

cute-animals's People

Contributors

aniamisiewicz avatar hjaremko avatar juliacichosz avatar klaudiagoska avatar lsereda avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

cute-animals's Issues

Implement NPCs

Typing talk ... should put player in dialog mode or something.

Update README

Updated README should contain project description, project objectives, authors, build status, build and usage instructions, information about dependencies, build status badge.

Design Game

  • 'gameClass':
  • list locations
  • list items
  • list NPCs

Design items

  • 'IItems':
  • getName()
  • getDescription()
  • getSize()/getWeight()
  • getAttributes()

Define code style

It should be distributed as some .clang-format or Intelij config file and added to repo

Design database

Tables to consider: Items, Locations, Player Data, Characters, Dialogs etc

Design GameManager

Should manage locations and players

class GameManager{
Player player;
State gameState;
Interpreter interpreter;
getRequest(String);
serialize();
}

Design Equipment

  • 'IEquipment':
  • getItems(...) //return items
  • putItem(...)
  • removeItem(...)
  • showItems() // lists all items

Set up database

The easier to use and set up the better
To consider: posgresql, sqlite, mysql
Should be configured in dockerfile for easy deployment

Minimal working game API

Provide minimal game communication API

  • A way to get input from user in string form
  • Sending out game info and responding to user input

Set up docker

  • Create DockerFile
  • Write script that releases Docker on Heroku

Reorganize project

  • remove any logic from entities
  • implement all interfaces in services
  • reinvent interfaces for using in services
  • add id to mapping

Implement core game mechanics

  • Implement player and locations.
  • Player should see description of the location he currently is in.
  • Player should be able to move to another connected location with go ... command.
  • Implement at least two placeholder locations.
  • Include unit tests if possible.

Design characters

  • ICharacter:
  • IEquipment getEquipment()
  • IAttributes getAttributes()
  • Result use/action( IAction ... )

use(IAction a) {
a.execute(this);
}

  • IAttributes:
  • getHealth()
  • getAttackPoints()
  • getLevel()
  • getDefence()

Set up CI/CD

  • CI should also autoformat all files before merge
  • Build artifacts
  • Run static analysis
  • Run tests
  • Generate tests reports
  • Deploy on Heroku

Design location system

  • ILocation:
  • getDescription()
  • IAction getAvailabaleActions()
  • ICharacter getNpcs()
  • IEquipment getItems()
  • ILocation getGates() // GameManager

Design event system

  • IAction:

  • void execute(ICharacter)

  • HealthAdder implements IAction
    void execute(...) {
    zycie += 100;
    }

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.