Archive for the ‘pyEmpires’ Category

pyEmpires v0.2

Version 0.2 is out! Hurray!

First: old post: http://wp.me/pp3Ng-Z
Update: pyEmpires is GPLed!

New screenshot from v0.2:

Changes since v0.1 are:

• Map is a seperate file
• New textures came, water, sand, grass: walking on sand is slower!
• Group’s are easier to find
• Keyboard Shortcut XML file
• Creating groups, and selecting them with CTRL+NUM_KEY
• double clicking select all units of that type
• fixed a few bugs

If you want to work with us, take a look at http://my-trac.assembla.com/pyempires

Or why not here: http://www.assembla.com/spaces/pyempires

Reklamlar

pyEmpires artık GPL v3 lisanslı

Önceki makalelerden kaynak kodlarına ulaşabilirsiniz.

pyEmpires is GPL v3 now!

Pls, check previous posts for source codes.

pyEmpires v0.1 is finished!

The game which I used pygame and python in writing and published as my graduation thesis, has reached v0.1. I will publish this game as soon as I choose a proper license and an SVN server. By the way, the name pyEmpires was made up and I can change it if it is taken.

Edit: Now it is GPLv3 🙂

Edit: New version avaible!

Here is a screenshot from game:

secim

Installation

source files are here: http://svn.assembla.com/svn/pars_soft/pyEmpires or download directly from

http://svn.assembla.com/svn/pars_soft/pyEmpires/pyEmpires.zip

You have to install these files in order to play.

Python 2.6: for Windows

Pygame: for Python 2.6 Windows

After that extract files from zip. Click Main.pyc in src folder and open it with python (2.6).

To run in *nix, just write “python Main.pyc” in that folder.

Also you can add your music (mp3 or ogg) files or their links to resources/music folder. To seperate music files played in menus and game window, music can be put in separate folders menu and game. They will be played random.

<>

How can I Play?

Controls are similar to the click & go games like diablo2 and AoE2. Click left to select, right to send away (except orange walls) & attack. While holding left button you can draw a selection box to select multiple units.

Pressing ESC key will open menu during game. To exit, use menu option.

Objective of game

You are guiding blue collared dogs. There is a default green collared enemy dog. (colors other than blue are enemy’s).

Your dogs are default in agressive mode, so don’t be surprised if they attack enemy near without your commands. And if your unit is attacking to an enemy, enemy’s health bar will turn red from green. Your units have health bar, too.

What’s happenning at background?

It seems a basic game -probably because there’s no scenario- but at background I use some good techniques. First of them is A* algorithm. It should be improved. Second is Finite State Machines.

A* is used for finding shortest path with obstacles. It has a wide range usage in games and it relies on heuristics. I may add another post just for it later because there is much to be developed in path finding (especially group movements).

Finite State Machine (FSM) is a technique in writing artificial intelligence. It has benefits on reusing so my AI module is one of the shortest module. So what is going on in AI?

First of all with FSM’s, units are in a state and they change their states under particular conditions. These states are attack, evade, chase, etc. Conditions are enemy_near?, enemy_strong?, etc. I put these to tables, so different tables means different AI behaviors.

And the additional keys are: (valid in only your selected units)

A key – Aggressive mode
S key – Defensive mode
D key – Stand ground mode
E key – No attack mode

With these keys you can alter your selected units’ mode. And these modes are:

Aggressive mode

Unit will attack if an enemy is near. Before attacking it chases the enemy so unit’s position will be lost.

Defensive mode

Even in attack mode, unit’s base position won’t be lost. If enemy can escape (become distant to base position), or it dies, unit will return to base position.

In No Attack Mode, unit will only attack if enemy is very close to him. But in No Attack Mode, unit won’t attack at all.

Known issues:
– Save and load game doesn’t work
– There is no collision detection. So units could be overlapped. Then try num-keys to select a particular unit in a selection group.

Support and Feedback:

Anyone interested in making strategy games, could comment here or send mail to baris dot aydek at gmail dot com. I’m open making it a 3D game, code in C/C++ etc. if I can bring together a great team. And if you encounter bugs other than known issues or have a suggestion/criticism don’t afraid of dropping a comment.

pyEmpires v0.1 bitti!

Yapımında pygame ve python kullandığım, aynı zamanda bitirme tez konumdur, oyunun V0.1’e gelmiş olmasını gururla duyuruyorum :). En kısa zamanda SVN sunucusuna atıp paylaşıma açmayı planlıyorum. Bu arada pyEmpires ismini şu dakikada uydurduğumu söylemem gerekir daha hiç isim düşünme çabasına girmemiştim, başlık atarken yazdım.

