Bonjour a tous, je suis nouveau sur ce forum et nouveau dans le milieu de la programmation
Pour mon projet d'ISN j'ai décidé de fair un tower defense mais je suis face a un probleme que je n'arrive pas a regler :
- lorsque plusieurs ennemis arrivent dans la zone d'action de la tour, la flamme commence a faire n'importe quoi, et cela s'empire quand on pose de nouvelles tours
Voici mon code (il y a certaines fonctions qui ne servent a rien elles sont:
dues aux diverses modifications du code et j'ai publié d'en enlever certaines.. )
PImage route, panda, tour, rouge, fire, end; //chargement des images
int x, n;
int xi;
int yi;
int i;
int v=40;
int p = 100;
int poser;
int enemi=1;
int chrono=millis();
int chrono2=millis();
int t ,t2;
int y;
int vch;
int ifirex=0;
int ifirey=0;
int j,k;
boolean pan,toura, bas, droite, haut;// bail qui bouge
String message;
Table tablex;
Table tabley;
Table Tpanda;
Table tablefeu;
void setup ()
{
route = loadImage("route.PNG");
panda = loadImage("pandapirated.png");
panda2 = loadImage("pandapirateg.png");
tour = loadImage("Tour2.0.png");
rouge= loadImage("carre_rouge.png");
fire= loadImage("fire.png");
end= loadImage("gameover.jpg");
size(route.width, route.height);// on adapte la taille de la carte à celle de l'écran
pan = true;
x = 248;
y= -100;
xi = mouseX;
yi = mouseY;
v=40;
tablex = new Table();
tablex.addColumn("lesx",Table.INT);
tablex.addRow();
tabley = new Table();
tabley.addColumn("lesy",Table.INT);
tabley.addRow();
tablefeu = new Table();
tablefeu.addColumn("x",Table.INT);
tablefeu.addColumn("y",Table.INT);
tablefeu.addColumn("xattaque",Table.INT);
tablefeu.addColumn("yattaque",Table.INT);
tablefeu.addRow();
Tpanda = new Table();
Tpanda.addColumn("vie",Table.INT);
Tpanda.addColumn("x",Table.INT);
Tpanda.addColumn("y",Table.INT);
Tpanda.addRow();
Tpanda.addRow();
Tpanda.setInt(1, "x",248);
Tpanda.setInt(1,"y",-100);
Tpanda.setInt(1,"vie",v);
}
void draw()
{
image(route, 0,0);//image route indication placement
noFill();
message =" points =" + p;
text(message, 550, 600);
tour.resize (50, 50);
panda.resize (50, 50);
panda2.resize(50, 50);
rouge.resize (50, 50);// taille
fire.resize(20,20);
end.resize(800,800);
textSize(35);
//CHRONOMETRE
if(millis()-chrono>=10)
{
t++;
chrono=millis();
}
if (millis()>500)
{n++;
}
if (n==80)
{n=0;}
for(int iii=1; iii<= enemi; iii++)
{
//Dessin
//mouvement
//bas
if((Tpanda.getInt(iii,"x") < 472) && (Tpanda.getInt(iii,"y") < 470))
{
Tpanda.setInt(iii,"y",Tpanda.getInt(iii,"y")+1);
if(n<=40)
{
image(panda,Tpanda.getInt(iii,"x") , Tpanda.getInt(iii,"y"));
}
else
{
image(panda2,Tpanda.getInt(iii,"x") , Tpanda.getInt(iii,"y"));
}
}
//droite
if((Tpanda.getInt(iii,"x") <472) && (Tpanda.getInt(iii,"y") == 470))
{
Tpanda.setInt(iii,"x",Tpanda.getInt(iii,"x")+1);
if(n<=40)
{
image(panda,Tpanda.getInt(iii,"x") , Tpanda.getInt(iii,"y"));
}
else
{
image(panda2,Tpanda.getInt(iii,"x") , Tpanda.getInt(iii,"y"));
}
}
//haut
if ((Tpanda.getInt(iii,"x") ==472 ) )
{
Tpanda.setInt(iii,"y",Tpanda.getInt(iii,"y")-1);
if(n<=40)
{
image(panda,Tpanda.getInt(iii,"x") , Tpanda.getInt(iii,"y"));
}
else
{
image(panda2,Tpanda.getInt(iii,"x") , Tpanda.getInt(iii,"y"));
}
if ((Tpanda.getInt(iii,"x") == 472) && (Tpanda.getInt(iii,"y") == 0))
{
noLoop();
pan=false;
image(end, 0, 0);
tint(51, 0);
}
}
//Trajetfeu
for(int ii = 1;ii<=poser;ii++)
{
if (sqrt(sq(tablex.getInt(ii,"lesx")-Tpanda.getInt(iii-1,"x"))+sq(tabley.getInt(ii,"lesy")-Tpanda.getInt(iii-1,"y")))<=125)
{
continue;}
if (sqrt(sq(tablex.getInt(ii,"lesx")-Tpanda.getInt(iii,"x"))+sq(tabley.getInt(ii,"lesy")-Tpanda.getInt(iii,"y")))<=125)
{
{
if( Tpanda.getInt(iii,"x")+15>tablefeu.getInt(ii,"x") && Tpanda.getInt(iii,"y")+15>tablefeu.getInt(ii,"y"))
{
tablefeu.setInt(ii,"x",tablefeu.getInt(ii,"x")+1);
tablefeu.setInt(ii,"y",tablefeu.getInt(ii,"y")+1);
image(fire,tablefeu.getInt(ii,"x"),tablefeu.getInt(ii,"y"));
}
//bas gauche
if( Tpanda.getInt(iii,"x")+15<tablefeu.getInt(ii,"x") && Tpanda.getInt(iii,"y")+15>tablefeu.getInt(ii,"y"))
{
tablefeu.setInt(ii,"x",tablefeu.getInt(ii,"x")-1);
tablefeu.setInt(ii,"y",tablefeu.getInt(ii,"y")+1);
image(fire,tablefeu.getInt(ii,"x"),tablefeu.getInt(ii,"y"));
}
//haut droit
if( Tpanda.getInt(iii,"x")+15>tablefeu.getInt(ii,"x") && Tpanda.getInt(iii,"y")+15<tablefeu.getInt(ii,"y"))
{
tablefeu.setInt(ii,"x",tablefeu.getInt(ii,"x")+1);
tablefeu.setInt(ii,"y",tablefeu.getInt(ii,"y")-1);
image(fire,tablefeu.getInt(ii,"x"),tablefeu.getInt(ii,"y"));
}
//haut gauche
if( Tpanda.getInt(iii,"x")+15<tablefeu.getInt(ii,"x") && Tpanda.getInt(iii,"y")+15<tablefeu.getInt(ii,"y"))
{
tablefeu.setInt(ii,"x",tablefeu.getInt(ii,"x")-1);
tablefeu.setInt(ii,"y",tablefeu.getInt(ii,"y")-1);
image(fire,tablefeu.getInt(ii,"x"),tablefeu.getInt(ii,"y"));
}
//bas
if( Tpanda.getInt(iii,"x")+15==tablefeu.getInt(ii,"x") && Tpanda.getInt(iii,"y")+15>tablefeu.getInt(ii,"y"))
{
tablefeu.setInt(ii,"y",tablefeu.getInt(ii,"y")-1);
image(fire,tablefeu.getInt(ii,"x"),tablefeu.getInt(ii,"y"));
}
//gauche
if( Tpanda.getInt(iii,"x")+15<tablefeu.getInt(ii,"x") && Tpanda.getInt(iii,"y")+15==tablefeu.getInt(ii,"y"))
{
tablefeu.setInt(ii,"x",tablefeu.getInt(ii,"x")-1);;
image(fire,tablefeu.getInt(ii,"x"),tablefeu.getInt(ii,"y"));
}
//droit
if( Tpanda.getInt(iii,"x")+15>tablefeu.getInt(ii,"x") && Tpanda.getInt(iii,"y")+15==tablefeu.getInt(ii,"y"))
{
tablefeu.setInt(ii,"x",tablefeu.getInt(ii,"x")+1);
image(fire,tablefeu.getInt(ii,"x"),tablefeu.getInt(ii,"y"));
}
//haut
if( Tpanda.getInt(iii,"x")+15==tablefeu.getInt(ii,"x") && Tpanda.getInt(iii,"y")+15<tablefeu.getInt(ii,"y"))
{
tablefeu.setInt(ii,"y",tablefeu.getInt(ii,"y")-1);
image(fire,tablefeu.getInt(ii,"x"),tablefeu.getInt(ii,"y"));
}
if(tablefeu.getInt(ii,"x")==Tpanda.getInt(iii,"x")+15 && tablefeu.getInt(ii,"y")==Tpanda.getInt(iii,"y")+15)
{
tablefeu.setInt(ii,"x",tablex.getInt(ii,"lesx")+15);
tablefeu.setInt(ii,"y",tabley.getInt(ii,"lesy")+15);
Tpanda.setInt(iii,"vie",Tpanda.getInt(iii,"vie")-50);
}
}
if(Tpanda.getInt(iii,"vie")<=0)
{ Tpanda.setInt(iii,"x",480);
Tpanda.setInt(iii,"vie",890);
p=p+20;
tablefeu.setInt(ii,"x",tablex.getInt(ii,"lesx")+15);
tablefeu.setInt(ii,"y",tabley.getInt(ii,"lesy")+15);
}
//
}
}
}
//gere les differentes tours
for(int i = 1;i <= poser;i++)
{
image(tour,tablex.getInt(i,"lesx"),tabley.getInt(i,"lesy"));
}
//indication pour poser les tours
if (mousePressed == true)
{
image(tour, mouseX-25, mouseY-25);
ellipse(mouseX, mouseY, 250, 250); //rayon d'action
xi= mouseX;
yi=mouseY;
tint(255, 126);
zoneinterdite();
noTint();
}
if(t==450 || t==600 || t==700 || t==650 || t==800 ||t==1450 || t==1600 || t==1700 || t==1650 || t==1800)
{
enemi++;
Tpanda.addRow();
Tpanda.setInt(enemi, "x",248);
Tpanda.setInt(enemi,"y",-100);
v=v+v;
Tpanda.setInt(enemi,"vie",v);
}
}
void mouseClicked()
{
if (p >= 50) {
poser++;
tablex.addRow();
tablex.setInt(poser, "lesx",xi-25);
tabley.addRow();
tabley.setInt(poser,"lesy",yi-25);
p=p-50;
tablefeu.addRow();
tablefeu.setInt(poser,"x",tablex.getInt(poser,"lesx")+15);
tablefeu.setInt(poser,"y",tabley.getInt(poser,"lesy")+15);
}
}
void zoneinterdite()
{
image(rouge, 248, 0);
image(rouge, 248, 50);
image(rouge, 248, 100);
image(rouge, 248, 150);
image(rouge, 248, 200);
image(rouge, 248, 250);
image(rouge, 248, 300);
image(rouge, 248, 350);
image(rouge, 248, 400);
image(rouge, 248, 450);
image(rouge, 248, 500);
image(rouge, 298, 500);
image(rouge, 348, 500);
image(rouge, 298, 450);
image(rouge, 348, 450);
image(rouge, 398, 500);
image(rouge, 448, 500);
image(rouge, 398, 450);
image(rouge, 448, 450);
rouge.resize (22, 50);
image(rouge, 498, 450);
image(rouge, 498, 500);
rouge.resize (50, 50);
image(rouge, 470, 400);
image(rouge, 470, 350);
image(rouge, 470, 300);
image(rouge, 470, 250);
image(rouge, 470, 200);
image(rouge, 470, 150);
image(rouge, 470, 100);
image(rouge, 470, 50);
}
Merci d'avance pour votre aide ! en esperant que quelqu'un trouve une solution
Dernière modification par axel_rag (2015-05-27 19:31:59)
Hors ligne
Bonsoir,
Avant de pouvoir t'aider, il nous faut tes images. Créer un zip du répertoire de ton projet pour que nous ayons tous les éléments.
Hors ligne
Il me semblait l'avoir fait mais cela n'a pas été pris en compte, problème réglé !
Hors ligne
Je ne sais pas s'il y avait des contraintes dans votre sujet, mais à première vue, tu utilises des classes peu adaptées à ce que tu veux faire.
Je ne pense pas que l'utilisation de la classe Table soit opportune.
Tu stockes les positions des différents éléments dans celles-ci.
Il eut été préférable car beaucoup lisible, de créer des classes pour chaque éléments.
Et pour gérer ces classes introduire des Arraylist pour pouvoir aisément ajouter et rétirer des éléments de ces listes.
N'étant pas imprégné par ton programme, je ne peux guère t'aider.
Avez-vous abordé en cours la notion de classe et sais-tu comment les construire ?
Bon courage
Hors ligne
l'utilisation des tables m'a été recommandé par mon professeur, nous n'avons pas eu de réel cours de programmation, on était censé se renseigner sur le net...
j'ai entendu parler de la notion de classes mais je ne sais pas comment l'utiliser...
Hors ligne
Regarde ce que je suis en train de faire…
Hors ligne
Je pense saisir a peux pres le principe, cependant cela demande de reconstruire une bonne partie du code.
Merci pour votre aide, je vais pouvoir me servir de ca pour coder quelque chose de vraiment fonctionnel !
Bonne soirée
Hors ligne
Voilà pour t'avancer un peu.
Il faudrait pour plus de faciliter avoir déjà les images à la bonne taille.
Si tu as des questions, n'hésite pas.
Bon courage.
Hors ligne