Le rubix cube en 3d avec ou sans images

Description

interactif mais injouable. c pur le fun!
projet manipulable sur Jbuilder perso
sans java3D

Source / Exemple :


//la classe principale 

import java.applet.*;
import java.awt.*;
import java.awt.image.*;
import java.lang.Math;
import java.lang.Thread;
import java.lang.System;
import java.net.URL;

public class go extends Applet implements Runnable
{

int a,b,i,largeurEcran=800,hauteurEcran=700,nb,facettex[]=new int[4],
facettey[]=new int[4],jeupret[];
rubicube GO;
PixelGrabber grosPx;
Image entrez,chargement,jeu;
boolean toutDebut = true,toutouDebut = true;
Graphics g2;
Image Imagecachee;

//chargement d'images
 public void init()
 {
  largeurEcran = new Integer(getParameter("largeurEcran")).intValue();
  hauteurEcran = new Integer(getParameter("hauteurEcran")).intValue();
  setBackground(new Color(125,125,152));
  entrez = getImage(getDocumentBase(),"entrez.gif");
  jeu = getImage(getDocumentBase(),"jeupret.gif");
  MediaTracker myTracker=new MediaTracker(this);
  myTracker.addImage(entrez,0);
  chargement = getImage(getDocumentBase(),"chargement.gif");
  myTracker.addImage(chargement,1);
  myTracker.addImage(jeu,2);
  try
  {
   myTracker.waitForID(0);
   myTracker.waitForID(1);
   myTracker.waitForID(2);
  }
  catch (InterruptedException e){}
  Imagecachee = createImage(largeurEcran,hauteurEcran);
  g2 = Imagecachee.getGraphics();
 }

 public void run(){}

//detection évennement
 public synchronized boolean handleEvent(Event e)
 {
  if(!toutouDebut)
  {
    GO.xPointCourant = e.x;
    GO.yPointCourant = e.y;
    a = GO.xPointCourant - GO.xAncienPointCourant;
    b = GO.yPointCourant - GO.yAncienPointCourant;
    if (a != 0 || b != 0) {
      GO.xDplt = a;
      GO.yDplt = b;
    }
    switch (e.id) {
      case Event.MOUSE_MOVE:
        GO.OK = false;
        break;
      case Event.MOUSE_DRAG:
        if (!toutDebut) {
          if (GO.tournerCube)
            GO.tournerCamera();
          if (GO.tournerFacettes) {
            if (!GO.rotationInitialisee)
              GO.initialiserRotation();
            GO.tournerFacettes();
          }
        }
        break;
      case Event.MOUSE_DOWN:
        GO.OK = false;
        if (!toutDebut) {
          if (!GO.dansLeCube())
            GO.tournerCube = true;
          else
            GO.tournerFacettes = true;
        }
        break;
      case Event.MOUSE_UP:
        if (!toutDebut) {
          if (GO.tournerFacettes)
            GO.estCEqueLEcube();
          GO.tournerFacettes = GO.tournerCube = false;
        }
        break;
      case Event.KEY_PRESS:
        switch (e.key) {
          case '2':
            i = 2;
            break;
          case '3':
            i = 3;
            break;
          case '4':
            i = 4;
            break;
          case '5':
            i = 5;
            break;
          case '6':
            i = 6;
            break;
          case '7':
            i = 7;
            break;
          case '8':
            i = 8;
            break;
          case '9':
            i = 9;
            break;
          default:
            return false;
        }
        break;
      default:
        return false;
    }
    GO.xAncienPointCourant = GO.xPointCourant;
    GO.yAncienPointCourant = GO.yPointCourant;
  }
  repaint();
  return false;
 }

 public void update(Graphics g)
 {
  if(toutDebut || toutouDebut)//chargement images puis rotation puis zeu!
  {
   if(toutouDebut)
   {
    g2.drawImage(chargement,0,hauteurEcran/2-hauteurEcran/2*chargement.getHeight(this)/largeurEcran,largeurEcran,hauteurEcran*chargement.getHeight(this)/largeurEcran,this);
    g.drawImage(Imagecachee,0,0,this);
    GO = new rubicube(this);
    jeupret = new int[jeu.getWidth(this)*jeu.getHeight(this)];
    grosPx = new PixelGrabber(jeu,0,0,jeu.getWidth(this),jeu.getHeight(this),jeupret,0,jeu.getWidth(this));
    try
    {
     grosPx.grabPixels();
    }
    catch(InterruptedException ee){}
    GO.jeu = jeupret;
    GO.face3 = jeu.getWidth(this);
    GO.face4 = jeu.getHeight(this);
    GO.largeurEcran = largeurEcran;
    GO.hauteurEcran = hauteurEcran;
    toutouDebut = false;
   }
   if(toutDebut && !toutouDebut)
   {
    g2.clearRect(0,0,largeurEcran,hauteurEcran);
    g2.drawImage(entrez,0,hauteurEcran/2-hauteurEcran/2*entrez.getHeight(this)/largeurEcran,largeurEcran,hauteurEcran*entrez.getHeight(this)/largeurEcran,this);
    if(i >= 2 && i <= 9)
    {
     g2.clearRect(0,0,largeurEcran,hauteurEcran);
     GO.nombreParCote = i;
     GO.toutDebut();
     GO.stockerLesSommets();
     GO.xDplt = 0;
     GO.yDplt = 0;
     GO.tournerCamera();
     GO.aleatoire(g,g2,Imagecachee);
     toutDebut = false;
     GO.OK = true;
     GO.dessiner(g);
    }
    else
     g.drawImage(Imagecachee,0,0,this);
   }
  }
  else
   GO.dessiner(g);
 }
}

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.