10
Nome: Marcus Vinícius Pereira Rocha Curso: Jogos Digitais Módulo: Habilidades Ano: 2015 Introdução Irei utilizar um código, que eu mesmo criei em Java na faculdade, para criação de um labirinto do Pac-Man. A construção é fácil quando se entende como funcionam os modos de programação gráfica. É um modelo bem básico de programação de linhas, utilizando linhas de comando para se construir pontos e liga-los entre si. Algoritmo do labirinto Para começar os eixos invertidos, ou seja, de cabeça para baixo. Como mostrado na imagem: Mas o ponto não é esse e sim como foi construído o labirinto. Para se construir o labirinto, foi necessário criar primeiro o tamanho da tela desejado. O tamanho utilizado foi do de 640x480, um tamanho pequeno e um pouco mais simples de se desenhar o labirinto. Para se desenhar as peças, foram necessários criar vetores, com valores pré-definidos. Por qual motivo? Pois esses são os valores responsáveis por demonstrar qual é o pixel da tela, que o respectivo ponto está. Mas para se ligar os pontos, deve ser criado para cada peça um vetor para seu eixo X e um para o Y. Com os vetores já criados é hora de mostrar esse labirinto na tela. Sendo assim, será necessário utilizar um comando, para que a tela seja criada. E em seguida será definido a cor do fundo da tela. Sempre que um desenho for criado, tem de se usar um comando para que os vetores criados criem seus pontos e que os ligue, para que a forma geométrica ou o desenho criado seja mostrado.

Algoritmo Labirinto Pacman

Embed Size (px)

DESCRIPTION

Algoritmo para desenhar um labirinto como o do Pacman

Citation preview

Page 1: Algoritmo Labirinto Pacman

Nome: Marcus Vinícius Pereira Rocha Curso: Jogos Digitais

Módulo: Habilidades Ano: 2015

Introdução

Irei utilizar um código, que eu mesmo criei em Java na faculdade, para criação de um labirinto do Pac-Man. A construção é fácil quando se entende como funcionam os modos de programação gráfica.

É um modelo bem básico de programação de linhas, utilizando linhas de comando para se construir pontos e liga-los entre si.

Algoritmo do labirinto

Para começar os eixos invertidos, ou seja, de cabeça para baixo. Como mostrado na imagem:

Mas o ponto não é esse e sim como foi construído o labirinto. Para se construir o labirinto, foi necessário criar primeiro o tamanho da tela desejado. O tamanho utilizado foi do de 640x480, um tamanho pequeno e um pouco mais simples de se desenhar o labirinto.

Para se desenhar as peças, foram necessários criar vetores, com valores pré-definidos. Por qual motivo? Pois esses são os valores responsáveis por demonstrar qual é o pixel da tela, que o respectivo ponto está. Mas para se ligar os pontos, deve ser criado para cada peça um vetor para seu eixo X e um para o Y.

Com os vetores já criados é hora de mostrar esse labirinto na tela. Sendo assim, será necessário utilizar um comando, para que a tela seja criada. E em seguida será definido a cor do fundo da tela.

Sempre que um desenho for criado, tem de se usar um comando para que os vetores criados criem seus pontos e que os ligue, para que a forma geométrica ou o desenho criado seja mostrado.

Page 2: Algoritmo Labirinto Pacman

Como foi mostrando no código, foi coloca o eixo X e o Y de cada peça com um número em seguida “linha(ilabvx, ilabvy, 10);”. Esse número é responsável por mostrar ao comando, quando pontos de ligação a peça vai ter, para assim fazer a ligação entre eles e as linhas aparecerem. variaveis int x, y; <- Variáveis responsáveis por guardar os valores de dimensão da tela int largura = 480; <- Variável responsável por guardar a largura int altura = 640; <- Variável responsável por guardar a altura //peças superiores do labirinto. //peças do lado esquerdo. int [] sepx1 = {110, 182, 182, 110, 110}; <- Valores dos pontos X da peça int [] sepy1 = {65, 65, 90, 90, 65}; <- Valores dos pontos Y da peça int [] sepx2 = {110, 182, 182, 110, 110}; int [] sepy2 = {125, 125, 140, 140, 125}; int [] sepx3 = {213, 285, 285, 213, 213}; int [] sepy3 = {65, 65, 90, 90, 65}; int [] sepx4 = {213, 233, 233, 285, 285, 233, 233, 213, 213}; int [] sepy4 = {125, 125, 175, 175, 181, 181, 230, 230, 125}; //peça do meio. int [] smpx = {263, 377, 377, 325, 325, 315, 315, 263, 263}; int [] smpy = {125, 125, 140, 140, 181, 181, 140, 140, 125}; //peças do lado direito int [] sdpx1 = {355, 427, 427, 355, 355}; int [] sdpy1 = {65, 65, 90, 90, 65}; int [] sdpx2 = {457, 529, 529, 457, 457}; int [] sdpy2 = {65, 65, 90, 90, 65}; int [] sdpx3 = {457, 529, 529, 457, 457}; int [] sdpy3 = {125, 125, 140, 140, 125}; int [] sdpx4 = {407, 427, 427, 407, 407, 355, 355, 407, 407}; int [] sdpy4 = {125, 125, 230, 230, 181, 181, 175, 175, 125}; //peça central do labirinto. int [] cpx = {335, 377, 377, 263, 263, 305, 305, 268, 268, 372, 372, 335, 335, 335}; int [] cpy = {211, 211, 275, 275, 211, 211, 216, 216, 270, 270, 216, 216, 216, 211}; //peças inferiores do labirinto. //peças do lado esquerdo int [] iepx1 = {213, 233, 233, 213, 213}; int [] iepy1 = {260, 260, 320, 320, 260}; int [] iepx2 = {115, 182, 182, 145, 145, 115, 115}; int [] iepy2 = {350, 350, 400, 400, 360, 360, 350}; int [] iepx3 = {213, 233, 233, 285, 285, 115, 115, 213, 213}; int [] iepy3 = {390, 390, 430, 430, 435, 435, 430, 430, 390};

