import java.applet.*;
import java.awt.*;
import java.lang.Math;
import java.util.Random;
public class Encanamento1 extends Applet implements Runnable {
//Coordenadas do mouseDown
int xPos = 0;
int yPos = 0;
//Coordenadas dos quadrados início e fim
//valores 0,100,200,300,400 e 500
int xPosIni = 0;
int yPosIni = 0;
int xPosFim = 0;
int yPosFim = 0;
//Contagem do tempo
Thread tempo = null;
int conta = 0;
//Imagens
Image BackPage;
Graphics OffScreen;
Image img;
Image imgTempo;
Image imgIni;
Image imgFim;
Image imgCerca;
Image imgGanhou;
//Primeiro sao definidas as posicoes do inici/fim e
//obstáculos
boolean bolIniFim = false;
//Depois podem ser desenhadas as imagens que completarão
//o caminho entre o início e o fim
//------------------------------------------------------
boolean bolImagem = false;
//Definição da posicao dos obstáculos
//-----------------------------------
Random rand = new Random();
int intNum = 9;
int xPosObst1 = 0;
int yPosObst1 = 0;
int xPosObst2 = 0;
int yPosObst2 = 0;
boolean bolCerto = true;
int xUlt = 0;
int yUlt = 0;
int intDifX = 0;
int intDifY = 0;
int xFim = 0;
int yFim = 0;
int[][] vetImg = new int[16][2];
int indVet;
public void init() {
LimpaVet();
BackPage = createImage(900, 700);
OffScreen = BackPage.getGraphics();
img = getImage(getCodeBase(), "Casa.gif");
imgTempo = getImage(getCodeBase(), "Minuto.gif");
imgIni = getImage(getCodeBase(), "Inicio.gif");
imgFim = getImage(getCodeBase(), "Fim.gif");
imgCerca = getImage(getCodeBase(), "Cerca.gif");
imgGanhou = getImage(getCodeBase(), "Ganhou.gif");
DesenhaFundo();
}
//Contagem do tempo
//-----------------
public void run() {
while (tempo != null) {
try {
Thread.sleep (250);
} catch (InterruptedException e) {};
if (conta == 0){
bolIniFim = false;
conta = 600;
LimpaVet();
DesenhaFundo();
} else {
conta -= 25;
for (int i = 575; i >= conta; i-=25){
OffScreen.drawImage(imgTempo, 700, i, this);
}
repaint();
}
}
}
public boolean mouseDown(Event evt, int x, int y) {
Graphics g = getGraphics();
//Calcular o x, y dentro do GRID imposto
//0,100,200,300,400,500
//--------------------------------------------
for (int coord = 0; coord <= 500; coord+=100){
if (x > coord){
xPos = coord;
}
if (y > coord){
yPos = coord;
}
}
//Se coordenadas dentro da área 0,0 a 400,400
//-------------------------------------------
if (((xPos >= 100) && (xPos <= 400)) &&
((yPos >= 100) && (yPos <= 400))){
bolImagem = true;
} else {
bolImagem = false;
}
//Se ainda não começou o jogo
//Hora de desenhar as imagens
//---------------------------
if (!bolImagem){
//Se coordenadas dentro da borda e fora dos cantos
//posição do Início e Fim
//------------------------------------------------
if ((xPos == 0) || (xPos == 500)){
if ((yPos >= 100) && (yPos <= 400)){
bolIniFim = true;
} else {
bolIniFim = false;
}
}
if ((yPos == 0) || (yPos == 500)){
if ((xPos >= 100) && (xPos <= 400)){
bolIniFim = true;
} else {
bolIniFim = false;
}
}
}
//Se for hora de desenhar o caminho entre o Início e o Fim
//--------------------------------------------------------
if (bolImagem){
if (!(((xPos == xPosObst1) && (yPos == yPosObst1)) ||
((xPos == xPosObst2) && (yPos == yPosObst2)))){
//Acompanha as imagens para conferir se o caminho certo esta
//sendo seguido
if (xUlt > xPos){
intDifX = xUlt - xPos;
} else {
intDifX = xPos - xUlt;
}
if (yUlt > yPos){
intDifY = yUlt - yPos;
} else {
intDifY = yPos - yUlt;
}
if (((intDifX == 0) && (intDifY == 100)) ||
((intDifX == 100) && (intDifY == 0))){
bolCerto = true;
indVet++;
vetImg[indVet][0] = xPos;
vetImg[indVet][1] = yPos;
} else {
bolCerto = false;
}
//System.out.println("indVet: "+indVet);
if (bolCerto){
if ((xPos == xFim) && (yPos == yFim)){
tempo = null;
conta = 0;
LimpaVet();
bolIniFim = false;
DesenhaFundo();
OffScreen.drawImage(imgGanhou, 100, 100, this);
} else {
//System.out.println("Imagem");
xUlt = xPos;
yUlt = yPos;
for (int i = 0; i <= indVet; i++){
//Mostra a imagem
OffScreen.drawImage(img, vetImg[i][0] + 10, vetImg[i][1] + 10, this);
}
if (tempo == null) {
tempo = new Thread(this);
tempo.start();
}
}
repaint();
} else {
if (tempo == null) {
tempo = new Thread(this);
tempo.start();
}
}
}
//Hora de definir as posições do Início do Fim e
//dos obstáculos
//----------------------------------------------
} else {
//Mostra o inicio e o fim
xPosIni = xPos;
yPosIni = yPos;
intNum = Math.abs (rand.nextInt()) % 4 + 1;
if ((xPos == 0) || (xPos == 500)){
if (xPos == 0){
xPos = 500;
} else {
xPos = 0;
}
yPos = intNum * 100;
} else {
if ((yPos == 0) || (yPos == 500)){
if (yPos == 0){
yPos = 500;
} else {
yPos = 0;
}
xPos = intNum * 100;
}
}
xPosFim = xPos;
yPosFim = yPos;
xPosObst1 = 0;
yPosObst1 = 0;
xPosObst2 = 0;
yPosObst2 = 0;
while ((xPosObst1 == xPosObst2) && (yPosObst1 == yPosObst2)){
//Mostra os obstáculos
//X
if (xPosIni == 0){
intNum = Math.abs (rand.nextInt()) % 3 + 2;
xPosObst1 = intNum * 100;
} else {
intNum = Math.abs (rand.nextInt()) % 3 + 1;
xPosObst1 = intNum * 100;
}
if (xPosFim == 0){
intNum = Math.abs (rand.nextInt()) % 3 + 2;
xPosObst1 = intNum * 100;
} else {
intNum = Math.abs (rand.nextInt()) % 3 + 1;
xPosObst1 = intNum * 100;
}
if (xPosIni == 0){
intNum = Math.abs (rand.nextInt()) % 3 + 2;
xPosObst2 = intNum * 100;
} else {
intNum = Math.abs (rand.nextInt()) % 3 + 1;
xPosObst2 = intNum * 100;
}
if (xPosFim == 0){
intNum = Math.abs (rand.nextInt()) % 3 + 2;
xPosObst2 = intNum * 100;
} else {
intNum = Math.abs (rand.nextInt()) % 3 + 1;
xPosObst2 = intNum * 100;
}
//Y
if (yPosIni == 0){
intNum = Math.abs (rand.nextInt()) % 3 + 2;
yPosObst1 = intNum * 100;
} else {
intNum = Math.abs (rand.nextInt()) % 3 + 1;
yPosObst1 = intNum * 100;
}
if (yPosFim == 0){
intNum = Math.abs (rand.nextInt()) % 3 + 2;
yPosObst1 = intNum * 100;
} else {
intNum = Math.abs (rand.nextInt()) % 3 + 1;
yPosObst1 = intNum * 100;
}
if (yPosIni == 0){
intNum = Math.abs (rand.nextInt()) % 3 + 2;
yPosObst2 = intNum * 100;
} else {
intNum = Math.abs (rand.nextInt()) % 3 + 1;
yPosObst2 = intNum * 100;
}
if (yPosFim == 0){
intNum = Math.abs (rand.nextInt()) % 3 + 2;
yPosObst2 = intNum * 100;
} else {
intNum = Math.abs (rand.nextInt()) % 3 + 1;
yPosObst2 = intNum * 100;
}
}
//Guarda as coord do Início como a última imagem desenhada
//--------------------------------------------------------
xUlt = xPosIni;
yUlt = yPosIni;
XfimYfim();
conta = 600;
/*
System.out.println("xPosIni: "+xPosIni);
System.out.println("yPosIni: "+yPosIni);
System.out.println("-------------------");
System.out.println("xPosFim: "+xPosFim);
System.out.println("yPosFim: "+yPosFim);
System.out.println("-------------------");
*/
DesenhaFundo();
OffScreen.drawImage(imgIni, xPosIni, yPosIni, this);
OffScreen.drawImage(imgFim, xPosFim, yPosFim, this);
OffScreen.drawImage(imgCerca, xPosObst1, yPosObst1, this);
OffScreen.drawImage(imgCerca, xPosObst2, yPosObst2, this);
repaint();
}
return(true);
}
public void update(Graphics g)
{
paint(g);
return;
}
public void paint (Graphics g) {
g.drawImage(BackPage, 0, 0, this);
return;
}
public void DesenhaFundo(){
OffScreen.setColor(new java.awt.Color(210,210,210));
OffScreen.fillRect(0,0,900,900);
OffScreen.setColor(new java.awt.Color(130,130,230));
OffScreen.fillRect(100,0,400,600);
OffScreen.fillRect(0,100,600,400);
OffScreen.setColor(new java.awt.Color(200,200,250));
OffScreen.fillRect(100,100,400,400);
//Mostra o grid
OffScreen.setColor(Color.black);
for (int i = 0; i <= 600; i+=100){
OffScreen.drawLine(0,i,600,i);
OffScreen.drawLine(i,0,i,600);
}
}
public void LimpaVet(){
for (int i = 0; i <= 15; i++){
vetImg[i][0] = 0;
vetImg[i][1] = 0;
}
indVet = -1;
}
//Define as coord do Fim
//----------------------
public void XfimYfim(){
if (xPosFim == 0){
xFim = 100;
} else if (xPosFim == 500){
xFim = 400;
} else {
xFim = xPosFim;
}
if (yPosFim == 0){
yFim = 100;
} else if (yPosFim == 500){
yFim = 400;
} else {
yFim = yPosFim;
}
}
}
Nenhum comentário:
Postar um comentário