Operácie

Slnečná pyramída

Z SensorWiki

Verzia z 12:29, 29. máj 2018, ktorú vytvoril DVPS (diskusia | príspevky)
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 TODO: GOOGLE DRIVE PRE OSTATNÉ (UŽ SA NAHRÁVAJÚ)


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