- Mesaj
- 191
- Çözümler
- 12
- Beğeni
- 203
- Puan
- 754
- Ticaret Puanı
- 0
Hesap Kayıt Sistemi.
Selam arkadaşlar basit bir konu paylaşmak istedim. Bilen kişiler için oldukça basit olsa da yeni başlayanlar için rehber olması niteliğinde bir konu olmasını istedim. Kendim araştırırken bu şekilde temiz bir anlatım bulamamıştım. Çünkü hepsi Copy-Paste ile anlatılan şeyler. Benim buradaki amacım bu algıyı kırıp herhangi bir şey eklerken basit dahi olsa ne işe yaradığını bilerek eklemek. Bundan sonra vakit buldukça bu şekilde bazı konuları açıklayarak paylaşmak istiyorum.
Örnek vermek gerekirse kullandığım login ekranı budur.
Linkleri görebilmek için
giriş yap veya kayıt ol.
. Gördüğünüz gibi burada herhangi bir kayıt bulunmuyor, hali hazırda kayıt sistemi olan bir arayüzün sadece arka planın değiştirmekte işe yarardı ama dediğim gibi amaç burada öğrenmek.Kod yazmadan önce:
Evet her zaman kod yazılmadan
Linkleri görebilmek için
giriş yap veya kayıt ol.
oluşturmalısın. Programlamaya yeni başladıysan bu kavramı zaten kod yazmadan önce öğreniyor olman gerekir, eğer daha önce duymadıysan yazılım öğrendiğin kaynağı değiştirmeni öneririm. Konuyu dağıtmadan devam edelim, hesap kayıt sistemi için neye ihtiyacımız var, programın amacı nedir vs.- Buton resmine ihtiyacımız var. ( metin2 de mouse hover efekti için 3 farklı görsel kullanılıyor bunlardan birazdan bahsedeceğim)
- Kullanılan butonlar ->
Linkleri görebilmek için giriş yap veya kayıt ol.
- Login ekranına isteğe bağlı sayıda kayıt butonları eklenmeli
- oyuncu id ve şifre girince kayıt butonuna basıp bilgilerini kaydet.
- Login ekranı tekrar açıldığında kayıt butonlarının doğru yüklenmiş olması gerekiyor.
İlk olarak butonlarınızı pack içerisine atarak başlayalım. Metin2 dosya sistemi kendi konusunu hak eden bir konu fakat kısaca ne eklersek ekleyelim oyun ymir work klasörünü arıyor ve daha sonra bizim dosya yolumuza bakıyor.
- ui->butonlar->login diye bir klasörümüz var butonlarımız burada olmalı dersek şu şekilde olmalı.
- ui (pack dosyası) ui -> ymir work -> ui -> butonlar -> login -> (burada buton dosyalarımız).
- root içerisinde ymir work , buranın içinde ui klasörü olupturup buraya atabilirsiniz.Önemli olan bu dosyaların ymir work - ui klasörleri altında olması.
İlk olarak ekrana vereceğimiz mesajlarda ve bazı kontrollerde kullandığımız locale_game ve locale_interface eklemelerimizi yapalım.
locale_game.txt:
NOID_OR_PASSWORD You have to enter ID and Password
ACCOUNT_HAS_REGISTERED Account saved
NO_DELETE_ACCOUNT Nothing to delete
ACCOUNT_HAS_DELETED Account removed
locale_interface.txt:
PASSWORD_RESTART Forgot my password
FREE Empty
Düzenleme yapmamız gereken dosyalar : intrologin.py ve loginwindow.py
Gelin ilk önce basit olanı loginwindow.py içerisine yani açılan pencerede butonlarımızın konumlarını ayarlayalım.
loginwindow.py:
{
"name" : "registerButton1",
"type" : "button",
"x" :10, "y" : 250,
"default_image" : "d:/ymir work/ui/butonlar/login/accounts_button.tga",
"over_image" : "d:/ymir work/ui/butonlar/login/accounts_button2.tga",
"down_image" : "d:/ymir work/ui/butonlar/login/accounts_button.tga",
"text" : uiScriptLocale.FREE,
"children" : (
{
"name" : "deleteButton1",
"type" : "button",
"x" : 12,
"y" : 10,
"default_image" : "d:/ymir work/ui/butonlar/login/delete.tga",
"over_image" : "d:/ymir work/ui/butonlar/login/delete.tga",
"down_image" : "d:/ymir work/ui/butonlar/login/delete.tga",
},
),
},
Challange olarak heman altına 2. butonu eklemenizi istiyorum. name kısımlarınıda değiştirmeyi unutmayın!
Konu başında bahsettiğimiz minik detaylardan biriside hover efektinin nasıl verildiğin, gördüğünüz gibi farklı resimler arasında geçiş yaparak bu efekti veriyoruz.
Şimdi size burada değinmem gereken minik bir konu var oda registerButton1 ismini verdiğimiz elementin kimin child'ı olduğu , eğer yanlış yere bunu eklerseniz ekran boyutu değiştirildiğinde butonlarınızın yeride ona göre değişir o yüzden doğru yere eklediğinizden emin olun.
Gelelim bu sisteme can verecek kodlarımıza o da intrologin.py içerisine eklenecek.İlk önce butonlarımızı tanımlamamız gerekiyor,
intrologin.py:
# Bul
def __LoadScript(self, fileName):
Challenge! Diğer tanımlamalara bakarak örneğin
intrologin.py:
# Gördüğün gibi burada idEditLine tanımlanmış.
self.idEditLine = self.GetChild("id")
idEditLine
intrologin.py içerisinde kullanılıyor ve "id"
ise loginwindow.py dosyasındaki "name" : "id"
değeri.yapman gereken 2 adet tanımlama yapmak
1.
registerButton1 ve registerButton2
tanımla ve bu loginwindow.py içerisinde eklediğimiz butona ait name değerini almalı2.
deleteButton1 ve deleteButton2
tanımla , aynı şekilde bu loginwindow.py'da eklenen butona ait name değerini almalıUmarım tanımlamalarını güzelce yapabilmişsindir. Eğer yapamadıysan işte cevaplar bu şekilde olmalıydı.
intrologin.py:
self.registerButton1 = self.GetChild("registerButton1")
self.registerButton2 = self.GetChild("registerButton2")
self.deleteButton1 = self.GetChild("deleteButton1")
self.deleteButton2 = self.GetChild("deleteButton2")
Hemen butonların altına ekleyebiliriz. Eğer kendin yapabilirsen çok iyi yapamazsanda hemen
self.deleteButton2
alt satırına bunu ekleyebilirsin.
intrologin.py:
self.registerButtons = {1 : self.registerButton1, 2 : self.registerButton2 }
1. key 1. butona, 2. key 2. butonumuza referans ediyor.
Şimdi sırada bu butonlarımızın istediğimiz şekilde çalıştırmak var. Peki bu adımlar nedir ne tür fonksiyonlar ( method ) yazmalıyız ?
- Fonksiyonumuz butona tıkladığımızda id ve şifre alanındaki bilgileri kayıt edecek.
- Fonksiyonumuz ise delete butonumuza basınca kayıtlı bilgileri silecek.
- Fonksiyonumuz ise client açıldığında daha önceden kayıt ettiğimiz hesaplar var ise onları yüklediğinden emin olacak.
def Connect(self, id, pwd):
bulunur ve altına eklenir :
intrologin.py:
def OnClickRegisterButton(self, cosion):
import os
global RegisteredID
global RegisteredPassword
buttonText = self.registerButtons[cosion].GetText()
if buttonText.find(uiScriptLocale.FREE) != -1:
id = self.idEditLine.GetText()
pwd = self.pwdEditLine.GetText()
if id == "" or pwd == "":
self.PopupNotifyMessage(localeInfo.NOID_OR_PASSWORD)
else:
if not os.path.exists('lib/savedaccounts/' + str(cosion) + '.cfg'):
open('lib/savedaccounts/' + str(cosion) + '.cfg' ,"w").write("|"+str(id)+'|'+str(pwd)+'|')
self.registerButtons[cosion].SetText(str(id))
self.PopupNotifyMessage(localeInfo.ACCOUNT_HAS_REGISTERED)
else:
pass
else:
accountfile = open('lib/savedaccounts/' + str(cosion)+ '.cfg',"r")
informations = (accountfile.read()).split("|")
self.Connect(informations[1],informations[2])
RegisteredID = informations[1]
RegisteredPassword = informations[2]
Genel olarak neler yapıldığını az çok anlayabilirsiniz, copy paste yaparken tabi bunları atlıyoruz hep !
İlk olarak kayıt edilecek id ve şifre için 2 tane değişken oluşturuyoruz :
RegisteredID ve RegisteredPassword
daha sonra tıkladığımız butonun içindeki text'i buttonText
içerisinde tutuyoruz.Buton dolu ise id, boş ise Empty yazdırdık, burada ilk kontrolümüzü bununla gerçekleştiriyoruz. Eğer Boş ise burası çalışacak, eğer dolu ise else çalışacak ve zaten kayıt edilmiş bilgileri kullanacağız.
Eğer kayıt boş ise id ve şifre girdiğimiz kısımdaki bilgileri alıp id ve pwd içerisinde tutuyoruz, tabi burada oyuncu id veya şifreden bir tanesini boş bırakabilir bunuda kontrol etmemiz gerekiyor ve burada onu kontrol ediyoruz. Eğer id veya pwd birisi boş ise daha önce tanımladığımız mesajı ekrana yazdırıyoruz.
iki alanda dolu ise bir diğer kontrolümüz ilgili hesap daha önce oluşturulmuşmu onu kontrol ediyor ve dizinde dosya yoksa
open('lib/savedaccounts' + str(cosion) + '.cfg' , "w").write("|" + str(id) + "|" + str(pwd) + "|"
Burada hatırlasak en başta registerButtons diye butonların hepsini içeren dict oluşturduk ve 1. key buton1, 2. key buton2. Yani buton 1 basarsak burdaki cosion 1, 2. butona basarsak 2 değerini alır. Id test şifre 123 girersek. Elimize
lib/savedaccount klasöründe 1.cfg. İçerisinde ise |test|123| yazacaktır. Genel kayıt sistemi bu şekildedir.
hemen alt satırınca butonun textini girdiğimiz id yapıyoruz ve ekrana daha önceden eklediğimiz mesajı gönderiyoruz.
else:
pass kısmı eğer bu dosya oluşmuşsa çalışır ve hiç bir şey yapmaz.
ilk if kontrolümüz true dönmez ise yani eğer hesap zaten kayıtlı ise dosyamızı açıyoruz. Dosya içeriğini ayırıp bilgileri
informations
listesinde tutuyoruz.Dosyamızda hali hazırda bulunan
Connect
fonksiyonuna bilgileri gönderiyoruz ve en son olarak tanımladığımız RegisteredID ve RegisteredPassword
değişkenlerimizi dolduruyoruz.Hesap ekleme işlemi tamamlandı, sıradaki işlemimiz ise varolan bilgileri
deleteButton1 ve deleteButton2
ile silmek olacak.
intrologin.py:
def __OnClickdeleteButton(self, cosion):
import os
buttonText = self.registerButtons[cosion].GetText()
if buttonText.find(uiScriptLocale.FREE) != -1:
self.PopupNotifyMessage(localeInfo.NO_DELETE_ACCOUNT)
return
else:
os.remove('lib/savedaccounts/'+str(cosion)+'.cfg')
self.registerButtons[cosion].SetText(uiScriptLocale.FREE)
self.PopupNotifyMessage(localeInfo.ACCOUNT_HAS_DELETED)
Buradaki işlemlerimiz daha basit.
İlk olarak tıklanan düğmenin textini
buttonText
içerisine alıyoruz.Burada önemli tek kontrolümüz buton dolu mu boş mu ?
Eğer dolu ise sileceğiz boş ise silecek bir hesap yok mesajı göndereceğiz.
if kısmını anladığınızı varsayarak
else kısmında
import os
ile kullanabildiğimiz os.remove
ile 1.cfg ve ya 2.cfg olan dosyamızı siliyoruz.Butonun text'i Empty olarak değiştiriyoruz ve ekrana hesap silindi mesajı gönderiyoruz.
Son olarak clienti kapatıp tekrar açtığımızda dolu olan butonların yüklenebilmesi için update fonksiyonumuz var.
intrologin.py:
def OnUpdate(self):
import os
for i in range(1,3):
if os.path.exists('lib/savedaccounts/' + (str(i)) + '.cfg'):
accountfile = open('lib/savedaccounts/' + (str(i)) + '.cfg', "r")
informations = (accountfile.read()).split("|")
self.registerButtons[i].SetText(informations[1])
else:
self.registerButtons[i].SetText(uiScriptLocale.FREE)
Buraya kadar her şeyi anladıysanız burada neler olduğunu zaten anlamışsınızdır. Tek önemli nokta for döngüsünde kaç buton var ise burayı ona göre düzenleyin. 2 hesap varsa 1-3, 10 buton varsa 1-11. Hesap adlarını biz dictionary-key olarak verdiğimiz için sayılarla onları tekrar yükleyebiliyoruz. 1.cfg-2.cfg ... gibi
Eğer bu dosyalar var ise butonların text'ine id mizi yazıyor eğer yok ise FREE karşılğı olan Empty yazdırıyor.
Not : intrologin.py eklenen fonksiyonlarda OnUpdate güncelleyeceksiniz, register altınada delete fonksiyonu ekleyebilirsiniz.
Eğer GetText() ile ilgili bir error verirse ui.py dosyanız eksiktir. Bunu ekleyin.
ui.py:
# ui.py açılır
# class Button içerisine en alta ekle
def GetText(self):
if not self.ButtonText:
return ""
return self.ButtonText.GetText()
Konunun sonuna geldik arkadaşlar, bu konu için kendinize challengeler belirleyebilirsiniz. Yeni buton dosyaları bulabilir onları kullanabilirsiniz, kendi sevdiğiniz bir tasarımda daha güzel ekranlar oluşturabilirsiniz.
Evet, aslında çok basit bir konu ve çoğu kişi bunu copy paste yaparak ve ya hazır alarak devam ediyor. Buradaki amacım minikte olsa öğrendiğim bir konuyu sizlerle paylaşmaktı. Yeni başlayan arkadaşlara yardımcı olabilirse ne mutlu bana. Bu tarz anlatımlı konular paylaşmaya devam edebilirim zaman buldukça.
Kodlar alıntıdır, amaç eklerken öğrenmektir.
Son düzenleme: