Slnečná pyramída: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
|||
(33 medziľahlých úprav od rovnakého používateľa nie je zobrazených.) | |||
Riadok 1: | Riadok 1: | ||
{| | {| | ||
|Autori: || ''' | |Autori: || '''Zoltán Imre, Filip Jančík''' | ||
|- | |- | ||
|Študijný odbor: || Aplikovaná | |Študijný odbor: || Aplikovaná informatika || 3. Bc. ('''2018''') | ||
|} | |} | ||
== Opis projektu == | == Opis projektu == | ||
[[Súbor:IZJF Title.jpg|center|800px]] | |||
'''Projekt:''' | '''Projekt:''' | ||
Riadok 13: | Riadok 15: | ||
'''Cieľ hry:''' | '''Cieľ hry:''' | ||
Hráčom je umožnené vytvoriť si vlastné pravidlá pomocou priložených objektov. K hre | Hráčom je umožnené vytvoriť si vlastné pravidlá pomocou priložených objektov. K hre je pridaný vlastný návrh. | ||
'''Prečo?''' | '''Prečo?''' | ||
# Hra je vytvorená pre milovníkov spoločenských hier, ako aj pre fanúšikov seriálu Rick and Morty. | # 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ť | # Cieľom projektu bolo vytvorenie spoločneskej hry, ktorá sa dá prispôsobiť osobitným návrhom hráčov. | ||
'''Ako ?''' | '''Ako ?''' | ||
Riadok 25: | Riadok 27: | ||
* Ďalšie časti hry sú vytvorené 3D tlačou. | * Ďalšie časti hry sú vytvorené 3D tlačou. | ||
__TOC__ | __TOC__ | ||
Riadok 36: | Riadok 33: | ||
* vytvorenie návrhu hracej plochy pomocou softvéru LibreCAD | * vytvorenie návrhu hracej plochy pomocou softvéru LibreCAD | ||
* vytvorenie modelov k ďalším komponentom hry | * vytvorenie modelov k ďalším komponentom hry pomocou softvérov 3ds Max a Blender | ||
* vyrezanie hracej plochy z preglejky pomocou lasera | * vyrezanie hracej plochy z preglejky pomocou lasera | ||
* tlač komponentov 3D tlačiarňou | * tlač komponentov 3D tlačiarňou | ||
* vytvorenie | * vytvorenie návrhu na hru | ||
* softvérové testovanie hry (NetBeans - Java) | * softvérové testovanie hry (NetBeans - Java) | ||
== 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:IZJF 3ds.png|200px]][[Súbor:IZJF mudbox.png|200px]] | |||
Rebríky a cieľ sme vytvorili v softvéri Blender: | |||
[[Súbor:IZJF ladder.png|213px]][[Súbor:IZJF podium.png|300px]] | |||
Mincu sme vytvorili v softvéri OpenSCAD: | |||
[[Súbor:IZJF coin.png|200px]] | |||
Hracia plocha(prvá úroveň) v softvéri LibreCad: | |||
[[Súbor:IZJF libre.png|400px]] | |||
=== 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:IZJF p1.jpg|500px]] | |||
[[Súbor:IZJF p2.jpg|500px]] | |||
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. | |||
int | [[Súbor:IZJF 2.jpg|500px]] | ||
return( | <source lang="java"> | ||
/* Gametype Tester: Chase */ | |||
public static void main(String[] args) { | |||
int tests = 1000000; | |||
int finish = 56; | |||
int p1Start = 1; | |||
int p2Start = 32; | |||
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 | |||
int difference = Math.abs(die1 - die2); | |||
return difference; | |||
} | |||
public static boolean Over(int p1Pos, int p2Pos) { | |||
return p1Pos >= p2Pos; | |||
} | |||
} | } | ||
</source> | </source> | ||
'''Zdrojové kódy:''' | |||
Java tester: | |||
[[Médiá:DTV_Chase_Statistics.java|Chase Statistics.java]] | |||
OpenSCAD: | |||
[[Médiá:IZFJ_coin.scad|Minca.scad]] | |||
LibreCAD: | |||
[[Médiá:IZFJ_pyramid.zip|Pyramída.zip]] | |||
3D: | |||
[[Médiá:IZFJ_ladder.obj|Rebrík.obj]] | |||
[[Médiá:IZFJ_finish.obj|Cieľ.obj]] | |||
[https://drive.google.com/open?id=1zWIk6J6dC_X9VamdkmAyeXo3BcPpDKjt Figúrky a kocka] | |||
=== 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 | Z testovania hry Chase sme získali hodnoty: | ||
* naháňaný hráč začína na 32. políčku, spolu s cieľom je celkom 56 políčok | |||
* druhý hráč začína v niektorom rohu, rebrík je položený vedľa ňeho, pričom ďalší rebrík o poschodie vyššie | |||
* pri zavedení týchto pravidiel a po simulácii 10 miliónov hier sme zistili, že naháňaný hráč vyhráva 49% hier | |||
[[Súbor:IZJF layout.png|300px]] | |||
Legenda: Zelená - naháňaný hráč, Oranžová - druhý hráč, Červená - cieľ, Sivá - rebríky | |||
[[Category:DTV2018]] | [[Category:DTV2018]] |
Aktuálna revízia z 11:12, 29. máj 2018
Autori: | Zoltán Imre, Filip Jančík | |
Študijný odbor: | Aplikovaná informatika | 3. Bc. (2018) |
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 je pridaný vlastný návrh.
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ť osobitný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ávrhu 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:
Hracia plocha(prvá úroveň) v softvéri LibreCad:
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:
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 = 32;
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
int difference = Math.abs(die1 - die2);
return difference;
}
public static boolean Over(int p1Pos, int p2Pos) {
return p1Pos >= p2Pos;
}
}
Zdrojové kódy:
Java tester: Chase Statistics.java
OpenSCAD: Minca.scad
LibreCAD: Pyramída.zip
3D: Rebrík.obj Cieľ.obj Figúrky a kocka
Výsledok
Vytvorená hra je rozšíriteľná ďalšími vlastnými komponentmi a ľahko uskladniťeľná vďaka jej modulárnosti. Z testovania hry Chase sme získali hodnoty:
- naháňaný hráč začína na 32. políčku, spolu s cieľom je celkom 56 políčok
- druhý hráč začína v niektorom rohu, rebrík je položený vedľa ňeho, pričom ďalší rebrík o poschodie vyššie
- pri zavedení týchto pravidiel a po simulácii 10 miliónov hier sme zistili, že naháňaný hráč vyhráva 49% hier
Legenda: Zelená - naháňaný hráč, Oranžová - druhý hráč, Červená - cieľ, Sivá - rebríky