Operácie

Slnečná pyramída: Rozdiel medzi revíziami

Z SensorWiki

(Popis riešenia)
 
(22 medziľahlých úprav od rovnakého používateľa nie je zobrazených.)
Riadok 1: Riadok 1:
 
{|
 
{|
|Autori:      || '''Ján Mrkvička, Jozef Kuleha'''  
+
|Autori:      || '''Zoltán Imre, Filip Jančík'''  
 
|-
 
|-
|Študijný odbor:  || Aplikovaná mechatronika || 2. Ing.  ('''2013''')  
+
|Študijný odbor:  || Aplikovaná informatika || 3. Bc.  ('''2018''')  
 
|}
 
|}
  
Riadok 15: Riadok 15:
 
'''Cieľ hry:'''
 
'''Cieľ hry:'''
  
Hráčom je umožnené vytvoriť si vlastné pravidlá pomocou priložených objektov. K hre sú pridané vlastné návrhy.
+
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ť osobytným návrhom hráčov.
+
# Cieľom projektu bolo vytvorenie spoločneskej hry, ktorá sa dá prispôsobiť osobitným návrhom hráčov.
  
 
'''Ako ?'''
 
'''Ako ?'''
Riadok 26: Riadok 26:
 
* Hracia plocha je vytvorená z preglejky, vyrezaná laserom.
 
* Hracia plocha je vytvorená z preglejky, vyrezaná laserom.
 
* Ďalšie časti hry sú vytvorené 3D tlačou.
 
* Ďalšie časti hry sú vytvorené 3D tlačou.
 +
  
 
__TOC__
 
__TOC__
Riadok 35: Riadok 36:
 
* 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 návrhov na hru
+
* vytvorenie návrhu na hru
 
* softvérové testovanie hry (NetBeans - Java)
 
* softvérové testovanie hry (NetBeans - Java)
  
Riadok 41: Riadok 42:
  
 
Hra je inšpirovaná seriálom Rick and Morty, konkrétnejšie časťou seriálu. Hlavnými postavami hry sú
 
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.
+
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]]
 
[[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|200px]]
+
Rebríky a cieľ sme vytvorili v softvéri Blender:
  
Mincu sme vytvorili v softvéri OpenSCAD.
+
[[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]]
  
[[Súbor:IZJF coin.png|center|200px]]
 
  
 
=== Testovanie návrhov ===
 
=== Testovanie návrhov ===
Riadok 67: Riadok 76:
 
Druhý hráč má teda rýchlejšiu postavu, priemernú 'rýchlosť' sme vypočítali podľa pravdepodobností krokov:
 
Druhý hráč má teda rýchlejšiu postavu, priemernú 'rýchlosť' sme vypočítali podľa pravdepodobností krokov:
  
[[Súbor:RychlostHracovTabulka.jpg]]
+
[[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.
 
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:IZJF 2.jpg|center|300px]]
+
[[Súbor:IZJF 2.jpg|500px]]
 +
 
  
 
<source lang="java">
 
<source lang="java">
Riadok 80: Riadok 92:
 
         int finish = 56;
 
         int finish = 56;
 
         int p1Start = 1;
 
         int p1Start = 1;
         int p2Start = 29;
+
         int p2Start = 32;
 
         boolean p1Begins = false;
 
         boolean p1Begins = false;
  
Riadok 135: Riadok 147:
  
 
         //if second player -> return difference
 
         //if second player -> return difference
         return Math.abs(die1 - die2);
+
         int difference = Math.abs(die1 - die2);
 +
        return difference;
 
     }
 
     }
  
Riadok 141: Riadok 154:
 
         return p1Pos >= p2Pos;
 
         return p1Pos >= p2Pos;
 
     }
 
     }
 +
}
 
</source>
 
</source>
  
Zdrojový kód: [[Médiá:Serial.h|serial.h]]
+
'''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.  
+
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
 +
 
 +
 
 +
[[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

IZJF Title.jpg

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?

  1. Hra je vytvorená pre milovníkov spoločenských hier, ako aj pre fanúšikov seriálu Rick and Morty.
  2. 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:

IZJF 3ds.pngIZJF mudbox.png


Rebríky a cieľ sme vytvorili v softvéri Blender:

IZJF ladder.pngIZJF podium.png


Mincu sme vytvorili v softvéri OpenSCAD:

IZJF coin.png


Hracia plocha(prvá úroveň) v softvéri LibreCad:

IZJF libre.png


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:

IZJF p1.jpg IZJF p2.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.

IZJF 2.jpg


/* 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


IZJF layout.png

Legenda: Zelená - naháňaný hráč, Oranžová - druhý hráč, Červená - cieľ, Sivá - rebríky