Ön İzleme
KODLAR
Formun oluşum olayı
var
sayi,j,uzunluk:Integer;
begin
Image2.Picture.LoadFromFile('bmp\Tekno-logy.png');
ListBox1.Hide;
Randomize;
can:=0;
ListBox1.Items.LoadFromFile('kelimeler.txt'); //kelimeleri forma çekiyoruz
sayi:=ListBox1.Items.Count;
j:=random(sayi-1); // kelimeler arasından rasgele bir kelime seçiyoruz
gkelime:=ListBox1.Items[j]; // bu gelimeyi gkelime yani GERÇEK KELİME olarka belirliyoruz
goster:=gkelime; //Gkelimeyi goster değişkenine atıyoruz çünkü gerçek kelimeyi havızada tutuyoruz algoritmamız buna göre yapılmıştır farkı şekillerde de yapılabilirde ancak şuanki algoritma bu
uzunluk:=length(gkelime); // kelimelin uzunluğu alınıyor ki ekranda kaçtane çizgi olacak
for j:=1 to uzunluk do begin // çizgilen konuluyor
bkelime:=bkelime+'-';
end;
Label1.Caption:=bkelime; //çizgiler form üzerindeki gerekli label e aktarılıyor
end;
metin kutusu yazının değişme olayı
var
sayi:integer;
metin:string;
begin
// edite sadece 1 tane karakter girilmesi çin kodlarımızı yazıyoruz
// Burada editin Maxlenght özelliğini 1 yaparsakta olur ancak
// Biz basit bir kod mantığı ile oyun içerisinde kod ile yapalım diye düşündük sizlere bir şeyler katması için
sayi:=length(edit1.Text);
metin:=edit1.Text;
if sayi>1 then begin
Delete(metin,2,sayi-1);
end;
edit1.Text:=metin;
end;
Girilen harfi kontrolünü yapan buton kodları
var
a,i,sira:integer;
sayi,j,uzunluk:Integer;
resim,varmi,harf:string;
begin
varmi:='Yok';
harf:=edit1.Text;
for i:=1 to Length(Label3.caption) do begin //daha önce o karakter girildimi kontrol et
if harf=Copy(Label3.caption,i,1) then
varmi:='var';
end;
a:= Pos(harf,gkelime); // giriken karakteri arttır.
if varmi<>'var' then begin // eğer girilen karakter daha önce kullanılmadıysa örnek vermek gerekirse a harfi 1 kez girilir 2. kez giremezsin çünkü kullanılmıştır
Label3.Caption:=label3.Caption+harf;
if a=0 then begin // Eğer girilen karakter kelimede yok ise adam asmaca bir adım ilerlet
can:=can+1; //canı arttırarak resimler arası geçiş ile sanki çiziyormuş gibi yaptık
resim:=('bmp\r'+IntToStr(can)+'.bmp');
Image1.Picture.LoadFromFile(resim);
if can=11 then begin // eğer can 11 e ulaştı ise yani son resmimiz r11.bmp ise oyunu bitir
goster:=('Kaybettiniz yazmanız gereken kelime '+ goster +' idi.');
ShowMessage(goster);
Randomize;
can:=0;
resim:=('bmp\r'+IntToStr(can)+'.bmp');
Image1.Picture.LoadFromFile(resim);
//oyun bittiği için yeni oyun için hazırlıkları başlat bu kodları formun oluşum olayında anlattığım için tekrar yazmıyorum
ListBox1.Items.LoadFromFile('kelimeler.txt');
sayi:=ListBox1.Items.Count;
j:=random(sayi-1);
gkelime:=ListBox1.Items[j];
goster:=gkelime;
uzunluk:=length(gkelime);
bkelime:='';
label3.Caption:='';
for j:=1 to uzunluk do begin
bkelime:=bkelime+'-';
end;
Label1.Caption:=bkelime;
end;
end
else begin // yok hayır girilen karakter kelimenin içinde var ise
{
Gerçek algoritma burada doğru harf girilirse ne yapılmalı
yapılanı özetlemek gerekirse kelime 6 harfli ise
----- yani 6 tire
fatih isim şeklinde saklanır eğer kişi a harfini girince sonuç
-a---
f-tih
olacaktır yani yer değiştirme ile kelimeyi bulup bulmadığını anlıyoruz
bunuda string kodları ise sil, ekle ve pos ile yapıyoruz
}
repeat
Delete(gkelime,a,1); // gerçek kelimeden sil
Insert('-',gkelime,a); //gerçek üzerindeki tireyi ekle
Delete(bkelime,a,1); //forum üzerindeki kelimende girilen harfin yerindeki tireyi sil
Insert(harf,bkelime,a); //girilen harfi ekle
Label1.Caption:=bkelime;
a:= Pos(harf,gkelime); // aynı harften 1 tane olmaya bilir bunun için aynı harften var mı diye sorgula varsa aynı işleme repeat döngüsü ile devam et
until a=0;
end;
end;
/// kazanma bölümü
if 0=Pos('-',bkelime) then begin
ShowMessage('Kazandınız yeni oyun yükleniyor. Hazır mısınız ?');
// oyunu kazandığına dair mesaj verme ve yeni oyuna başlama işlemlerine dön
Randomize;
can:=0;
resim:=('bmp\r'+IntToStr(can)+'.bmp');
Image1.Picture.LoadFromFile(resim);
ListBox1.Items.LoadFromFile('kelimeler.txt');
sayi:=ListBox1.Items.Count;
j:=random(sayi-1);
gkelime:=ListBox1.Items[j];
goster:=gkelime;
uzunluk:=length(gkelime);
bkelime:='';
label3.Caption:='';
for j:=1 to uzunluk do begin
bkelime:=bkelime+'-';
end;
Label1.Caption:=bkelime;
end;
Edit1.Clear;
Edit1.SetFocus;
end ;
Kaynak: http://www.tekno-logy.com/delphi-adam-asmaca-oyunu.html
Proje dosyası kaynakta bulunmaktadır.