Open Source Videogames

De wikijoan
Salta a la navegació Salta a la cerca

Introducció

Jocs enllestits a la RPi

2048 puzzle

El joc també es pot jugar online:

És un joc popular per mòbil que hi ha una versió per a Linux i SDL. S'hauria d'adaptar a fullscreen i compilar-ho per la Raspberry Pi.

Per compilar el projecte (són les comandes que s'executen en el make):

g++ -I/usr/include/SDL -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"AppGame.d" -MT"AppGame.d" -o "AppGame.o" "../AppGame.cpp"
g++ -I/usr/include/SDL -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"appnew.d" -MT"appnew.d" -o "appnew.o" "../appnew.cpp"
g++ -I/usr/include/SDL -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"globalVars.d" -MT"globalVars.d" -o "globalVars.o" "../globalVars.cpp"
g++ -I/usr/include/SDL -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.cpp"
g++ -I/usr/include/SDL -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"sdl_widgets.d" -MT"sdl_widgets.d" -o "sdl_widgets.o" "../sdl_widgets.cpp"

g++ -L../ -o "2048"  ./AppGame.o ./appnew.o ./globalVars.o ./main.o ./sdl_widgets.o   -lSDL_image -lSDL_mixer -lSDL_gfx -lSDL -lSDL_ttf -lSDL_image

L'adaptació de codi persegueix els següents objectius:

  • fullscreen
  • no necessito per res el mouse, sinó les tecles de les meves màquines
  • amb el botó 3 faig un moviment endarrere (també es podria fer dos moviments endarrere)
  • corregir l'algorisme de quan es fusionen tres números iguals quan tiro a la dreta i a l'esquerra.
  • posar música amb SDL_Mixer
  • canviar la font
  • jugar amb la geometria
  • adaptar el disseny a què quedi un aspecte de màquina de bar anys 80.
  • Eliminar botons i funcions que no necessito. Eliminar appnew.cpp
  • afegir crèdits per tal de què no es pugui jugar si no tinc crèdits.
  • Simplificar el codi al màxim i eliminar els arxius appnew.cpp i appnew.h.
  • Encara que guanyi, he de poder continuar la partida per intentar fer un nou high score.

TODO:

  • pàgina de presentació / títol del joc (2048)
  • demanar permís a l'autor de codi original, i a la música

Després d'eliminar el fitxer appnew.cpp, les instruccions per compilar són: (compilar1.sh)

g++ -I/usr/include/SDL -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"AppGame.d" -MT"AppGame.d" -o "AppGame.o" "../AppGame.cpp"
g++ -I/usr/include/SDL -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"globalVars.d" -MT"globalVars.d" -o "globalVars.o" "../globalVars.cpp"
g++ -I/usr/include/SDL -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.cpp"
g++ -I/usr/include/SDL -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"sdl_widgets.d" -MT"sdl_widgets.d" -o "sdl_widgets.o" "../sdl_widgets.cpp"
g++ -L../ -o "2048"  ./AppGame.o ./globalVars.o ./main.o ./sdl_widgets.o   -lSDL_image -lSDL_mixer -lSDL_gfx -lSDL -lSDL_ttf -lSDL_image

i si només modifico l'arxiu AppGame.cpp: (compilar2.sh)

g++ -I/usr/include/SDL -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"AppGame.d" -MT"AppGame.d" -o "AppGame.o" "../AppGame.cpp"
g++ -L../ -o "2048"  ./AppGame.o ./globalVars.o ./main.o ./sdl_widgets.o   -lSDL_image -lSDL_mixer -lSDL_gfx -lSDL -lSDL_ttf -lSDL_image

Per tal de modificar la geometria:

  • coordenades i dimensions de la graella: AppGame.cpp
//coordonnees grille
int ep=2;
int left=40;
int top=200;
int width=400;
int height=400;
  • tamany de les fonts: AppGame.cpp
	fontLarge=TTF_OpenFont("homespun.ttf",58);
	fontMedium=TTF_OpenFont("homespun.ttf",38);
	fontSmall=TTF_OpenFont("homespun.ttf",26);
    fontHalfSmall=TTF_OpenFont("homespun.ttf",21);
	fontVerySmall=TTF_OpenFont("homespun.ttf",14);
  • Posicionament dels botons:
	//best score
	drawBtn(200,100,200,20,"Best Score",fontSmall,0,0,0,0,fgColor,false,false,false);
	//convertir chiffre en chaine de caracteres
	std::ostringstream sbs;sbs<< bestScore;
	drawBtn(200,130,260,40,sbs.str().c_str(),fontMedium,0,0,150,200,fgColor,false,false,false);

Fer sonar una cançó amb SDL_Mixer

Compilar el projecte a la Raspberry Pi B+

Em faltava la llibreria:

$ sudo apt-get install libsdl-mixer1.2-dev

El projecte s'executa a:

$ /home/pi/open_source/2048-SDL-Master/Release/2048

Ri-li

És un maze molt divertit. És de l'any 2006.

    bunzip2 Ri-li-2.0.1.tar.bz2
    tar -xpvf Ri-li-2.0.1.tar
    cd Ri-li-2.0.1
    ./configure
    make
    (in root user 'su root') make install
    Ri_li (Good game !)

Quan compilem:

audio.cc:25:22: fatal error: iostream.h: El fitxer o directori no existeix

Using standard C++ calling (note that you should use namespace std for cout or add using namespace std;)

#include <iostream>

Els problemes de compilació en el portàtil que he trobat es solucionen posant #include <iostream> en comptes de #include <iostream.h>, i ficant using namespace std; allà on ho demana.

Un cop compilat amb make, ja podem executar-lo:

$ src/Ri_li

però protesta perquè no troba el fitxer language.dat. Això és fàcil de solucionar si fem:

$ sudo make install
$ Ri_li

doncs els fitxers d'idiomes queden ben instal.lats allà on toca.

Coses a realitzar

  • Que compili a la RPi. Eliminar referències a Windows i MAC.
  • En general simplificar i eliminar les opcions.
  • sempre fullscreen
  • nivell de so màxim.
  • eliminar idiomes (un sol idioma)
  • eliminar que et demani la declaració dels Drets Humans.
  • En la taula de Score he d'entrar el nom amb el teclat. Utilitzar les tecles up i down per modificar les lletres, dreta per següent lletra, i 3 per acabar d'escriure.
  • 0 per sortir en tots els menus i en el joc
  • Posar una música de 8 bits.
  • Treure el mouse (souris)
  • etc.

Compilació

g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT audio.o -MD -MP  -c -o audio.o audio.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT ecran.o -MD -MP -c -o ecran.o ecran.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT editeur.o -MD -MP -c -o editeur.o editeur.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT jeux.o -MD -MP -c -o jeux.o jeux.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT loco.o -MD -MP -c -o loco.o loco.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT main.o -MD -MP -c -o main.o main.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT menu.o -MD -MP -c -o menu.o menu.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT mouse.o -MD -MP -c -o mouse.o mouse.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT sprite.o -MD -MP -c -o sprite.o sprite.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT tableau.o -MD -MP -c -o tableau.o tableau.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT utils.o -MD -MP -c -o utils.o utils.cc

g++  -g -O2   -o Ri_li  audio.o ecran.o editeur.o jeux.o loco.o main.o menu.o mouse.o sprite.o tableau.o utils.o  -lm -lpthread -lSDL_mixer -lSDL

Un cop fetes les modificacions, no necessito editeur.cc

g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT audio.o -MD -MP  -c -o audio.o audio.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT ecran.o -MD -MP -c -o ecran.o ecran.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT jeux.o -MD -MP -c -o jeux.o jeux.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT loco.o -MD -MP -c -o loco.o loco.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT main.o -MD -MP -c -o main.o main.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT menu.o -MD -MP -c -o menu.o menu.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT mouse.o -MD -MP -c -o mouse.o mouse.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT sprite.o -MD -MP -c -o sprite.o sprite.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT tableau.o -MD -MP -c -o tableau.o tableau.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"/usr/local/share/Ri-li\"" -Wno-deprecated -DLINUX  -g -O2 -MT utils.o -MD -MP -c -o utils.o utils.cc

g++  -g -O2   -o Ri_li  audio.o ecran.o jeux.o loco.o main.o menu.o mouse.o sprite.o tableau.o utils.o  -lm -lpthread -lSDL_mixer -lSDL

Modificació de codi

Les preferències es guarden a $HOME/.ri-li.pref.

El menú d'opcions té quatre opcions: volum de la música, volum dels sons, idioma, i fullscreen. A mi no m'interessa cap d'aquestes opcions, dons escolliré volum màxim, idioma anglès i fullscreen. Per tant, és millor no accedir mai a aquest menú d'opcions.

Els idiomes espera trobar-los a /usr/local/share/Ri-li/language.En (a sprite.cc, línia 89, podem ficar std::cout << PathFile << std::endl;).

Compilació a la RPi

No em cal partir del codi original, puc utilitzar el meu propi codi. Després de fer la compilació em petava perquè cercava els fitxers d'idiomes a /usr/local/share/Ri-li/. El que he de fer és en les línies de compilació dir que el directori on estan les dades és:

-DDATA_DIR="\"../data\""
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"../data\"" -Wno-deprecated -DLINUX  -g -O2 -MT audio.o -MD -MP  -c -o audio.o audio.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"../data\"" -Wno-deprecated -DLINUX  -g -O2 -MT ecran.o -MD -MP -c -o ecran.o ecran.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"../data\"" -Wno-deprecated -DLINUX  -g -O2 -MT jeux.o -MD -MP -c -o jeux.o jeux.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"../data\"" -Wno-deprecated -DLINUX  -g -O2 -MT loco.o -MD -MP -c -o loco.o loco.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"../data\"" -Wno-deprecated -DLINUX  -g -O2 -MT main.o -MD -MP -c -o main.o main.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"../data\"" -Wno-deprecated -DLINUX  -g -O2 -MT menu.o -MD -MP -c -o menu.o menu.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"../data\"" -Wno-deprecated -DLINUX  -g -O2 -MT mouse.o -MD -MP -c -o mouse.o mouse.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"../data\"" -Wno-deprecated -DLINUX  -g -O2 -MT sprite.o -MD -MP -c -o sprite.o sprite.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"../data\"" -Wno-deprecated -DLINUX  -g -O2 -MT tableau.o -MD -MP -c -o tableau.o tableau.cc
g++ -DHAVE_CONFIG_H -I. -I. -I..  -DDATA_DIR="\"../data\"" -Wno-deprecated -DLINUX  -g -O2 -MT utils.o -MD -MP -c -o utils.o utils.cc

g++  -g -O2   -o Ri_li  audio.o ecran.o jeux.o loco.o main.o menu.o mouse.o sprite.o tableau.o utils.o  -lm -lpthread -lSDL_mixer -lSDL

Però compte, que en el codi original els fitxers de sons no estan a data/. Per tant:

cp -R Sounds/ data/
sudo rm -R /usr/local/share/Ri-li/ (si necessari)

Per tant, ara em queda tot dins el directori del projecte. Compilo i ja tinc els fitxers objecte i l'executable, dins de src/.

Per tal de què compili correctament, en tots els fitxers src/*.cc:

    1. include <iostream>
  • using namespace std;

Així doncs, no cal fer make i sudo make install.

Per tal de què funcioni correctament a la RPi, és necessari les opcions SDL_FULLSCREEN|SDL_SWSURFACE a main.cc i menu.cc:

sdlVideo=SDL_SetVideoMode(800, 600, sdlVideoInfo->vfmt->BitsPerPixel, SDL_FULLSCREEN|SDL_SWSURFACE);

i la geometria està fixa a 800x600 per tal de què la geometria quedi bé.

Puc eliminar tots els fitxers d'idioma menys language.dat i language.En, doncs escullo anglès com a idioma per defecte.

Les preferències es guarden a $HOME/.ri-li.pref. Per tant, si hi ha algun problema puc utilitzar un fitxer de preferències que ja existeixi. El Hi Score també es guarda en aquest fitxer. Per tant, si l'elimino es torna a crear de 0, i queda el HI Score resetejat.

Jocs candidats a compilar a la RPi

Chromium B.S.U.

Descarreguem: chromium-bsu-0.9.15.1.tar.gz

Instal.lació en el portàtil

$ ./configure
$ sudo apt-get install ftgl-dev
$ make
$ cd src
$ ./chromium-bsu
$ ./chromium-bsu --help
$ ./chromium-bsu -f --vimode 3

Bastant bé

Crack-attack

Descarrego crack-attack-1.1.14.tar.gz

$./configure
...
checking for gtk+-2.0 >= 2.0.0... Package gtk+-2.0
sudo apt-get install gtk-2.0-dev

$./configure
$ make
...
TextureLoader.h:66:42: error: ‘strncpy’ was not declared in this scope

En el fitxer TextureLoader.h:

#include string.h

En el fitxer Attack.cxx, línia 76

int main ( int argc, char **argv )
{
  setupLocalDataDirectory();
glutInit(&argc, argv);
$ make
/usr/bin/ld: cannot find -lXmu
$ ld -lXmu --verbose

no troba res

sudo apt-get install libxmu-dev
$ ld -lXmu --verbose

ara sí

$ cd src/
$ ./crack-attack
$ ./crack-attack --solo --really --low --name PEPET
Error opening texture file '/home/joan/videogames/crack-attack-1.1.14/share/crack-attack/garbage_lightmap_5.tga'.

Pero no existeix el directori share/

el que puc fer és instal.lar a partir dels paquets debian:

$ sudo apt-get install crack-attack

i aleshores veig on queda la carpeta share/ i tot el seu contingut:

$ ls /usr/share/games/crack-attack

Primer he de crear la carpeta share/crack-attack/ a /home/joan/videogames/crack-attack-1.1.14

$ cp -R  /usr/share/games/crack-attack/* /home/joan/videogames/crack-attack-1.1.14/share/

I ara finalment:

$ ./crack-attack --solo --really --low --name PEPET

no té l'opció fullscreen, però per algo disposo del codi font

El joc tracta de fer grups de tres colors, que s'esvaeixen. Les tecles són les fletxes i K/Space i L

LBreakout2

El primer que faig és instal.lar el paquet i provar-lo

$ sudo apt-get install lbreakout2

Veig que funciona amb finestra o amb fullscreen.

Descarrego lbreakout2-2.6.5.tar.gz

./configure  --disable-network --disable-install --localstatedir
$ make
$ cd client
$ ./lbreakout2

Couldn't open /usr/local/share/lbreakout2/gfx/win_icon.png


$ sudo mkdir  /usr/local/share/lbreakout2
$ sudo mkdir  /usr/local/share/lbreakout2/gfx
$ sudo mkdir  /usr/local/share/lbreakout2/gui_theme

$ sudo cp -R gfx/*  /usr/local/share/lbreakout2/gfx/
$ sudo cp -R gui_theme/*  /usr/local/share/lbreakout2/gui_theme/

Xye

Descarrego xye-0.12.2.tar.gz

requires SDL, SDLImage and SDLTTF to compile

$ ./configure
$ make

$ ./xye
Will look on /usr/local/share/xye for data files.
Exception: Can't open/find data folder
$ mkdir /usr/local/share/xye

i continua els problemes. Però el problema es soluciona si faig

$ sudo make install
$ xye

no hi ha opció de fullscreen

Trigger Rally

Descarrego trigger-rally-0.6.3.tar.gz

To build Trigger Rally, your system must satisfy the following requirements:

* have a C++ compiler (preferably g++ v.4.8+) and related binutils
* have the GNU Make utility
* have these development libraries installed:

  LIBRARY NAME      POSSIBLE PACKAGE NAME       OFFICIAL DOWNLOAD LINK
  --------------------------------------------------------------------
  GL                libgl1-mesa-dev             N/A
  GLU               libglu1-mesa-dev            N/A
  GLEW              libglew-dev                 http://sourceforge.net/projects
  OpenAL            libopenal-dev               N/A
  ALUT              libalut-dev                 N/A
  PhysFS            libphysfs-dev               http://icculus.org/physfs/downl
  SDL 1.2           libsdl1.2-dev               http://www.libsdl.org/download-
  SDL_image 1.2     libsdl-image1.2-dev         http://www.libsdl.org/projects/

To build Trigger Rally you must run "make" in the "src" directory where
"GNUmakefile" is located:

  $ cd src/
  $ make
  $ cd ../bin/
  $ ./trigger-rally

quan faig el make:

./include/codriversigns.h: In member function ‘void PCodriverSigns::set(const string&, float)’:
no matching function for call to ‘std::vector<std::basic_string<char> 

(TBD)

Starfighter

Source code: starfighter-1.5.1.1-src.tar.gz (Alternate link) Està basat en SDL2. La versió 1.3 també està basada en SDL2.

SuperTux

Està basat en SDL2

Blobwars

Està basat en SDL2

Crossfire

Funciona amb les llibreries GTK (a mi només m'interessa SDL)

Ketm i wing

S'instal.len amb sudo apt-get:

$ sudo apt-get install ketm ketm-data
$ sudo apt-get install wing wing-data

Llista de jocs que he aconseguit compilar a la RPi

  • 2048 Puzzle
  • Ri-li

creat per Joan Quintana Compte, març 2016