bildirgec.org

Site arşivi: kodaman

Flash’da shoot’em up tarzı oyun tasarımı(AS2)

admin | 06 September 2010 10:38

Flash’da oyun tasarlamak giderek daha çok ilgi duyulan(özellikle son yıllarda) bir alan. Gerek yarışmalar olsun(bkz indiepubgames.com’un yaptığı yarışma, adobe ve flash game license’sın ortak yarışması vs.) gerek her gün yenisi açılan oyun siteleri olsun bu alana duyulan ilgiyi artırıyor.

Flash’da özellikle oyun tasarımında actionscript bilginizin olması yetersiz kalabiliyor. Örneğin actionscript’i bilebilirsiniz ama bir eğik atış hareketi yapabilmeniz için eğik atışın mantığını da bilmeniz gerekir. Demek istediğim flash’la yapılan örnekleri inceleyerek kendinizi daha rahat geliştirebilirsiniz. Bu amaçla bende basit bir RPG oyununun nasıl yapıldığını paylaşmak istedim.

Smarty Template Motoru ile Merhaba Dünya

admin | 28 August 2010 13:18

Uzun br aradan sonra güzel bir yazıyla geri dönüş yapayım dedim. Bu kez konumuz ne C# nede ASP olacak . Şimdi PHP yi diğer web yazılım dillerinden ayıran birçok güzellikten biri olan template kullanabilme yeteneğini anlatmaya çalışacağım. Önce template kavramı üzerine biraz laf kalabalığı yapalım.

Template nedir ?

Template bir web sitesinin yada yazılımın birden fazla arayüzden herhangi biri ile çalışabilmesini sağlayan koddan ayrılmış görsel dosyalarıdır.

PHP de template nasıl kullanılır ?

PHP de dahil birçok web yazılım dilinde template mantığı css,image,js dosyaları ile kod dosyalarını ayırıp bir parametre ile bunu değişken kılmak en basit yoldu ancak her ne olursa olsun bu ayrım tamamen keskin çizgilere sahip olamıyordu örneğin kod içinde tanımladığımız bir table da kullandığımız class eğer parametre ile tanımladığımız css dosyası içinde bulunmuyorsa bu başımıza iş açabiliyordu. Bu şekilde çalışabilmek için her oluşturduğumuz template te oldukça hassas davranmak gerekiyordu. Ancak Smarty ve buna benzer template motorları bu yükü üzerimizden almayı başardılar.

ASP.NET ile Sayfalama İşlemleri

admin | 27 August 2010 15:02

