Operácie

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

Z SensorWiki

(Opis projektu)
 
(35 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''')  
 
|}
 
|}
  
 
== 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 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 25: Riadok 27:
 
* Ďalšie časti hry sú vytvorené 3D tlačou.
 
* Ďalšie časti hry sú vytvorené 3D tlačou.
  
[http://www.example.com link title]
 
  
[[Súbor:MojObrazok2.jpg|center|300px]]
+
__TOC__
 +
 
 +
== 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:
 +
 
 +
[[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]]
  
[[Médiá:MojZdrojak.c]]
 
  
__TOC__
+
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]]
  
== Analýza ==
 
  
V tejto časti popíšete ako idete daný problém riešiť. Uvediete sem aj všetky potrebné technické údaje,  
+
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.
ktoré sú potrebné na úspešné vyriešenie projektu. Napríklad:
 
  
* popis komunikačnej zbernice (i2c, 1-wire, RS-232 a pod.)
+
[[Súbor:IZJF 2.jpg|500px]]
* obrázok zapojenia vývodov použitej súčiastky
 
* odkaz na katalógový list
 
* priebehy dôležitých signálov
 
* este jedna polozka
 
  
  
== Popis riešenia ==
+
<source lang="java">
 +
/* Gametype Tester: Chase  */
 +
public static void main(String[] args) {
  
Sem opíšete ako konkrétne ste problém vyriešili. Začnite popisom pripojenia k procesoru
+
        int tests = 1000000;
(nezabudnite na schému zapojenia!) a zdôraznite ktoré jeho periférie ste pritom využili.
+
        int finish = 56;
 +
        int p1Start = 1;
 +
        int p2Start = 32;
 +
        boolean p1Begins = false;
  
'''Schéma zapojenia snímača'''
+
        int p1Wins = 0;
[[Súbor:Zapojenie.png]]
+
        int p2Wins = 0;
  
[[Súbor:Example.jpg]]
+
        for (int i = 1; i <= tests; i++) {
  
Pozn.: Názov obrázku musí byť jedinečný, uvedomte si, že Obr1.jpg už pred vami skúsilo
+
            int p1Pos = p1Start;
nahrať už aspoň 10 študentov.
+
            int p2Pos = p2Start;
  
[[Súbor:MojObrazok.jpg|center|250px]]
+
            //while Player#1 is behind or Player#2 haven't reached finish
 +
            while (true) {
  
=== Algoritmus a program ===
+
                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);
 +
    }
  
Uveďte stručný popis algoritmu, v akom jazyku a verzii vývojového prostredia ste ho vytvorili.
+
    public static int Dice(int player) {
Je vhodné nakresliť aspoň hrubú štruktúru programu napríklad vo forme vývojového diagramu.  
+
        Random rnd = new Random();
Rozsiahly program pre lepšiu prehľadnosť rozdeľte do viacerých súborov.
+
        int die1 = rnd.nextInt(6) + 1;
 +
        int die2 = rnd.nextInt(6) + 1;
  
Vyberte podstatné časti zdrojového kódu, použite na to prostredie ''source'':
+
        //if first player -> return bigger value
 +
        if (player == 1) {
 +
            int biggerValue = (die1 > die2) ? die1 : die2;
 +
            return biggerValue;
 +
        }
  
<source lang="c">
+
        //if second player -> return difference
/* A nezabudnite zdroják hojne komentovať  */
+
        int difference = Math.abs(die1 - die2);
 +
        return difference;
 +
    }
  
int main(void) {
+
    public static boolean Over(int p1Pos, int p2Pos) {
   
+
        return p1Pos >= p2Pos;
    printf("Hello, World!\n");
+
     }
     return(0); 
 
 
}
 
}
 
</source>
 
</source>
  
Nezabudnite však nahrať aj kompletné zdrojové kódy vášho programu!
+
'''Zdrojové kódy:'''
  
Zdrojový kód: [[Médiá:Serial.h|serial.h]] a [[Médiá:Pip.c|main.c]]
+
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]
  
[[Médiá:MojProgram.c|program.c]]
 
  
  
 
=== Výsledok ===
 
=== Výsledok ===
  
Nezabudnite zdokumentovať výsledok vašej práce. Určite sem patria fotografie, video
+
Vytvorená hra je rozšíriteľná ďalšími vlastnými komponentmi a ľahko uskladniťeľná vďaka jej modulárnosti.
a zhodnotenie ako ste spokojní s výsledkom,  
+
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
 +
 
  
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.
+
[[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