Oyundan biraz görüntü koyalım:

secim

Kurulum

Evet dosyayı anca rapidshare’e atabildim. Kaynak kodlarını şimdilik dağıtmıyorum, uygun bi lisans seçip dağıtabilirim. Neyse dosya şudur:
http://rapidshare.com/files/250004248/pyEmpires-v0.1.zip

Kaynak kodları: http://svn.assembla.com/svn/pars_soft/pyEmpires

Şimdi programı çalıştırmadan önce gerekli neler var onlara bakalım:

Python 2.6 sürümü: Windows kurulumu

Pygame: Pyton 2.6 sürümü için Windows kurulumu

Bunlar kuruluysa zip’i açın ve src klasöründeki Main.pyc dosyasına çift tıklayın. Eğer açmak için program istiyorsa python’u yüklediğiniz klasörden python.exe’yi seçebilirsiniz.

Linux kullanıcuları python ve pygame kurulumunu zaten biliyorlardır, çalıştırmak içinse:

cd oyunun_bulundugu_dizin/src

python Main.pyc

demek yeterli!

Unutmadan resources/music klasörüne de mp3 veya ogg’lerini atarak da oyunda müzik keyfini yaşayabileceğinizi belirteyim 🙂 music klasöründeki menu ve game klasörlerine menüde ve oyun içinde olmak üzere müzik atabilirsiniz. İsterseniz link olarak koyun. Müzikler karışık olarak çalacaktır.

Oyunu deneyip bana geribildirim yaparsanız çok iyi olur. Şurası olmamış, program şunu yapınca gümlüyo, şurasını çok beğendim, şöyle olsaydı daha iyi olurdu gibi. Yakında oyun yapımı hakkında bilgiler de vericem ve projeyi geliştirmeye devam edicem.

Oyun Nasıl Oynanıyor?

Genel click & go oyunlarında, diablo2, aoe2 gibi, karakterleri sol fare tuşu ile seçip, sağ tuşla yönlendiririz. Ben de fare’yi o şekilde ayarladım. Sol tuş basılı tutarak çoklu karakter seçimi yapabilirsiniz. (şekil 1A)

sağ tuşla götürmek istediğiniz yere götürürsünüz. Duvarlar hariç! (Evet o turuncu şeyler duvar)

ESC tuşu menüyü açar ve kapatır. Çıkmak için menüyü kullanın.

Diğer tuşlara sonra değinicem.

Oyunun Amacı

Siz mavi tasmalı köpekleri yönetiyorsunuz. Oyunda varsayılan olarak yeşil tasmalı bir düşman köpeği var. (Mavi dışındaki tüm renkler kötüdür)

En başta köpekleriniz agresif modda olduklarından yakındaki düşmana saldırabilirler, şaşırmayın.

Eğer kendi biriminiz saldırı durumda olup da düşmanın yanındaysa düşman üzerindeki yeşil bar azalacaktır. Bu durum düşman ölüp kaybolana kadar geçerlidir. (kendi birimlerinizin de yeşil yaşam çubuğu bulunmakta)

Arkaplanda neler oluyor?

Uzaktan basit bir oyun gibi görülebilir bunun nedeni herhangi bir senaryo hazırlamam büyük ihtimal ama kullandığım bazı yöntemleri buraya yazmak istiyorum.

İlki yol bulma. Bunu A* algoritmasıyla kullandım. Çok güzel değil şu an ama mükemmel hale getirmek mümkün.

İkincisi de sonlu durum makineleri.

A* ile kendi birimlerinizi bir yerden bir yere gönderirken en kısa yolu kullanılır. Hatta engelli bir yolda da engelleri en kısa şekilde aşar. Bilgisayar oyunlarında sıkça kullanılan bir algoritmadır ve sezgiye dayanır. Daha sonra yol bulma ile ilgili yazılar ekleyebilirim. Çünkü oyunda geliştirmem gereken kısımlar çok.

Sonlu durum makineleri de yapay zeka yazımında bir teknik olarak kullanılıyor. Yapay zeka kısmı o yüzden benim en kısa kodlama yaptığım yerlerden biri. Peki yapay zeka olarak ne işliyor?

