imagen del icon de Processing

¿Qué es Processing?

Processing es un lenguaje de programación y entorno de desarrollo integrado de código abierto basado en Java, de fácil utilización, y que sirve como medio para la enseñanza y producción de proyectos multimedia e interactivos de diseño digital.

Una de las metas de Processing es actuar como herramienta de introducción en el mundo de la programación a los no-programadores a través de un feedback visual.

Tecnología multimedial 1: Utilización de la programación

Fundamentación de la Materia

Esta asignatura se ocupa de la formación relativa a competencias de manipulación, específicamente edición y programación, de medios digitales interactivos y a las destrezas necesarias para desarrollar capacidades de producción en diferentes entornos multimedia. El curso busca indagar en las posibilidades expresivas y comunicacionales que aportan tanto los lenguajes de programación como las tecnologías web.

Dado que este es un campo que avanza a gran velocidad, toda tecnología se vuelve obsoleta en pocos años, es indispensable que el alumno esté preparado para una constante investigación que le permita interpretar esa dinámica con fluidez. Para ello necesitará comprender los paradigmas y modelos que organizan tales cambios más que las tecnologías disponibles en un momento particular.

Lista de Trabajos Prácticos realizados a lo largo del año
  • star_rateTP#1 - Círculo Cromático
  • star_rateTP#2 - Animación Créditos
  • star_rateTP#3 - Ilusión Óptica Interactiva
  • star_rateTP#4 - Aventura Gráfica
  • star_rateTP#5 - Video Juego
  • star_rateTP Final - Aventura Gráfica + Video Juego

Trabajo Práctico nº 1 : Círculo Cromático

Consigna:

Crear tu propia versión de un círculo cromático con colores primarios, secundarios y terciarios (RGB). El TP debe ser realizado solo con instrucciones de dibujo. No debe haber ni eventos ni condicionales.

El círculo cromático es una representación ordenada y circular de los colores de acuerdo con su matiz, en donde se representa a los colores primarios y sus derivados.


    void setup (){
    size(700,600); //(alto,ancho) (x,y)
    background(255,255,255); //blanco
    strokeWeight(2);

    }

    void draw(){
    line(350,100,150,370); //(x1,y1,x2,y2)
    line(150,370,550, 370);
    line(550, 370,350,100);

    line(350,100,170,170); //linea rojo a magenta
    line(350,100,550, 170); //linea rojo a amarillo

    line(150,350,150,200); //linea azul a magenta
    line(150,370,350,470); //linea azul a cian

    line(550,350,550,150); //linea verde a amarillo
    line(550,350,350,470); //linea verde a cian

    line(150,370,200,500); //linea azul a ceruleo
    line(350,470,200,500); //linea cian a ceruleo

    line(350,470,500,500); //linea cian a esmeralda
    line(550, 350,500,500); //linea verde a esmeralda

    line(550, 350,640,260); //linea verde a verde lima
    line(550,150,640,260); //linea amarillo a verde lima

    line(550,150,450,50); //linea amarillo a naranja
    line(350,100,450,50); //linea rojo a naranja

    line(150,200,80,270); //linea magenta a violeta
    line(150,370,80,270); //linea azul a violeta

    line(150,200,250,50); //linea magenta a fucsia
    line(350,100,250,50); //linea rojo a fucsia

    fill (255,0,119); //magenta
    circle(150, 150, 100); //circle(x, y, extent)

    fill (255,255,0); //amarillo
    circle(550, 150, 100);

    fill (0,183,235); //cian
    circle(350, 470, 100);


    fill (226,4,4); //rojo
    circle(350, 100, 120);

    fill (5,29,239); //azul
    circle(150, 370,120);

    fill (0,213,0); //verde
    circle(550, 350, 120);


    fill(0,135,209);
    circle(200,500,70); //ceruleo

    fill(0,153,117);
    circle(500,500,70); //esmeralda

    fill(191,255,0);
    circle(640,260,70); //verde lima

    fill(255,128,0);
    circle(450,50,70); //naranja

    fill(148,0,211);
    circle(80,270,70); //violeta

    fill(227,0,82);
    circle(250,50,70); //fucsia

    }
                                

Trabajo Práctico nº 2 : Animación Créditos

Consigna:

Crear una animación con la secuencia de créditos(*) de una película o videojuego seleccionado. Al menos debe contener cinco secuencias de información. Por ejemplo:

  1. Título: una pantalla
  2. Protagonistas principales y secundarios: 2 o 3 pantallas
  3. Música y dirección: 2 o 3 pantallas.

Sería importante respetar la estética de la obra seleccionada.