Page 3: Algoritmo Labirinto Pacman

int [] iepx4 = {213, 285, 285, 213, 213}; int [] iepy4 = {350, 350, 360, 360, 350}; //peças do meio. int [] impx1 = {263, 377, 377, 325, 325, 315, 315, 263, 263}; int [] impy1 = {390, 390, 400, 400, 435, 435, 400, 400, 390}; int [] impx2 = {263, 377, 377, 325, 325, 315, 315, 263, 263}; int [] impy2 = {305, 305, 320, 320, 360, 360, 320, 320, 305}; //peças do lado direito. int [] idpx1 = {407, 427, 427, 407, 407}; int [] idpy1 = {260, 260, 320, 320, 260}; int [] idpx2 = {355, 427, 427, 355, 355}; int [] idpy2 = {350, 350, 360, 360, 350}; int [] idpx3 = {407, 427, 427, 525, 525, 355, 355, 407, 407}; int [] idpy3 = {390, 390, 430, 430, 435, 435, 430, 430, 390}; int [] idpx4 = {457, 525, 525, 495, 495, 457, 457}; int [] idpy4 = {350, 350, 360, 360, 400, 400, 350}; //parte inferior externa do labirinto. int [] ilabvx = {50, 177, 177, 75, 75, 565, 565, 462, 462, 590}; int [] ilabvy = {265, 265, 315, 315, 470, 470, 315, 315, 265, 265}; //parte inferior interna do labirinto. int [] ilabintvx = {50, 182, 182, 80, 80, 115, 115, 80, 80, 560, 560, 525, 525, 560, 560, 457, 457, 590}; int [] ilabintvy = {260, 260, 320, 320 , 390, 390, 400, 400, 465, 465, 400, 400, 390, 390, 320, 320 , 260, 260}; // parte superior interna do labirinto. int [] slabintvx = {50, 182, 182, 80, 80, 315, 315, 325, 325, 560, 560, 457, 457, 590}; int [] slabintvy = {230, 230, 170, 170, 35, 35, 90, 90, 35, 35, 170, 170, 230, 230}; // parte superior externa do labirinto. int [] slabvx = {50, 177, 177, 75, 75, 565, 565, 462, 462, 590}; int [] slabvy = {225, 225, 175, 175, 30, 30, 175, 175, 225, 225}; Inicio definir.tamanhodatela(altura, largura); <- Esse comando é responsável por criar a tela definir.cordefundo(Cor.preta); <- Comando responsável por definir a cor de fundo da tela //parte superior do labirinto. definir.cor(Cor.azul); <- Comando responsável por definir a cor das linhas linha(slabvx, slabvy, 10); <- Comando responsável por mostrar as linhas e definir o número de pontos que o desenho irá ter linha(slabintvx, slabintvy, 14);

Page 4: Algoritmo Labirinto Pacman

