Sisällysluettelo:
Vicipaedia Arcanum (tästä lähtien VA) on nettipalvelimella toimiva tietosanakirja pöytäroolipeleille. VA:ssa käyttäjä voi luoda omalle pelilleen kampanjan, liittyä muiden luomiin kampanjoihin, ja päivittää kampanjaan liittyvää tietokantaa hirviöistä ja NPC:istä (non-player character).
Kun kampanja luodaan, se voidaan suojata salasanalla, jotta vain tietyt käyttäjät voivat liittyä siihen. Kampanjaan liittyneet käyttäjät voivat vapaasti lisätä ja muokata kampanjan sisällä olevia entiteettejä. Kampanjan luojalla on kampanjassa admin-oikeudet, eli hän voi poistaa muita käyttäjiä, hirviöitä ja NPC:itä kampanjasta, vaihtaa kampanjan salasanan, ja poistaa koko kampanjan.
Tällä hetkellä VA:ssa voit:
Linkki Heroku-pilvipalvelimella pyörivään sovellukseen
CREATE TABLE -lauseet:
CREATE TABLE account (
id INTEGER NOT NULL,
date_created DATETIME,
date_modified DATETIME,
name VARCHAR(144) NOT NULL,
password VARCHAR(144) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE campaign (
id INTEGER NOT NULL,
date_created DATETIME,
date_modified DATETIME,
campaign_name VARCHAR(144) NOT NULL,
game_system VARCHAR(144) NOT NULL,
password VARCHAR(144),
admin_id INTEGER NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY(admin_id) REFERENCES account (id)
);
CREATE TABLE creature (
id INTEGER NOT NULL,
date_created DATETIME,
date_modified DATETIME,
creature_name VARCHAR(144) NOT NULL,
type VARCHAR(144) NOT NULL,
size VARCHAR(144) NOT NULL,
description VARCHAR(1000),
campaign_id INTEGER NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY(campaign_id) REFERENCES campaign (id) ON DELETE CASCADE
);
CREATE TABLE association (
account_id INTEGER,
campaign_id INTEGER,
FOREIGN KEY(account_id) REFERENCES account (id),
FOREIGN KEY(campaign_id) REFERENCES campaign (id)
);
CREATE TABLE npc (
id INTEGER NOT NULL,
date_created DATETIME,
date_modified DATETIME,
npc_name VARCHAR(144) NOT NULL,
race VARCHAR(144) NOT NULL,
location VARCHAR(144) NOT NULL,
occupation VARCHAR(144) NOT NULL,
description VARCHAR(1000),
campaign_id INTEGER NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY(campaign_id) REFERENCES campaign (id) ON DELETE CASCADE
);
"Haluan suojata luomani kampanjan salasanalla, jotta vain haluamani henkilöt voivat liittyä siihen."
Tarkistetaan, onko kyseisellä nimellä kampanjaa:
SELECT * FROM campaign WHERE campaign_name LIKE "%campaign_name%";
Kampanjan luominen, jos kyseisellä nimellä ei ole kampanjaa:
INSERT INTO campaign (date_created, date_modified, campaign_name, game_system, password) VALUES (current_date, current_date, campaign_name, game_system, password);
"Opimme jotain uutta Beholderista, mutta Beholder on jo lisätty kampanjamme listaan. Tämän vuoksi haluan, että hirviöiden tietoja voi muokata helposti."
Jos halutaan muuttaa nimeä, tarkistetaan, onko uudella nimellä hirviötä (tai NPC:tä):
SELECT * FROM creature WHERE creature_name LIKE "%creature_name%" AND creature.campaign_id = campaign_id;
Hirviön (tai NPC:n) muuttaminen:
UPDATE creature SET date_modified = current_date, creature_name = new_name, type = new_type, size = new_size, description = new_description WHERE id = id;
"Pelaan useammassa kampanjassa, minkä vuoksi haluan pystyä liittymään useampaan kampanjaan palvelussa."
Uuden liitoksen luominen liitostauluun:
INSERT INTO association (account_id, campaign_id) VALUES (current_user_id, campaign_id);
"Haluan pitää eri kampanjoissa oppimani tiedot erillään toisistaan, koska kampanjoiden hirviöt voivat poiketa toisistaan paljonkin."
Tiettyyn kampanjaan liittyvien NPC:iden (tai hirviöiden) hakeminen:
SELECT * FROM npc WHERE npc.campaign_id = campaign_id;
"Haluan helposti nähdä kampanjat, joihin olen jo liittynyt."
Kampanjat, joihin käyttäjä on liittynyt, sekä näiden lukumäärä:
SELECT * FROM campaign INNER JOIN association ON campaign.id = association.campaign_id AND association.account_id = current_user_id;
SELECT COUNT(campaign.id) FROM campaign INNER JOIN association ON campaign.id = association.campaign_id AND association.account_id = current_user_id;
"Kaverini loi kampanjan palveluun. Haluan, että kampanjan voi etsiä nimellä, jotta kampanjaan liittyminen olisi helppoa ja nopeaa."
"Kohtasin pelissä zombien näköisen otuksen, mutta en ole varma, oliko kyseessä zombie. Tämän vuoksi haluan, että palvelussa voi etsiä hirviöitä nimen ja tyypin perusteella."
Kohtien 6 ja 7 toiminnallisuus on toteutettu front endissä.
Varmista, että sinulla on asennettuna vähintään Pythonin versio 3.5 sekä Pythonin pip (asentuu tavallisesti Pythonin kanssa) ja venv-kirjasto
Luo kansioon virtuaaliympäristö komennolla
python3 -m venv venv
Aktivoi kansiossa /Vicipaedia-Arcanum/venv/Scripts
oleva tiedosto activate.bat
(Linuxilla riittää komento source venv/bin/activate
)
Navigoi terminaalissa projektin juurikansioon ja syötä komento pip install -r requirements.txt
; näin pip asentaa tarvittavat kirjastot
Käynnistä sovellus suorittamalla tiedosto run.py
. Sovellus pyörii nyt lokaalisti koneellasi, tietokannanhallinnassa käytetään SQLiteä, ja debug-muoto on päällä
Halutessasi sovellus on valmis siirrettäväksi pilveen. Tiedostossa __init__.py
voit muokata, mitä tietokannanhallintajärjestelmää käytetään. Tällä hetkellä on määritelty, että Herokussa käytetään PostgreSQL:ää seuraavalla koodilla
if os.environ.get("HEROKU"):
app.config["SQLALCHEMY_DATABASE_URI"] = os.environ.get("DATABASE_URL")
Sovelluksessa on jokaisessa input-kentässä ohjeet oikeanlaiselle syötteelle, joten näitä ei käsitellä ohjeissa. Lisäksi sovellus ilmoittaa mahdollisista virheistä/ongelmista syötteessä.