Slnečná pyramída
Zo stránky SensorWiki
Autori: | Ján Mrkvička, Jozef Kuleha | |
Študijný odbor: | Aplikovaná mechatronika | 2. Ing. (2013) |
Opis projektu
Projekt:
Spoločenská hra inšpirovaná americkým animovaným sci-fi seriálom Rick and Morty. Hra obsahuje hraciu plochu, dve figúrky a ďalšie časti.
Cieľ hry:
Hráčom je umožnené vytvoriť si vlastné pravidlá pomocou priložených objektov. K hre sú pridané vlastné návrhy.
Prečo?
- Hra je vytvorená pre milovníkov spoločenských hier, ako aj pre fanúšikov seriálu Rick and Morty.
- Cieľom projektu bolo vytvorenie spoločneskej hry, ktorá sa dá prispôsobiť osobytným návrhom hráčov.
Ako ?
- Hracia plocha je vytvorená z preglejky, vyrezaná laserom.
- Ďalšie časti hry sú vytvorené 3D tlačou.
Analýza
- vytvorenie návrhu hracej plochy pomocou softvéru LibreCAD
- vytvorenie modelov k ďalším komponentom hry pomocou softvérov 3ds Max a Blender
- vyrezanie hracej plochy z preglejky pomocou lasera
- tlač komponentov 3D tlačiarňou
- vytvorenie návrhov na hru
- softvérové testovanie hry (NetBeans - Java)
Popis riešenia
Hra je inšpirovaná seriálom Rick and Morty, konkrétnejšie časťou seriálu. Hlavnými postavami hry sú Phoenix Person a Bird Person. Modely postavičiek a hracie kocky sme vytvorili pomocou 3ds Max a Mudbox.
Rebríky a cieľ sme vytvorili v softvéri Blender.
Mincu sme vytvorili v softvéri OpenSCAD.
Testovanie návrhov
Na testovanie zložitejších návrhov sme použili softvér NetBeans 8.2 a programovací jazyk Java. V softvéri sme vytvorili cyklus na viaceré testovanie a podľa podielu výhier sme ďalej menili parametre a pravidlá hry, napr. číslo štartovacieho políčka (handycap pre hráča) alebo pravidlá pri hodoch kockou. Pravdepodobnosti hodených hodnôt sme zahrnuli do tabuľky.
Návrh hry "Chase - Honba"
Ide o naháňačku, kde jeden hráč je bližšie postavený k cieľu. Druhý hráč ho musí dobehnúť (chytiť) pred cieľom. Obaja sa pohybujú v smere hodinkových ručičiek. Každý hráč hádže dvoma kockami, ale kroky sa vypočítavajú osobitne:
- Prenasledovaný hráč sa posúva o rozdiel hodnôt na kockách (0 až 5) a v hre začína ako prvý
- Druhý hráč sa posúva o väčšiu hodnotu na dvoch kockách (0 až 6)
Druhý hráč má teda rýchlejšiu postavu, priemernú 'rýchlosť' sme vypočítali podľa pravdepodobností krokov:
Súbor:RychlostHracovTabulka.jpg
Hráča sme teda postavili približne na polovicu celej cesty. Napísali sme program, ktorý simuluje našu hru a podľa podielov výhier sme vytvorili konečnú hru.
/* Gametype Tester: Chase */
public static void main(String[] args) {
int tests = 1000000;
int finish = 56;
int p1Start = 1;
int p2Start = 29;
boolean p1Begins = false;
int p1Wins = 0;
int p2Wins = 0;
for (int i = 1; i <= tests; i++) {
int p1Pos = p1Start;
int p2Pos = p2Start;
//while Player#1 is behind or Player#2 haven't reached finish
while (true) {
if (p1Begins) {
p1Pos += Dice(1);
if (Over(p1Pos, p2Pos)) {
p1Wins++;
break;
}
p2Pos += Dice(2);
if (p2Pos >= finish) {
p2Wins++;
break;
}
} else {
p2Pos += Dice(2);
if (p2Pos >= finish) {
p2Wins++;
break;
}
p1Pos += Dice(1);
if (Over(p1Pos, p2Pos)) {
p1Wins++;
break;
}
}
}
System.out.println("TEST #" + i + ":\t" + p1Pos + "-" + p2Pos + "\t(Score: " + p1Wins + "-" + p2Wins + ")\n");
}
System.out.println("Final Score: " + p1Wins + " - " + p2Wins);
}
public static int Dice(int player) {
Random rnd = new Random();
int die1 = rnd.nextInt(6) + 1;
int die2 = rnd.nextInt(6) + 1;
//if first player -> return bigger value
if (player == 1) {
int biggerValue = (die1 > die2) ? die1 : die2;
return biggerValue;
}
//if second player -> return difference
return Math.abs(die1 - die2);
}
public static boolean Over(int p1Pos, int p2Pos) {
return p1Pos >= p2Pos;
}
Zdrojový kód: serial.h
Výsledok
Vytvorená hra je rozšíriteľná ďalšími vlastnými komponentmi a ľahko uskladniťeľná vďaka jej modulárnosti.