Al realizar este ejercicio deberías haber alcanzado dominio de estos temas:

  • star_rateUsar variables numéricas para operaciones como: Cambiar la ubicación, el tamaño y el color de las formas. Obtener resultados haciendo cálculos matemáticos con variables.
  • star_rateObtener las propiedades del mouse en el espacio de coordenadas.
  • star_rateNuevas instrucciones para gráficos: Carga de imágenes (jpg ó .png). Carga de tipografías y gráficos con texto.
  • star_rateUtilizar valores numéricos aleatorios.
  • star_rateUso de condicionales con AND y OR

    PFont miLetra;
    PImage BG, Header, Piedra, Bedrock, Diamante, Sword;

    int pos, pos2;
    float S;
    int posY;
    int posFondo;
    int Cuadrado;

    void setup(){
    background(0);
    size(1190,670); //x,y
    
    miLetra = createFont("Minecraftia-Regular.ttf", 60);
    textFont(miLetra, 20);
    BG = loadImage( "uOjPT3.jpg");
    Header = loadImage( "Minecraft_Java_Edition.png");
    Piedra = loadImage( "Piedra.png");
    Piedra.resize(0, 50);
    Diamante = loadImage( "Diamante.png");
    Diamante.resize(0, 50);
    Bedrock = loadImage( "Bedrock.jpg");
    Bedrock.resize(0, 50);
    
    Sword = loadImage( "Sword.png");
    
    textAlign( CENTER, CENTER );
    
    frameRate(2000);
    
    Cuadrado = 8;
    posY  = height;
    posFondo = height/2;
    
    smooth();
    noCursor();

    }

    void draw(){
    pos = int(random(width));
    pos2 = int(random(height));
    S = random(3);
    image(BG,0,0);
    if (S>=0 && S<=1 && pos%50<3 && pos2%50<3) {
        image(BG, 0, 0);
        image (Bedrock, pos, pos2);
        BG = get(0, 0, width, height);
    } else if (S>=1 && S<=2 && pos%50<3 && pos2%50<3) {
        image(BG, 0, 0);
        image (Diamante, pos, pos2);
        BG = get(0, 0, width, height);
    } else if (S>=2 && S<=3 && pos%50<3 && pos2%50<3) {
        image(BG, 0, 0);
        image (Piedra, pos, pos2);
        BG = get(0, 0, width, height);
    }
    
    image(Header, 300, posY);
    
    fill(255);
    text( "============", 590, posY+230);
    fill(255,231,6);
    text( "Minecraft Team", 590, posY+290);
    fill(255);
    text( "============", 590, posY+350);
    
    
    fill(107,101,95);
    text( "Original Creator", 350, posY+470);
    fill(255);
    text( "Markus Persson", 450, posY+530);
    
    fill(107,101,95);
    text( "Chief Creative Officer", 390, posY+650);
    fill(255);
    text( "Jeans Bergensten", 460, posY+710);
    
    fill(107,101,95);
    text( "Producers", 320, posY+830);
    fill(255);
    text( "Adrian Östergård", 450, posY+900); 
    text( "Dejan Dimic", 410, posY+970); 
    text( "Frederik Telenius", 450, posY+1040); 
    text( "Isabella Arningsmark", 470, posY+1110);
    
    fill(107,101,95);
    text( "Lead Engineer", 340, posY+1230);
    fill(255);
    text( "Nathan Adams", 430, posY+1300); 
    
    fill(107,101,95);
    text( "Game Developers", 360, posY+1420);
    fill(255);
    text( "Agnes Larsson", 440, posY+1490); 
    text( "Bartosz Bok", 420, posY+1560); 
    text( "Cory Scheviak", 430, posY+1630); 
    text( "Erik Broes", 410, posY+1700); 
    text( "Georgii Gavrichev", 450, posY+1770); 
    text( "Josh Letellier", 430, posY+1840); 
    text( "Maria Lemón", 415, posY+1910); 
    text( "Michael Stoyke", 430, posY+1980); 
    text( "Thomas Guimbretière", 465, posY+2050); 
    
    fill(107,101,95);
    text( "Launcher Tech Lead", 350, posY+2170);
    fill(255);
    text( "Mikael Hedberg", 440, posY+2240); 
    
    fill(107,101,95);
    text( "Launcher Developers", 360, posY+2360);
    fill(255);
    text( "Petr Mrázek", 410, posY+2430); 
    
    fill(107,101,95);
    text( "Realms Tech Lead", 340, posY+2550);
    fill(255);
    text( "Alexander Torstting", 460, posY+2620); 
    
    fill(107,101,95);
    text( "Realms Developers", 350, posY+2740);
    fill(255);
    text( "Alexandre Pretto Nunes", 500, posY+2810); 
    text( "Alexander Östman", 460, posY+2880); 
    text( "Billy Sjöberg", 430, posY+2950);
    text( "Brian Threvathan", 460, posY+3020);
    text( "Christoffer Hammarström", 500, posY+3090);
    text( "Erik Bylund", 410, posY+3160);
    text( "Henning Erlandsen", 460, posY+3230);
    text( "Mgnus Jäderberg", 450, posY+3300);
    text( "Márcio Oliveira", 430, posY+3370);
    text( "Niclas Unnervik", 430, posY+3440);
    text( "Sina Tamanna", 420, posY+3510);
    text( "Tomas Alaeus", 420, posY+3580);
    
    fill(107,101,95);
    text( "Minecraft Content Lead", 370, posY+3700);
    fill(255);
    text( "Marc Watson", 420, posY+3770); 
    
    fill(107,101,95);
    text( "Minecraft Content Coordinator", 420, posY+3890);
    fill(255);
    text( "Adam Martinsson", 440, posY+3960); 
    text( "Matthew Dryden", 430, posY+4030);
    text( "Oskar Thysell", 420, posY+4100);
    text( "Sara Lempiäinen", 430, posY+4170);
    
    fill(107,101,95);
    text( "Art Directors", 320, posY+4290);
    fill(255);
    text( "Johan Aronsson", 450, posY+4360); 
    text( "Markus Toivonen", 450, posY+4430); 
    text( "Martin Johansson", 460, posY+4500); 
    text( "Ninni Landin", 420, posY+4570);
    
    fill(107,101,95);
    text( "Graphics Artists", 320, posY+4690);
    fill(255);
    text( "Jasper Boerstra", 450, posY+4760); 
    text( "Mattis Grahm", 420, posY+4830);
    
    fill(107,101,95);
    text( "User Experience Design", 380, posY+4950);
    fill(255);
    text( "Lily Ekman", 410, posY+5020); 
    text( "Oscar Nilsson", 430, posY+5090);
    
    fill(107,101,95);
    text( "Lead User Experience Developers", 450, posY+5210);
    fill(255);
    text( "Sebastian Hidefelt", 470, posY+5280); 
    text( "Paulo Ragoha", 440, posY+5350); 
        
    fill(107,101,95);
    text( "User Experience Developers", 420, posY+5470);
    fill(255);
    text( "Albin Odervall", 470, posY+5540); 
    text( "Anna Päärni", 460, posY+5610); 
    text( "Dario Vodopivec", 480, posY+5680); 
    text( "Emelie Sidesiö", 470, posY+5750); 
    text( "Michael Novén", 470, posY+5820); 
    text( "Oleg Kozitsyn", 468, posY+5890); 
    
    fill(107,101,95);
    text( "Lead Sound Designer", 370, posY+6010);
    fill(255);
    text( "Samuel Âberg", 470, posY+6080);
    
    fill(107,101,95);
    text( "Sound Design", 300, posY+6200);
    fill(255);
    text( "Daniel Rosenfeld", 485, posY+6270);
    text( "Kevin Martinez", 475, posY+6340); 
    text( "Peter Mont", 455, posY+6410); 
    
        fill(107,101,95);
    text( "Music composed by", 330, posY+6530);
    fill(255);
    text( "Daniel Rosenfeld", 490, posY+6600);
    
    fill(107,101,95);
    text( "Writing", 260, posY+6720);
    fill(255);
    text( "Julian Gough", 460, posY+6790);
    
    fill(107,101,95);
    text( "Developers of Mo' Creatures", 394, posY+6910);
    fill(255);
    text( "Dan Roque", 440, posY+6980);
    text( "John Olarte (DrZhark)", 510, posY+7050);
    text( "Kent Christian Jensen", 510, posY+7120);
    
    fill(255);
    text( "============", 590, posY+7240);
    fill(255,231,6);
    text( "Mojang", 590, posY+7300);
    fill(255);
    text( "============", 590, posY+7360);
    
    fill(107,101,95);
    text( "Chief Executive Officer", 360, posY+7480);
    fill(255);
    text( "Jonas Mårtensson", 476, posY+7550);
    
    fill(107,101,95);
    text( "Chief Operation Officer", 360, posY+7670);
    fill(255);
    text( "Ulrika Möjgård", 460, posY+7740);
    
    fill(107,101,95);
    text( "Chief Technology Officer", 370, posY+7860);
    fill(255);
    text( "Mike Carlson", 446, posY+7930);
    
    fill(107,101,95);
    text( "Chief Brand Officer", 335, posY+8050);
    fill(255);
    text( "Lydia Winters", 450, posY+8120);
    
    fill(107,101,95);
    text( "Chief Content Officer", 345, posY+8240);
    fill(255);
    text( "Vu Bui", 406, posY+8310);
    
    fill(107,101,95);
    text( "Human Resources", 320, posY+8430);
    fill(255);
    text( "Maja Samuelsson", 470, posY+8500);
    text( "Viktoria Peterson", 470, posY+8570);
    
    fill(107,101,95);
    text( "Director of Finance", 335, posY+8690);
    fill(255);
    text( "Marina Kostesic", 460, posY+8760);
    
    fill(107,101,95);
    text( "Director of New Games", 345, posY+8880);
    fill(255);
    text( "Patrick Liu", 430, posY+8950);
    
    fill(107,101,95);
    text( "Game Director", 290, posY+9070);
    fill(255);
    text( "Måns Olson", 430, posY+9140);
    
    fill(107,101,95);
    text( "Gamer Designers", 310, posY+9260);
    fill(255);
    text( "Christian Berg", 450, posY+9330);
    text( "Max Herngren", 448, posY+9400);
    
        fill(107,101,95);
    text( "Lead Game Developers", 348, posY+9520);
    fill(255);
    text( "Kristoffer Jelbring", 480, posY+9590);
    text( "Niklas Börestam", 460, posY+9660);
    
    fill(107,101,95);
    text( "Game Developers", 310, posY+9780);
    fill(255);
    text( "Adrian Toncean", 450, posY+9850); 
    text( "Anton Arbring", 440, posY+9920); 
    text( "Aron Nieminen", 430, posY+9990); 
    text( "Christan Berg", 437, posY+10060); 
    text( "Daniel Wustenhoff", 460, posY+10130); 
    text( "Jakob Rydén", 420, posY+10200); 
    text( "Jon Amiga", 410, posY+10270); 
    text( "Mårte  Helander", 448, posY+10340); 
    
    fill(107,101,95);
    text( "Art Leads", 270, posY+10460);
    fill(255);
    text( "Daniel Björkefors", 450, posY+10530); 
    text( "Telemachus Stavropoulos", 500, posY+10600);
    
        fill(107,101,95);
    text( "Graphic Designers", 320, posY+10720);
    fill(255);
    text( "Wiktor Persson", 440, posY+10790); 
    text( "Markus Karlsson", 450, posY+10860);
    
    fill(107,101,95);
    text( "3D/VFX", 255, posY+10980);
    fill(255);
    text( "Christian Nordgren", 460, posY+11050); 
    text( "Jakob Gavelli", 425, posY+11120);
    
    fill(107,101,95);
    text( "Lead System Engineers", 350, posY+11240);
    fill(255);
    text( "Jifeng Zhang", 425, posY+11310); 
    text( "Robert Sjödahl", 435, posY+11380);
    text( "Torbjörn Allard", 445, posY+11450);
    
    fill(107,101,95);
    text( "System Developers", 320, posY+11570);
    fill(255);
    text( "Anders Martini", 435, posY+11640); 
    text( "Maksim Ivanov", 430, posY+11710); 
    text( "Maria Katsourani", 450, posY+11780); 
    text( "Mikael Malmqvist", 440, posY+11850); 
    text( "Joakim Ejenstam", 445, posY+11920); 
    text( "Jonas Bergström", 448, posY+11990); 
    text( "Petter Gisslen", 435, posY+12060); 
    text( "Pär Axelsson", 426, posY+12130); 
    text( "Stefan Torstensson", 470, posY+12200); 
    text( "Welan Yang", 415, posY+12270);
    
    fill(107,101,95);
    text( "Experience Design", 320, posY+12390);
    fill(255);
    text( "Daniel Feldt", 426, posY+12460);
    
    fill(107,101,95);
    text( "Director of Business Development", 418, posY+12580);
    fill(255);
    text( "Patrick Geuder", 440, posY+12650);
    
    fill(107,101,95);
    text( "Production Director", 330, posY+12770);
    fill(255);
    text( "Olof Carlson Sandvik", 480, posY+12840);
    
    fill(107,101,95);
    text( "Head of Creative Production", 380, posY+12960);
    fill(255);
    text( "Sheila Ho", 405, posY+13030);
    
    fill(107,101,95);
    text( "Production Manager", 340, posY+13150);
    fill(255);
    text( "Klas Hammarström", 465, posY+13220);
    
    fill(107,101,95);
    text( "Producers", 280, posY+13340);
    fill(255);
    text( "Adele Major", 430, posY+13410); 
    text( "David Nisshagen", 455, posY+13480); 
    text( "Hampus Nilsson", 450, posY+13550); 
    text( "Johannes Fridd", 450, posY+13620); 
    text( "Kaya Hatcher", 440, posY+13690); 
    text( "Lisa Kempe", 420, posY+13760); 
    text( "Moira Ingellum", 440, posY+13830); 
    text( "Nicolette Suraga", 460, posY+13900); 
    text( "Sarah Carton", 440, posY+13970); 
    text( "Sebastian Falk", 440, posY+14040);
    text( "Âsa Skogström", 440, posY+14110);
    
    fill(107,101,95);
    text( "Project Managers",310, posY+14230);
    fill(255);
    text( "Isabella Balk", 430, posY+14300);
    
    fill(107,101,95);
    text( "Director of Creative Communications", 430, posY+14420);
    fill(255);
    text( "Owen Jones", 420, posY+14490);
    
    fill(107,101,95);
    text( "Head of Marketing Communications", 420, posY+14610);
    fill(255);
    text( "Thomas Wiborgh", 450, posY+14680);
    
    fill(107,101,95);
    text( "Creative Communications Assistant", 420, posY+14800);
    fill(255);
    text( "Per Landin", 430, posY+14870);
    text( "Tom Stone", 420, posY+14940);
    
    fill(107,101,95);
    text( "Head of Community Relations", 380, posY+15060);
    fill(255);
    text( "Karim Walldén", 430, posY+15130);
    
    fill(107,101,95);
    text( "Community Relations Coordinator", 400, posY+15250);
    fill(255);
    text( "Josefin Olsson", 450, posY+15320);
    
    fill(107,101,95);
    text( "Head of Social Media", 330, posY+15440);
    fill(255);
    text( "Alice Löfgren", 450, posY+15510);
    
    fill(107,101,95);
    text( "Customer Support Team Lead", 380, posY+15630);
    fill(255);
    text( "Mattias Victorin", 450, posY+15700);
    
    fill(107,101,95);
    text( "Customer Support", 320, posY+15820);
    fill(255);
    text( "Anna Lundgren", 445, posY+15890);
    text( "Andreas Thomasson", 480, posY+15960);
    text( "Antonia Kousathana", 478, posY+16030);
    text( "Cecilia Flumé", 435, posY+16100);
    text( "Cim Borg", 410, posY+16170);
    text( "David Stuart Dahlgren", 490, posY+16240);
    text( "Ellie Ashrafi", 430, posY+16310);
    text( "Frederik Sandström", 480, posY+16380);
    text( "Freja Fors", 430, posY+16450);
    text( "Jonny Hair", 420, posY+16520);
    text( "Nasim Derakhsham", 470, posY+16590);
    text( "Nima Tolouifar", 445, posY+16660);
    text( "Patrik Södergren", 470, posY+16730);
    text( "Rui Ribeiro", 420, posY+16800);
    text( "Sarah Mårtensson", 470, posY+16870);
    
    fill(107,101,95);
    text( "Office Manager", 300, posY+16990);
    fill(255);
    text( "Siri Hoel Andersson", 470, posY+17060);
    
    fill(107,101,95);
    text( "Office Coordinators", 320, posY+17180);
    fill(255);
    text( "Aleksandra Zajac", 470, posY+17250);
    text( "Joël Älveroth", 440, posY+17320);
    
    fill(107,101,95);
    text( "Reception Manager", 330, posY+17440);
    fill(255);
    text( "Chaimae Truving", 470, posY+17510);
    
    fill(107,101,95);
    text( "Financial Accountant", 340, posY+17630);
    fill(255);
    text( "Josefina Axelsson", 480, posY+17700);
    
    fill(107,101,95);
    text( "IT Wizards", 280, posY+17820);
    fill(255);
    text( "Cesar Sima Falck", 460, posY+17890);
    text( "Shoghi Cervantes", 470, posY+17960);
    
    fill(107,101,95);
    text( "Product Designer Team Lead", 390, posY+18080);
    fill(255);
    text( "Amanda Ström", 440, posY+18150);
    
    fill(107,101,95);
    text( "Product Designers", 330, posY+18270);
    fill(255);
    text( "Filip Thoms", 420, posY+18340);
    text( "Jennifer Hammervald", 470, posY+18410);
    text( "Sherin Kwan", 420, posY+18480);
    
    fill(107,101,95);
    text( "Motion Graphics Designer", 380, posY+18600);
    fill(255);
    text( "Kim Petersen", 430, posY+18670);
    
    fill(107,101,95);
    text( "Intellectual Property Enforcement Team Lead", 505, posY+18790);
    fill(255);
    text( "Olle Personne", 440, posY+18860);
    
    fill(107,101,95);
    text( "Intellectual Property Enforcement Agents", 485, posY+18980);
    fill(255);
    text( "Mathias Andersson", 470, posY+19050);
    text( "Matilda  Kerman", 440, posY+19120);
    text( "Marcus Forss", 440, posY+19190);
    text( "Sylvia Chen", 420, posY+19260);
    text( "Johan Kedlund", 440, posY+19330);
    
    fill(255);
    text( "============", 590, posY+19450);
    fill(255,231,6);
    text( "Special Thanks", 590, posY+19510);
    fill(255);
    text( "============", 590, posY+19570);
    
    fill(255);
    text( "Daniel Brynolf", 440, posY+19690);
    text( "Pontus Hammarberg", 480, posY+19790);
    
    text( "'Twenty years from now you will be more disappointed", 590, posY+19980);
    text( "by the things that you didn't do than by the ones you", 590, posY+20010);
    text( "did do. So throw off the bowlines. Sail away from the", 580, posY+20040);
    text( "safe harbor. Catch the trade winds in your sails.", 570, posY+20070);
    text( "Explore. Dream. Discover.'-Unkown", 490, posY+20100);
    
    posY = posY-2; // posY--; (lo mismo)
    
    if(mouseX > width/2 && mouseY < height/2){
        fill(random(100,255),0,random(200,255));
        text("Hola Profe, por favor apruebeme", width/2, height/2); 
    }
    
    image(Sword, mouseX, mouseY,50,50);
    
    }
                                

