Jump to page: 1 2 3
Thread overview
Yeni Nesil Oyunlar için Açık Kaynaklı Grafik ve Ses Kütüphanesi Raylib
Mar 17, 2022
Salih Dincer
Mar 19, 2022
Salih Dincer
Mar 20, 2022
Salih Dincer
Mar 20, 2022
Salih Dincer
Mar 20, 2022
Salih Dincer
Mar 20, 2022
Salih Dincer
Mar 20, 2022
Salih Dincer
Mar 20, 2022
Salih Dincer
Mar 20, 2022
Salih Dincer
Mar 21, 2022
Salih Dincer
March 17, 2022

Raylib kütüphanesinin sürüm numaralarına göre yazılmış çeşitli programlama dilleriyle ilgili çalışmaların listesi:

https://github.com/raysan5/raylib/blob/master/BINDINGS.md

Oradakilere bir örnek olarak Raylib 4.0 sürümüyle çalışan bir d programının örneği:

https://github.com/o3o/bindbc-raylib3

March 17, 2022

On Thursday, 17 March 2022 at 08:47:31 UTC, İsmail Emre ARIKAN wrote:

>

Raylib kütüphanesinin sürüm numaralarına göre yazılmış çeşitli programlama dilleriyle ilgili çalışmaların listesi:

https://github.com/raysan5/raylib/blob/master/BINDINGS.md

Oradakilere bir örnek olarak Raylib 4.0 sürümüyle çalışan bir d programının örneği:

https://github.com/o3o/bindbc-raylib3

Youtube 'da Ki Rill isimli kanaldaki Let's learn D programming Game Dev!(D Programlama Dilini Kullanarak Oyun Geliştirmeyi Öğrenelim!) başlıklı oynatma listesindeki videolardaki çalışmaların kaynak kodlarını sahibi önceden paylaşmış.

Ayrıca Ki Rill kanalındaki diğer oynatma listesi olan Dlang game dev(D programlama dili oyun geliştirme) çalışmalarının kaynak kodlarını da paylaşmış.

>

Açıkçası bize sadece denemek ve Türkçe'ye çevirip ileri seviyedeki kullanımlar için bir başvuru oluşturmamızı sağlayacak belge haline getirmek kalıyor.

March 17, 2022

On Thursday, 17 March 2022 at 10:25:26 UTC, İsmail Emre ARIKAN wrote:

>

Ki Rill [...]
çalışmaların kaynak kodlarını sahibi önceden paylaşmış.

Merhaba Emre,

Ki'nin kanalındaki vidyolara (o zamanlar Raylib'e ilgim yoktu) etmiştim ama kaynak kodlarını paylaştığını bilmiyordum. Hatırlattığın çok iyi oldu, özellikle ilk baktığım ticTacToe, yaklaşıl 180 satır ile çok temiz yazılmış.

Meğer 2 hafta önce de fractal vidyosu hazırlamış, şaştım kaldım. İngilizce konuşması çok güzel. İnsan bu bir Türk olmalı diyesi geliyor. Çünkü dünyada sadece Türkler bu kadar güzel konuşuyor. Dilin vatanı UK'da bile böyle harika bir İngilizce yok :)

Sevgiler, saygılar...

March 19, 2022

On Thursday, 17 March 2022 at 10:25:26 UTC, İsmail Emre ARIKAN wrote:

>

Youtube 'da Ki Rill isimli kanaldaki Let's learn D programming Game Dev!(D Programlama Dilini Kullanarak Oyun Geliştirmeyi Öğrenelim!) başlıklı oynatma listesi [...]

Bir oynatma listesi de ben paylaşacağım. Konu D ile alakalı değil C++'de SFML ama dersler çok yeni ve Kayhan hocadan. Kayhan hocanın temel programlamaya dair vidyoları çok hoşuma gidiyor ve yeni seriler beni heyecanlandırdı. Belki ilginizi çeker:

https://www.youtube.com/watch?v=HUONtLEAL8g&list=PLIM5iw4GHbNXmsxbZXSf51k1fW7o4MOYV

