Déjà types ton main sinon c´est pas propre
Ensuite c´est normal que la boucle interne ne se réalise pas, prenons l´exemple d´une entrée de l´utilisateur : 2 2
x == 2 -> Supérieur à 0
y == 2 -> Supérieur à 0
y--; -> y == 2
x == 2 -> Supérieur à 0
y == 1 -> Supérieur à 0
y--; -> y == 1
x == 2 -> Supérieur à 0
y == 0 -> Supérieur à 0
x--; -> x == 1
x == 1 -> Supérieur à 0
y == 0 -> Non supérieur à 0
x--; -> x == 0
x == 0 -> Non supérieur à 0
Fin
Tu peux voir ci-dessus le problème de ton code : Après la première boucle de x, y n´est pas remis à sa valeur d´entrée utilisateur, mais il vaut 0
Donc les ligens suivantes affichent 0 fois un " X"
Pour y remédier, tu peux passer par une autre variable qui gardera la valeur de y pendant qu´une seconde fera la valeur de la boucle.
Ensuite il serait plus...léger d´utiliser la boucle
for(initialisation;condition;incrémentation)
Enfin c´est juste une question de goût, mais ça te résumerait un peu l´écriture.
x == 2 -> Supérieur à 0
y == 2 -> Supérieur à 0
y--; -> y == 1
x == 2 -> Supérieur à 0
y == 1 -> Supérieur à 0
y--; -> y == 0
x == 2 -> Supérieur à 0
y == 0 -> Supérieur à 0
x--; -> x == 1
x == 1 -> Supérieur à 0
y == 0 -> Non supérieur à 0
x--; -> x == 0
x == 0 -> Non supérieur à 0
Fin
( Petite correction
)
Ok merci j´ai compris mon erreur ![]()
Bonjour pour les anglophobles, hello pour les anglophones,Dans le code que je vais mettre, il s´affiche une image 1 de fond,
une image 2 a gauche
une image 3 a droite
Tout s´affiche mais le probleme est que l´image 2 doit bouger, et q´elle ne bouge pas. Voici le code :
SDL_Surface *screen;
SDL_Surface *firstscreen;
SDL_Event event;
SDL_Rect rect1;
Uint8* keystate;
int x,y ;
void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_WM_SetCaption("Ma fenetre",NULL);
SDL_ShowCursor(0);
}
void waitkey()
{
while(1)
{
while(SDL_PollEvent(&))
{
if ( event.type == SDL_KEYDOWN)
{
if ( event.key.keysym.sym == SDLK_RETURN) return;
}
}
}
}
int main(int argc , char **argv)
{
SDL_Rect rect1;
init_SDL();
firstscreen = SDL_LoadBMP("aire.bmp");
rect1.x = 0;
rect1.y = 0;
rect1.w = 1024;
rect1.h = 768;
SDL_BlitSurface(firstscreen,NULL,screen,&1);
firstscreen=SDL_LoadBMP("barre joueur 1.bmp");
rect1.x=0;
rect1.y=332.5;
rect1.w=1024;
rect1.h=768;
SDL_SetColorKey(firstscreen,SDL_SRCCOLORKEY , SDL_MapRGBA(firstscreen->format,255,0,255,0));
SDL_BlitSurface(firstscreen,NULL,screen,&1);
rect1.x=x;
rect1.y=y;
keystate=SDL_GetKeyState(NULL);
if(keystate[SDLK_DOWN])y++;
if(keystate[SDLK_UP])y--;
SDL_FreeSurface(screen);
firstscreen = SDL_LoadBMP("barre joueur 2.bmp");
rect1.x=986;
rect1.y=332.5;
rect1.w=1024;
rect1.h=768;
SDL_SetColorKey(firstscreen,SDL_SRCCOLORKEY , SDL_MapRGBA(firstscreen->format,255,0,255,0));
SDL_BlitSurface(firstscreen,NULL,screen,&1);
SDL_Flip(screen);
waitkey();
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}
Si quelqu´un pourrait m´aider, ce serai sympa, car quand je saurais ca, il me restera d´autres trucs, mais quand je saurais les autres trucs aussi, je voudrais faire plein de mode different pour le ti jeu fait, ce qui est facile si je connais tout, mais qui prend un petit peu de temps.Vous comprenez ?
d´avance et bonne route !
Ciao...
et à quel endroit est ce que tu dit à l´image 2 de bouger ?
ton programme est absolument linéaire, pas la moindre boucle, etc...
Et puis tu as beaucoup trop de variables différentes, tu ne crois pas que tu auraios pu tout faire avec une seul variable ?
sérieusement, soit pas radin avec ta mémoire utilise unevariable firstscreen pour l´image 1 si tu veux mais ensuite utilise d´autre variable.
En faait je debute, donc je ne suis pas doué, tu vois.
Sinon, c´est la que je lui dit de boger :
rect1.x=x;
rect1.y=y;
keystate=SDL_GetKeyState(NULL);
if(keystate[SDLK_DOWN])y++;
if(keystate[SDLK_UP])y--;
SDL_FreeSurface(screen);
Je vais donc essayer de mettre ce truc dans une boucle et je verrais si ca marche,
pour ton poste, car avant, je parlais tout seul.
Bijour, Es ce que c´est mieux d´utiliser une variable pour chaque image ? ![]()
Sinon, j´ai changé mmon programme et j´ai mit l´action de bouger dans ne boucle, voyez par vous meme :
SDL_Surface* screen;
SDL_Surface* firstscreen;
SDL_Event event;
void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_ShowCursor(0);
}
void waitkey()
{
while(1)
{
while(SDL_PollEvent(&))
{
if ( event.type == SDL_KEYDOWN)
{
if ( event.key.keysym.sym == SDLK_RETURN) return;
}
}
}
}
int main(int argc , char **argv)
{
SDL_Rect rect1;
init_SDL();
firstscreen = SDL_LoadBMP("aire.bmp");
rect1.x = 0;
rect1.y = 0;
rect1.w = 1024;
rect1.h = 768;
SDL_BlitSurface(firstscreen,NULL,screen,&1);
firstscreen=SDL_LoadBMP("barre joueur 1.bmp");
rect1.x=20;
rect1.y=332.5;
rect1.w=1024;
rect1.h=768;
SDL_SetColorKey(firstscreen,SDL_SRCCOLORKEY , SDL_MapRGBA(firstscreen->format,255,0,255,0));
SDL_BlitSurface(firstscreen,NULL,screen,&1);
{
SDL_Event event;
SDL_WaitEvent(&);
switch ( event.type)
{
case SDLK_UP:
printf("La touche %s a été préssée!\n",
SDL_GetKeyName(event.key.keysym.sym));
break;
}
}
firstscreen=SDL_LoadBMP("barre joueur 2.bmp");
rect1.x=987;
rect1.y=332.5;
rect1.w=1024;
rect1.h=768;
SDL_SetColorKey(firstscreen,SDL_SRCCOLORKEY,SDL_Ma
pRGBA(firstscreen->format,255,0,255,0));
SDL_BlitSurface(firstscreen,NULL,screen,&1);
SDL_Flip(screen);
waitkey();
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}
d´avance a ceux qui me repondront.
using namespace std;
int main()
{
int i=0;
char t[100];
cout < < " voila , ecris une phrase qui finira par 0" < < " \n";
do
{
cin > > t[i];
}while(i++ ! = 0);
cout < < " voila la phrase que tu as tape jusqu´a 0 \n";
do
{
cout < < t[i];
}while(i++ ! = 0);
cout < < " \n";
system("pause");
return 0;
}
bon , ce petit prog ( pour faire un test ^^) est censé me faire ecrire une phrase et me la réecrire j´usqua l´endroit ou il y a un 0 , ok , caa buggue , jai essayé dans
}while(i++ ! = 0);
de mettre a la place
}while(i++ ! = " 0");
ou encore
}while(i++ ! = ´0´); ^^
sans resultat , jai aussi essayé de mettre
do
{
cin > > t[i];
i++;
}while(i++ ! = 0);
sans resultat..........
d´ou vient l´erreur?
je croit que c du fait que g miit mon 0 comme ca , sans rien autour ( "0" par exemple) mais sinon , ca buggue
g un peu arrangé , mais ca marche pas encore , quand je ecris la phrase avec un 0 a la fin , je met entré et y se passe rien
using namespace std;
int main()
{
int i=0;
char t[100];
cout < < " voila , ecris une phrase qui finira par un 0" < < " \n";
do
{
cin > > t[i];
}while(t[i++] ! = 0);
cout < < " voila la phrase que tu as tape jusqu´au 0 \n";
do
{
cout < < t[i];
}while(t[i++] ! = 0);
cout < < " \n";
system("pause");
return 0;
}
je me suis dit :
mais oui! c con car la ca ragardera dans le char qui est apres celui que jai tapé si ya pas un 0! ![]()
do
{
cin > > t[i];
}while(t[i++] ! = 0);
alors g mit ca :
do
{
cin > > t[i];
i++
}while(t[i--] ! = 0);
mais ca marche pas aussi ![]()
jai essayer de remplacer le 0 par un . , mais en fait , quand on met le . tout seul comme jai fait avc le zero , evidement ca compile pas , donc l´erreure vien de la ^^
while ( t[i++] ! =0)
{
cin > > t[i];
};
Est 10 fois plus propre que cette horeur sans nom.
là ça ne peut pas marcher car a chaque boucle tu augmente i de 1 et tu le diminue de 1, en définitive il n´a pas bouger.
do
{
cin > > t[i];
i++
}while(t[i--] ! = 0);
Mais le bout de code en haut ne marchera pasnon plus, car tu as oublié de remettre i à 0 après avoir entrée la première chaine de caractère.
( il faudrait aussi que par endroit tu remplace les t[i++] par t[++i] mais bon, tant pis).
Et puis que tu fasse while t[i++]!=0 && i<100)
pour pas sortir du tableau.
excuse moi, partout tu doit aussi remplacer 0 pars ´0´ ( entre apostrophe) pour dire que c´est un caractère.
a! merci!
et pour le do , ta raison ^^ mais je voulais tester ^^
eet merde!!!!
jai voulut enlever le do
mais voila :
using namespace std;
int main()
{
int i=0;
char t[100];
cout < < " voila , ecris une phrase qui finira par un 0" < < " \n";
while(t[i++] ! = ´0´);
{
cin > > t[i];
}
cout < < " voila la phrase que tu as tape jusqu´au 0 \n";
i=0;
while(t[i++] ! = ´0´);
{
cout < < t[i];
}
cout < < " \n";
system("pause");
return 0;
}
je marque une phrase , et c
ca m´ecris que le premier caractere de celle ci!!
en faait , je comprend l´erreur mai je c pas l´arranger
, je manque d´experience ![]()
je vois pas
Ben moi, j´ai un problème dans l´utilisation de la SDL. En effet, quand je bouge quelque chose, il y a une vieille traînée qui reste. Je fais comment pour l´enlever ?
Je vais regardert ton code Sonic ; ).
Bon, alors sonic, pour ton code il y n´y a presque rien. Tout d´abord, au lieu de faire un tableau de caractère au début, je te conseille de faire un simple pointeur de caractère. Après, tu peux l´utiliser pareil qu´avant, mais ça a l´avantage de ne pas avoir à afficher lettre par lettre mais directement la cha^pine entière. Ensuite, après le wxhile nul besoin de mettre un ´;´.
En code, ça donne ça :
using namespace std;
int main()
{
char* t;
cout<<" voila , ecris une phrase qui finira par un 0"<<" \n";
while(t[i++]!=´0´)
{
cin>>t[i];
}
cout<<" voila la phrase que tu as tape jusqu´au 0 \n"<<t<<´\n´;
system("pause");
return 0;
}
Bon, j´ai pas compilé, mais je crois que ça peut marcher ; ).
merci!
mais pour le coup du pointeur , jai pas trop comris ^^