· informatica · 4 min read

Programmare un roguelike in C++

Scrivere un roguelike in C++

Scrivere un roguelike in C++

Benvenuto a questo tutorial che ti mostrerà passo passo come pensare e realizzare un semplice roguelike utilizzando il C++.

Roguelike: Definizione e Caratteristiche

Se sei un appassionato di videogiochi, è probabile che tu abbia sentito parlare dei Roguelike. Questo genere di giochi ha guadagnato una notevole popolarità negli ultimi anni, ma cosa significa esattamente il termine “Roguelike”? Vediamo questa definizione e le caratteristiche principali di questo affascinante genere videoludico.

Cos’è un Roguelike?

Il termine “Roguelike” deriva dal gioco “Rogue”, un dungeon crawler sviluppato negli anni ‘80. Tuttavia, nel corso del tempo, il genere ha evoluto e ampliato la sua definizione. Oggi, un Roguelike è un tipo di gioco che presenta alcune, se non tutte, delle seguenti caratteristiche:

  1. Morte permanente: In un Roguelike, la morte del tuo personaggio è definitiva. Una volta che il tuo eroe muore, devi ricominciare da capo, senza mantenere alcun progresso precedente. Questo elemento di sfida rende il genere particolarmente impegnativo ma anche gratificante.

  2. Generazione procedurale: I Roguelike utilizzano spesso la generazione procedurale per creare mondi, livelli e contenuti del gioco in modo casuale. Ciò significa che ogni partita è un’esperienza unica, poiché i livelli e gli oggetti cambiano ogni volta che inizi una nuova partita.

  3. Turni o tempo reale: I Roguelike possono essere a turni, dove il gioco si svolge in modo sequenziale, o in tempo reale, dove l’azione si sviluppa in modo fluido. Entrambe le varianti possono essere considerate Roguelike, a patto che rispettino altre caratteristiche fondamentali.

  4. Gestione delle risorse: La gestione delle risorse è spesso un aspetto cruciale nei Roguelike. Questo può includere la gestione dell’inventario, la raccolta di cibo e risorse per la sopravvivenza, e la scelta strategica di come utilizzare gli oggetti a tua disposizione.

  5. Esplorazione e scoperta: I Roguelike spingono i giocatori all’esplorazione e alla scoperta del mondo di gioco. Puoi trovare nuovi oggetti, segreti e nemici man mano che procedi attraverso i livelli.

Per il nostro tutorial realizzeremo un piccolo roguelike con una struttura molto semplice. Avremo permadeath per cui ogni volta che la salute del nostro eroe andrà a zero, il gioco ricomincerà da capo. Il mondo sarà formato da una sequenza di dungeon generati utilizzando un semplice algoritmo di generazione procedurale: Il Random Walk. Avremo una scansione a turni tra hero e nemici. Esisterà una pozione che l’eroe potrà assumere per raddoppiare la propria energia. il gioco si svolge su di una griglia fissa e contenuta nello schermo. Al raggiungimento di una cella con delle scale, cambieremo livello nel dungeon.

Preparazione dell’ambiente di lavoro

Per questo progetto utilizzeremo il compilatore C++ incluso nei Microsoft BuildTools e per la configurazione del progetto utilizzeremo CMake. Come IDE utilizzeremo Visual Studio Code e la libreria Raylib per il rendering grafico.

Come plugin di Visual Studio Code utilizzeremo:

più eventuali altri plugin che potrebbero essere utili per la scrittura del codice.

Creazione del progetto

Creiamo una cartella per il nostro progetto e all’interno di essa creiamo un file CMakeLists.txt con il seguente contenuto:

cmake_minimum_required(VERSION 3.21)
project(raylib_cpp_roguelike LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)


# Adding Raylib
include(FetchContent)
set(FETCHCONTENT_QUIET FALSE)
set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) # don't build the supplied examples
set(BUILD_GAMES    OFF CACHE BOOL "" FORCE) # don't build the supplied example games

FetchContent_Declare(
    raylib
    GIT_REPOSITORY "https://github.com/raysan5/raylib.git"
    GIT_TAG "master"
    GIT_PROGRESS TRUE
)

FetchContent_MakeAvailable(raylib)


add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} PRIVATE raylib)

target_compile_definitions(${PROJECT_NAME} PUBLIC ASSETS_PATH="${CMAKE_CURRENT_SOURCE_DIR}/assets/")

Questo è un file utilizzato da CMake per gestire il processo di compilazione di un progetto C++ in modo indipendente dal compilatore.

La prima riga specifica la versione minima di CMake necessaria per processare questo file. In questo caso, è la versione 3.21.

La funzione project() viene poi chiamata per impostare il nome del progetto e i linguaggi utilizzati, che in questo caso è C++.

La funzione set() viene utilizzata per impostare varie proprietà. Qui, viene utilizzata per impostare lo standard C++ a C++20, rendere questo standard obbligatorio e disattivare le estensioni specifiche del compilatore.

La funzione include() viene utilizzata per includere il modulo FetchContent di CMake, che ci consente di scaricare e compilare automaticamente le dipendenze del progetto.

La funzione FetchContent_Declare() viene utilizzata per dichiarare una dipendenza da Raylib. Questa funzione accetta il nome della dipendenza, l’URL del repository Git e il tag del commit da scaricare.

La funzione FetchContent_MakeAvailable() viene utilizzata per scaricare e compilare la dipendenza dichiarata in precedenza.

Infine, la funzione add_executable() viene utilizzata per creare un eseguibile chiamato raylib_cpp_roguelike dal file main.cpp. La funzione target_link_libraries() viene utilizzata per collegare l’eseguibile alla libreria Raylib.

La funzione target_compile_definitions() viene utilizzata per definire una costante ASSETS_PATH che contiene il percorso della cartella assets del progetto.

Creazione del file main.cpp

Creiamo un file main.cpp all’interno della cartella del progetto con il seguente contenuto:

Back to Blog

Related Posts

View All Posts »
Python e PostgreSQL: gestione di database

Python e PostgreSQL: gestione di database

Scopri come utilizzare Python per interagire con un database PostgreSQL, un sistema di gestione di database open source ampiamente utilizzato per la sua affidabilità e flessibilità.

Funzioni in C++

Funzioni in C++

Le funzioni in C++ rappresentano un costrutto fondamentale per la programmazione. Vediamo come si definiscono e come si utilizzano