March 19, 2022

Salih hocam,
Kirill SAIDOV, Kazakistanlı. Pardus Forumuna eklenen gönderiler, 30 gün içinde oraya yeni ileti yazılmasına kapatılıyor / kilitleniyor, yani ne yapıldıysa o görünecek. Bu sebeple raylib için Türkçe kılavuzu hazırlamam(ız) için de az vaktim(iz) olduğunu söylemek isterim.
Bugün nasipse başlıyorum, kılavuzun yetiştiği kadarını orada(Pardus forumundaki iletimizde) paylaşmak istiyorum.
Önce LibreOffice ile kılavuzu hazırlayıp, Github başlığındaki gönderiye bunu Github 'a nasıl dahil edeceğimizi sormayı olanlıyorum.

Selamlar, hürmetler...

March 20, 2022

On Saturday, 19 March 2022 at 11:02:55 UTC, İsmail Emre ARIKAN wrote:

>

Salih hocam,
çalışmalarımda bayağı ilerledim. şimdi de bir tane amiral battı oyununun çevirisini sizinle paylaşıyorum. Ama bir sorum olacak, devamı kodlardan sonra... :) Kirill SAIDOV 'un Learn D Game Dev isimli çalışmasının 9.3 'üncü dosyasından:

// Savaş Gemisi Oyununu Bitirmek

import std.stdio: writeln, write, readf;
import std.conv: to;
import std.random: uniform;

// oyun durumları
enum OyunDurumu {
	MENÜ, OYNA, YARDIM, ÇIKIŞ
}

/*
	oyunDurumu = MENÜ; -> anaMenü();	// anaMenü yü yönetmek
	oyunDurumu = YARDIM; -> yardım();		// nasıl oynanacağı
	oyunDurumu = OYNA; -> oyna();		// oyunun mantığı
	oyunDurumu = ÇIKIŞ; -> döngüden kurtulun ve çıkın
*/

immutable int GEMİLERİN_SAYISI = 10;

void main() {
	// oyunDurumu değişkeni
	OyunDurumu oyunDurumu = OyunDurumu.MENÜ;

	// oyunDurumu = ÇIKIŞ olmadığı sürece oyunu çalıştır
	while(oyunDurumu != OyunDurumu.ÇIKIŞ) {
		if(oyunDurumu == OyunDurumu.MENÜ) {
			anaMenü(oyunDurumu);
		} else if(oyunDurumu == OyunDurumu.YARDIM) {
			yardım(oyunDurumu);
		} if(oyunDurumu == OyunDurumu.OYNA) {
			oyununMantığı(oyunDurumu);
		}
	}

	writeln("Oynadığınız için teşekkür ederiz!");
}

// 30 defa boş satır yazdır (görüntüleme için)
void temizle() {
	for(int i = 0; i < 30; i++) {
		writeln();
	}
}

// MENÜ durumu: ana menüyü tutmak için kod
void anaMenü(ref OyunDurumu oyunDurumu) {
	temizle();

	writeln("selam ve hoş geldiniz!");
	writeln();
	writeln("(1) Oyna");
	writeln("(2) Yardım");
	writeln("(3) Çıkış");
	writeln();
	write("Seçim >> :_");

	char c;
	readf(" %s", c);
	if(c == '1' || c == 'O' || c == 'o') {
		oyunDurumu = OyunDurumu.OYNA;
	} else if(c == '2' || c == 'Y' || c == 'y') {
		oyunDurumu = OyunDurumu.YARDIM;
	} else if(c == '3' || c == 'Ç' || c == 'ç') {
		oyunDurumu = OyunDurumu.ÇIKIŞ;
	} else {
		writeln("\n\nHata! Lütfen tekrar deneyiniz!\n");
	}
}

