second commit with source files
This commit is contained in:
parent
7e02db3e88
commit
2859664a32
2
.gitignore
vendored
2
.gitignore
vendored
@ -52,3 +52,5 @@ Module.symvers
|
|||||||
Mkfile.old
|
Mkfile.old
|
||||||
dkms.conf
|
dkms.conf
|
||||||
|
|
||||||
|
# VSCode files
|
||||||
|
.vscode
|
61
Makefile
Normal file
61
Makefile
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
CC=gcc
|
||||||
|
CFLAGS=-O2 -Wall `sdl-config --cflags`
|
||||||
|
LIBS=`sdl-config --libs` -lm -lSDL_ttf -fcommon
|
||||||
|
DIR=IN100_sept_2010
|
||||||
|
|
||||||
|
#Cible generique pour Linux
|
||||||
|
%: graphics.o %.c
|
||||||
|
rm -f $@
|
||||||
|
$(CC) $(CFLAGS) graphics.o $@.c -o $@ $(LIBS)
|
||||||
|
|
||||||
|
#Cible generique pour free BSD
|
||||||
|
.c .o: graphics.o
|
||||||
|
rm -f $@
|
||||||
|
$(CC) $(CFLAGS) graphics.o $@.c -o $@ $(LIBS)
|
||||||
|
|
||||||
|
graphics.o: graphics.c graphics.h
|
||||||
|
rm -f police.h
|
||||||
|
touch police.h
|
||||||
|
if test -e /usr/include/SDL_ttf.h; then echo "#define SDL_TTF_OK" > police.h; fi
|
||||||
|
if test -e /usr/include/SDL/SDL_ttf.h; then echo "#define SDL_TTF_OK" > police.h; fi
|
||||||
|
if test -e /usr/local/include/SDL_ttf.h; then echo "#define SDL_TTF_OK" > police.h; fi
|
||||||
|
if test -e /usr/local/include/SDL/SDL_ttf.h; then echo "#define SDL_TTF_OK" > police.h; fi
|
||||||
|
$(CC) $(CFLAGS) -c graphics.c
|
||||||
|
|
||||||
|
|
||||||
|
sans_ttf:
|
||||||
|
rm -f police.h
|
||||||
|
touch police.h
|
||||||
|
$(CC) $(CFLAGS) -c graphics.c
|
||||||
|
$(CC) $(CFLAGS) graphics.o exemple.c -o exemple $(LIBS)
|
||||||
|
./exemple
|
||||||
|
|
||||||
|
|
||||||
|
exemple: exemple.c graphics.o
|
||||||
|
$(CC) $(CFLAGS) graphics.o exemple.c -o exemple $(LIBS)
|
||||||
|
./exemple
|
||||||
|
|
||||||
|
jeu: jeu.c jeu.o
|
||||||
|
$(CC) $(CFLAGS) -c jeu.c
|
||||||
|
$(CC) $(CFLAGS) graphics.o jeu.o main.c -o puissance4 $(LIBS)
|
||||||
|
|
||||||
|
tar: clean
|
||||||
|
rm -rf $(DIR)
|
||||||
|
mkdir $(DIR)
|
||||||
|
cp exemple.c $(DIR)
|
||||||
|
cp graphics.c $(DIR)
|
||||||
|
cp graphics.h $(DIR)
|
||||||
|
cp couleur.h $(DIR)
|
||||||
|
cp exo1.3.c $(DIR)
|
||||||
|
cp Makefile $(DIR)
|
||||||
|
cp *.ttf $(DIR)
|
||||||
|
tar cvf $(DIR).tar $(DIR)
|
||||||
|
rm -rf $(DIR)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *core
|
||||||
|
rm -f *.o
|
||||||
|
rm -f police.h
|
||||||
|
rm -f exemple
|
||||||
|
rm -f *.tar
|
||||||
|
rm -rf $(DIR)
|
161
couleur.h
Normal file
161
couleur.h
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
// 16 couleurs de base en francais
|
||||||
|
|
||||||
|
#define argent 0xC0C0C0
|
||||||
|
#define blanc 0xFFFFFF
|
||||||
|
#define bleu 0x0000FF
|
||||||
|
#define bleumarine 0x000080
|
||||||
|
#define citronvert 0x00FF00
|
||||||
|
#define cyan 0x00FFFF
|
||||||
|
#define magenta 0xFF00FF
|
||||||
|
#define gris 0x808080
|
||||||
|
#define jaune 0xFFFF00
|
||||||
|
#define marron 0x800000
|
||||||
|
#define noir 0x000000
|
||||||
|
#define rouge 0xFF0000
|
||||||
|
#define sarcelle 0x008080
|
||||||
|
#define vert 0x00FF00
|
||||||
|
#define vertclair 0x008000
|
||||||
|
#define vertolive 0x808000
|
||||||
|
#define violet 0x800080
|
||||||
|
|
||||||
|
// 140 couleurs en anglais
|
||||||
|
#define aliceblue 0xF0F8FF
|
||||||
|
#define antiquewhite 0xFAEBD7
|
||||||
|
#define aqua 0x00FFFF
|
||||||
|
#define aquamarine 0x7FFFD4
|
||||||
|
#define azure 0xF0FFFF
|
||||||
|
#define beige 0xF5F5DC
|
||||||
|
#define bisque 0xFFE4C4
|
||||||
|
#define black 0x000000
|
||||||
|
#define blanchedalmond 0xFFEBCD
|
||||||
|
#define blue 0x0000FF
|
||||||
|
#define blueviolet 0x8A2BE2
|
||||||
|
#define brown 0xA52A2A
|
||||||
|
#define burlywood 0xDEB887
|
||||||
|
#define cadetblue 0x5F9EA0
|
||||||
|
#define chartreuse 0x7FFF00
|
||||||
|
#define chocolate 0xD2691E
|
||||||
|
#define coral 0xFF7F50
|
||||||
|
#define cornflowerblue 0x6495ED
|
||||||
|
#define cornsilk 0xFFF8DC
|
||||||
|
#define crimson 0xDC143C
|
||||||
|
#define cyan 0x00FFFF
|
||||||
|
#define darkblue 0x00008B
|
||||||
|
#define darkcyan 0x008B8B
|
||||||
|
#define darkgoldenrod 0xB8860B
|
||||||
|
#define darkgray 0xA9A9A9
|
||||||
|
#define darkgreen 0x006400
|
||||||
|
#define darkkhaki 0xBDB76B
|
||||||
|
#define darkmagenta 0x8B008B
|
||||||
|
#define darkolivegreen 0x556B2F
|
||||||
|
#define darkorange 0xFF8C00
|
||||||
|
#define darkorchid 0x9932CC
|
||||||
|
#define darkred 0x8B0000
|
||||||
|
#define darksalmon 0xE9967A
|
||||||
|
#define darkseagreen 0x8FBC8F
|
||||||
|
#define darkslateblue 0x483D8B
|
||||||
|
#define darkslategray 0x2F4F4F
|
||||||
|
#define darkturquoise 0x00CED1
|
||||||
|
#define darkviolet 0x9400D3
|
||||||
|
#define deeppink 0xFF1493
|
||||||
|
#define deepskyblue 0x00BFFF
|
||||||
|
#define dimgray 0x696969
|
||||||
|
#define dodgerblue 0x1E90FF
|
||||||
|
#define firebrick 0xB22222
|
||||||
|
#define floralwhite 0xFFFAF0
|
||||||
|
#define forestgreen 0x228B22
|
||||||
|
#define fuchsia 0xFF00FF
|
||||||
|
#define gainsboro 0xDCDCDC
|
||||||
|
#define ghostwhite 0xF8F8FF
|
||||||
|
#define gold 0xFFD700
|
||||||
|
#define goldenrod 0xDAA520
|
||||||
|
#define gray 0x808080
|
||||||
|
#define green 0x008000
|
||||||
|
#define greenyellow 0xADFF2F
|
||||||
|
#define honeydew 0xF0FFF0
|
||||||
|
#define hotpink 0xFF69B4
|
||||||
|
#define indianred 0xCD5C5C
|
||||||
|
#define indigo 0x4B0082
|
||||||
|
#define ivory 0xFFFFF0
|
||||||
|
#define khaki 0xF0E68C
|
||||||
|
#define lavender 0xE6E6FA
|
||||||
|
#define lavenderblush 0xFFF0F5
|
||||||
|
#define lawngreen 0x7CFC00
|
||||||
|
#define lemonchiffon 0xFFFACD
|
||||||
|
#define lightblue 0xADD8E6
|
||||||
|
#define lightcoral 0xF08080
|
||||||
|
#define lightcyan 0xE0FFFF
|
||||||
|
#define lightgoldenrodyellow 0xFAFAD2
|
||||||
|
#define lightgreen 0x90EE90
|
||||||
|
#define lightgrey 0xD3D3D3
|
||||||
|
#define lightpink 0xFFB6C1
|
||||||
|
#define lightsalmon 0xFFA07A
|
||||||
|
#define lightseagreen 0x20B2AA
|
||||||
|
#define lightskyblue 0x87CEFA
|
||||||
|
#define lightslategray 0x778899
|
||||||
|
#define lightsteelblue 0xB0C4DE
|
||||||
|
#define lightyellow 0xFFFFE0
|
||||||
|
#define lime 0x00FF00
|
||||||
|
#define limegreen 0x32CD32
|
||||||
|
#define linen 0xFAF0E6
|
||||||
|
#define magenta 0xFF00FF
|
||||||
|
#define maroon 0x800000
|
||||||
|
#define mediumaquamarine 0x66CDAA
|
||||||
|
#define mediumblue 0x0000CD
|
||||||
|
#define mediumorchid 0xBA55D3
|
||||||
|
#define mediumpurple 0x9370DB
|
||||||
|
#define mediumseagreen 0x3CB371
|
||||||
|
#define mediumslateblue 0x7B68EE
|
||||||
|
#define mediumspringgreen 0x00FA9A
|
||||||
|
#define mediumturquoise 0x48D1CC
|
||||||
|
#define mediumvioletred 0xC71585
|
||||||
|
#define midnightblue 0x191970
|
||||||
|
#define mintcream 0xF5FFFA
|
||||||
|
#define mistyrose 0xFFE4E1
|
||||||
|
#define moccasin 0xFFE4B5
|
||||||
|
#define navajowhite 0xFFDEAD
|
||||||
|
#define navy 0x000080
|
||||||
|
#define oldlace 0xFDF5E6
|
||||||
|
#define olive 0x808000
|
||||||
|
#define olivedrab 0x6B8E23
|
||||||
|
#define orange 0xFFA500
|
||||||
|
#define orangered 0xFF4500
|
||||||
|
#define orchid 0xDA70D6
|
||||||
|
#define palegoldenrod 0xEEE8AA
|
||||||
|
#define palegreen 0x98FB98
|
||||||
|
#define paleturquoise 0xAFEEEE
|
||||||
|
#define palevioletred 0xDB7093
|
||||||
|
#define papayawhip 0xFFEFD5
|
||||||
|
#define peachpuff 0xFFDAB9
|
||||||
|
#define peru 0xCD853F
|
||||||
|
#define pink 0xFFC0CB
|
||||||
|
#define plum 0xDDA0DD
|
||||||
|
#define powderblue 0xB0E0E6
|
||||||
|
#define purple 0x800080
|
||||||
|
#define red 0xFF0000
|
||||||
|
#define rosybrown 0xBC8F8F
|
||||||
|
#define royalblue 0x4169E1
|
||||||
|
#define saddlebrown 0x8B4513
|
||||||
|
#define salmon 0xFA8072
|
||||||
|
#define sandybrown 0xF4A460
|
||||||
|
#define seagreen 0x2E8B57
|
||||||
|
#define seashell 0xFFF5EE
|
||||||
|
#define sienna 0xA0522D
|
||||||
|
#define silver 0xC0C0C0
|
||||||
|
#define skyblue 0x87CEEB
|
||||||
|
#define slateblue 0x6A5ACD
|
||||||
|
#define slategray 0x708090
|
||||||
|
#define snow 0xFFFAFA
|
||||||
|
#define springgreen 0x00FF7F
|
||||||
|
#define steelblue 0x4682B4
|
||||||
|
#define tan 0xD2B48C
|
||||||
|
#define teal 0x008080
|
||||||
|
#define thistle 0xD8BFD8
|
||||||
|
#define tomato 0xFF6347
|
||||||
|
#define turquoise 0x40E0D0
|
||||||
|
#define violetlight 0xEE82EE
|
||||||
|
#define wheat 0xF5DEB3
|
||||||
|
#define white 0xFFFFFF
|
||||||
|
#define whitesmoke 0xF5F5F5
|
||||||
|
#define yellow 0xFFFF00
|
||||||
|
#define yellowgreen 0x9ACD32
|
452
graphics.c
Normal file
452
graphics.c
Normal file
@ -0,0 +1,452 @@
|
|||||||
|
#include "graphics.h"
|
||||||
|
#include "police.h"
|
||||||
|
|
||||||
|
#define EN_LOCAL
|
||||||
|
|
||||||
|
#ifdef SDL_TTF_OK
|
||||||
|
#include <SDL_ttf.h>
|
||||||
|
#include <SDL/SDL_ttf.h>
|
||||||
|
#define POLICE_NAME "verdana.ttf"
|
||||||
|
TTF_Font *police[256];
|
||||||
|
int verdana_ok = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int WIDTH;
|
||||||
|
int HEIGHT;
|
||||||
|
|
||||||
|
SDL_Surface * SDL_screen;
|
||||||
|
int __init_graphics_is_already_called = 0;
|
||||||
|
int SDL_AFFICHE_AUTO = 1;
|
||||||
|
#define MAX_WIDTH 1920
|
||||||
|
#define MAX_HEIGHT 1080
|
||||||
|
|
||||||
|
void init_graphics(int W, int H) {
|
||||||
|
if ((W>10) && (W<MAX_WIDTH ))
|
||||||
|
WIDTH = W;
|
||||||
|
else WIDTH = 600;
|
||||||
|
if ((H>10) && (H<MAX_HEIGHT))
|
||||||
|
HEIGHT = H;
|
||||||
|
else HEIGHT = 400;
|
||||||
|
|
||||||
|
SDL_Init(SDL_INIT_VIDEO);
|
||||||
|
SDL_screen = SDL_SetVideoMode(WIDTH, HEIGHT, 32, SDL_HWSURFACE|SDL_DOUBLEBUF);
|
||||||
|
if ( SDL_screen == NULL ) {
|
||||||
|
fprintf(stderr, "Impossible de passer en %dx%d en 32 bits: %s\n", WIDTH, HEIGHT, SDL_GetError());
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_EnableKeyRepeat(1,0);
|
||||||
|
|
||||||
|
SDL_WM_SetCaption("Puissance 4!!",NULL);
|
||||||
|
|
||||||
|
__init_graphics_is_already_called = 25;
|
||||||
|
printf("Fenetre de %d x %d\n",WIDTH,HEIGHT);
|
||||||
|
#ifdef SDL_TTF_OK
|
||||||
|
printf("SDL_ttf OK, ");
|
||||||
|
|
||||||
|
TTF_Init();
|
||||||
|
police[10] = TTF_OpenFont(POLICE_NAME, 10);
|
||||||
|
if (police[10]) {
|
||||||
|
verdana_ok=1; printf("police %s OK : affichage graphique OK.\n",POLICE_NAME);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
verdana_ok = 0; printf("police %s absente : affichage dans la console.\n",POLICE_NAME);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
printf("SDL_ttf absent : affichage dans la console.\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
fill_screen(noir);
|
||||||
|
affiche_auto_on();
|
||||||
|
affiche_all();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void affiche_auto_on () {
|
||||||
|
SDL_AFFICHE_AUTO = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void affiche_auto_off() {
|
||||||
|
SDL_AFFICHE_AUTO = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void affiche_all() {
|
||||||
|
SDL_Event event;
|
||||||
|
if (SDL_PollEvent(&event))
|
||||||
|
if (event.type == SDL_QUIT)
|
||||||
|
exit(0);
|
||||||
|
if (__init_graphics_is_already_called == 25)
|
||||||
|
SDL_Flip(SDL_screen);
|
||||||
|
else {
|
||||||
|
init_graphics(380,80);
|
||||||
|
write_text("init_graphics() n'a pas <20>t<EFBFBD> appel<65>e.");
|
||||||
|
write_text("");
|
||||||
|
write_text(" Cliquer pour terminer.");
|
||||||
|
fprintf(stderr,"init_graphics() n'a pas <20>t<EFBFBD> appel<65>e.\n");
|
||||||
|
fprintf(stderr,"Cliquer pour terminer.\n");
|
||||||
|
wait_clic();
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void synchro() { affiche_all(); }
|
||||||
|
|
||||||
|
COULEUR couleur_RGB(int r, int g, int b) {
|
||||||
|
COULEUR C;
|
||||||
|
return ((r%256)<<16) + ((g%256)<<8) + (b%256);
|
||||||
|
return C;
|
||||||
|
}
|
||||||
|
|
||||||
|
point get_mouse() {
|
||||||
|
point dep;
|
||||||
|
dep.x = dep.y = -1;
|
||||||
|
SDL_Event event;
|
||||||
|
while (SDL_PollEvent(&event)) {
|
||||||
|
if (event.type == SDL_QUIT)
|
||||||
|
exit(0);
|
||||||
|
|
||||||
|
if (event.type == SDL_KEYDOWN) {
|
||||||
|
switch (event.key.keysym.sym)
|
||||||
|
{
|
||||||
|
case SDLK_ESCAPE : exit(0);
|
||||||
|
default : break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (event.type == SDL_MOUSEMOTION)
|
||||||
|
{
|
||||||
|
dep.x = event.motion.x;
|
||||||
|
dep.y = event.motion.y;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dep;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wait_escape() {
|
||||||
|
int display = 1;
|
||||||
|
SDL_Event event;
|
||||||
|
point p;
|
||||||
|
p.x = WIDTH/2 - 170;
|
||||||
|
p.y = 25;
|
||||||
|
aff_pol("Appuyer sur Echap pour terminer",20,p,gris);
|
||||||
|
affiche_all();
|
||||||
|
while (SDL_WaitEvent(&event) && display) {
|
||||||
|
if (event.type == SDL_QUIT) exit(0);
|
||||||
|
|
||||||
|
if (event.type == SDL_KEYDOWN) {
|
||||||
|
switch (event.key.keysym.sym) {
|
||||||
|
case SDLK_ESCAPE : display=0; break;
|
||||||
|
default : break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef SDL_TTF_OK
|
||||||
|
int i;
|
||||||
|
if (verdana_ok) for (i=0;i<256;i++) if (police[i]) TTF_CloseFont(police[i]);
|
||||||
|
TTF_Quit();
|
||||||
|
#endif
|
||||||
|
SDL_Quit();
|
||||||
|
}
|
||||||
|
|
||||||
|
point wait_clic() {
|
||||||
|
int encore = 1;
|
||||||
|
point P;
|
||||||
|
SDL_Event event;
|
||||||
|
P.x = 0;
|
||||||
|
P.y = 0;
|
||||||
|
#ifdef EN_LOCAL
|
||||||
|
#ifdef SDL_TTF_OK
|
||||||
|
point E,F;
|
||||||
|
char S[16];
|
||||||
|
E.x = WIDTH - 55; E.y = 15;
|
||||||
|
F.x = WIDTH; F.y = 0;
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
while (SDL_WaitEvent(&event) && encore) {
|
||||||
|
if ((event.type == SDL_MOUSEBUTTONDOWN) && (event.button.button == SDL_BUTTON_LEFT)) {
|
||||||
|
encore=0;
|
||||||
|
P.x = event.button.x;
|
||||||
|
P.y = HEIGHT-event.button.y;
|
||||||
|
}
|
||||||
|
if (event.type == SDL_MOUSEMOTION) {
|
||||||
|
#ifdef EN_LOCAL
|
||||||
|
#ifdef SDL_TTF_OK
|
||||||
|
if (police[10]) {
|
||||||
|
draw_fill_rectangle(E,F,noir);
|
||||||
|
sprintf(S,"%4d %4d",event.motion.x,HEIGHT - event.motion.y);
|
||||||
|
aff_pol(S,10,E,gris);
|
||||||
|
affiche_all();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
printf("%cEn attente de clic ... %4d %4d %c",13,event.motion.x,HEIGHT - event.motion.y,13);
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
|
if (event.type == SDL_QUIT) exit(0);
|
||||||
|
|
||||||
|
}
|
||||||
|
#ifdef EN_LOCAL
|
||||||
|
#ifdef SDL_TTF_OK
|
||||||
|
aff_pol(S,10,E,noir);
|
||||||
|
//draw_fill_rectangle(E,F,jaune);
|
||||||
|
affiche_all();
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
printf("%cClic en %4d %4d \n",13,P.x,P.y);
|
||||||
|
return P;
|
||||||
|
}
|
||||||
|
|
||||||
|
void fill_screen(COULEUR color) {
|
||||||
|
int i,j;
|
||||||
|
for (i=0;i<WIDTH;i++)
|
||||||
|
for (j=0;j<HEIGHT;j++)
|
||||||
|
*((COULEUR *)SDL_screen->pixels + (HEIGHT-j-1) * WIDTH + i) = color;
|
||||||
|
if (SDL_AFFICHE_AUTO)
|
||||||
|
affiche_all();
|
||||||
|
}
|
||||||
|
|
||||||
|
int dans_ecran(int x, int y) {
|
||||||
|
if (x<0) return 0;
|
||||||
|
if (x>=WIDTH) return 0;
|
||||||
|
if (y<0) return 0;
|
||||||
|
if (y>=HEIGHT) return 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define add_pix(x,y,color) if (dans_ecran((x),(y))) *((COULEUR *)SDL_screen->pixels + (HEIGHT-(y)-1) * WIDTH + (x)) = (color)
|
||||||
|
|
||||||
|
void draw_pixel(point p, COULEUR color) {
|
||||||
|
add_pix(p.x,p.y,color);
|
||||||
|
if (SDL_AFFICHE_AUTO) affiche_all();
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_line(point p1, point p2, COULEUR color) {
|
||||||
|
int xmin, xmax;
|
||||||
|
int ymin, ymax;
|
||||||
|
int i,j;
|
||||||
|
float a,b,ii,jj;
|
||||||
|
|
||||||
|
if (p1.x < p2.x) {xmin=p1.x; xmax=p2.x;} else{xmin=p2.x; xmax=p1.x;}
|
||||||
|
if (p1.y < p2.y) {ymin=p1.y; ymax=p2.y;} else{ymin=p2.y; ymax=p1.y;}
|
||||||
|
|
||||||
|
if (xmin==xmax) for (j=ymin;j<=ymax;j++) add_pix(xmin,j,color);
|
||||||
|
if (ymin==ymax) for (i=xmin;i<=xmax;i++) add_pix(i,ymin,color);
|
||||||
|
|
||||||
|
|
||||||
|
// La variation la plus grande est en x
|
||||||
|
if ((xmax-xmin >= ymax-ymin) && (ymax-ymin>0)) {
|
||||||
|
a = (float)(p1.y-p2.y) / ((float)(p1.x-p2.x));
|
||||||
|
b = p1.y - a*p1.x;
|
||||||
|
for (i=xmin;i<=xmax;i++) {
|
||||||
|
jj = a*i+b;
|
||||||
|
j = jj;
|
||||||
|
if (((jj-j) > 0.5) && (j < HEIGHT-1)) j++;
|
||||||
|
add_pix(i,j,color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// La variation la plus grande est en y
|
||||||
|
if ((ymax-ymin > xmax-xmin) && (xmax-xmin>0)) {
|
||||||
|
a = (float)(p1.y-p2.y) / ((float)(p1.x-p2.x));
|
||||||
|
b = p1.y - a*p1.x;
|
||||||
|
for (j=ymin;j<=ymax;j++) {
|
||||||
|
ii = (j-b)/a;
|
||||||
|
i = ii;
|
||||||
|
if (((ii-i) > 0.5) && (i < WIDTH-1)) i++;
|
||||||
|
add_pix(i,j,color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (SDL_AFFICHE_AUTO) affiche_all();
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_rectangle(point p1, point p2, COULEUR color) {
|
||||||
|
int xmin, xmax;
|
||||||
|
int ymin, ymax;
|
||||||
|
int i,j;
|
||||||
|
|
||||||
|
if (p1.x < p2.x) {xmin=p1.x; xmax=p2.x;} else{xmin=p2.x; xmax=p1.x;}
|
||||||
|
if (p1.y < p2.y) {ymin=p1.y; ymax=p2.y;} else{ymin=p2.y; ymax=p1.y;}
|
||||||
|
|
||||||
|
for (i=xmin;i<=xmax;i++) add_pix(i,ymin,color);
|
||||||
|
for (i=xmin;i<=xmax;i++) add_pix(i,ymax,color);
|
||||||
|
|
||||||
|
for (j=ymin;j<=ymax;j++) add_pix(xmin,j,color);
|
||||||
|
for (j=ymin;j<=ymax;j++) add_pix(xmax,j,color);
|
||||||
|
if (SDL_AFFICHE_AUTO) affiche_all();
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_fill_rectangle(point p1, point p2, COULEUR color) {
|
||||||
|
int xmin, xmax;
|
||||||
|
int ymin, ymax;
|
||||||
|
int i,j;
|
||||||
|
|
||||||
|
if (p1.x < p2.x) {xmin=p1.x; xmax=p2.x;} else{xmin=p2.x; xmax=p1.x;}
|
||||||
|
if (p1.y < p2.y) {ymin=p1.y; ymax=p2.y;} else{ymin=p2.y; ymax=p1.y;}
|
||||||
|
|
||||||
|
for (i=xmin;i<=xmax;i++) for (j=ymin;j<=ymax;j++) add_pix(i,j,color);
|
||||||
|
if (SDL_AFFICHE_AUTO) affiche_all();
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_circle(point centre, int rayon, COULEUR color) {
|
||||||
|
point min, max;
|
||||||
|
int i,j;
|
||||||
|
float dx, dy, rr;
|
||||||
|
|
||||||
|
min.x = centre.x - rayon; max.x = centre.x + rayon;
|
||||||
|
min.y = centre.y - rayon; max.y = centre.y + rayon;
|
||||||
|
rr = rayon*rayon;
|
||||||
|
|
||||||
|
for (i=min.x;i<=max.x;i++) {
|
||||||
|
dx = i - centre.x;
|
||||||
|
dy = sqrt(rr - dx*dx);
|
||||||
|
j = centre.y + dy;
|
||||||
|
add_pix(i,j,color);
|
||||||
|
j = centre.y - dy;
|
||||||
|
add_pix(i,j,color);
|
||||||
|
}
|
||||||
|
for (j=min.y;j<=max.y;j++) {
|
||||||
|
dy = j - centre.y;
|
||||||
|
dx = sqrt(rr - dy*dy);
|
||||||
|
i = centre.x + dx;
|
||||||
|
add_pix(i,j,color);
|
||||||
|
i = centre.x - dx;
|
||||||
|
add_pix(i,j,color);
|
||||||
|
}
|
||||||
|
if (SDL_AFFICHE_AUTO) affiche_all();
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_fill_circle(point centre, int rayon, COULEUR color) {
|
||||||
|
point min, max;
|
||||||
|
int i,j;
|
||||||
|
float dx, dy, rr;
|
||||||
|
|
||||||
|
min.x = centre.x - rayon; max.x = centre.x + rayon;
|
||||||
|
min.y = centre.y - rayon; max.y = centre.y + rayon;
|
||||||
|
|
||||||
|
rr = rayon*rayon;
|
||||||
|
|
||||||
|
for (i=min.x;i<=max.x;i++) {
|
||||||
|
dx = i - centre.x;
|
||||||
|
for (j=min.y;j<=max.y;j++) {
|
||||||
|
dy = j - centre.y;
|
||||||
|
if (dx*dx + dy*dy <= rr) add_pix(i,j,color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (SDL_AFFICHE_AUTO) affiche_all();
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_square(point p, int taille, COULEUR color) {
|
||||||
|
point p1 = {p.x-taille/2, p.y-taille/2}, p2 = {p.x+taille/2, p.y+taille/2};
|
||||||
|
draw_rectangle(p1, p2, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_fill_square(point p, int taille, COULEUR color) {
|
||||||
|
point p1 = {p.x-taille/2, p.y-taille/2}, p2 = {p.x+taille/2, p.y+taille/2};
|
||||||
|
draw_fill_rectangle(p1, p2, color);
|
||||||
|
}
|
||||||
|
|
||||||
|
void aff_pol(char *a_ecrire, int taille, point p, COULEUR C) {
|
||||||
|
#ifdef SDL_TTF_OK
|
||||||
|
int i;
|
||||||
|
SDL_Color color;
|
||||||
|
SDL_Surface *texte = NULL;
|
||||||
|
SDL_Rect position;
|
||||||
|
static int premiere_fois = 1;
|
||||||
|
static TTF_Font *police[256];
|
||||||
|
TTF_Font *pol;
|
||||||
|
|
||||||
|
if (premiere_fois) {
|
||||||
|
TTF_Init(); for (i=0;i<256;i++) police[i] = NULL; premiere_fois = 0;
|
||||||
|
}
|
||||||
|
if (taille>=256) pol = TTF_OpenFont(POLICE_NAME, taille);
|
||||||
|
else {
|
||||||
|
if (police[taille]==NULL) police[taille] = TTF_OpenFont(POLICE_NAME, taille);
|
||||||
|
pol = police[taille];
|
||||||
|
}
|
||||||
|
SDL_GetRGB(C,SDL_screen->format,&(color.r),&(color.g),&(color.b));
|
||||||
|
|
||||||
|
if (pol) texte = TTF_RenderText_Blended(pol, a_ecrire, color); else texte = NULL;
|
||||||
|
if (texte) {
|
||||||
|
position.x = p.x;
|
||||||
|
position.y = HEIGHT - p.y;
|
||||||
|
SDL_BlitSurface(texte, NULL, SDL_screen, &position);
|
||||||
|
if (SDL_AFFICHE_AUTO)
|
||||||
|
affiche_all();
|
||||||
|
SDL_FreeSurface(texte);
|
||||||
|
}
|
||||||
|
else printf("%s\n",a_ecrire);
|
||||||
|
/*
|
||||||
|
if (SDL_AFFICHE_AUTO) affiche_all();
|
||||||
|
if (police) TTF_CloseFont(police);
|
||||||
|
TTF_Quit();
|
||||||
|
if (texte) SDL_FreeSurface(texte);
|
||||||
|
*/
|
||||||
|
#else
|
||||||
|
taille = 0; p.x = p.y = 0; C = 0;
|
||||||
|
printf("%s\n",a_ecrire);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void aff_int(int n, int taille, point p, COULEUR C) {
|
||||||
|
char s[32];
|
||||||
|
sprintf(s,"%d",n);
|
||||||
|
aff_pol(s,taille,p,C);
|
||||||
|
}
|
||||||
|
|
||||||
|
void attendre(int millisecondes) { SDL_Delay(millisecondes); }
|
||||||
|
|
||||||
|
float alea_float() {
|
||||||
|
static int init_alea = 1;
|
||||||
|
if (init_alea) srand(time(NULL));
|
||||||
|
init_alea = 0;
|
||||||
|
return (float)rand() / (float)RAND_MAX;
|
||||||
|
}
|
||||||
|
|
||||||
|
int alea_int(int N) { return (int)(N*alea_float()); }
|
||||||
|
|
||||||
|
void write_text(char *a_ecrire) {
|
||||||
|
#ifdef SDL_TTF_OK
|
||||||
|
static char s[256];
|
||||||
|
static int fin = 0;
|
||||||
|
static int premier = 1;
|
||||||
|
static point position;
|
||||||
|
|
||||||
|
if (premier) {
|
||||||
|
position.x = 10;
|
||||||
|
position.y = HEIGHT;
|
||||||
|
premier = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (verdana_ok)
|
||||||
|
{
|
||||||
|
// printf("verd\n");
|
||||||
|
if (a_ecrire) {
|
||||||
|
if (fin+strlen(a_ecrire) > 256) {
|
||||||
|
fprintf(stderr,"Chaine de caract<63>re trop longue\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
strcat(s+fin,a_ecrire);
|
||||||
|
// printf("a_ecr : #%s#\n",s);
|
||||||
|
aff_pol(s,20,position,blanc);
|
||||||
|
fin += strlen(a_ecrire);
|
||||||
|
s[fin] = '\0';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
position.y -= 20;
|
||||||
|
fin = 0;
|
||||||
|
s[fin] = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (a_ecrire) {
|
||||||
|
printf("%s",a_ecrire);
|
||||||
|
fflush(stdout);
|
||||||
|
}
|
||||||
|
else printf("\n");
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (a_ecrire) {printf("%s",a_ecrire); fflush(stdout);}
|
||||||
|
else printf("\n");
|
||||||
|
#endif
|
||||||
|
}
|
62
graphics.h
Normal file
62
graphics.h
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
#ifndef GRAPHICS_H
|
||||||
|
#define GRAPHICS_H
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <SDL/SDL.h>
|
||||||
|
|
||||||
|
#include "couleur.h"
|
||||||
|
|
||||||
|
typedef struct point {int x,y;} point;
|
||||||
|
|
||||||
|
typedef Uint32 COULEUR;
|
||||||
|
|
||||||
|
typedef int BOOL;
|
||||||
|
|
||||||
|
#define MINDEP 1
|
||||||
|
|
||||||
|
#define TRUE 1
|
||||||
|
#define True 1
|
||||||
|
#define true 1
|
||||||
|
#define FALSE 0
|
||||||
|
#define False 0
|
||||||
|
#define false 0
|
||||||
|
|
||||||
|
void init_graphics(int W, int H);
|
||||||
|
|
||||||
|
void affiche_auto_on();
|
||||||
|
void affiche_auto_off();
|
||||||
|
void affiche_all();
|
||||||
|
void synchro();
|
||||||
|
|
||||||
|
COULEUR couleur_RGB(int r, int g, int b);
|
||||||
|
|
||||||
|
point get_mouse();
|
||||||
|
void wait_escape();
|
||||||
|
point wait_clic();
|
||||||
|
|
||||||
|
void fill_screen(COULEUR color);
|
||||||
|
void draw_pixel(point p, COULEUR color);
|
||||||
|
void draw_line(point p1, point p2, COULEUR color);
|
||||||
|
void draw_rectangle(point p1, point p2, COULEUR color);
|
||||||
|
void draw_fill_rectangle(point p1, point p2, COULEUR color);
|
||||||
|
void draw_circle(point centre, int rayon, COULEUR color);
|
||||||
|
void draw_fill_circle(point centre, int rayon, COULEUR color);
|
||||||
|
void draw_square(point p1, int taille, COULEUR color);
|
||||||
|
void draw_fill_square(point p1, int taille, COULEUR color);
|
||||||
|
|
||||||
|
void aff_pol(char *a_ecrire, int taille, point p, COULEUR C);
|
||||||
|
void aff_int(int n, int taille, point p, COULEUR C);
|
||||||
|
|
||||||
|
void attendre(int millisecondes);
|
||||||
|
|
||||||
|
int alea_int(int N);
|
||||||
|
|
||||||
|
void write_text(char *a_ecrire);
|
||||||
|
|
||||||
|
#endif
|
BIN
verdana.ttf
Normal file
BIN
verdana.ttf
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user