//parte inferior do labirinto. linha(ilabvx, ilabvy, 10); linha(ilabintvx, ilabintvy, 18); //peças superiores do labirinto. //peças do lado esquerdo. definir.cor(Cor.azul); linha(sepx1, sepy1, 5); linha(sepx2, sepy2, 5); linha(sepx3, sepy3, 5); linha(sepx4, sepy4, 9); //peça do meio. definir.cor(Cor.azul); linha(smpx, smpy, 9); //peças do lado direito. definir.cor(Cor.azul); linha(sdpx1, sdpy1, 5); linha(sdpx2, sdpy2, 5); linha(sdpx3, sdpy3, 5); linha(sdpx4, sdpy4, 9); //peça central. definir.cor(Cor.azul); linha(cpx, cpy, 14); //peças inferiores do labirinto. //peças do lado esquerdo. definir.cor(Cor.azul); linha(iepx1, iepy1, 5); linha(iepx2, iepy2, 7); linha(iepx3, iepy3, 9); linha(iepx4, iepy4, 5); //peças do meio. definir.cor(Cor.azul); linha(impx1, impy1, 9); linha(impx2, impy2, 9); //peças do lado direito. definir.cor(Cor.azul); linha(idpx1, idpy1, 5); linha(idpx2, idpy2, 5); linha(idpx3, idpy3, 9); linha(idpx4, idpy4, 7); fimalgoritmo

Page 5: Algoritmo Labirinto Pacman

Conclusão

Esse é um modo básico de desenho, aplicado em Java. Como eu nunca havia feito esse tipo de algoritmo em Portugol e Visualg. Espero que eu tenha conseguido demonstrar para vocês o que eu pretendia.

Não é algo simples é trabalhoso, pois tem de se definir cada ponto exato para que o desenho tenha a forma desejada. Eu por exemplo, utilizei de um papel quadriculado e fiz todo o labirinto com seus pontos à mão, para assim depois passar para o programa e corrigir alguns erros, como linhas tortas por exemplo.

Fonte da imagem: Eixos: http://1.bp.blogspot.com/-Lh9aKOLdP44/T_WLQN1904I/AAAAAAAAAIQ/IGJCg8yN6cU/s1600/eixos.png Labirinto: própria O labirinto irá ficar assim:

Page 6: Algoritmo Labirinto Pacman

Código original (JAVA)

Como prometido, vou anexar ao pdf, o código original de programação

do labirinto. Nó código é contido alguns comandos, que são necessários para

que o desenho seja mostrado. Mas o algoritmo acima segue a lógica correta do

código original.

O código é todo baseado em Orientação a objetos, por exemplo o

g.drawPolyline, a letra “g” é um objetivo utilizado para programação gráfica em

Java.

Caso não entenda o que esteja acontecendo, só entrar em contato.

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

class Labirinto extends JFrame

