Slnečná pyramída: Rozdiel medzi revíziami
Zo stránky SensorWiki
| 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 z 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.
