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









