Operácie

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

Z SensorWiki

(Analýza)
(Popis riešenia)
Riadok 44: Riadok 44:
 
== Popis riešenia ==
 
== Popis riešenia ==
  
Sem opíšete ako konkrétne ste problém vyriešili. Začnite popisom pripojenia k procesoru
+
Hra je inšpirovaná seriálom Rick and Morty, konkrétnejšie časťou seriálu. Hlavnými postavami hry sú
(nezabudnite na schému zapojenia!) a zdôraznite ktoré jeho periférie ste pritom využili.  
+
Phoenix Person a Bird Person. Modely postavičiek a hracie kocky sme vytvorili pomocou 3ds Max a Mudbox.
  
'''Schéma zapojenia snímača'''
 
 
[[Súbor:Zapojenie.png]]
 
[[Súbor:Zapojenie.png]]
  
 
[[Súbor:Example.jpg]]
 
[[Súbor:Example.jpg]]
  
Pozn.: Názov obrázku musí byť jedinečný, uvedomte si, že Obr1.jpg už pred vami skúsilo
+
Rebríky a cieľ sme vytvorili v softvéri Blender.
nahrať už aspoň 10 študentov.  
 
  
 
[[Súbor:MojObrazok.jpg|center|250px]]
 
[[Súbor:MojObrazok.jpg|center|250px]]
  
=== Algoritmus a program ===
+
Mincu sme vytvorili v softvéri OpenSCAD.
  
Uveďte stručný popis algoritmu, v akom jazyku a verzii vývojového prostredia ste ho vytvorili.  
+
[[Súbor:MojObrazok.jpg|center|250px]]
Je vhodné nakresliť aspoň hrubú štruktúru programu napríklad vo forme vývojového diagramu.
+
 
Rozsiahly program pre lepšiu prehľadnosť rozdeľte do viacerých súborov.
+
=== 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]]
  
Vyberte podstatné časti zdrojového kódu, použite na to prostredie ''source'':
+
<source lang="java">
 +
/* Gametype Tester: Chase  */
 +
public static void main(String[] args) {
  
<source lang="c">
+
        int tests = 1000000;
/* A nezabudnite zdroják hojne komentovať  */
+
        int finish = 56;
 +
        int p1Start = 1;
 +
        int p2Start = 29;
 +
        boolean p1Begins = false;
  
int main(void) {
+
        int p1Wins = 0;
   
+
        int p2Wins = 0;
    printf("Hello, World!\n");
+
 
     return(0);
+
        for (int i = 1; i <= tests; i++) {
}
+
 
</source>
+
            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;
  
Nezabudnite však nahrať aj kompletné zdrojové kódy vášho programu!
+
        //if first player -> return bigger value
 +
        if (player == 1) {
 +
            int biggerValue = (die1 > die2) ? die1 : die2;
 +
            return biggerValue;
 +
        }
  
Zdrojový kód: [[Médiá:Serial.h|serial.h]] a [[Médiá:Pip.c|main.c]]
+
        //if second player -> return difference
 +
        return Math.abs(die1 - die2);
 +
    }
  
[[Médiá:MojProgram.c|program.c]]
+
    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 ===
  
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,
 
 
 
Kľúčové slová 'Category', ktoré sú na konci stránky nemeňte.
 
  
  
 
[[Category:DTV2018]]
 
[[Category:DTV2018]]

Verzia zo dňa a času 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?

  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ť osobytným návrhom hráčov.

Ako ?

  • Hracia plocha je vytvorená z preglejky, vyrezaná laserom.
  • Ďalšie časti hry sú vytvorené 3D tlačou.

link title

MojObrazok2.jpg

Médiá:MojZdrojak.c

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.

Zapojenie.png

Súbor:Example.jpg

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

MojObrazok.jpg

Mincu sme vytvorili v softvéri OpenSCAD.

MojObrazok.jpg

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.