Merhaba,
Bu yazımda ASP.NET ile sayfalama işlemleri hakkında bilgi vereceğim. Sayfalama işlemlerini veritabanımızda çok veri olduğu zaman kullanmaktayız. Benim yapacağım örnekte DataList ile sayfalama yapacağım. Kodumuzda en önemli kısım ise SqlDataAdapter’ın Fill() metodudur. Fill metodunun parametreleri arasında kaçıncı kayıttan başlanacağı ve kaç kayıt gösterilereceği gibi bizim işimize oldukça yarayan parametreler bulunmaktadır. Kaçıncı sayfada olduğumuzu QueryString ile almaktayız. Kodlar ise aşağıdaki gibidir :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
/// <summary>
/// Summary description for Sayfalama
/// </summary>
public class Sayfalama
{
//DataList'te bulunan verileri sayfalama kodu
//Veriyi Çekme
/*
int sayfano = 1;
if (String.IsNullOrEmpty(Request.QueryString["sayfa"].ToString()))
{
sayfano = 1;
}
sayfano = int.Parse(Request.QueryString["sayfa"].ToString());
//Bu kısımdaki 3 sayısı bizim sayfa başına göstereceğimiz kayıt sayısıdır. Bu kısmı kendinize göre değiştirmeniz gerekmektedir.
DataList1.DataSource = Sayfalama.DataListVeriGetir(sayfano, 3, "isimler", new System.Data.SqlClient.SqlConnection(@"Data Source=.\sqlexpress; Database=master;Integrated Security=true"), "select * from isimler");
DataList1.DataBind();
int toplamkayit = Sayfalama.TablodakiKayitSayisi("isimler", new System.Data.SqlClient.SqlConnection(@"Data Source=.\sqlexpress; Database=master;Integrated Security=true"));
//Bu kısımdaki 3 sayısı bizim sayfa başına göstereceğimiz kayıt sayısıdır. Bu kısmı kendinize göre değiştirmeniz gerekmektedir.
decimal sayfanumaralari = Math.Round((decimal)toplamkayit / 3);
LinkButton sayfalar;
for (int i = 1; i <= sayfanumaralari; i++)
{
sayfalar = new LinkButton();
sayfalar.Text = i.ToString();
sayfalar.Attributes["href"] = "default.aspx?sayfa=" + i.ToString();
Panel1.Controls.Add(sayfalar);
}
*/
//Verilen tablodaki toplam kayıt sayısını geri döndürür.
public static int TablodakiKayitSayisi(string TabloAdi, SqlConnection BaglantiCumlesi)
{
string SqlKomut = "SELECT COUNT(*) FROM " + TabloAdi;
SqlCommand komut = new SqlCommand(SqlKomut, BaglantiCumlesi);
int KayitSayisi = 0;
try
{
BaglantiCumlesi.Open();
KayitSayisi = int.Parse(komut.ExecuteScalar().ToString());
}
finally
{
BaglantiCumlesi.Close();
}
return KayitSayisi;
}
//Verilen SQL cümlesine uygun veri setini geri döndüren fonksiyon
//SayfaNo = Kaçıncı sayfa olduğunu belirtir.
//KayitSayisi = Sayfada kaç tane kayıt gösterileceğini belirtir.
//TabloAdi=Veritabanındaki tablo adı.
//BaglantiCumlesi=SQL bağlantı cümlesi.
//SqlCumle = Select sorgusu
public static DataSet DataListVeriGetir(int SayfaNo, int KayitSayisi, string TabloAdi, SqlConnection BaglantiCumlesi, string SqlCumle)
{
SqlDataAdapter da = new SqlDataAdapter(SqlCumle, BaglantiCumlesi);
DataSet ds = new DataSet();
int baslangic = ((SayfaNo * KayitSayisi) - KayitSayisi);
da.Fill(ds, baslangic,KayitSayisi, TabloAdi);
return ds;
}
}

Bizim bu kodumuzda sayfa başına 3 adet kayıt gösterilmektedir.

C# ile Operator Overloading

admin | 23 August 2010 14:24

Merhaba,
Bu yazımda bir çok dilde bulunan operator overloading özelliğinin C# ile nasıl yapılabileceğini anlatacağım. Operator overloading(operatörleri aşırı yükleme) metotları aşırı yüklemeye benzer bir yapıya sahiptir. Operatörleri aşırı yükleme ise C# ile kullandığımız ,-,*,/,%, ,– gibi operatörlerin bizim oluşturduğumuz class içinde nasıl davranacağını belirleyebildiğimiz bir kavramdır. Örneğin aşağıdaki kod bloğuna inceleyelim :

1
int a = 10+5;

Burada iki adet int sayıyı topladık. Yani bizim burada yapacığımız iş operatörünün bizim yazdığımız class’ta daha farklı bir iş gerçekleştirebilmesidir. Ben burada örnek olarak C#’ta bulunmayan bir type’ın C#’a optimize edilmiş bir biçimini yazacağım. Bir karmaşık sayı sınıfı yazarak bunu programlarımızda nasıl kullanabileceğimizi anlatacağım. Örnek olarak aşağıdaki gibi bir class yazalım :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class KarmasikSayi
{
private double reel { get; set; }
private double sanal { get; set; }
public KarmasikSayi(double reel, double sanal)
{
this.reel = reel;
this.sanal = sanal;
}
//Toplama operator overloading
public static KarmasikSayi operator +(KarmasikSayi sayi1, KarmasikSayi sayi2)
{
return new KarmasikSayi(sayi1.reel + sayi2.reel, sayi1.sanal + sayi2.sanal);
}
//Çıkarma operator overloading
public static KarmasikSayi operator -(KarmasikSayi sayi1, KarmasikSayi sayi2)
{
return new KarmasikSayi(sayi1.reel - sayi2.reel, sayi1.sanal - sayi2.sanal);
}
public override string ToString()
{
return String.Format("{0} {1}i", reel, sanal);
}
}

