CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Petit concours de programmation

Lapintade
Lapintade
Niveau 30
13 janvier 2005 à 23:44:08

J´ai pensé à un truc tout simple :

Voici un petit code qui permet de creer et sauver une image TGA.
Le but de l´exercice est de reussir a generer de jolies images en un minimum de ligne.

Le code est simplifié au maximum. Il y a juste la fonction " ComputeImage" a remplir et la seule fonction a appeller est " PutPixel".

L´image generée est en 1024x768 en 32 bits.

Le code peut etre copiler sur n´importe quel compilateur et n´importe quelle machine. C´est juste un petit fichier . cpp utilisant le minimum de fonctions.

Je ferais une belle page internet dés que mon provider sera plus en travaux.

Pour ceux qui veulent deja tenter le coup, voici le code et voici une exemple qui genere un beau degradé.

  1. include " stdio.h"
  2. include " math.h"

unsigned char image[1024*768*4];
void PutPixel(int x, int y, unsigned char R, unsigned char G, unsigned char B, unsigned char A);
/ / -- Remplir la fonction ci dessous, afficher des pixels avec la fonction " PutPixel"
void ComputeImage()
{
int x,y;
for ( x=0; x<1024; x++)
{
for ( y=0; y<768; y++)
{
PutPixel(x,y,x*y/256,y/4,x/4,0);
}
}
}
/ / -- Ne rien modifier en dessous de cette ligne
void PutPixel(int x, int y, unsigned char R, unsigned char G, unsigned char B, unsigned char A)
{
image[((y*1024)+x)*4+0]=R;
image[((y*1024)+x)*4+1]=G;
image[((y*1024)+x)*4+2]=B;
image[((y*1024)+x)*4+3]=A;
}
/ / --
void ClearImage()
{
int x,y;
for ( x=0; x<1024; x++)
{
for ( y=0; y<768; y++)
{
PutPixel(x,y,0,0,0,0);
}
}
}
/ / --
void SaveImage(char* name)
{
// Sauve TGA
int vide[3];
short pipo;
vide[0]=0; vide[1]=0; vide[2]=0;
FILE* fichier=fopen(name, " wb");
fwrite(&, 1, 2, fichier);
pipo=2; / / type of image 0=none,1=indexed,2=rgb,3=grey,+8=rle packed
fwrite(&, 1, 1, fichier);
fwrite(&, 1, 9, fichier);
pipo=1024; / / image width in pixels
fwrite(&, 2, 1, fichier);
pipo=768; / / image height in pixels
fwrite(&, 2, 1, fichier);
pipo=32; / / image bits per pixel 8,16,24,32
fwrite(&, 1, 1, fichier);
pipo=0x30; / / image descriptor bits ( vh flip bits) ( 00vhaaaa)
fwrite(&, 1, 1, fichier);
fwrite(&, 4, 1024*768, fichier);
fclose(fichier);
}
/ / --
int main(int argc, char *argv[])
{
ClearImage();
ComputeImage();
SaveImage("MyPicture.tga");
}

Vous pouvez poster ici vos proposition de code ( poster uniquement la fonction " ComputeImage", le reste ne doit pas etre modifier).

Lapintade
Lapintade
Niveau 30
13 janvier 2005 à 23:45:27

Evidement, faut remettre les tabulation enlevees par ce sal forum :)

Pour les feneant, je peux mailer le code.

dnob700
dnob700
Niveau 10
14 janvier 2005 à 00:59:40

interessant, j´essayerais peut-être de te sortir de jolie fractale en peu de ligne.

le problème du tga, c´est que ya pas bcp de programme qui le lise.

donc j´ai fait une version de ton programme qui enregistre en bitmap.

http://pepinlebref.free.fr/image_lapintade.txt
les fonctions sont exactement les même et on peu encore faire du TGA si on veut.

dnob700
dnob700
Niveau 10
14 janvier 2005 à 01:01:35

ah, j´ai oublié de préciser que le bitmap ne marchera que sur windows par contre.

Lapintade
Lapintade
Niveau 30
14 janvier 2005 à 09:47:03

Tous les bons programmes lisent le TGA :) ( AcdSee, Photoshop, IfranView . .).

Evidement le viewer tout pourri de windows doit pas savoir.

Merci pour cette variante. Ton programme est plus complet, on repartira de ta version.

Une petite fractale serait en effet une bonne idée.

Je posterai sur une page, les images proposées ici.

kufa
kufa
Niveau 9
14 janvier 2005 à 10:02:30

C´est un sujet qui reviens de nombreuses fois, certains contests java sous gamedev ( de tete), et meme moi sur mon site
(http://membres.lycos.fr/amycoders/compo/texcompoc<BR>ontrib.html sont les images, max code pour la generation: 128 bytes). En general, ca n´a AUCUN interet, sauf pour les demomakers..

/ kUfa.scoopex^scarab

kufa
kufa
Niveau 9
14 janvier 2005 à 10:03:24

membres.lycos.fr/amycoders/compo/texcompocontrib.h
tml en esperant que celui la passe..

Lapintade
Lapintade
Niveau 30
14 janvier 2005 à 17:20:48

En general, ca n´a AUCUN interet

Je comprends pas trop le sens de ta remarque. Ce genre d´exercice est toujours bon pour s´amuser, apprendre et se perfectionner. C´est des interet ca non ?

LGV
LGV
Niveau 28
14 janvier 2005 à 17:28:00

Je pense que ce qu´il veut dire, c´est que sans un contexte d´utilisation autour ( entre autres demos dont il parlait), l´interet reste restreint.
Certes, ca n´enleve rien a l´amusement de l´exercice :) Faites chauffer les noyaux, ca va convoluer...

