Slnečná pyramída: Rozdiel medzi revíziami
Z SensorWiki
(→Analýza) |
(→Popis riešenia) |
||
Riadok 44: | Riadok 44: | ||
== Popis riešenia == | == 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. | |
− | |||
[[Súbor:Zapojenie.png]] | [[Súbor:Zapojenie.png]] | ||
[[Súbor:Example.jpg]] | [[Súbor:Example.jpg]] | ||
− | + | Rebríky a cieľ sme vytvorili v softvéri Blender. | |
− | |||
[[Súbor:MojObrazok.jpg|center|250px]] | [[Súbor:MojObrazok.jpg|center|250px]] | ||
− | + | Mincu sme vytvorili v softvéri OpenSCAD. | |
− | + | [[Súbor:MojObrazok.jpg|center|250px]] | |
− | + | ||
− | + | === 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) | ||
+ | * 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. | ||
+ | |||
+ | [[Súbor:PHOTOhraChase.jpg|center|250px]] | ||
− | + | <source lang="java"> | |
+ | /* 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 | + | 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; | ||
+ | } | ||
+ | </source> | ||
+ | Zdrojový kód: [[Médiá:Serial.h|serial.h]] | ||
=== Výsledok === | === Výsledok === | ||
− | + | Vytvorená hra je rozšíriteľná ďalšími vlastnými komponentmi a ľahko uskladniťeľná vďaka jej modulárnosti. | |
− | a | ||
− | |||
− | |||
[[Category:DTV2018]] | [[Category:DTV2018]] |
Verzia zo dňa a času 17:08, 24. máj 2018
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)
- 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.