Coder Social home page Coder Social logo

rpg-game-4inc's Introduction

Swords & Pitchforks RPG game

Didactic and highly experimental Java CLI RPG game made by a bunch of IT students. Project is no longer mantained.

How to add it to IntelliJ

In the starting window, click on Checkout from Version Control -> GitHub and insert your GitHub credentials.
Now you should be in Clone Repository window. In Git Repository URL, paste the following link: https://github.com/Fs00/rpg-game-4inc.git. Then decide your local directory and you're ready.

How to commit and push from IntelliJ

You can commit all your changes by simply pressing Ctrl-K, or clicking the Commit button in the upper right corner. Then you can push right-clicking any file in the project -> Repository -> Push (Ctrl-Shift-K).

How to get other people's changes

If other people in the meantime have made some modifications to the repository, you must pull them to your repo before committing and pushing.
To do that, right-click any file in the project -> Repository -> Pull (it is preferable if you tick the "No commit" option). If there are some conflicts the IDE should warn you.

Troubleshooting

Source files are not recognized as part of the project (IntelliJ)

Your .iml (IntelliJ project file) must look like that:

<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
  <component name="NewModuleRootManager" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$">
        <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" packagePrefix="ittbuonarroti.rpggame" />
    </content>
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
  </component>
</module>

The problem is much likely due to the missing sourceFolder tag. Copy that code in your .iml file and you should be ok.

rpg-game-4inc's People

Contributors

alegotta avatar fs00 avatar rayfirefist avatar

Watchers

 avatar  avatar  avatar

rpg-game-4inc's Issues

Come va implementata la ritirata?

@AlibabaSakura suggerisce di rivedere l'implementazione della ritirata attualmente presente (che verifica solo se la velocità di chi tenta la ritirata è maggiore di quella del nemico), in modo che sia sempre basata sulla velocità ma che dia a entrambi la possibilità di ritirarsi, non solo al personaggio più veloce.
A questo punto ho pensato che sarebbe interessante fare in modo che la probabilità sia basata sulla differenza di velocità tra i due personaggi, magari qualcosa come (50 + (VEL personaggio che si vuole ritirare - VEL nemico))%, in modo da avere una probabilità base del 50% che viene aumentata se la propria velocità è maggiore di quella del nemico, altrimenti diminuita (dato che la differenza tra le due velocità sarebbe negativa).
Cosa ne pensate?

Localizzazione stringhe

Stavo pensando che magari per stringhe all'interno di "GestionePartita" (O altre stringhe in classi non main) si potesse fare una classe di gestione delle lingue utilizzando dei file JSON come "contenitori" di stringhe (l'idea poteva anche essere usare i database ma già così il codice potrebbe diventare un po' complesso rispetto al JSON).

Ho già adocchiato questa libreria open source: https://code.google.com/archive/p/json-simple/ e una piccola guida su come usarla c'è qua: https://www.tutorialspoint.com/json/json_java_example.htm

Ribilanciamento meccaniche e ritocchi

Dopo aver testato il gioco a riga di comando, ditemi quali sono le vostre sensazioni in termini di bilanciamento delle meccaniche.
Io personalmente ho rilevato che l'attacco caricato al doppio del danno è eccessivo, andrebbe ridimensionato magari al 50% in più.

Metodi da implementare