Saat kontrollü Windows Servis

admin | 21 August 2010 10:01

Herkesin bir dönem uğraştığı, Windows Servis ile bende uğraştım. Firma için yapmam gereken Windows Servis, 30 dk da bir alt yöneticiye, 40 dk da bir de üst yöneticiye mail atıyor. Bu mail’i atma nedeni, bu projede Teknik Servis’e gelen taleplerin 30 dk içersinde karşılanmaması durumunda müdahale etmektir.

Aşağıdaki kodu Visual Studio’da gerekli yerleri değiştirerek rahatça çalıştırabilirsiniz. Veritabanı adı kısmı ve mail gönderecek olan server adresini değiştirmeniz durumunda bir sorun çıkmayacaktır.

Kod bloğunda da zaman zaman açıklama satırları eklemeye çalıştım. Yine takıldığınız bir yer olursa sorabilirsiniz.

wordpress’e programsal olarak veri ekleme

admin | 19 August 2010 15:28

wordpress’e programsal olarak nasıl yazı eklerim
Wordpress’e veri eklemek çok kolaydır. veri eklemek istediğiniz zaman wp_insert_post() metodunu kullanmak zorundasınız. Bu metodun parametreleri sayesinde kolaysa yazınıza tarih, kategori, etiket gibi bilgileri girebilirsiniz. birsürü sql koduyla uğraşmak zorunda kalmazsınız.
Aşağıdaki kodu functions.php dosyasına yapıştırıp sonucu görebilirsiniz.

1
2
3
4
5
6
7
8
9
10
11
global $user_ID;
$new_post = array(
'post_title' => 'My New Post',
'post_content' => 'Lorem ipsum dolor sit amet...',
'post_status' => 'publish',
'post_date' => date('Y-m-d H:i:s'),
'post_author' => $user_ID,
'post_type' => 'post',
'post_category' => array(0)
);
$post_id = wp_insert_post($new_post);

çok hoş değil mi? parametrelerin anlamları ise şunlar:

  • post_title: yazının başlığı
  • post_content: yazının içeriği
  • post_status: yazının durumu (yayınlandı, taslak, vb)
  • post_date: yazının hangi tarihta yayınlandığı(date() fonsiyonu ya da özel bir tarih)
  • post_author: yazar id’si
  • post_type: yazı tipi (yazı(post), sayfa(page))
  • post_category: yazı hangi kategorilere aitse onların id’lerini array olarak yazıyoruz.

yorum ekleme

.hta dosyaları ile masaüstünde çalışan web tabanlı yazılımlar geliştirmek

admin | 19 August 2010 13:10

Öncelikle herkese merhaba. Siteye gönderdiğim ilk yazı vesairesini es geçip hemen konuya giriyorum.

Bu yazımda sizlere hta dosyalarını tanıtacağım ve bu dosyalarla tercih ettiğimiz herhangi bir web programlama dili ile masaüstü ortamında çalışan uygulamalar geliştirmenin yöntemlerini ve bu yöntemlerin olası kullanım alanlarını kısaca paylaşacağım.

hta nedir?
hta bir dosya uzantısıdır ve HTML Application’ın kısaltılmışıdır. Microsoft’un kıyıda köşede gözlerden uzak kalmış hazinelerinden biridir. Hazine diyorum, çünkü ülkemizdeki işletmelerin büyük büyük büyük çoğunluğunun windows ortamında çalıştığını düşünürsek, bu işletmeler için ister basit yapılı ister karmaşık yapılı olsun, kurumsal yazılımlar geliştirme noktasında biz web yazılımcılarını adeta “kurtaran” bir altyapı olduğunu rahatlıkla söyleyebilirim. hta’nın bugüne dek yaygın olarak kullanıldığı alan ise windows kurulumu sonrası ilk oturum açılışında ekrana gelen, görür görmez kapattığımız ve bir daha da görüntülenmesini istemediğimiz, MS tarafından hazırlanmış şu ünlü “hoşgeldiniz” ya da “windows turu yapmak ister misiniz?” tarzında gereksiz zımbırtılar olmuştur.

ASP.NET ile Transparan PNG Thumbnail Oluşturma