// YARDIM durumu: yardımcı bilgiyi göstermek
void yardım(ref OyunDurumu oyunDurumu) {
	temizle();

	writeln("1. Her oyuncu gemilerini on satır on sütundan oluşan bir ızgaraya gizlice yerleştirmelidir.");
	writeln("\n2. Her oyuncu aynı büyüklükte ikinci bir kareye de sahip olacaktır. İlk ızgara kendi gemileriyken, ikincisi (oyunun başında boş olan) \nrakiplerinin savaş alanının bir aynasıdır.");
	writeln("\n3. Oyuncular rastgele bir kare seçer ve onu satır ve \nsütun numarasına göre çağırır. Bu, doğrudan o kareye bir füze ateşlediklerini gösterir.");
	writeln("\n4. Tüm rakiplerinin \ngemilerini işgal ettikleri her kareye vurarak başarılı bir şekilde bulan oyuncu, tüm gemiler yok edildiğindiği için kazanır.");

	write("\nSeçim(2) >> :_");

	char c;
	readf(" %s", c);
	oyunDurumu = OyunDurumu.MENÜ;
}

// OYUN durumu: oyunun mantığı
void oyununMantığı(ref OyunDurumu oyunDurumu) {
	temizle();

	// haritalarımızı oluşturmak
	char[5][5] oyuncununHaritası = ' ';
	char[5][5] düşmanınHaritası = ' ';
	char[5][5] bölge = ' ';

	// gemileri başlatmak
	gemiKonumunuBaşlat(oyuncununHaritası); 	// oyuncunun gemilerini (manuel olarak, oyuncunun kendisi tarafından) başlat
	düşmanGemiKonumunuBaşlat(düşmanınHaritası); 	// düşmanların gemilerini (rastgele) başlat

	int oyuncunun_batırılan_gemileri = 0;
	int düşmanın_batırılan_gemileri = 0;
	bool kazanılanOyun = false;
	
	while(oyunDurumu != OyunDurumu.ÇIKIŞ) {
		// oyuncunun haritasını göstermek
		writeln("Haritanız, Kaptanım: ");
		göster(oyuncununHaritası);

		// boş bölgeyi göstermek
		writeln("\n", "Düşman bir yere saklanıyor, Kaptanım: ");
		göster(bölge);

		writeln("Alanı keşfe çıkalım ve saldıralım (", GEMİLERİN_SAYISI, "dan", oyuncunun_batırılan_gemileri, " tanesi",  " gemi batırıldı)!");

		// kullanıcının girdisini okumak
		char x;
		char y;
		write("Saldırmak için X-koordinatı(çıkmak için ç): >>_"); readf(" %s", x);
		if(x == 'ç') { 		// eğer girdi = 'ç' olursa oyundan çıkılır
			oyunDurumu = OyunDurumu.ÇIKIŞ;
		}

		write("Saldırmak için Y-koordinatı(çıkmak için ç): >>_"); readf(" %s", y);
		if(y == 'ç') { 		// eğer girdi = 'ç' olursa oyundan çıkılır
			oyunDurumu = OyunDurumu.ÇIKIŞ;
		}
		
		// (x, y) koordinatlarını tamsayıya dönştürmek
		int ix = to!int(x - '0');
		int iy = to!int(y - '0');
		
		temizle(); // yeni satırlar ekleyerek ekranı temizlemek
		// eğer (x, y) koordinatları haritanın uzunluğundan daha büyükse veya negatifse, başlangıca git
		if(ix < 0 || ix > bölge.length-1 || iy < 0 || iy > bölge.length-1) {
			continue;
		}

		// koordinat boş değilse, başlangıca git
		if(bölge[ix][iy] != ' ') {
			continue;
		}

		// oyuncu düşmanın gemisine çarparsa, 'x' ile işaretleyin, aksi takdirde 'o' ile işaretleyin
		if(düşmanınHaritası[ix][iy] == '1') {
			bölge[ix][iy] = düşmanınHaritası[ix][iy] = 'x';
			oyuncunun_batırılan_gemileri++;
		} else {
			bölge[ix][iy] = düşmanınHaritası[ix][iy] = 'o';
		}
		
		// eğer oyuncu, düşmanın tüm gemilerini batırdıysa oyuncu, oyundan çıksın
		if(oyuncunun_batırılan_gemileri >= GEMİLERİN_SAYISI) {
			oyunDurumu = OyunDurumu.ÇIKIŞ;
			kazanılanOyun = true; 			// oyuncu kazandı
		}

		düşmanınSaldırısı(oyuncununHaritası, düşmanın_batırılan_gemileri);

		// eğer düşman, oyuncunun tüm gemilerini batırdıysa oyuncu, oyundan çıksın
		if(düşmanın_batırılan_gemileri >= GEMİLERİN_SAYISI) {
			oyunDurumu = OyunDurumu.ÇIKIŞ;
			kazanılanOyun = false; 			// oyuncu kaybetti
		}
	}
	
	temizle();
	if(kazanılanOyun) {
		writeln("Kazandınız!");
	} else {
		writeln("Haritanız, Kaptanım: ");
		göster(oyuncununHaritası);
		writeln("\nKaybettiniz!");
	}
}