{

Polygon v;

int x, y;

int width = 480;

int height = 640;

//peças superiores do labirinto.

//peças do lado esquerdo.

int [] sepx1 = {110, 182, 182, 110, 110};

int [] sepy1 = {65, 65, 90, 90, 65};

int [] sepx2 = {110, 182, 182, 110, 110};

int [] sepy2 = {125, 125, 140, 140, 125};

int [] sepx3 = {213, 285, 285, 213, 213};

int [] sepy3 = {65, 65, 90, 90, 65};

int [] sepx4 = {213, 233, 233, 285, 285, 233, 233, 213, 213};

int [] sepy4 = {125, 125, 175, 175, 181, 181, 230, 230, 125};

//peça do meio.

int [] smpx = {263, 377, 377, 325, 325, 315, 315, 263, 263};

int [] smpy = {125, 125, 140, 140, 181, 181, 140, 140, 125};

//peças do lado direito

int [] sdpx1 = {355, 427, 427, 355, 355};

Page 7: Algoritmo Labirinto Pacman

int [] sdpy1 = {65, 65, 90, 90, 65};

int [] sdpx2 = {457, 529, 529, 457, 457};

int [] sdpy2 = {65, 65, 90, 90, 65};

int [] sdpx3 = {457, 529, 529, 457, 457};

int [] sdpy3 = {125, 125, 140, 140, 125};

int [] sdpx4 = {407, 427, 427, 407, 407, 355, 355, 407, 407};

int [] sdpy4 = {125, 125, 230, 230, 181, 181, 175, 175, 125};

//peça central do labirinto.

int [] cpx = {335, 377, 377, 263, 263, 305, 305, 268, 268, 372, 372, 335, 335,

335};

int [] cpy = {211, 211, 275, 275, 211, 211, 216, 216, 270, 270, 216, 216, 216,

211};

//peças inferiores do labirinto.

//peças do lado esquerdo

int [] iepx1 = {213, 233, 233, 213, 213};

int [] iepy1 = {260, 260, 320, 320, 260};

int [] iepx2 = {115, 182, 182, 145, 145, 115, 115};

int [] iepy2 = {350, 350, 400, 400, 360, 360, 350};

int [] iepx3 = {213, 233, 233, 285, 285, 115, 115, 213, 213};

int [] iepy3 = {390, 390, 430, 430, 435, 435, 430, 430, 390};

int [] iepx4 = {213, 285, 285, 213, 213};

int [] iepy4 = {350, 350, 360, 360, 350};

//peças do meio.

int [] impx1 = {263, 377, 377, 325, 325, 315, 315, 263, 263};

int [] impy1 = {390, 390, 400, 400, 435, 435, 400, 400, 390};

int [] impx2 = {263, 377, 377, 325, 325, 315, 315, 263, 263};

int [] impy2 = {305, 305, 320, 320, 360, 360, 320, 320, 305};

//peças do lado direito.

int [] idpx1 = {407, 427, 427, 407, 407};

int [] idpy1 = {260, 260, 320, 320, 260};

int [] idpx2 = {355, 427, 427, 355, 355};

int [] idpy2 = {350, 350, 360, 360, 350};

int [] idpx3 = {407, 427, 427, 525, 525, 355, 355, 407, 407};

int [] idpy3 = {390, 390, 430, 430, 435, 435, 430, 430, 390};

int [] idpx4 = {457, 525, 525, 495, 495, 457, 457};

int [] idpy4 = {350, 350, 360, 360, 400, 400, 350};

//parte inferior externa do labirinto.

Page 8: Algoritmo Labirinto Pacman

int [] ilabvx = {50, 177, 177, 75, 75, 565, 565, 462, 462, 590};

int [] ilabvy = {265, 265, 315, 315, 470, 470, 315, 315, 265, 265};

//parte inferior interna do labirinto.

int [] ilabintvx = {50, 182, 182, 80, 80, 115, 115, 80, 80, 560, 560, 525, 525,

560, 560, 457, 457, 590};

int [] ilabintvy = {260, 260, 320, 320 , 390, 390, 400, 400, 465, 465, 400, 400,

390, 390, 320, 320 , 260, 260};

// parte superior interna do labirinto.

int [] slabintvx = {50, 182, 182, 80, 80, 315, 315, 325, 325, 560, 560, 457,

457, 590};

int [] slabintvy = {230, 230, 170, 170, 35, 35, 90, 90, 35, 35, 170, 170, 230,

230};

// parte superior externa do labirinto.

int [] slabvx = {50, 177, 177, 75, 75, 565, 565, 462, 462, 590};

int [] slabvy = {225, 225, 175, 175, 30, 30, 175, 175, 225, 225};

Labirinto()

{

super();

setSize(height, width);

setBackground(Color.black);

x=48;

y=64;

setVisible(true);

setResizable(false);

repaint();

}

public void paint(Graphics g)

{

g.setColor(Color.black);

g.fillRect(0, 0, 640, 480);

g.setColor(Color.blue);

//parte superior do labirinto.

g.drawPolyline(slabvx, slabvy, 10);

g.drawPolyline(slabintvx, slabintvy, 14);

//parte inferior do labirinto.

g.drawPolyline(ilabvx, ilabvy, 10);

g.drawPolyline(ilabintvx, ilabintvy, 18);

//peças superiores do labirinto.

Page 9: Algoritmo Labirinto Pacman

//peças do lado esquerdo.

g.setColor(Color.blue);

g.drawPolyline(sepx1, sepy1, 5);

g.drawPolyline(sepx2, sepy2, 5);

g.drawPolyline(sepx3, sepy3, 5);

g.drawPolyline(sepx4, sepy4, 9);

//peça do meio.

g.setColor(Color.blue);

g.drawPolyline(smpx, smpy, 9);

//peças do lado direito.

g.drawPolyline(sdpx1, sdpy1, 5);

g.drawPolyline(sdpx2, sdpy2, 5);

g.drawPolyline(sdpx3, sdpy3, 5);

g.drawPolyline(sdpx4, sdpy4, 9);

//peça central.

g.setColor(Color.blue);

g.drawPolyline(cpx, cpy, 14);

//peças inferiores do labirinto.

//peças do lado esquerdo.

g.setColor(Color.blue);

g.drawPolyline(iepx1, iepy1, 5);

g.drawPolyline(iepx2, iepy2, 7);

g.drawPolyline(iepx3, iepy3, 9);

g.drawPolyline(iepx4, iepy4, 5);

//peças do meio.

g.drawPolyline(impx1, impy1, 9);

g.drawPolyline(impx2, impy2, 9);

//peças do lado direito.

g.drawPolyline(idpx1, idpy1, 5);

g.drawPolyline(idpx2, idpy2, 5);

g.drawPolyline(idpx3, idpy3, 9);

g.drawPolyline(idpx4, idpy4, 7);

}

public static void main(String args[])

{

Labirinto l=new Labirinto();

Page 10: Algoritmo Labirinto Pacman

}

}