Trabajo Práctico nº 3 : Ilusión Óptica Interactiva

Consigna:

Crear una ilusión óptica interactiva con estructuras repetitivas (ciclos flor).

Con interactiva nos referimos a que la ilusión pueda ser modificada por el usuario mediante el teclado y/o mouse, modulando variables por medio de los eventos o variables acordes.

OBJETIVOS: comprender las estructuras repetitivas en Processing a través de la visualización de patrones de repetición, modulables por la apropiación de los índices (variable de la repetición).


    PFont Letra;
    int Estado, Ancho, Pie1, Pie2;
    color b, n;

    void setup() {
    size(800, 600);
    background(0);
    textAlign( CENTER, CENTER);
    Letra = createFont("Caramel Sweets.ttf", 40);
    textFont(Letra, 60);
    Estado = 0;
    Pie1 = 0;
    Pie2 = 0;
    b = color(255);
    n = color(0);
    }

    void draw() {
    if (Estado == 0) {
        background(200);
        textSize(40);
        fill(0);
        text("Bienvenido", width/2, 90);
        text("Espero les guste", width/2, 150);
        boolean Dentro;
        Dentro= (dist(mouseX, mouseY, width/2, height/4*2)< 150/2);
        if (Dentro) {
        fill(0);
        } else {
        fill(230);
        }
        circle(width/2, height/4*2, 150);
    }
    if (Estado == 1) {
        noStroke();
        for (int i=0; i<40; i++) {
        if (i%2 == 0) {
            fill(0);
        } else {
            fill(255);
        }
        rect(i*20, 0, width, height-150); //ancho,altura
        }

        fill (b);
        rect (Pie1, 100, 100, 60); //pie 1

        fill (n);
        rect (Pie2, 300, 100, 60); //pie 2

        fill(200);
        circle(70, 520, 100);    //Boton color

        fill(100);
        circle(200, 520, 100); //Boton desde 0

        fill(50);
        circle(330, 520, 100); //Creditos

        textSize(20);
        fill(255);
        text("Color", 200, 520);
        text("Desde 0", 70, 520);
        text("Créditos", 330, 520);
    }

    if (Estado == 2) {
        background(200);
        textSize(40);
        fill(0);
        text("Créditos por la inspiración:", 400, 100);
        text("Pagina Web: Cibermitanios", 400, 150);
        text("Alumne a cargo:", 400, 250);
        text("Nayla Belen Aguilar", 400, 300);

        boolean D;
        D = (dist(mouseX, mouseY, 400, 500)< 150/2);
        if (D) {
        fill(50);
        } else {
        fill(230);
        }
        circle(400, 500, 150);
        fill(0);
        text("Inicio", 400, 500);
    }
    }

    void mousePressed() { 
    if (Estado == 0) {
        if ((dist(mouseX, mouseY, width/2, height/4*2)< 150/2)) {
        background(255);
        Estado = 1;
        }
    }
    if ((dist(mouseX, mouseY, 70, 520)< 100/2)) { //desde 0
        Pie1 = 0;
        Pie2 = 0;
        b = color(255);
        n = color(0);
    }
    if ((dist(mouseX, mouseY, 200, 520))< 100/2) { //color
        b = color (random(100, 140), 0, random(120, 160));
        n = b;
    }
    if ((dist(mouseX, mouseY, 330, 520)< 100/2)) { //creditos
        background(255);
        Estado = 2;
    }
    if ((dist(mouseX, mouseY, 400, 500)< 100/2)) { 
        Estado = 0;
    }
    }

    void keyPressed() {
    if (key == 'a') {
        Pie1++;
        Pie2++;
    }

    if (key == 's') {
        Pie1--;
        Pie2--;
    }
    }
                            