// oyununMantığı işlevindeki yorumları okuyun, kod hemen hemen aynı
void gemiKonumunuBaşlat(ref char[5][5] dizi) {
	int i = 0;
	while(i < GEMİLERİN_SAYISI) {
		göster(dizi);

		writeln("Geminizin konumunu giriniz(", GEMİLERİN_SAYISI, " gemiden kalan ", i, " gemi):");

		char x;
		char y;
		write("X-kordinatı: >>_"); readf(" %s", x);
		write("Y-koordinatı: >>_"); readf(" %s", y);

		int ix = to!int(x - '0');
		int iy = to!int(y - '0');
		
		temizle();
		
		if(ix < 0 || ix > dizi.length-1 || iy < 0 || iy > dizi.length-1) {
			writeln("\nHATA! TEKRAR DENEYİNİZ!");
			continue;
		}

		if(dizi[ix][iy] != ' ') {
			writeln("\nHATA! (", ix, ", ", iy, ") KONUMUNDA ZATEN GEMİ VAR!");
			writeln("TEKRAR DENEYİNİZ!\n");
			continue;
		}

		dizi[ix][iy] = '1';

		i++;
	}
}

// düşmanın gemilerini rastgele yüzdürmek
void düşmanGemiKonumunuBaşlat(ref char[5][5] dizi) {
	int i = 0;
	while(i < GEMİLERİN_SAYISI) {
		int x = uniform(0, dizi.length.to!int);
		int y = uniform(0, dizi.length.to!int);

		if(dizi[x][y] != ' ') {
			continue;
		}

		dizi[x][y] = '1';
		i++;
	}
}

void düşmanınSaldırısı(ref char[5][5] dizi, ref int batırılan_gemiler) {
	while(true) {
		int x = uniform(0, dizi.length.to!int);
		int y = uniform(0, dizi.length.to!int);

		// düşman bu konuma zaten saldırdıysa, döngünün başına gidin
		if(dizi[x][y] == 'x' || dizi[x][y] == 'o') {
			continue;
		}

		// gemi bulunduysa gemiyi batır
		if(dizi[x][y] == '1') {
			dizi[x][y] = 'x';
			batırılan_gemiler++;
		} else {
			dizi[x][y] = 'o'; // diğer türlü onu 'o' ile işaretleyin
		}

		break;
	}
}

// tüm diziyi tablo benzeri bir biçimde yazdırmak
void göster(char[5][5] dizi) {
	write("  ");
	for(int i = 0; i < dizi.length; i++) {
		write("   ", i);
	}
	writeln();

	writeln("_ _ _ _ _ _ _ _ _ _ _ _");
	for(int i  = 0; i < dizi.length; i++) {
		write(i, " ");
		for(int j = 0; j < dizi[i].length; j++) {
			write(" | ", dizi[i][j]);
		}
		writeln();
		writeln("_ _ _ _ _ _ _ _ _ _ _ _");
	}

	writeln();
	writeln();
}

March 20, 2022

On Sunday, 20 March 2022 at 12:49:33 UTC, İsmail Emre ARIKAN wrote:

>