admin | 18 August 2010 17:58

Bu kodaman.org’daki ilk yazım. Merhaba;
Bu yazımda ASP.NET ile transparan png dosyalarından thumbnail resimleri oluşturmayı anlatacağım. Bir proje üzerinde çalışırken 600-700 resmi kataloğa göre boyutlandırmam gerekiyordu ve bunları teker teker yapana kadar bunu ASP.NET ile nasıl yaparım diye düşündüm ve araştırdım. İnternette bulduğum çoğu makalede Image sınıfının GetThumbnailImage metodunu kullanarak yapıyordu. Ve bu metot resminizin kalitesini düşürdüğü gibi transparan PNG resmimizin kenarlarınada siyah veya gri kenarlıklar veriyordu. Eğer yüksek kaliteli resimlerle çalışıyorsanız GetThumbnailImage metodunu kullanmamanızı tavsiye ederim. Benim yazdığım bu kodda resmi verilen yüksekliğe göre oranlıyoruz. Şimdi bir aspx sayfası oluşturarak code-behind aşağıdaki namespace’leri import ediyoruz :

1
2
3
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;

Javaskop: Bir Javascript Kütüphanesi

admin | 17 August 2010 17:03

Merhaba, arkadaşlar!

Sizlele, bir süre önce geliştirmeye başladığım bir javascript kütüphanesini paylaşmak istiyorum. Biliyorum ki şimdi jQuery gibi harika birşey varken buna ne gerek var diye düşünüyorsunuzdur. Gerçekten bunda haklısınız fakat ben bizimde bir kütüphanemiz olsun istedim.

KİMLERE ÖNERİLİR

– Bir javascript kütüphanesi öğrenmek isteyenlere- jQuery yerine daha hafif birşey arayanlara- Türkçe kütüphane arayanlara
size rahatlıkla önerebilirim.

GENEL KULLANIMI
Javaskop([seçici]).FonkA(parametre, […]).FonkB()…FonkN();

PHP ile belirlenen dakika kadar eski olan kayıtları otomatik silme…

admin | 17 August 2010 14:58

Merhabalar,

Sorumuz : Veritabanına bigirlmiş bir kayıt var ve biz bu kayıtın tarih ve saat bilgisine “07-07-2010” ve “12:00” şeklinde sahibiz. Peki bu kayıtlardan şu anki zamandan 15 dakika önce oluşturulmuş (eskimiş olanı) olanı nasıl otomatik olarak sildirebiliriz?

Amaç : Önceki girilmiş bir zaman ile şimdiki zamanın karşılaştırılarak aradaki farka göre işlem yaptırma.

Kod:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
//Cron Job
// İşlem iki aşama
// 1. Aşamda eski tarihli ve kullanılmayan anahtarları sil...
// 2. Aşamada kalan verilerden saat farkı 15 dakika olanları ve kullanılmayan anahtarları sil...
//require_once("conn.php"); DB Bağlantı şeysi...
$sql = "select anahtar_no,anahtar_tarih, anahtar_saat,anahtar_dk,anahtar_uye from anahtarlar where anahtar_kullan = 0 order by anahtar_no asc";
$query = mysql_query($sql);
while($sonuc = mysql_fetch_assoc($query)){
if($sonuc['anahtar_tarih'] < date("d-m-Y")){
//Anahtarları otomatik olarak sil....
$sql_sil = "delete from anahtarlar where anahtar_no = '".$sonuc['anahtar_no']."' and anahtar_kullan = 0";
mysql_query($sql_sil);
}
else {
$anahtar_saat = $sonuc['anahtar_saat'];
$anahtar_saat = strtotime($anahtar_saat);
$simdi = strtotime("now");
$saat_fark = $simdi - $anahtar_saat;
if($saat_fark > 900 ){
//Anahtarları otomatik olarak sil....
$sql_update = "update uyeler set uye_kontor = uye_kontor + '" .$sonuc['anahtar_dk']."' where uye_no = '".$sonuc['anahtar_uye']."'";
$sql_sil = "delete from anahtarlar where anahtar_no = '".$sonuc['anahtar_no']."' and anahtar_kullan = 0";
mysql_query($sql_update);
mysql_query($sql_sil);
}
}
}
?>