PERSONAGGIO:

  • ritirata (vedi #12)
  • calcolo probabilità contrattacco
  • calcolo danni
  • toString()
  • stampa messaggi relativi alla fuga
  • stampa messaggi relativi al colpo subito

DEBOLE:

  • implementazione completata

CONTADINO:

  • implementazione interfaccia IAttaccante
  • stampa messaggi relativi all'attacco/contrattacco

COMBATTENTE:

  • implementazione interfaccia IAttaccante (URGENTE! Compito di @AlibabaSakura)
  • stampa messaggi relativi all'attacco/contrattacco

SOLDATO:

  • implementazione interfaccia IDifesa (compito di @alegotta - vedi #11)
  • stampa messaggi relativi al guard

CLASSE DI GESTIONE PARTITA: (compito di @AlibabaSakura)

  • controlloPartitaConclusa()
  • faiMossa()

MAIN A RIGA DI COMANDO:

  • implementazione in corso a cura di @Fs00

IATTACCANTE:

  • preparaAttacco() (Il personaggio perde un turno per sferrare un attacco potenziato)
  • attacca(Personaggio dest) (vedi #10)
  • contrattacca(Personaggio p) (vedi #7)

Se ve ne viene in mente qualcun'altro, aggiungetelo modificando il post!

IAttaccante.java non riconosciuto come Java file da IntelliJ

Quando creo il file IAttaccante.java, IntelliJ mi dà errore nel parsing del template (cosa non vera, perché il file viene creato con il template giusto) e quindi l'IDE si rifiuta di riconoscerlo come file Java. La cosa assurda è che cambiando nome al file tutto funziona perfettamente!
Ho provato a ricreare il progetto e cancellare la cache dell'IDE ma niente. Capita anche a voi questo problema?

Il contrattacco: come lo implementiamo e chi lo può usare?

Una cosa che non abbiamo ancora definito è il contrattacco.
Chi lo può usare? @AlibabaSakura suggeriva di implementarla come esclusiva del Contadino, per bilanciarlo rispetto al Soldato e al Mercenario. Tuttavia, come si giustifica il fatto che un Mercenario o un Soldato non sappiano contrattaccare?
Quindi lo implementiamo come parte del Contadino o come parte di IAttaccante?

E soprattutto, come va implementato? In teoria, quando si subisce il colpo ci dovrebbe essere una probabilità (da definire) che il colpo possa essere contrattaccato. Inoltre, chi contrattacca non dovrebbe subire il danno dell'attacco originario, ma chi subisce il contrattacco quanto danno deve subire? Io pensavo il 50% del danno originale, ditemi voi cosa ne pensate.

Fase di attacco: le modifiche introdotte con la commit 65b16df

Con la commit sopra citata, ho modificato ciò che avviene in fase di attacco (per ora solo nel Contadino, ma ho già predisposto anche Personaggio per questo cambiamento).
Adesso, attacca(Personaggio nemico) chiama il metodo riceviColpo(IAttaccante, int danno), che si preoccupa di effettuare il contrattacco se ce n'è la possibilità e, nel caso questo fallisca, di mitigare il danno con la statistica difesa e chiamare modificaPuntiVita con il valore del danno già sistemato.

Note:

  • in quest'implementazione, ho considerato il contrattacco come esclusivo di chi implementa IAttaccante (da confermare in #7)
  • @AlibabaSakura il valore ritornato dal tuo metodo attacca() doveva essere gestito dalla classe di gestione della partita? Non trovi che nel tuo caso appesantiremmo troppo la classe di gestione con compiti che potrebbero benissimo "sbrigarsi" i personaggi fra di loro?

Struttura ereditarietà classi: come facciamo?

Prima domanda: Mercenario non è una derivata di soldato? Praticamente ha molti dei metodi che ha anche soldato, però è anche vero che dovremmo in qualche modo differenziarlo da esso...

Seconda domanda: Ma il Debole? A quanto ho capito "le prende" soltanto e non ha molto senso in un gioco a turni come il nostro. E se facessimo il Contadino come derivato di Debole, inteso come "colui che non fa il combattimento di mestiere"? In tal caso, però dovremmo decidere quali metodi accomunano i "deboli"...

Come gestiamo i turni di gioco?

La mia intenzione era quella, per ogni turno, di far scegliere prima a entrambi i giocatori le mosse e poi di darle in pasto alla classe di gestione, la quale calcolerebbe autonomamente chi far attaccare prima e gestirebbe tutto da sola.
@AlibabaSakura, invece, ha proposto di far sì che, dopo che il primo giocatore ha scelto la sua mossa, la si effettui subito, stessa cosa per il secondo. Quindi si dovrebbe fare un metodo da chiamare nel main prima di ogni turno per decidere (in base alla velocità) chi deve fare la sua mossa prima.
Dato che entrambi i modi hanno i loro pro e contro in fase di implementazione, quale decidiamo di fare? (domanda soprattutto per @alegotta, dato che non si è ancora espresso)

PS: Se la velocità di due personaggi è pari (può capitare, dato che la randomizzazione va da +5 a -5), allora entrambi avrebbero una probabilità del 50% di attaccare prima.

Inconguenze nella classe Personaggio

  1. Perché abbiamo i setter e i getter se i campi sono protected? I campi dovrebbero essere private, a mio avviso
  2. modificaHP() deve essere un override di subisciColpo(), altrimenti a cosa serve questo metodo nella classe base?
  3. setPuntiStamina() avrebbe più senso come decrementaStamina(), un metodo che dovrebbe essere chiamato dalla classe di gestione a ogni turno

Gestione della documentazione

Proporrei di generare la documentazione che scriviamo con JavaDoc nella cartella /docs (da creare)
Poi @Fs00 dovrebbe abilitare Github Pages in modo che possa essere visibile da chiunque.

Oltre al JavaDoc, a gioco finito si può pensare di aggiungere una piccola spiegazione del funzionamento del gioco ed alcuni screenshot nel ReadMe.

Come implementiamo la modalità difensiva del Soldato? (parte di IDifesa)

Dobbiamo decidere come implementare la modalità difensiva del Soldato, parte di IDifesa.
@AlibabaSakura suggeriva di far perdere un turno al Soldato, in modo che poi nei turni successivi la sua difesa fosse raddoppiata (danni dimezzati attraverso l'override di modificaPuntiVita() presente in Combattente). Da qui seguono due domande:

  • questa modalità difensiva deve durare per un numero limitato di turni (2, 3, 5 o più? io preferisco 5) o fino alla fine della partita?
  • l'aumento della difesa porta con sé riduzioni ad altre statistiche (diminuzione di velocità o attacco, per me è indifferente)?

L'implementazione, in ogni caso, toccherà a @AlibabaSakura.

Scelta del package name

Il package name è "ittbuonarroti.rpggame" o "com.ittbuonarroti.rpggame"?
Prima del commit 826b3e3 veniva usato "com.ittbuonarroti.rpggame", mentre dopo "ittbuonarroti.rpggame".
Decidiamo quale tenere!

Convenzioni di scrittura del codice

Se per voi non è un problema, riguardo alle graffe suggerisco di formattare il codice in maniera uniforme per tutti come sotto:

function a()
{
}

@AlibabaSakura so che a te non va a genio. Se proprio non riesci a fare a meno delle graffe sulla stessa riga, lasciamo perdere e ognuno fa come gli sta comodo (anche se comunque uniformare tutto sarebbe meglio, se possibile).

Presentazione e nome del gioco

Ho iniziato a fare la presentazione del gioco, che vi ho condiviso su Google Drive.

A tal proposito, credo dovremmo decidere un nome da dare al gioco, per distinguerlo da quello degli altri gruppi.

P.S.: Ovviamente la presentazione è in stato embrionale (WIP), ma ogni suggerimento già da ora è ben accetto.

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.