Alev efekti;
Tam göbekte beyaz, arada sarı ve en dışta da kırmızı renkler olursa, bu renkler güzel bir tonlama ile birbirine kaynaşırsa,
en dışta en soluk, en içte en parlak ton olursa, sözüm ona 'BLUR' etkisi eklenirse bir alevimiz olur.
Yukarıdaki koşulları teker teker sağlayalaım, bunun için qb4.5 kodu ile örneklerde verelim;
1 - Renk tonlaması
En dışta koyu, en içte parlak olacak, kabuğun kırmızı, çekirdeğin beyaz olduğu bir renk tayfı üretelim...
Kırmızı, sarı ve beyaz olmak üzere 3 ana rengimiz var;
Alev yüksekliğini bulup, bu yüksekliği 3 e bölelim. Bu şekilde koyu kırmızıdan bembeyaza giden tayfımız eşit şekilde dağılmış
olur...
Alevi, 320x200x8 ekranında yapıcaz. Bu ekranda, bir renk yazmacı, 0 - 63 arası KYM ton alabilir... Tüm tayf, alev
yüksekliği kadar renk kullanacak. Yani, diyelim ki 21 yüksekliğinde bir alev yapacağız;
O zaman, kırmızı ton 7, sarı ton 7, beyaz ton 7 renk kullanır. 0 dan 63 e kadar değer alabilen bu renklerde, kırmızı ton 0
dan başlayıp, 63 görmeli. O halde, her bir ton 63/7 kadar artmalıdır.
Screen 13 '320x200x8 lik Ekran
Yukseklik% = 31 'Alev max yuksekligi
k% = Yukseklik%\3 'Ana renklerin ton sayısı
l% = 63 \ k% 'Tonlar arası mesafe
Baslama% = 199 - Yukseklik 'Dikey Tarama baslangicimiz
En% = 63 'Yangının tabanı
x1% = (320 - En%) \ 2 'Yatay taratma baslangici
x2% = x1% + En% 'Yatay tarama sonu.
şimdi, kırmızı, sarı ve beyaz için her birisi eşit (nerdeyse
) sayıda farklı renk sayısı bulduk. Bu farklı renk sayısını
k% değişkeni ile gösterdik. Madem, her renk 0 - 63 arası ton alabiliyorsa, 63 ü k% ya bölüp, her tonda yapacağımız atlamayı
bulduk. Bunuda l% ile gösterdik.
Renkler, Kırmızı - Yeşil - Mavi tonlarından oluşur. Alevde, Kırmızı ilk ana rengimiz. En kısık değerden yani 0 dan
başlayacak. k% kadar ilerleyip en parlak tona 63 değerine ulaşacak. Bundan sonra Sarıyı elde etmek için, yeşil k% kadar
ilerleyip her adımda l% kadar değer alıp 63' e ulaşacak. Bu parlaklığa ilerlerken kırmızı 63 değerinde sabit kalacak.
Böylece, kırmızıdan sarıya en yumuşak şekilde geçmeye çalışacağız. Son adımda, kırmızı ve yeşil en parlak noktasında, sap
sayı (sap sarı kedimize 'sap sayı' diyoz biz
) iken, mavi hafifçe artacak ve sarıdan, beyaza bir yumuşak geçiş daha yapmış
olacağız.
Siyah ==> Kırmızı ==> Sarı ==> Beyaz
Hadi yapalım bu işi
For t% = 0 to k% 'k% kadar rengi boyucaz
Out &H3C8, t% '3C8h portuna ilgili rengi yazıcaz.
Out &H3C9, kirmizi% 'Siyahtan başlıyoruz
Out &H3C9, 0 'Yeşil ve
Out &H3C9, 0 'Mavi renkler susçak.
kirmizi% = kirmizi% + l% 'her adımda l% kadar artan ton, k% adımda 0 dan 63 e ulaşır ;)
IF kirmizi% > 63 THEN kirmizi% = 63
Next
For t% = 0 to k% 'k% kadar rengi boyucaz yine.
Out &H3C8, t% + k% 'k% kadar rengi boyadık. şimdi 2. k% kadar renjte sıra.
Out &H3C9, 63 'Burası zaten kıpkırmızı oldu
Out &H3C9, yesil% 'sarartalım hafif hafif
Out &H3C9, 0 'Mavi renk bekle...
yesil% = yesil% + l% 'her adımda l% kadar artan ton, k% adımda 0 dan 63 e ulaşır ;)
IF yesil% > 63 THEN yesil% = 63
Next
For t% = 0 to k% 'Son k% kadar renk.
Out &H3C8, t% + k% + k% '2 * k% kadar rengi boyadık. şimdi 3. k% kadar renjte sıra.
Out &H3C9, 63 'Burası zaten kıpkırmızı oldu
Out &H3C9, yesil% 'Burası da yemyeşil. Al sana Sap sayı :)
Out &H3C9, mavi 'Mavi renk artınca, sarıdan beyaza dönüyoruz.
mavi% = mavi% + l% 'her adımda l% kadar artan ton, k% adımda 0 dan 63 e ulaşır ;)
IF mavi% > 63 THEN mavi% = 63
Next
tataam
Siyah =>(kırmızı artıyor) => kırmızı => (yeşil artıyor, kırmızı max ta sabit) => sarı => (mavi artıyor) => beyaz
3C8h portuna, 0 dan 255 e kadar olan renk sayılarından birisi girilir ve hemen ardından, 3C9h portuna sırasıyla KYM tonları
yazılır. Portlar, bellek noktaları/pointer lar gibi değildirler, farklı zamanda farklı işler yaparlar...
şimdi alev için renk tayfımzı yaptıktan sonra düşünelim;
Bir kıvılcım çıksın, yukarı ilerlesin, ilerlerken rengi hafif hafif değişsin ve siyaha ulaşıp kaybolsun. Bunun için, bir
sütundaki okuduğumuz bir noktanın rengini, çevre diğer birkaç rengi <=== BLUR okuyup, bir üst noktaya ortalama bir renk
yazacağız.
Do 'Ana döngü
a$ = INKEY$ 'Tus kontrol
Gosub Isik 'Baslama kivilcimi
For y% = baslama% to 199 'Dikey tarama
For x% = x1% to x2% 'Yatay tarama
c1% = POINT(x%, y%) 'Taranan nokta
c2% = POINT(x% + 1, y%) 'bir yatay ilerisi
c3% = POINT(x% - 1, y%) 'bir yatay gerisi
c4% = POINT(x%, y% + 1) 'bir aşağısı
c5% = POINT(x%, y% - 2) 'iki aşağısı
C% = (C1% + C2% + C3% + C4% + C5%) \ 5 'BLUR (hepsinin ortalaması)
PSET (X%, Y% - 1), C% 'Taranan noktanın bir üstüne bu rengi koyalım
NEXT
NEXT
LOOP UNTIL A$ <> "" 'Tusabasacika :D
END
Isik:
x% = x1% + RND * En% 'Yangın tabanından rastgele bir yer seç
PSET (x%, 199), RND * Yukseklik% 'rastgele boya
PSET (x% - 1, 199), RND * Yukseklik% 'önü ve
PSET (x% + 1, 199), RND * Yukseklik% 'arkayıda boya
RETURN
şimdi ekranınız yanacak
. Burda, basic dilinde, Ekran Ana Bölümüne direk geçiş yaparak boyama ve okuma yaparsanız
hızınız oldukça artacaktır. Bu bölüm yüzünden koskoca Arcok kütüphanesinde problemler yaşamaktayım, yardımlarınızı (Beta
testerları) bekliyorum
. Ayrıca kıvılcımlar yangın tabanında rahatsız edici görünmektedirler, bunuda düzeltebilirsiniz.
Bundan başka biraz daha uğraşıp Yangına belirli bir biçimde verebilirsiniz. şekil 1-A;
'Tolga Arçok
'Ekranınızı yakacak :P
SCREEN 13
RANDOMIZE TIMER
yukseklik% = 63
baslama% = 199 - yukseklik%
o& = CLNG(baslama%) * 320&
b& = o&
en% = 128
x1% = (320 - en%) \ 2
x2% = x1% + en%
taban& = 63680
k% = yukseklik% \ 3
l% = 63 \ k%
FOR t% = 0 TO k%
kirmizi% = kirmizi% + l%
OUT &H3C8, t%
OUT &H3C9, kirmizi%
OUT &H3C9, 0
OUT &H3C9, 0
NEXT
FOR t% = 0 TO k%
kirmizi% = kirmizi% + l%
IF kirmizi% > 63 THEN kirmizi% = 63
yesil% = yesil% + l%
OUT &H3C8, t% + k%
OUT &H3C9, kirmizi%
OUT &H3C9, yesil%
OUT &H3C9, 0
NEXT
FOR t% = 0 TO k%
yesil% = yesil% + l%
mavi% = mavi% + l%
IF yesil% > 63 THEN yesil% = 63
OUT &H3C8, t% + k% * 2
OUT &H3C9, 63
OUT &H3C9, yesil%
OUT &H3C9, mavi%
NEXT
DEF SEG = &HA000
DO
GOSUB DrawLine
o& = b&
FOR y% = baslama% TO 199
FOR x& = x1% TO x2%
oo& = o& + x&
c1% = PEEK(oo&)
c2% = PEEK(oo& - 640&)
c3% = PEEK(oo& + 320&)
c4% = PEEK(oo& + 1)
c5% = PEEK(oo& - 1)
c% = (c1% + c2% + c3% + c4% + c5%) \ 5
IF c% > 0 THEN POKE oo& - 320&, c%
NEXT
o& = o& + 320&
NEXT
LOOP UNTIL INKEY$ <> ""
DEF SEG
END
DrawLine:
kk% = (RND * ((RND * en% \ 5) + en% \ 5))
x& = x1% + kk%
bb& = x& + taban&
c% = INT(RND * yukseklik% \ 3)
t% = (RND * en%)
FOR t& = 0 TO 3
POKE bb& + t&, c%
NEXT
x& = x2% - kk%
bb& = x& + taban&
c% = INT(RND * yukseklik% \ 3)
t% = (RND * en%)
FOR t& = 0 TO 3
POKE bb& + t&, c%
NEXT
ll% = kk% + (RND * (en% - kk% * 2))
x& = x1% + ll%
bb& = x& + taban&
c% = yukseklik% - INT(RND * yukseklik% \ 3)
t% = (RND * en%)
FOR t& = 0 TO 3
POKE bb& + t&, c%
NEXT
RETURN
tam çalışır yangın programı;
http://www.uploadyeri.com/index.php/files/get/u-QpJYVE-9/yangin.rar