Vous n'êtes pas identifié.
J'ai vue qu'il existait libG100.
Est ce que cette librairie apportent vraiment des avantages?
Sinon, comment l'utiliser, car je ne comprend pas grand chose a son installation avec TC3? Par ce que c'ets pas très clair pour les débutants.
Y a t'ils d'autres librairies qui proposent un scrolling de bitmaps?
Merci.
Hors ligne
J'ai aussi un problème avec Draw Lib de Julien.
J'arrive pas a l'utiliser correctement et TC3 continue a me donner des massages d'erreur du type :
"Error SPRITE.C 136 : Unexpected end of file in conditional started on line 3"
Et voici mon programme :
#include "DRAWLIB.h"
#if !defined __DRAWLIB
#define __DRAWLIB
typedef unsigned char uchar;
unsigned char Sprite0[] = {................... };
unsigned char Sprite1[] = {................... }; //Avec les lignes du sprite.
unsigned char Sprite2[] = {................... };
unsigned char Sprite3[] = {................... };
unsigned char Sprite4[] = {................... };
unsigned char* sprite[] = {
Sprite0, //0
Sprite1, //1
Sprite2, //2
Sprite3, //3
Sprite4, //4
int main()
{
int x;
int y;
int numero;
debut: locate(9,2,"go");
x=20;
y=10;
numero=0;
getch();
goto sprite;
sprite: while (!testkey(7,3))
{ if(testkey(9,6)) x--;
if(testkey(9,3)) x++;
drawspr(x,y,Sprite[numero],MODE_MASK_NOCLIP);
refresh();
}
return(0);
}
Y'a forcement quelquechose qui cloche mais je ne sais pas pourquoi. j'ai essayé de faire des tests en mettant en commentaire differentes lignes et c'est apparement les lignes d'appels de la librairie qui buggent.
Bon, je vous remercie et j'attend vos réponses pour pouvoir continuer a pprendre leC.
Hors ligne
Bon j'ai aussi oublié de passer en mode DB mais je ne pense pas que cela soit le problème.
Comme vous pouvez le voir, je suis débutant beta total, pour qui aucun "lisez Moi" n'est compréhensible. (contrairement au débutant alpha qui lui réussit a comprendre les "lisez moi".
Merci de votre aide.
Hors ligne
Bon sans déconner, changer tout cela si ca vous chante mais j'aimerais avoir la technique pour afficher un sprite.
(Je sais vous êtes entrain de vous dire qu'il est chiant a rajouter une réponse avant même qu'on lui ait répondu quoi que ce soit)
Hors ligne
Euh pourrais-tu editer tes messages au lieu d'en poster toutes les 5 minutes ?
Enfin bon,
#if !defined __DRAWLIB #define __DRAWLIB
Ca te sert a quoi ?
de plus si tu ne fermes pas ce bloc par un #endif c'est normal qu'il te sorte cette erreur.
Hors ligne
#if !defined __DRAWLIB
#define __DRAWLIB
C'est ça qui cloche... Ces deux lignes n'ont rien à faire là. Ce sont des lignes que j'ai placées dans drawlib.h dans un but précis, et ça ne doit pas se retrouver dans ton programme
Ensuite
unsigned char* sprite[] = {
Sprite0, //0
Sprite1, //1
Sprite2, //2
Sprite3, //3
Sprite4, //4
Il y a une virgule en trop après "Sprite'", par contre il manque la fin du tableau ( "};" ). Tu devrais peut-etre utiliser sprite maker et récupérer les codes qu'il te donne, tu seras alors sûr qu'ils sont corrects.
Pour afficher un sprite, je te conseille de bien lire les explications fournies avec drawlib, ainsi que l'exemple qui l'accompagne. En gros, la seule chose à faire c'est
- passer en DB au début du prog
- afficher tes sprites avec drawsprite() par exemple
- repasser en mode normal C3 à la fin.
Hors ligne
Bon j'ai enlevé les lignes suspectes. Je la avais mise ici heuh, ben je sais plus pourquoi.
Je me suis arrangé pour le mode Db, pour la virgule après le tableau.
Par contre même en précisant drawlib.h au début, il ne reconnait pas les fonctions. Je met alors, #endif (a la fin du prog puis après avoir vu que cela ne marchait pas et après #include "drawlib.h" par la suite) comme indiqué par mastermage mais ou?
TC3, ne pose alors qu'une seule erreur après "misplaced endif directive". (bon vous comprenez)
Ou faut il placer cette fonction exactement?
J'utilise pour afficher la sprite :
"drawspr(x,y,sprite[numero],MODE_MASK_NOCLIP);"
Est ce que c'est la bonne fonction a utiliser?
Julien parlait de drawsprite() (et non drawspr).
Bon merci de me répondre et désolé de vous déranger. :oops: C'est qu'il manque pas mal de tutos pour les débutants.
(désolé, j'avais pas découvert la fonction editer qui est d'ailleur bien utile )
Hors ligne
C'est bien la bonne fonction, drawsprite(x,y, char*) c'est simplement un raccourci pour drawspr(x,y,char*,MODE_MASK_CLIP) qui est utilisée le plus souvent.
Le "#endif", c'était pour fermer la condition que tu avais ouverte avec ton "#if !defined __DRAWLIB". Comme tu as supprimé cette ligne, le #endif n'est bien sûr pas à écrire.
Je te recommande encore d'utiliser les exemples fournis: prends les fichiers d'exemples fournis avec drawlib, essaie de les compiler puis de les tester, et quand tu y seras arrivé tu pourras les modifier petit à petit pour essayer différents trucs.
Hors ligne
J'ai du oublié une librairie mais laquelle? Il refuse toujours de compiler certaines fonctions notamment.
-testkey
-modevideo
-refresh
-drawspr
-locate
(en fait vous l'aurez remarqué, il ne veut rien compiler de toutes les fonctions que j'ai utilisé)
#include "DRAWLIB.h"
typedef unsigned char uchar;
unsigned char mar1a[] = {.... };
unsigned char mar1b[] = { .....};
unsigned char mar1c[] = {..... };
unsigned char mar1d[] = {..... };
unsigned char mar1e[] = {...... };
unsigned char mar2a[] = {.......};
unsigned char mar2b[] = {....... };
unsigned char mar2c[] = {....... };
unsigned char mar2d[] = {........};
unsigned char mar2e[] = {.........};
unsigned char mar3[] = {.......... };
unsigned char* sprite[] = {
mar1a, //0
mar1b, //1
mar1c, //2
mar1d, //3
mar1e, //4
mar2a, //5
mar2b, //6
mar2c, //7
mar2d, //8
mar2e, //9
mar3 //10
};
int main()
{
int x;
int y;
int numero;
modevideo(1);
debut: locate(9,2,"go");
x=20;
y=10;
numero=0;
getch();
goto sprite;
sprite: while (!testkey(7,3))
{ if(testkey(9,6)) x--;
if(testkey(9,3)) x++;
drawspr(x,y,sprite[numero],MODE_MASK_NOCLIP);
refresh();
}
modevideo(0);
return(0);
}
Hors ligne
Ton fichier drawlib.h, il est bien placé dans le même dossier que le fichier que tu essaies de compiler?
Et est-ce que tu compiles bien drawlib.c et le fichier qui contient les fonctions utilitaires (refresh() etc) simultanément?
Normalement sous TC3 tu devrais créer un projet et intégrer tes 3 fichiers sources dedans, mais dans un premier temps tu peux écrire
#include "draw14b.c" #include "fonx.c" // verifie qu'il s'agit bien d'un fichier .c et pas .cpp, sinon renomme-le en .c
au début où à la fin de ton code source. C'est une mauvaise habitude, mais au moins ça te permettra de compiler.
Autre chose: si tu débutes en C, impose-toi la règle suivante: les goto, ça n'existe pas. Y'a bien la commande goto, mais non, on ne peut pas l'utiliser, il faut réfléchir pour s'en passer. Ca te rendra service
Edit: il faut aussi que tu ajoutes
#include "fonx.h"
au début pour que le compilo comprenne avec quelles fonctions tu veux travailler (en supposant donc que ces fonctions sont déclarées dans fonx.h et définies dans fonx.c)
C'est qu'il manque pas mal de tutos pour les débutants.
En effet, mais le premier tuto qu'il faut à un débutant, c'est un bon cours ou un bouquin sur le C... et ça malheureusement je pense que personne ici n'a le temps ni l'envie d'en rédiger, surtout en voyant la quantité d'infos qu'on trouve sur le net à propos de ce langage...
Hors ligne
ben le plus grand avantage de libg100 c'est qu'il y a pas besoin de la compiler
Tu fais #include <fichier_que_tu_veut.h>
et pour compiler tu fais :
tcc <options normales> ton_fichier.c libg100.obj
Hors ligne
Je n'arrive pas a compiler sans faire un fichier projet avec TC3. (les exemples fournis avec drawlib ou db_lib)
Comment on en cree un? Je n'ais pas vu d'option pour creer un projet juste de quoi les ouvrirs (dans project--->Open).
Hors ligne
Les projets sont obscurs dans TC3, la mailleure méthode reste la compilation a la main avec un .bat !
Hors ligne
Plutôt comme l'a suggeré Julien, on vas faire simple et commencer par le commencement.
J'aimerais compiler l'exemple fournit avec Drawlib pour voir comment on fait (ce que je n'arrive pas a faire en temps normal avec TC3).
Je possède donc comme fichier pour faire cela :
-drawdemo.cpp
-fonx.cpp
-fonx.h
-sprites.h
et la librairie drawlib:
-draw14b.c
-drawlib.h
Quelle est la procédure exacte qui permet de compiler ces fichiers pour obtenir l'exemple fournit avec drawlib?
Merci.
Epi'
Hors ligne
Merci de répondre a ma précedente question. (j'ai rajouté ce topic car j'avais peur que le fait d'éditer un topic ne le mette pas a jour et qu'il passe inapercu, vous comprendrez...)
Hors ligne
En fait je me rends compte que mes exemples sont peut-être difficiles à manipuler pour des novices... Ils sont surtout faits pour montrer du code, et pour les compiler il faut déjà bien connaître le fonctionnement du compilateur.
En gros, si tu veux compiler ça avec TC3, tu dois:
1 - être sur que TC3 est configuré comme il faut
2 - avoir rassemblé tous les fichiers nécessaires dans un même dossier (drawlib.h, draw14b.c, fonx.h, fonx.cpp, sprites.h, drawdemo.cpp)
3 - aller dans le menu "Project" et choisir "Open" tu choisis alors un nom de projet dans le dossier des sources et il t'en créera un nouveau s'il n'existait pas déjà
4 - lorsque l'onglet PROJECT est visible dans le bas de TC3, tu peux utiliser "Add Item" dans le menu "Project" pour choisir tes 6 fichiers.
5 - A présent, tu peux utiliser "Make" dans le menu "Compile" pour lancer la compilation. Sauf erreur, le prog généré sera dans le répertoire de sortie que tu as indiqué, avec le nom de ton projet + l'extension exe.
Et c'est là que ça coince, j'ai visiblement oublié 3 lignes dans fonx.h (me demande bien comment d'ailleurs :rouge: ), tu vas devoir rajouter ceci à la fin du fichier:
#define K_F1 10,6 #define K_F2 10,5 #define K_F3 10,4
Ce sont 3 déclarations qui manquent.
Voilà, normalement ça devrait marcher.
Sache cependant que très peu de personnes parmi nous utilisent encore l'éditeur de TC3, en général on utilise directement son compilateur avec une ligne de commande et on utilise des éditeurs un peu plus récents
Hors ligne
Alors voila, j'ai de bonnes nouvelles
Pour libg100, normalement tu dois trouver TCCG100.lib dans le rep lib de l'archive que t'a téléchargé !
Donc tu copie TCCG100.lib et tout les fichiers dans le répertoire include/ dans le répertoire de ton projet.
Tu ouvre TC3, tu crée un projet dans ce répertoire, tu ajoute ton .c et TCCG100.lib
Tu fais make
Et voilou voili !!
(je savais pas qu'on pouvais ajouter des .lib dans un projet TC3 !!)
Hors ligne
Bon ca me fait toujours une erreure en suivant les instructions de Julien.
J'ai definis les touches (je l'avais déja avant fait mais il se trouve que c'était pas le bon code touche :cry: )
Mais quand je fais make, il trouve moyen de m'indiquer une erreure a la ligne 65 de draw14B.C (position 11) un machin en Asm
"push 1"
ne semble pas supporté.
Le logiciel TC3 me dit
"286/287 instructions not enabled"
Il doit y avoir moyen de résoudre ce probleme?
Car je suis un peut perdu dans ces histoires de compilation.
C aprem par exemple, j'ai enfin reussit a afficher un sprite en mode Db (une premiere) sans definir de librairies en piochant dans celles ci tout de même pour definir les fonctions en asm dont j'avais besoin. Mais quand
j'ai remarqué sur mon sprite que je ne voyais jamais le coté gauche du sprite, en gros que j'étais en réalité entrain de l'afficher pixel/pixel lol.
En fait ca peux pas aller du tout, il me faudrait un beau sprite comme dans l'exemple de julien.
Ma seule solution est donc drawlib.
Je vais voir ce que je vais réussir avec libG100 sinon...
Merci[/code]
Hors ligne
Le logiciel TC3 me dit
"286/287 instructions not enabled"
Tiens c'est bizarre TCC ne bronche pas chez moi... Ca doit venir de la configuration de TC3
Essaie ce qu'a proposé Superna, ca sera sans doute plus simple. Sinon, tu peux remplacer tous ces "push 1" par
mov ax,1 push ax
mais tu vas devoir le faire pour chaque fonction...
Hors ligne
ça VIENT de la config:
286/287 instructions not enabled> va voir les parametres
sinon avec un Replace ça devrait ce faire vite le truc de julien
Hors ligne
Voila des images :
Voila !!!
Mais c'est vrai que ma methode evite ça car c'est déja compilé/optimisé comme il faut
(lol sous XP, NTVDM me prends 94% du proc lol)
Hors ligne
Hum j'ai bien parametré, tout ce qu'il faut, des milliards d'essais et ca marche pas.
Alors j'ai essayé avec context bien paramétré, tout ce qu'il faut, de milliards d'essais etc mais ca marche pas non plus. J'ai evidemment pas de messages d'erreur mais un ecran tout blanc dans l'emulateur wing100.
J'y comprend en plus rien de la librairie drawlib, c'est la seule qui soit obscure comme cela. Db-lib, c'est clair, tu copie la fonction dans ton prog, casio2.h aussi. Alors que dans drawlib y'a trop de possibilitées de paramétrages ce qui rend la chose très ardue.
Y'a pas moyen de se procurer juste la fonction a definir au debut du programme et qui t'affiche le sprite comme db-lib? Genre drawnmnc(x,y,nom) pour le mode nomask noclip ; drawmc(x,y,nom) pour le mode mask clip etc... Sans tout avoir de compliqué (et que j'arrive pas a faire marcher) sans les ifdef, ifend etc... qui certe doivent offrir des avantages.
Et qui soit compatible avec sprite maker tant qu'a faire.
Bon j'ai décidé d'utiliser dblib ou dbpaint par exemple a la place, par ce que la j'en ais mare. Mais il me faudrait quelquechose ou une technique pour coder un sprite lisible avec cette librairie 16*16 par exemple (avec gris).
Pour avoir un machin codé dans ce style :
"unsigned char sprite[3][32]={
0xff,0xff,0x1,0x80,0x5d,0x9a,0x51,0xa2,0x59,0x92,0xd1,0x8b,
0x51,0xb2,0x1,0x80,0xff,0xff,0x0,0x0,0x0,0x0,0x0,0x0,
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,"
(extrait d'un exemple fournit avec db-lib)
Pour afficher un sprite comme cela, je pense que j'aurais moins de problemes car la j'arrive a compiler les exemples et a en extraire les fonctions.
J'ai pas encore compris comment empecher le clignotement mais ca vas venir en etudiant les exemples.
Voila en réalité, j'abandonne drawlib qui avait un super truc pour les sprites :cry: Mais je passe a db-lib et il me faudrait un programme du genre sprite maker pour db-lib.
Merci
P.s. : Quelles sont les fonctions les plus rapides, celles de drawlib, auquel cas, je m'y remet en essayant de faire marcher ca ou celle de db-lib, dans ce cas, j'essaye de coder les sprites.?
Hors ligne
Bon ca y est, j'ai reussit a coder mon sprite avec un logiciel ti et j'arrive a l'afficher avec db-lib.
Mais il clignote car dans la boucle je suis obligé de l'effacer constamment.
Il doit y avoir moyen comme dans l'exemple de db-lib d'afficher sans clignotement mais je ne le comprend pas.
Merci de me l'expliquer.
(Toutes les fonctions, ou la pluspart sont extraites de Db-LIb de Swifter)
#define SEG1 0x1A20
#define SEG3 0x1AA0
#define HAUT 0x0048
#define BAS 0x0050
#define ESC 0x0001
void d16_or(int x,int y,void* spr,unsigned int segm)
{
asm{
mov cx,x
mov si,spr
mov di,0x3FE
mov ax,segm
sub ax,y
mov es,ax
mov ax,cx
shr ax,0x3
sub di,ax
and cl,0x7
mov ch,0x10
}
loop:
asm{
xor dl,dl
mov ax,ds:[si]
mov dh,al
shr ax,cl
shr dx,cl
or es:[di],ax
or es:[di-0x1],dl
sub di,0x10
add si,0x2
dec ch
jne loop
}
}
void contrast(int pl,int cnt)
{int id;
for (id = 1 ; id <= cnt ; id++)
{
if (pl == 0) { asm { mov ah,22h;
mov bl,1;
int 7Ch;} }
if (pl == 1) { asm { mov ah,22h;
mov bl,0;
int 7Ch;} } } }
void mode(unsigned char modetype)
{
asm{
mov al,modetype
out 0x2,al}}
void clearpage(short page)
{
asm {
pushf; push es; push di; push cx; push ax;
mov ax,page;
shl ax,6;
add ax,0x1A20;
mov es, ax;
xor di, di;
mov cx, 1024;
shr cx,1;
xor ax, ax;
cld;
rep stosw;
pop ax; pop cx; pop di; pop es; popf;
}
return; }
void gclear(void)
{ clearpage(0);
clearpage(2);}
unsigned char getkey() {
return peekb(0x40,0xAF); }
char getkb(void)
{ unsigned char key;
asm push es;asm push di;
asm push ax;
asm mov ax,0x40;
asm mov es,ax;
asm mov di,0xAF;
asm mov al,es:[di];
asm mov key,al;
asm pop ax;asm pop di;
asm pop es;
return key;}
unsigned int sprite[3][16]= {
{0x2004,0x4002,0x8241,0x8181,0x8E71,0x9009,0x9009,0xA005,0xE3C7,0xA005,0x9009,0x9009,0x8E71,0x8181,0x4242,0x2004},
{0x2004,0x4002,0x8241,0x8181,0x8FF1,0x9FF9,0x9FF9,0xBFFD,0xFFFF,0xBFFD,0x9FF9,0x9FF9,0x8FF1,0x8181,0x4242,0x2004},
{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}
};
int main ()
{
int a;
int b;
a=110;
b=25;
gotoxy(2,2);
printf("go?");
getch();
wait(200);
mode(0xdb);
contrast(1,5);
while (getkey()!=ESC)
{ if(getkb()==HAUT) b--;
if(getkb()==BAS) b++;
if(b>45) b=45;
if(b<2) b=2;
d16_or(a,b,sprite[0],SEG1);
d16_or(a,b,sprite[1],SEG3);
wait(500);
gclear();
}
contrast(0,5);
mode(0xc3);
return(0);
}
Hors ligne