Öncelikle SDM’ler sayesinde birimler belli bir durumda olup, belli koşullarda durumlarını değiştiriyorlar. Bu durumlar saldırı, kaçma, kovalama gibi durumlar olabilir. Koşullar ise düşman yakında mı, düşman benden çok mu kuvvetli gibi. Bunları tablolar halinde saklayıp, farklı tablolarla farklı davranışlar elde ettim.

Şimdi şu tuşları kendi birimlerinizi seçtikten sonra kullanın:
A tuşu – Agresif mod
S tuşu – Defansif mod
D tuşu – Hareketsiz mod
E tuşu – Ataksız mod

Bu  tuşlarla seçili birimlerin SDM’leri değişiyor. Bunları da açarsak:

Agresif mod

Birimin görüş alanı içindeki düşmana saldıracaktır. O yüzden sık sık takiplere başlar.

Defansif mod

Bulunduğu noktayı koruyan bir moddur. Eğer yakına bir düşman gelirse ona saldırır ancak koruması gerek noktadan çok uzaklaşırsa takibi burakıp bölgesine geri döner.

Hareketsiz modda ise sadece ona saldıran birime saldırır. Veya çok yakınındaki birime. Ataksız modunda ise hiçbir şekilde saldırı yapamaz.

Şimdilik yeterli yazdım sanırım. Daha sonra başka yazılarla devam edicem.

Bilinen hatalar:
– Oyun kaydet ve oyun yükle çalışmıyor
– Birimler iç içe geçiyor bu yüzden 2 birim sanki 1 birim gibi görünebiliyor. Tek bir birimi seçmek çok zor olabiliyor. Bu durumlarda 1,2,3 gibi tuşlara basıp sadece o sıradaki birimleri seçebilirsiniz.

Gerçek Zamanlı Strateji Oyunu

Bu blog’u açmamda ki asıl neden olan bu projede sonunda biraz yol kat edebildim. Bu sayede yazacak iki üç şey çıktı.

Madem blog yazıyoruz, yaptığım şeyleri de günlük gibi yazmakta yarar var aslında. Böylece sadece yaptığım güzel şeyleri değil aynı zamanda hatalarımı da paylaşacağım.

Bu kadar girizgah yeter sanırım projeden bahsedelim. Proje aslında bitirme tezi olacak. 1 dönem zamanım var. Çalışan güzel bir strateji oyunu yapmam lazım. Çok zor olduğunu biliyorum ama tez konuları da zaten zor oluyor genelde. Yıllardır oyunlarla ilgili bir şeyler yapmak istemiştim nihayet şimdi yapabileceğim.

Şimdi oyunu cross platform olarak yapmayı düşünüyorum ve açık kaynak olarak. O yüzden kullanacağım teknolojilerde şunlar olacak:

Python Dili
Pygame Modülü

Nedenlerine gelince: Basit, öğrenmesi kolay, özgür yazılım, yüksek seviyeli, nesne yönelimli, yorumlayıcı (derlenmiyor) ve
Geniş kütüphane desteği: Dokümantasyon, threadler, veri tabanları, web tarayıcıları, CGI, FTP, email, XML, HTML, WAV dosyaları, şifreleme, GUI (çekirdek özellikler)

Biraz da pyGame’den bahsedelim:
Pygame bir SDL sarmalayıcısıdır. Böylece SDL destekli tük platformlarda kodumuz değiştirmeye gerek kalmadan çalışır.

SDL (Simple Directmedia Library), 2B grafik ve multimedya kütüphanesidir. Yüzlerce açık kaynak ve ticari oyunlarda kullanılmıştır.

Pygame’in modülleri de şunlardan oluşuyor: Cdrom, cursors, display, draw, event, font, image, joystick, key, mouse, movie, sndarray, surfarray, time, transform

Age of empires 2

Age of empires 2

Şimdilik bu kadar teknik bilgi yeterli. Biraz da oyundan bahsedeyim. Başlıktaki gibi oyun gerçek zamanlı strateji oyunu. Örnek olarak: Age of empires, warcraft gibi. Daha çok age of empires tarzında birşey yapmak istiyorum. Yani kılıçlı, oklu ordumuz olacak, gelişmek için binalar yapacağız ve kaynaklar için de etraftaki maden, orman vb. kullanılacak.

Şimdiye kadar hep oyunun grafikleriyle uğraştım. Asıl önemli kısım aslında yapay zeka kısmı olacak. Oraya daha gelemedim tabi tembelliğim yüzünden 🙂