Hocam, neredeyse üç saate yakındır dub ile raylib kütüphanesini kurmaya çalışıyorum. Kirill bey kurulumun nasıl yapılacağını orada anlatmış. Yapamadığım için ders10 'da belirtilen aşağıdaki kodları yürütrmiyorum:


import std.stdio;

import raylib;

void main() {
	writeln("Projenizi başlatmak için source/app.d \'yi düzenleyiniz.");
}

``
March 20, 2022

On Sunday, 20 March 2022 at 12:54:50 UTC, İsmail Emre ARIKAN wrote:

>

On Sunday, 20 March 2022 at 12:49:33 UTC, İsmail Emre ARIKAN wrote:

>

Hocam, neredeyse üç saate yakındır dub ile raylib kütüphanesini kurmaya çalışıyorum. Kirill bey kurulumun nasıl yapılacağını orada anlatmış. Yapamadığım için ders10 'da belirtilen aşağıdaki kodları yürütemiyorum:

Bir de şu sitedeki talimatları denemeye başladım.

March 20, 2022

On Sunday, 20 March 2022 at 12:54:50 UTC, İsmail Emre ARIKAN wrote:

>

Hocam, neredeyse üç saate yakındır dub ile raylib kütüphanesini kurmaya çalışıyorum.

Merhaba Emre,

Öncelikle işletim sistemin ne? Birde dmd ile dub bilgisayarında düzgün çalışıyor mu? Yani komut istemiyle dmd veya dub komutunu verdiğinde ekranda programla ilgili ibareler var mı?

Bunun dışında %90 kurduk bile yani D derleyicisi ve paket yöneticisi kuruluysa Raylib kurmak çocuk oyuncağı :)

Son bir not, dub init yaptın mı? Yani kodlamaya başlamadan önce yeni bir dizin ve app.d dosyalarını otomatik oluşturdun mu? Oluşturduğun zaman son soruya raylib-d şeklinde cevaplaman gerekiyor.

Sorun değil aslında dub init oyunDeneme, enter enter geç sonra sırayla şunları yap:

cd oyunDeneme
dub add raylib-d

Hadi bekliyorum dene ve haber ver!

Başarılar...

March 20, 2022

On Sunday, 20 March 2022 at 13:26:23 UTC, Salih Dincer wrote:

>

Merhaba Emre,

Öncelikle işletim sistemin ne? Birde dmd ile dub bilgisayarında düzgün çalışıyor mu? Yani komut istemiyle dmd veya dub komutunu verdiğinde ekranda programla ilgili ibareler var mı?

Bunun dışında %90 kurduk bile yani D derleyicisi ve paket yöneticisi kuruluysa Raylib kurmak çocuk oyuncağı :)

Son bir not, dub init yaptın mı? Yani kodlamaya başlamadan önce yeni bir dizin ve app.d dosyalarını otomatik oluşturdun mu? Oluşturduğun zaman son soruya raylib-d şeklinde cevaplaman gerekiyor.

Sorun değil aslında dub init oyunDeneme, enter enter geç sonra sırayla şunları yap:

cd oyunDeneme
dub add raylib-d

Hadi bekliyorum dene ve haber ver!

Başarılar...

Raylib kütüphanesini derledikten sonra Salih Hocam anlaşılır talimatlarınız sayesinde kurabildim. Hala Debian tabanlı Pardus kullanıyorum hocam.
Uçbirim çıktım şu:

arikan@arikan32:~$ dub init oyunDeneme
Package recipe format (sdl/json) [json]:
Name [oyundeneme]:
Description [A minimal D application.]: cd oyunDeneme
Author name [İsmail Emre ARIKAN]: dub add raylib-d
License [proprietary]:
Copyright string [Copyright © 2022, dub add raylib-d]:
Add dependency (leave empty to skip) []: raylib-d
Adding dependency raylib-d ~>4.0.1
Add dependency (leave empty to skip) []:
Successfully created an empty project in '/home/arikan/oyunDeneme'.
Package successfully created in oyunDeneme
arikan@arikan32:~$
« First   ‹ Prev
1 2 3