Vous n'êtes pas identifié.
je defis qui compte de trouver l'erreur :
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#include <bios.h>
void inv_pixel(unsigned short int x, unsigned short int y)
{
asm push ax;
asm push cx;
asm push dx;
asm mov cx,x;
asm mov dx,y;
asm mov ax,0x1A20;
asm mov es,ax;
asm mov si,0x003f;
asm sub si,dx;
asm sub cx,0x80;
asm not cx;
asm push cx;
asm and cl,0xf8;
asm shl cx,0x03;
asm add si,cx;
asm pop cx;
asm and cl,0x07;
asm mov al,es:[si];
asm ror al,cl;
asm not al;
asm and al,1;
asm mov ah,0xfe;
asm rol ah,cl;
asm and es:[si],ah;
asm mov ah,al;
asm rol ah,cl;
asm or es:[si],ah;
asm pop dx;
asm pop cx;
asm pop ax;
}
char mur[1][7][18] =
{{
1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,
1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,
1,0,1,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,
1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1},
};
char level[1][1][7] =
{1,1,1,1,0,1,1,};
void drawmur(unsigned char x, unsigned char y)
{char K,L;
for(K=0;K<18;K++){
for(L=0;L<7;L++){
if(mur[0][L][K]==1) inv_pixel(x + K,y + L);
}}}
int main()
{int I,F;
for(F=0;F<7;F=++){
if(level[0][1][F]==1){drawmur(F*18+5,56);}
getch();
retunr(0);
}
ca fait a peu pres 3heure que j'essaye de trouver l'erreur dans ce code.
EN fait je veux afficher le niveau d'un jeu.
Pour cela j'ai mis le level dans un tableau. les 1 corresponde à la presence d'un mur et le zero à un vide. apres "int main()" c'est un fonction qui lit le talbeau (ou chaine de caractere) en se deplacant vers la droite. Quand il y a un 1, un mur s'affiche. Mais ya pas de mur qui s'affiche :cry:
Alors j'aimerais que quelqu'un m'aide si vous avez du temps.
@+
au fait le probleme ne peut pas venir de ce qu'il ya au dessus de int main() parceque se sont soit des truc que j'ai utilisé dans virtualboxe ou des fonction issu de pong.
Hors ligne
int main() {int I,F; for(F=0;F<7;F=++){ if(level[0][1][F]==1){drawmur(F*18+5,56);} getch(); retunr(0); }
Le F=++ c normal ?? ---> F++
Sinon esaye de remplacer les char H,L; par des int H,L;
Ca ca ma fait des erreur ke j'ai jammais pu comprendre.... (San dépassement de capacité ds mon code...)
Hors ligne
Ouais si kelkun c pkoi ya des char ki bugs la ou ils ne devrai pa bugger ....?
Hors ligne
J'viens de faire un test en speed, ac la modif suivante:
F=++ --> F=F+1
(autant ne pas s'emmerder...)
Ca marche nikel (testé ac Visual C++ 6.0 SE)
Hors ligne
voila ce que j'ai testé et ca ne marche toujours pas:
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
#include <bios.h>
void inv_pixel(unsigned short int x, unsigned short int y)
{
asm push ax;
asm push cx;
asm push dx;
asm mov cx,x;
asm mov dx,y;
asm mov ax,0x1A20;
asm mov es,ax;
asm mov si,0x003f;
asm sub si,dx;
asm sub cx,0x80;
asm not cx;
asm push cx;
asm and cl,0xf8;
asm shl cx,0x03;
asm add si,cx;
asm pop cx;
asm and cl,0x07;
asm mov al,es:[si];
asm ror al,cl;
asm not al;
asm and al,1;
asm mov ah,0xfe;
asm rol ah,cl;
asm and es:[si],ah;
asm mov ah,al;
asm rol ah,cl;
asm or es:[si],ah;
asm pop dx;
asm pop cx;
asm pop ax;
}
char mur[1][7][18] =
{{
1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,
1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,
1,0,1,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1,
1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1}};
int level[1][1][7] =
{1,1,1,1,0,1,1,};
void drawmur(unsigned char x, unsigned char y)
{char K,L;
for(K=0;K<18;K++){
for(L=0;L<7;L++){
if(mur[0][L][K]==1) inv_pixel(x + K,y + L);
}
}
}
int main()
{int F;
for(F=0;F<7;F++)
{if(level[0][1][F]==1){drawmur(F*18+5,56);}}
getch();
return(0);
}
c'est tout de meme etrange !!!
merci tout de meme de m'aider.
y a un bug inexpliquable !!
Hors ligne
c'est aussi essayer avec int au lieu de char mais toujours rien.
va falloir que je trouve une nouvelle idee de jeu.
mais quand meme c'est pas normal !! :?
Hors ligne
À quoi ça sert de faire
int level[1][1][7] = {1,1,1,1,0,1,1,};
quand on peut faire (avec en plus une faute en moins ",}")
int leve[7] = {1,1,1,1,0,1,1};
et pareil pour :
char mur[1][7][18] = {{ 1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1, 1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1, 1,0,1,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1, 1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1}};
Alors qu'il est plus claire et plus simple d'écrire
char mur[7][18] = { {1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1}, {1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1}, {1,0,1,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1}, {1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1} };
Et puis voilà la faute majeure (qui est sans doute la cause de ton problème) engendrée par cette organisation pour le moins étrange :
if(level[0][1][F]==1){drawmur(F*18+5,56);}} //le level[0][1] correspond a un emplacement mémoire qui peut contenir n'importe quoi, il aurait fallu écrire : if(level[0][0[F]==1){drawmur(F*18+5,56);}}
Bon voilà tout le code corrigé et réorganisé de mainière infiniment plus lisible
#include <stdio.h> #include <conio.h> #include <dos.h> #include <stdlib.h> #include <bios.h> void inv_pixel(unsigned short int x, unsigned short int y) { asm { push ax; push cx; push dx; mov cx,x; mov dx,y; mov ax,0x1A20; mov es,ax; mov si,0x003f; sub si,dx; sub cx,0x80; not cx; push cx; and cl,0xf8; shl cx,0x03; add si,cx; pop cx; and cl,0x07; mov al,es:[si]; ror al,cl; not al; and al,1; mov ah,0xfe; rol ah,cl; and es:[si],ah; mov ah,al; rol ah,cl; or es:[si],ah; pop dx; pop cx; pop ax; } } char mur[7][18] = { {1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,0,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1}, {1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1}, {1,0,1,0,1,1,1,1,1,0,0,1,1,1,1,1,1,1}, {1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,1,1,0,0,1,0,0,0,1,1,1,0,0,1,1,1,1} }; int level[7] = {1,1,1,1,0,1,1}; void drawmur(unsigned char x, unsigned char y) { char K, L; for (K = 0; K < 18; K++) { for (L = 0; L < 7; L++) { if (mur[L][K]) inv_pixel(x + K, y + L); } } } int main() { int F; for (F = 0; F < 7; F++) { if (level[F]) { drawmur(F * 18 + 5, 56); } } getch(); return 0; }
Voilà je l'ai testé et ça dessine un mur en bas de l'écran, l'organisation et primordiale en programation elle permet d'éviter ce genre d'erreur, et tu devrai utiliser VIM comme éditeur (il met tout en couleur et indent le text tout seul).
Bon aller @+ et bon courrage pour la suite !
Hors ligne
NICKEL !!!!!!!!!!!!!!!!!!!!!!!
comme quoi un rien change tout. merci bcp !!!!!!!!!!!!!!!!!! à tous !!!!!!!!
au bout de 3heures (il faut le temps de envoyer le .exe à la graph100 et ca prend un temps fou !!!).
merci, je tretourne à ma prog !!
Hors ligne
tes variables de dessins (F, K etc...) devraient pas etre en char mais en int
(c riské en fait a mon avis....)
Hors ligne
tant qu'elle sont comprise entre 0 et 255 c'est bon (pour des unsigned char) sinon entre -127 et +127 pour des char.
Hors ligne
ya un truc ke je comprend pas c koa la diff entre int et char ? (il me semble ke lun stocke tel kel et lautre comverti en bit ou un truc kom sa). merci !
Hors ligne
Bah moi ce ke je c c ke char c stoké sur un octet donc ca va de 0 à 0xFF (255) alors k'un int c codé sur plusieurs octets....
Sinon je c pa pkoi desfoi sans dépasser la capaciter les char plantent...
Hors ligne
Quand ça marche pas c'est que tu essaye de comparer des int avec des char, dans certaines circonstance... dans ce cas il faut mettre un cast
Hors ligne
Non c t ds cette boucle :
for(int l = 54 ; l >= 20 ; l-=17) { for(int k = 118 ; k >= 26 ; k-=46) { for (int i = 0 ; i < 16 ; i++) { for (int j = 0 ; j < 11 ; j++) { if ((l != 37) || (k != 72)) gpixel(k - i , l - j, ktrtab[j][i]); } } } }
avec des unsigned char ca marchait pa !
Hors ligne
Oui parce que tu soustrayait 46 à 118 jus qu'à que K(118) devienne inférieur à 26 sauf que 118 - 46 = 72 et 72 - 46 = 26 et donc 26 - 46 = -20 sauf que K était unsigned et n'était donc pas égal à -20 mais à 235... la boucle était infinie...
Hors ligne
ben non ?? la boucle n'était pa infini ms 2 d truc n'apparaissaient pa !
Hors ligne
et où étaient les unsigned char ? peut-être que le compilateur faisait des conversions automatiques mais c'est louche !
Hors ligne