kufa
kufa
Niveau 9
14 janvier 2005 à 18:56:05

lgv: t enfou, tu blur ; )

Lapintade
Lapintade
Niveau 30
14 janvier 2005 à 19:32:30

Ben vi l´interet c´est l´amusement.

On peut etablir un comptage qui est le nombre de caracteres de la fonction ComputeImage().

Ce nombre sera simplement donné a titre indicatif.

Il n´y a pas vraiment de competition :) Tout ca c´est pour le fun.

dnob700
dnob700
Niveau 10
15 janvier 2005 à 00:38:28

j´ai mis à jour le fichier de manière à ce que le tga utilise les coordonné de manière logique ( avec les x de gauche à droite plutot que le contraire).

et voila ma première contribution :
void ComputeImage()
{
double zr,zi,cr,ci,zrt;
int X,Y,I;
for ( Y=0,X=0;Y<IMAGE_Y;X++,X==IMAGE_X?Y++,X=0:0)
{

cr=zr=-.77+X*(.005)/IMAGE_X;ci=zi=-0.106+Y*(.003)/
IMAGE_Y;
for ( I=1;I<255;I++)
{
zrt=zr;
zr=zr*zr-zi*zi+cr;
zi=2*zrt*zi+ci;
if ( (zr*zr+zi*zi)>4)
{
PutPixel(X,Y,0,0,I<<4);
break;
}
}
}
}

ShellShock
ShellShock
Niveau 9
15 janvier 2005 à 09:13:44

Petit conseil, les break pour sortir d´une boucle for sont à éviter.
Normallement si tu fait bien t´as boucle, elle doit pourvoir s´arreter toute seule.

Lapintade
Lapintade
Niveau 30
15 janvier 2005 à 10:49:53

Pour le TGA, il y avait pas besoin d´inverser les x, ca marchait trés bien normallement.
Le flip est fait avec un flag au moment de la sauvegarde :
pipo=0x30; / / image descriptor bits ( vh flip bits) ( 00vhaaaa)

Ca permets de garder un tableau toujours dans le meme sens.

gollumkawder
gollumkawder
Niveau 10
15 janvier 2005 à 10:54:48

Il y a des walls si vous voulez paster vos codes, ça sera p´tet plus propre
http://walljv.free.fr par exemple

Lapintade
Lapintade
Niveau 30
15 janvier 2005 à 10:56:08

dnob700> Elle est cool ton image. C´est une mandelbrot ? ?
Bravo.

ShellShock > Tu fais comment pour arretter une boucle " toute seule" ? ? ( a part mettre une condition d´arret dans la ligne du for ? )
Le break ( et continue) ne sont pas dangereux en soit. Ce qui est dangereux c´est de les mettre dans un des boucles imbriquées et ensuite on sait plus trop ce que le break arrette ( un break arrette un for ou while,c´est ca ? )

Lapintade
Lapintade
Niveau 30
15 janvier 2005 à 10:57:48

gollumkawder > Merci, c´est en effet plus pratique pour poster du code.

ShellShock
ShellShock
Niveau 9
15 janvier 2005 à 11:49:50

En theorie une boucle doit respecter uniquement ses conditions d´arret : donc pas de break.

Le break s´utilise seulement si on trouve pas d´autre solution, mais dans le cas présent il peut utiliser un while.

dnob700
dnob700
Niveau 10
15 janvier 2005 à 17:17:30

non, dans le cas présent un while est un peu inutile parce qu´il y a plusieurs condition d´arret, donc soit j´utilise un break ( mais dans ce cas là on revient au point de départ) soit je doit utiliser une variable suplémentaire ( sans compter le compteur qu´il faut incrémenter dans la boucle).

enfin, si t´as un bout de code avec un while, ej suis bien sur tout ouïe a voir ton idée.

lapintade: t´es sur que c´est pas system dependant les coordonné du tga, parce que chez moi, si je n´inverse pas les x, x=0 c´est tout à droite de l´image.

pour les walls leproblème c´est que ça finit par disparaitre.

http://pepinlebref.free.fr/ComputeImage.txt
une meilleures version de mon images, encore moins compréhensible, mais qui affiche plus de couleurs.

et effectivement, c´est un petit bout de l´ensemble de mandelbrot que j´aime bien ( ce petit bout, l´ensemble aussi d´ailleur).

bon, allez vous autres qui lisez cela, quelques création aussi.

Lapintade
Lapintade
Niveau 30
15 janvier 2005 à 17:31:50

Sympa la nouvelle version. Les couleurs reste encore un peu sombre, il y a moyen de faire plus gai je pense . ..

Si tu aime mandelbrot, regarde ce programme qui affiche en temps reel un zoom dessus :
http://leonard.oxg.free.fe.fr/demos/tiny/MandelZoom.zip

C´est un ami qui a fait ca, ca tient en 4Kb.

bon, allez vous autres qui lisez
cela, quelques création aussi.

Vi vi je cherche des idées :) :) Manque de temps en ce moment aussi . .. Les autres peuvent essayer aussi . ..

Je sais pas si on autorise la creation de fonctions. C´est un challenge interressant de tout faire dans une seule fonction.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment