Grafické finty Na začátek bych se rád omluvil PIŽImu a Aleši Zíkovi za to, že jim tak trochu fušuju do řemesla. Dále pak všem čtenářům, kteří naletěli na RedOxovu fintu a myslí si, že jsem úplně blbej. Jen tak na vysvětlenou můj poslední článek C++ kontra Pascal byl původně články dva. (nádherná toť věta) Druhá část tzn. Poznámka k PIŽIho článku Asembler pro blbé měl původně být samostatný článek reagující na hlášku, že si máme program napsat ve svém oblíbeném jazyce a porovnat ho s PIŽiho asemblerskym. Já jsem to udělal za čtenáře a chtěl to zveřejnit. Jenže RedOx jakožto šéfredaktor mé dva články skopíroval k sobě takže i ten druhý vyzněl jako srovnání Pascalu a C++. To jsem neměl vůbec v úmyslu. Tímto se vám (vlastně za RedOxe) omlouvám. Ale teď už k samotným grafickým fintám. Dnes bych vám chtěl chtěl ukázat fintu základní, a to hrátky s paletou. Máme-li na obrazovce nějaký obrázek, můžeme jednoduše změnit jeho náladu jednoduchou změnou palety. Takto můžeme udělat svítání, šero atp. Pomocí změn palety můžeme dokonce udělat i něco jako animaci. Když např. nakreslim více objektů v různých fázích různou barvu (neměli by se překrývat) a potom udělám viditelnou jen jednu barvu, tak nám vznikne něco jako animace. Samozřejmě úplně jednoduchá, ale zato poměrně rychlá. Na to jak se to dá udělat se můžete kouknout na přiloženém prográmku. Zase jsou tam samozřejmě nějaké prasárny a alespoň jedna chyba, ale jinak to celkem jde. Nedoporučuji se dívat na některé fáze moc dlouho, bolej z toho oči. Všiměte si tý prasárny při kreslení kružnic PYTHAGOROVOU VĚTOU, no fuj že se nestydíš. Stydim. #include <dos.h> #include <mem.h> #include <math.h> #include <conio.h> #define byte unsigned char //delka palety #define PL 768 char pal[PL]; //vyplni kruznicema nebo jinejma patvarama void fillc(byte b){ int dx,dy,c,d; char ch; long l; char far *p,*q,*r,*s; p=(char*)MK_FP(0xA000,0); q=(char*)MK_FP(0xA000,63999); r=(char*)MK_FP(0xA000,319); s=(char*)MK_FP(0xA000,63680); for (dy=100,c=0;dy;dy--){ for (dx=160;dx;dx--,c++){ l=dx*dx; l+=dy*dy; if (b==1) ch=sqrt(l);//kruznice if (b==2) ch=l; if (b==3) ch=l*2; if (b==4) ch=l*20; *(p++)=ch;*(q--)=ch; *(r--)=ch;*(s++)=ch; } p+=160;q-=160; r+=480;s-=480; } } //ceka na navrat paprsku void wairet(){ while (((inportb(0x3DA)) & 8)); while (!((inportb(0x3DA)) & 8)); } //nastavuje paletu void setpal(){ int c; wairet(); outportb(0x3c8,0); for (c=0;c<768;c++) outportb(0x3c9,pal[c]); } //inicialisuje graficky mod m void grinit(char m){ asm{ mov ah,0 mov al,m int 10h } } //nuluje paletu void nulpal(){ setmem(pal,PL,0); } //vyplni carama void filll(){ byte c; char far *p; p=(char*)MK_FP(0xA000,0); for (c=0;c<200;c++) { _fmemset(p,c,320); p+=320; } } //posune paletu o 1 dal void downpal(){ char ch[3]; memcpy(&ch[0],&pal[3],3); memcpy(&pal[3],&pal[6],PL); memcpy(&pal[PL],&ch[0],3); } /***********************************************************************/ /**************************** M A I N *********************************/ /***********************************************************************/ void main(){ byte mod; int c,d,e; grinit(0x13); //nastavuje paletu for (c=0;c<PL;) { pal[c++]=c/2; pal[c++]=c/4; pal[c++]=c/6; } setpal(); for (e=0;e<5;e++){ if (e) fillc(e); else filll(); getch(); //presunuje paletu while (!kbhit()) { downpal(); setpal(); } } grinit(2); } HIPP výheň