Trabajo Práctico nº 4 : Aventura Gráfica

Consigna:

Crear una aventura gráfica que haga uso de arreglos y funciones.

OBJETIVOS: comprender el uso de los arreglos, así como las funciones.


    PFont Letra;
    PImage [] Personajes = new PImage [19];
    PImage [] Fondo = new PImage [6];
    int Pantallas, Final1, Final2, Final3;
    boolean mouseOver;

    void setup() {
  size (1200, 900);

  for (int i = 0; i < Personajes.length; i++) {
    Personajes[i] = loadImage("personaje_0" + i + ".png");
  }

  Fondo [0] = loadImage("Fondo_000.png");
  Fondo [1] = loadImage("Fondo_001.png");
  Fondo [2] = loadImage("Fondo_002.png");
  Fondo [3] = loadImage("Fondo_003.jpg");
  Fondo [4] = loadImage("Fondo_004.jpg");
  Fondo [5] = loadImage("Fondo_005.jpg");

  Letra = createFont("Louis George Cafe Bold Italic.ttf", 24);

  Pantallas = 0;
  Final1 = 0;
  Final2 = 0;
  Final3 = 0;
  mouseOver = false;
}

void draw() {
  //println(Pantallas);

  if (Pantallas == 0) {
    background( Fondo [0]);
    fill(255);
    rect(300, 700, 600, 100);
    Texto(Letra, 40, color(0));
    text("Presiona A para comenzar!", 330, 760);
  }
  if (Pantallas == 1) {
    background( Fondo [1]);
    image(Personajes[0], 0, 0);
    recDial(color(0), 0, 700, width, 1200);

    Texto(Letra, 20, color(255));
    text("Había una vez una dulce niña que quería mucho a su madre y a su abuela. Les ayudaba en todo lo que podía y como era tan buena\nel día de su cumpleaños su abuela le regaló una caperuza roja.Como le gustaba tanto e iba con ella a todas partes, pronto todos\nempezaron a llamarla Caperucita roja.", 10, 730);
    text("Un día la abuela de Caperucita, que vivía en el bosque, enfermó y la madre de Caperucita le pidió que\nle llevara una cesta con una torta y un tarro de mantequilla. Caperucita aceptó encantada.", 10, 830);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Pantallas == 2) {
    background( Fondo [2]);
    image(Personajes[1], 0, 200);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("Cuando llegó al bosque, la pequeña comenzó a distraerse contemplando los pajaritos y el paisaje. No se\ndio cuenta de que alguien la observaba detrás de un viejo y frondoso árbol.\nDe repente, oyó una voz suave cerca de ella.", 10, 730);
    Boton1(color (255), 1130, 840, 50, 50);
  }

  if (Pantallas == 3) {
    background( Fondo [2]);
    image(Personajes[6], 600, 90);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("Era un Lobo vestido muy elegante y con un aura muy feliz, acercandose mientras saludaba con su pata.", 10, 730);
    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Pantallas == 4) {
    background( Fondo [2]);
    image(Personajes[7], 500, 80);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("-¿A dónde vas, Pequeña niña?", 10, 730);
    text("-¿A dónde te diriges?", 10, 760);
    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Pantallas == 5) {
    background( Fondo [2]);
    image(Personajes[2], 0, 200);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 30, color(255));
    text("¿Qué deberias hacer ahora?", 10, 740);

    Boton2(color(20, 193, 78), 800, 200, 380, 90, 30, "Hablarle", 40);

    Boton2(color(50, 132, 239), 800, 420, 380, 90, 30, "Ignorarle", 40);
  }
  //----------------------------------------- Camino 1
  if (Final1 == 1) {
    background( Fondo [2]);
    image(Personajes[3], 0, 200);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("-Pues voy a visitar a mi querida Abuela, quien vive al llegar hasta el final del camino, señor Lobo!", 10, 730);
    text("-Usted que hace por aqui?", 10, 770);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final1 == 2) {
    background( Fondo [2]);
    image(Personajes[6], 500, 80);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("-Yo también vivo por allí. Y no mucho, solo paseaba por estos lados mirando el maravilloso paisaje.", 10, 730);
    text("-Señorita no te gustaria jugar conmigo?", 10, 770);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final1 == 3) {
    background( Fondo [2]);
    image(Personajes[1], 0, 200);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("¿Deberias aceptar?", 10, 730);

    Boton2(color(20, 193, 78), 800, 200, 380, 90, 30, "Aceptar", 40);

    Boton2(color(50, 132, 239), 800, 420, 380, 90, 30, "Negarte", 40);
  }

  if (Final1 == 4) {
    background( Fondo [2]);
    image(Personajes[2], 0, 200);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("-Claro que si, señor Lobo!\n¿Qué tipo de juego propone?", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final1 == 5) {
    background( Fondo [2]);
    image(Personajes[7], 500, 80);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("-Te echo una carrera a ver quién llega antes. Cada uno iremos por un camino diferente ¿te parece bien?", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final1 == 6) {
    background( Fondo [2]);
    image(Personajes[3], 0, 200);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("La inocente niña pensó que era una idea divertida y asintió con la cabeza. No sabía que el lobo\nhabía elegido el camino más corto para llegar primero a su destino.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final1 == 7) {
    background( Fondo [3]);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("Cuando el animal  llegó a casa de la abuela, llamó a la puerta.\n -¿Quién es? - Gritó la mujer.\n-Soy yo, abuelita, tu querida nieta Caperucita. Ábreme la puerta - Dijo el lobo imitando la voz de la niña.\n-Pasa, querida mía. La puerta está abierta - Contestó la abuela.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final1 == 8) {
    background( Fondo [4]);
    image(Personajes[8], 0, 0); 
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("El malvado lobo entró en la casa y sin pensárselo dos veces, saltó sobre ella y se comió a la anciana.\nDespués, se puso su ropa y su pañuelo de dormir y se metió entre las sábanas esperando a que\nllegara la niña. Al rato, se oyeron unos golpes.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final1 == 9) {
    background( Fondo [3]);
    image(Personajes[2], 0, 200);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("-¿Quién llama?- Dijo el lobo forzando la voz como si fuera la abuelita.\n-Soy yo, Caperucita. Vengo a hacerte una visita y a traerte unos ricos dulces para merendar.\nPasa, querida, estoy deseando abrazarte - Dijo el lobo malvado relamiéndose.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final1 == 10) {
    background( Fondo [5]);
    image(Personajes[5], 0, 200);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("La habitación estaba en penumbra.\nCuando se acercó a la cama, a Caperucita le pareció que su abuela estaba muy cambiada.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final1 == 11) {
    background( Fondo [5]);
    image(Personajes[4], 0, 200);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("Extrañada, Dijo:\n-Abuelita, abuelita ¡qué ojos tan grandes tienes!\n-Son para verte mejor, preciosa mía.- Contestó el lobo, suavizando la voz.\n-Abuelita, abuelita ¡qué orejas tan grandes tienes!\n-Son para oírte mejor, querida.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final1 == 12) {
    background( Fondo [5]);
    image(Personajes[12], 0, 0);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("-Pero... abuelita, abuelita ¡qué boca tan grande tienes!\n-¡Es para comerte mejor!- Gritó el lobo dando un enorme salto pero fallo en comerce a Caperucita.\nLa niña tomo la oportunidad y salio corriendo hacia el bosque en busca de ayuda.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final1 == 13) {
    background( Fondo [2]);
    image(Personajes[13], 0, 0); 
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("En su escapada, Caperucita se choca contra un leñador que pasaba por el bosque,\nal cual le pide ayuda para salvar a su abuela.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final1 == 14) {
    background( Fondo [4]);
    image(Personajes[14], 0, 0);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("Una vez de vuelta, encuentran al lobo tomando una siesta. Por lo que el leñador utiliza un cuchillo para\nabrirle el estomago y para su sorpresa la abuela sale sana.\nLuego de rescatarla, el Leñador cose la barriga del lobo y esperan a que este despierte.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final1 == 15) {
    background( Fondo [2]);
    image(Personajes[11], 0, 0); 
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("Cuando por fin abrió los ojos, vio como los tres le rodeaban y escuchando la amenazante voz del cazador:\n-¡Lárgate, lobo malvado! ¡Como vuelva a verte por aquí, no volverás\na contarlo!\nEl lobo, aterrado, se puso de pie y salió despavorido.\nCaperucita y su abuelita, con lágrimas cayendo sobre sus mejillas, se abrazaron.", 10, 740);

    Boton2(color(129, 120, 120), 800, 600, 380, 90, 30, "Creditos", 40);
  }
  //------------------------------------- Camino 2
  if (Final2 == 1) {
    background( Fondo [2]);
    image(Personajes[4], 0, 200);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("-Lo siento señor, tengo que ir rapido a la casa de mi abuela. Que tenga un buen dia.\nLe dijo timidamente mientras trataba de rodearlo y seguir su camino.", 10, 740);
    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final2 == 2) {
    background( Fondo [2]);
    image(Personajes[15], 500, 80); 
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("-...\nEl lobo se quedo callado y dejo pasar a la Caperusa sin mucho problema.\nPero lo que no sabia Caperusa es que el lobo comenzo a moverse entre los caminos que conocia, un\nsendero mas corto para la casa de la abuela.\nYa que se habia dado cuenta para donde se dirigia la niña.", 10, 740);
    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final2 == 3) {
    background( Fondo [3]);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("Cuando el animal  llegó a casa de la abuela, llamó a la puerta.\n -¿Quién es? - Gritó la mujer.\n-Soy yo, abuelita, tu querida nieta Caperucita. Ábreme la puerta - Dijo el lobo imitando la voz de la niña.\n-Pasa, querida mía. La puerta está abierta - Contestó la abuela.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final2 == 4) {
    background( Fondo [4]);
    image(Personajes[8], 0, 0);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("El malvado lobo entró en la casa y sin pensárselo dos veces, saltó sobre ella y se comió a la anciana.\nDespués, se puso su ropa y su pañuelo de dormir y se metió entre las sábanas esperando a que\nllegara la niña. Al rato, se oyeron unos golpes.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final2 == 5) {
    background( Fondo [3]);
    image(Personajes[2], 0, 200);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("-¿Quién llama?- Dijo el lobo forzando la voz como si fuera la abuelita.\n-Soy yo, Caperucita. Vengo a hacerte una visita y a traerte unos ricos dulces para merendar.\nPasa, querida, estoy deseando abrazarte - Dijo el lobo malvado relamiéndose.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final2 == 6) {
    background( Fondo [5]);
    image(Personajes[5], 0, 200);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("La habitación estaba en penumbra.\nCuando se acercó a la cama, a Caperucita le pareció que su abuela estaba muy cambiada.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final2 == 7) {
    background( Fondo [5]);
    image(Personajes[4], 0, 200);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("Extrañada, Dijo:\n-Abuelita, abuelita ¡qué ojos tan grandes tienes!\n-Son para verte mejor, preciosa mía.- Contestó el lobo, suavizando la voz.\n-Abuelita, abuelita ¡qué orejas tan grandes tienes!\n-Son para oírte mejor, querida.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final2 == 8) {
    background( Fondo [5]);
    image(Personajes[12], 0, 0); 
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("-Pero... abuelita, abuelita ¡qué boca tan grande tienes!\n-¡Es para comerte mejor!-Gritó el lobo dando un enorme salto y comiendose al instante\na la niña de un solo bocado.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final2 == 9) {
    background( Fondo [4]);
    image(Personajes[10], 0, 0); 
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("Una vez terminada su cena, el lobo se arregla bien la ropa y se acomoda en su nueva casa,\nesperando por nuevas victimas.", 10, 740);

    Boton2(color(129, 120, 120), 800, 600, 380, 90, 30, "Creditos", 40);
  }
  //------------------------------------- Camino 2
  if (Final3 == 1) {
    background( Fondo [2]);
    image(Personajes[5], 0, 200);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("-Lo siento señor Lobo, creo que seria mejor si me voy directo.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final3 == 2) {
    background( Fondo [2]);
    image(Personajes[15], 500, 80); 
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("-¡Pero por supuesto niña! No hay ningun problema, espero que tengas un buen viaje.\nLo que no sabia Caperusa es que el lobo comenzo a moverse entre los caminos que conocia, un\nsendero mas corto para la casa de la abuela.\nYa que se habia dado cuenta para donde se dirigia la niña.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final3 == 3) {
    background( Fondo [3]);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("Cuando el animal  llegó a casa de la abuela, llamó a la puerta.\n -¿Quién es? - Gritó la mujer.\n-Soy yo, abuelita, tu querida nieta Caperucita. Ábreme la puerta - Dijo el lobo imitando la voz de la niña.\n-Pasa, querida mía. La puerta está abierta - Contestó la abuela.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final3 == 4) {
    background( Fondo [4]);
    image(Personajes[8], 0, 0);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("El malvado lobo entró en la casa y sin pensárselo dos veces, saltó sobre ella y le mordio la yugular.\nDespués, la pone a cocinar, se pone su ropa y su pañuelo de dormir y se metió entre las\nsábanas esperando a que llegara la niña.\nAl rato, se oyeron unos golpes.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final3 == 5) {
    background( Fondo [3]);
    image(Personajes[2], 0, 200);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("-¿Quién llama?- Dijo el lobo forzando la voz como si fuera la abuelita.\n-Soy yo, Caperucita. Vengo a hacerte una visita y a traerte unos ricos dulces para merendar.\nPasa, querida, estoy deseando abrazarte - Dijo el lobo malvado relamiéndose.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final3 == 6) {
    background( Fondo [4]);
    image(Personajes[16], 0, 0); 
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("La habitación estaba en penumbra.\nCuando se acercó a la cocina, a Caperucita le pareció que su abuela estaba muy cambiada.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }

  if (Final3 == 7) {
    background( Fondo [4]);
    image(Personajes[4], 0, 200);
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("-Ven a sentarte para comer algo querida.- Dijo el lobo forzando la voz como si fuera la abuelita.\n-Se te escucha algo rara abuela...¿Estas segura que te sientes bien?\n-¡Pero por supuesto mi niña! Ahora come un poco que estas muy delgada.- El lobo hablo mientras sacaba su victima del horno", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final3 == 8) {
    background( Fondo [4]);
    image(Personajes[17], 0, 0); 
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("Una vez sentada,Caperucita se da cuenta que la carne se ve y tiene un aroma extraño.\n-Abuela esta carne tiene un aroma muy extraño...\n-Claro que no! Come mi niña.- Hablo el Lobo mientras sonreia\nCaperucita sintiendo lo extraño de la situación comenzo a tomar el cuchillo para protegerse.\n-Abuelita, abuelita ¡qué ojos tan grandes tienes!\n-Son para verte mejor, preciosa mía.- Contestó el lobo, suavizando la voz.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final3 == 9) {
    background( Fondo [4]);
    image(Personajes[18], 0, 0); 
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("-Pero... abuelita, abuelita ¡Tienes una boca muy grande tienes!\n-¡Es para comerte mejor!-Gritó el lobo dando un enorme salto, por suerte Caperucita\nutiliza el utensillo que ya estaba sosteniendo como arma y la utiliza para apuñala al Lobo, dandose\ncuenta quien realmente era al mismo tiempo.", 10, 740);

    Boton1(color (255), 1130, 840, 50, 50);
  }
  if (Final3 == 10) {
    background( Fondo [4]);
    image(Personajes[9], 200, 0); 
    recDial(color(0), 0, 700, width, 1200);
    Texto(Letra, 25, color(255));
    text("Con el dolor de saber que su abuela le habia pasado algo, arrastro al Lobo al horno y\nlo dejo que se cocinada vivo.\nUna vez muerto y asado, la niña coloca un pedazo en un plato y comienza a comer.\n-Esto es lo que le pasa a los lobos malos.-Hablo con un tono frio Caperucita.", 10, 740);

    Boton2(color(129, 120, 120), 800, 600, 380, 90, 30, "Creditos", 40);
  }
  if (Pantallas == 6) {
    background(0);
    pushStyle();
    Texto(Letra, 50, color(255));
    textAlign(CENTER);
    text("Trabajo Practico Nº4:\nAventura Grafica", width/2, 100);
    text("Alumna a cargo: Nayla Belen Aguilar", width/2, 300);
    text("Caperucita Roja", width/2, 500);
    text("Adaptación del cuento de Charles Perrault", width/2, 600);
    popStyle();

    Boton2(color(129, 120, 120), 400, 800, 380, 90, 30, "Reiniciar", 40);
  }
}
void keyPressed() {
  if (key == 'a' && Pantallas == 0) {
    Pantallas = 1;
  }
}


void mouseReleased() {
  
  if ((Pantallas < 5) && (mouseX > 1130) && (mouseX < 1130+50) && (mouseY > 840) && (mouseY < 840+50)) {
    Pantallas ++;
  }
  if ((Final1 > 0) && (Final1 < 15) && (mouseX > 1130) && (mouseX < 1130+50) && (mouseY > 840) && (mouseY < 840+50)) {
    Final1 ++;
  }

  if ((Final1 == 0) && (mouseX > 800) && (mouseX < 800+380) && (mouseY > 200) && (mouseY < 200+90)) {
    Final1 = 1; //Positivo
  }
  if ((Final1 == 3) && (mouseX > 800) && (mouseX < 800+380) && (mouseY > 200) && (mouseY < 200+90)) {
    Final1 = 4;
  }
  if ((Pantallas == 5) && (mouseX > 800) && (mouseX < 800+380) && (mouseY > 420) && (mouseY < 420+90)) {
    Final2 = 1; //ignorar
  }
  if ((Final2 > 0) && (Final2 < 9) && (mouseX > 1130) && (mouseX < 1130+50) && (mouseY > 840) && (mouseY < 840+50)) {
    Final2 ++;
  }
  if ((Final1 == 3) && (mouseX > 800) && (mouseX < 800+380) && (mouseY > 420) && (mouseY < 420+90)) {
    Final3 = 1; //negarte
  }
  if ((Final3 > 0) && (Final3 < 10) && (mouseX > 1130) && (mouseX < 1130+50) && (mouseY > 840) && (mouseY < 840+50)) {
    Final3 ++;
  }
  //----Creditos------
  if ((Final1 == 15) && (mouseX > 800) && (mouseX < 800+380) && (mouseY > 600) && (mouseY < 600+90)) { 
    Pantallas = 6;
  }
  if ((Final2 == 9) && (mouseX > 800) && (mouseX < 800+380) && (mouseY > 600) && (mouseY < 600+90)) {
    Pantallas = 6;
  }
  if ((Final3 == 10) && (mouseX > 800) && (mouseX < 800+380) && (mouseY > 600) && (mouseY < 600+90)) {
    Pantallas = 6;
  }
  //-----Reinicio------
  if ((Pantallas == 6) && (mouseX > 400) && (mouseX < 400+380) && (mouseY > 800) && (mouseY < 800+90)) {
    Pantallas = 0;
    Final1 = 0;
    Final2 = 0;
    Final3 = 0; 
  }
}
                            

    void Texto (PFont Fuente, int Tam, color Dial){

    fill(Dial);
    textFont(Fuente);
    textSize (Tam);
    }

    //boton cambio de pantalla
    void Boton1(color col, float posX, float posY, float tamX, float tamY) {
    fill(col);
    rect(posX, posY, tamX, tamY);
    }

    //botones eleccion
    void Boton2(color c, int X, int Y, float Tx, float Ty, float R, String texto, float TamT) {
    if (mouseOver(X, Y)) {
    fill(255, 213, 0);
    } else {
    fill(c);
    }

    rect(X, Y, Tx, Ty, R);
    pushStyle();
    textAlign(CENTER);
    textSize(TamT);
    fill(255);
    text(texto, X+Tx/4, Y+Ty/1.5);
    popStyle();
    }


    //[Rectangulo de Dialogo]
    void recDial(color col, float posX, float posY, float tamX, float tamY) {
    fill(col);
    rect(posX, posY, tamX, tamY);
    }

    boolean mouseOver(int posx, int posy) {
    if (mouseX > posx && mouseX< posx+380 && mouseY> posy && mouseY< posy+90 ) { return true; } else { return false; } }
                            

Trabajo Práctico nº 5 : Video Juego

Consigna:

Crear una aventura gráfica que haga uso de arreglos y funciones.

OBJETIVOS: comprender el uso de los arreglos, así como las funciones.

Compañero de trabajo: Lutz Juan


    Juego tl;
    int balasGlobal = 0;

    void setup() {
    size(800, 600);
    surface.setLocation(displayWidth/2-width/2, displayHeight/2-height/2);
    smooth();
    tl = new Juego();
    }

    void draw() {
    tl.draw();
    balasGlobal = tl.balas;
    }

    void keyPressed() {
    if (key=='w') {
    tl.w = true;
    }
    if (key=='s') {
    tl.s = true;
    }
    if (key=='d') {
    tl.d = true;
    }
    if (key=='a') {
    tl.a = true;
    }
    }

    void keyReleased() {
    if (keyCode==ENTER) {
    if (tl.menu) {
    tl.menu=false;
    }
    if (tl.ganar) {
    tl.menu=true;
    tl.ganar=false;
    }
    if (tl.perder) {
    tl.menu=true;
    tl.perder=false;
    }
    }
    if (key=='w') {
    tl.w = false;
    }
    if (key=='s') {
    tl.s = false;
    }
    if (key=='d') {
    tl.d = false;
    }
    if (key=='a') {
    tl.a = false;
    }
    }

    void mouseReleased() {
    if (!tl.menu) {
    if (tl.balas < 50) { tl.balas++; tl.bala[tl.balas-1].impacto=false; tl.bala[tl.balas-1].actualizar(tl.Juan); } else if
        (tl.balas==50) { tl.balas=0; } } }
                            

    class disparo {
    float x, y, absx, absy;
    int b = 0;
    boolean impacto = false;
    float vel=15;
    float ang;

    disparo(float px, float py) {
    x=px;
    y=py;
    }

    void dibujar(Heroe J) {
    if (!impacto) {
    x=x-vel;
    pushMatrix();
    translate(J.x, J.y);
    rotate(map(ang, -PI, PI, 0, TWO_PI));
    circle(x, y, 5);
    absx=screenX(x, y);
    absy=screenY(x, y);
    popMatrix();
    } else {
    absx=-100;
    absy=-100;
    }
    }

    void actualizar(Heroe J) {
    ang=(atan2(mouseY-J.y, mouseX-J.x));
    x=0;
    y=0;
    }

    boolean municion() {
    if (x<-width) { return false; } else { return true; } } }
                            

    class Enemigo {

    float x, y, tam;
    float muertx = 0, muerty = 0;
    boolean mX = false, mY = true;
    boolean d = true, V = true;

    PImage mafia;

    Enemigo(float posX, float posY, float t) {
        V=true;
        x=posX;
        y=posY;
        tam=t;
        mafia = loadImage("mafioso_"+int(random(-0.1, 2.1))+".png");
        mafia.resize(int(tam), int(tam));
    }

    void dibujar(Mapa f, disparo[] dis) {

        if (!vivo(dis)) {
        V = false;
        }
        if (V) {
        push();
        imageMode(CENTER);
        image(mafia, x, y);
        pop();
        mover(f);
        muertx=x;
        muerty=y;
        } else {
        x=-200;
        y=-200;
        push();
        tint(255, 0, 0);
        imageMode(CENTER);
        image(mafia, muertx, muerty);
        pop();
        }
    }

    boolean vivo(disparo[] b) {
        for (int i=0; i450 && m < 500) {
        return true;
        } else {
        return false;
        }
    }

    void mover(Mapa back) {
        if (back.colision(x, y, tam/2)) {
        if (back.distX=width-tam/2) {
        mX=false;
        } else if (x<=0+tam/2) {
        mX=true;
        }
        if (y>=height-tam/2) {
        mY=false;
        } else if (y<=0+tam/2) {
        mY=true;
        }
    }

    boolean colision(float colx, float coly) {
        if (dist(colx, y, x, y)

    class Heroe {

    float x, y, ang;
    float diam = 20;
    float rad = diam/2;
    float vel = 3;
    PImage TLWN = loadImage("tl.png");

    Heroe(float posX, float posY) {
        x=posX;
        y=posY;
        TLWN.resize(int(diam*3), 0);
    }

    void dibujar() {
        pushStyle();
        noStroke();
        //circle(x, y, diam);
        ang = atan2(mouseY-y, mouseX-x);
        pushMatrix();
        translate(x, y);
        rotate(map(ang, -PI, PI, 0, TWO_PI));
        rotate(radians(-90));
        //rect(-diam, -diam/6, diam, diam/3);
        imageMode(CENTER);
        image(TLWN, 0, 0);
        popMatrix();
        popStyle();
    }

    void mover(String direc) {
        if (direc.equals("none")) {
        //IDLE
        } else if (direc.equals("derecha") && x0+diam) {
        x-=vel;
        } else if (direc.equals("arriba") && y>0+diam) {
        y-=vel;
        } else if (direc.equals("abajo") && y

    class Juego {
    int cant = 1;
    int balas = 0;
    int muertes = 0;
    boolean menu = true, ganar = false, perder = false;
    boolean w = false, a = false, s = false, d = false;
    Heroe Juan;
    disparo[] bala = new disparo[50];
    Enemigo[] Inaki = new Enemigo[cant];
    Mapa fondo;

    PImage robotito, robotito2, win, lose;


    Juego() {
        Juan = new Heroe(width/2, height/2);
        fondo = new Mapa();
        for (int i=0; iJuan.x) {
        if (a) {
            Juan.mover("izquierda");
        }
        if (w) {
            Juan.mover("arriba");
        }
        if (s) {
            Juan.mover("abajo");
        }
        } else if (fondo.tempYJuan.y) {
        if (w) {
            Juan.mover("arriba");
        }
        if (d) {
            Juan.mover("derecha");
        }
        if (a) {
            Juan.mover("izquierda");
        }
        }
    }
    }
                            

    class Mapa {

    int cant = 20;
    int tam = 80;
    float[] x = new float[cant];
    float[] y = new float[cant];
    PImage[] basura = new PImage[cant];
    PImage piso;
    float distX, distY, tempX, tempY;

    Mapa() {

        piso = loadImage("piso.jpg");
        piso.resize(200, 0);

        for (int i=0; i300 && x[i]<500 && y[i]<400 && y[i]>200) {
            if (x[i]>400) {
            x[i] = random(width/2+tam, width-tam/2);
            y[i] = random(height/2);
            } else if (x[i]<=400) {
            x[i] = random(width/2-tam);
            y[i] = random(height/2, height);
            }
        }
        }
    }

    void draw() {
        push();
        tint(200);
        for (int y =0; y < cant; y++) {
        for (int x =0; x < cant; x++) {
            image(piso, 100*x, 100*y);
        }
        }
        pop();

        for (int i=0; ix[i]+tam) {
            tempX = x[i]+tam;
        }
        if (posYy[i]+tam) {
            tempY = y[i]+tam;
        }

        distX = posX-tempX;
        distY = posY-tempY;
        float distancia = sqrt( (distX*distX) + (distY*distY) );

        if (distancia <= radio-15) {
            return true;
        }
        }
        return false;
    }
    }
                            

Trabajo Práctico Final : Aventura Gráfica + Video Juego

Consigna:

Crear una aventura gráfica que haga uso de arreglos y funciones.

OBJETIVOS: comprender el uso de los arreglos, así como las funciones.

Compañero de trabajo: Lutz Juan


    import processing.sound.*;
    Aventura necesitoUnaMano;

    void setup() {
    size(800, 600);
    necesitoUnaMano = new Aventura(this);
    }

    void draw() {
    necesitoUnaMano.draw();
    }

    void mouseReleased() {
    necesitoUnaMano.mouse();
    }

    void keyPressed() {
    necesitoUnaMano.keyP();
    }

    void keyReleased() {
    necesitoUnaMano.keyR();
    }
                            

    class Aventura {

    SoundFile laser;
    SoundFile musica;

    Juego J;
    PFont fuenteDefault;
    boolean creditos = false;
    Pantalla fondo;
    Boton[] B = new Boton[4];
    Dialogo destruido = new Dialogo("TL-WN ha quedado destruido", 24, 8, color(255, 0, 0));
    String[] pantalla;
    String[] texto = {"", ""};
    String textCred = "Tecno Multimedia 1\nComisión 2\n----------\nJuan Lutz\nLegajo 88196/6\n----------\nNayla Aguilar\nLegajo 88106/6";
    PImage[] img = new PImage[8];
    PImage[] tl = new PImage [8];
    PImage[] vagos = new PImage [4];
    PImage[] back = new PImage[3];
    PImage luz, nada, vago, basura, caja, mafia, celebra, sombrero, brazo;
    int numP = 0;
    int a = 0;
    int dial = 0;
    float contador = 0;

    boolean inicio, B1, B2, B3, B4;

    Aventura(PApplet a) {
        laser = new SoundFile(a, "disparo.wav");
        musica = new SoundFile(a, "musica fondo.mp3");
        musica.amp(0.15);
        musica.loop();

        pantalla = loadStrings("pantallas.txt"); //Tengo las pantallas a utilizar cargadas con Strings para reconocerlas más fácil
        fondo = new Pantalla("Hola", color(255), 24);

        J = new Juego(a);

        for (int i = 0; i6000) {
            contador = millis();
            numP+=2;
        }
        fondo.draw(img[numP], true, texto[dial]);
        luz(frameCount*8%255);
        B[0].draw(width/5/2, height/15*11, width/5, height/12, color(255, 0, 0), "Ignorar la\nalarma");
        B[1].draw(width/5*3.5, height/15*11, width/5, height/12, color(255, 0, 0), "Escapar por la\nventana");
        push();
        strokeWeight(8);
        stroke(255, 0, 0);
        line(0, height/15*13.55, map(millis()-contador, 0, 6000, 0, width), height/15*13.55);
        pop();
        } else if (pantalla[numP].equals("Musica")) {
        fondo.draw(img[numP], true, texto[dial]);
        luz(frameCount*8%255);
        B[0].draw(width/1.3, height/5*4, 140, 40, color(50, 50, 255), "Siguiente");
        } else if (pantalla[numP].equals("Destruido")) {
        fondo.draw(img[numP], true, texto[dial]);
        fill(255, 0, 0, 200);
        rect(0, 0, width, height);
        fill(0);
        destruido.draw();
        B[0].draw(width/2-width/10, height/15*12, width/5, height/15, color(#251FDE), "Volver al inicio");
        } else if (pantalla[numP].equals("Salto")) {
        if (dial=width/3 && mouseX<=width/3*2) {
            image(tl[1], width/8, height/2.5);
            if (mouseX>=width/4*2.2 && mouseX<=width/4*2.2+100 && mouseY>height/2 && mouseY=width/3*2) {
            image(tl[3], width/8, height/2.5);
            if (mouseX>=width/4*3.2 && mouseX<=width/4*3.2+200 && mouseY>height/2.6 && mouseY=width/20 && mouseX<=width/20+80 && mouseY>height/10*5.5 && mouseY 0) {
        texto =  loadStrings(pantalla[numP]+".txt");
        }
    }

    void luz (int a) {
        pushStyle();
        imageMode(CENTER);
        tint(255, 0, 0, a);
        image(luz, width, 0);
        popStyle();
    }

    void mouse() {
        if (!J.menu && !J.ganar && !J.perder) {
        if (J.balas < 50) {
            J.balas++;
            J.bala[J.balas-1].impacto=false;
            J.bala[J.balas-1].actualizar(J.Juan);
            laser.amp(0.4);
            laser.play();
        } else if (J.balas == 50) {
            J.balas=0;
        }
        }
        if (J.perder) {
        J.menu=true;
        J.perder=false;
        J.musica1.stop();
        musica.play();
        }

        if (numP>0) {
        if (dial 0) {
        //    necesitoUnaMano.numP--;
        //    necesitoUnaMano.dial=0;
        //  }
        //}
        //-----------------------------------------------------
    }
    void keyR() {
        if (keyCode==ENTER) {
        if (J.menu) {
            J.menu=false;
        }
        }
        if (key=='w') {
        J.w = false;
        }
        if (key=='s') {
        J.s = false;
        }
        if (key=='d') {
        J.d = false;
        }
        if (key=='a') {
        J.a = false;
        }
    }
    }
                            

    class Boton {
    float x, y, tamx, tamy;
    color col;
    String texto;
    String ID;

    Boton(String id) {
    ID=id;
    }

    void draw(float posX, float posY, float tamX, float tamY, color colBot, String textoB) {

    x=posX;
    y=posY;
    tamx=tamX;
    tamy=tamY;
    col=colBot;
    texto=textoB;

    strokeWeight(10);
    stroke(0, 0, 255, 50);
    fill(255, 200);
    rect(x, y, tamx*1.2, tamy*1.2, tamx*1.2/10);

    pushStyle();
    strokeWeight(5);
    stroke(0, 50);
    rectMode(CENTER);

    if (botonPres()) {
    fill(50, 0, 200);
    } else {
    fill(col);
    }
    rect(x+(tamx*1.2)/2, y+(tamy*1.2)/2, tamx*1.12, tamy, tamx/10);
    popStyle();

    pushStyle();
    textAlign(CENTER, CENTER);
    textSize(tamx/texto.length()*1.8);
    fill(0);
    text(texto, x+(tamx*1.2)/2, y+(tamy*1.2)/2);
    popStyle();
    }

    boolean botonPres() {

    if (mouseX> x && mouseX< x+tamx*1.2 && mouseY> y && mouseY< y+tamy*1.2) { return true; } else { return false; } } }
                            

    class Dialogo {

    String texto;
    int tam;
    int espacio;
    color col;

    Dialogo(String t, int T, int e, color c) {
    texto=t;
    tam=T;
    espacio=e;
    col=c;
    }

    void draw() {

    for (int i=255; i>20; i--) {
    stroke(color(0, 0, 0, i/20));
    line(0, height-tam*espacio/4+tam*1.2+200/40-(i/40), width, height-tam*espacio/4+tam*1.2+200/40-(i/40));
    }
    noStroke();
    fill(0, 0, 128);
    rect(0, height-tam*espacio/4, width, tam*1.2);

    fill(100, 100, 220);
    rect(0, height-tam*espacio/4-tam/3/1.5, width, tam/3);

    pushStyle();
    fill(col);
    textAlign(LEFT, CENTER);

    pushMatrix();
    translate(tam, 0);

    textSize(tam);
    text(texto, width/30, height-tam*espacio/4.3+tam/2);

    popMatrix();
    popStyle();
    }
    }
                            

    class disparo {
    float x, y, absx, absy;
    int b = 0;
    boolean impacto = false;
    float vel=15;
    float ang;

    disparo(float px, float py) {
    x=px;
    y=py;
    }

    void dibujar(Heroe J) {
    if (!impacto) {
    x=x-vel;
    pushMatrix();
    translate(J.x, J.y);
    rotate(map(ang, -PI, PI, 0, TWO_PI));
    circle(x, y, 5);
    absx=screenX(x, y);
    absy=screenY(x, y);
    popMatrix();
    } else {
    absx=-100;
    absy=-100;
    }
    }

    void actualizar(Heroe J) {
    ang=(atan2(mouseY-J.y, mouseX-J.x));
    x=0;
    y=0;
    }

    boolean municion() {
    if (x<-width) { return false; } else { return true; } } }
                            

    class Enemigo {

    float x, y, tam;
    float muertx = 0, muerty = 0;
    boolean mX = false, mY = true;
    boolean d = true, V = true;

    PImage mafia;

    Enemigo(float posX, float posY, float t) {
        V=true;
        x=posX;
        y=posY;
        tam=t;
        mafia = loadImage("mafioso_"+int(random(-0.1, 2.1))+".png");
        mafia.resize(int(tam), int(tam));
    }

    void dibujar(Mapa f, disparo[] dis, Juego j) {

        if (!vivo(dis, j)) {
        V = false;
        }
        if (V) {
        push();
        imageMode(CENTER);
        image(mafia, x, y);
        pop();
        mover(f);
        muertx=x;
        muerty=y;
        } else {
        x=-200;
        y=-200;
        push();
        tint(255, 0, 0);
        imageMode(CENTER);
        image(mafia, muertx, muerty);
        pop();
        }
    }

    boolean vivo(disparo[] b, Juego j) {
        for (int i=0; i450 && m < 500) {
        return true;
        } else {
        return false;
        }
    }

    void mover(Mapa back) {
        if (back.colision(x, y, tam/2)) {
        if (back.distX=width-tam/2) {
        mX=false;
        } else if (x<=0+tam/2) {
        mX=true;
        }
        if (y>=height-tam/2) {
        mY=false;
        } else if (y<=0+tam/2) {
        mY=true;
        }
    }

    boolean colision(float colx, float coly) {
        if (dist(colx, y, x, y)

    class Heroe {

    float x, y, ang;
    float diam = 20;
    float rad = diam/2;
    float vel = 3;
    PImage TLWN = loadImage("tl.png");

    Heroe(float posX, float posY) {
        x=posX;
        y=posY;
        TLWN.resize(int(diam*3), 0);
    }

    void dibujar() {
        pushStyle();
        noStroke();
        //circle(x, y, diam);
        ang = atan2(mouseY-y, mouseX-x);
        pushMatrix();
        translate(x, y);
        rotate(map(ang, -PI, PI, 0, TWO_PI));
        rotate(radians(-90));
        //rect(-diam, -diam/6, diam, diam/3);
        imageMode(CENTER);
        image(TLWN, 0, 0);
        popMatrix();
        popStyle();
    }

    void mover(String direc) {
        if (direc.equals("none")) {
        //IDLE
        } else if (direc.equals("derecha") && x0+diam) {
        x-=vel;
        } else if (direc.equals("arriba") && y>0+diam) {
        y-=vel;
        } else if (direc.equals("abajo") && y

    class Juego {
    SoundFile musica1, musica2;
    Pantalla resultado;
    int cant = 50;
    int balas = 0;
    int muertes = 0;
    boolean menu = true, ganar = false, perder = false;
    boolean w = false, a = false, s = false, d = false;
    String[] victoria;
    Heroe Juan;
    disparo[] bala = new disparo[50];
    Enemigo[] Inaki = new Enemigo[cant];
    Mapa fondo;

    PImage robotito, robotito2, win, lose;


    Juego(PApplet a) {

        musica1 = new SoundFile(a, "derrota.wav");
        musica2 = new SoundFile(a, "victoria.mp3");

        victoria = loadStrings("Mafia.txt");
        resultado = new Pantalla("Hola", color(255), 20);
        Juan = new Heroe(width/2, height/2);
        fondo = new Mapa();
        for (int i=0; iJuan.x) {
        if (a) {
            Juan.mover("izquierda");
        }
        if (w) {
            Juan.mover("arriba");
        }
        if (s) {
            Juan.mover("abajo");
        }
        } else if (fondo.tempYJuan.y) {
        if (w) {
            Juan.mover("arriba");
        }
        if (d) {
            Juan.mover("derecha");
        }
        if (a) {
            Juan.mover("izquierda");
        }
        }
    }
    }
                            

    class Mapa {

    int cant = 20;
    int tam = 80;
    float[] x = new float[cant];
    float[] y = new float[cant];
    PImage[] basura = new PImage[cant];
    PImage piso;
    float distX, distY, tempX, tempY;

    Mapa() {

        piso = loadImage("piso.jpg");
        piso.resize(200, 0);

        for (int i=0; i300 && x[i]<500 && y[i]<400 && y[i]>200) {
            if (x[i]>400) {
            x[i] = random(width/2+tam, width-tam/2);
            y[i] = random(height/2);
            } else if (x[i]<=400) {
            x[i] = random(width/2-tam);
            y[i] = random(height/2, height);
            }
        }
        }
    }

    void draw() {
        push();
        tint(200);
        for (int y =0; y < cant; y++) {
        for (int x =0; x < cant; x++) {
            image(piso, 100*x, 100*y);
        }
        }
        pop();

        for (int i=0; ix[i]+tam) {
            tempX = x[i]+tam;
        }
        if (posYy[i]+tam) {
            tempY = y[i]+tam;
        }

        distX = posX-tempX;
        distY = posY-tempY;
        float distancia = sqrt( (distX*distX) + (distY*distY) );

        if (distancia <= radio-15) {
            return true;
        }
        }
        return false;
    }
    }
                            

    class Pantalla {

    Dialogo dialogo;
    PFont fuente;

    Pantalla (String D, color t, int Tam) {
    dialogo = new Dialogo (D, Tam, 8, t);
    fuente = loadFont("WorkSans-Regular-48.vlw");
    }

    void draw(PImage fondo, boolean dial, String D) {

    image(fondo, 0, 0);

    textFont(fuente);

    if (dial) {
    dialogo.texto = D;
    dialogo.draw();
    }
    }
    }
                            
Nayla Belen Aguilar
Legajo: 88106/6
Comisión 2