Assets etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Assets etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

15 Aralık 2011 Perşembe

(Sayı Sırala - 4) OyunActivity

Bu uygulamayı indir

Oyunun oynanması için bu activity kullanacağız. Öncelikle “oyun” adında bir layout oluşturup şu şekilde bir tasarım yapalım.


 
Form üzerine bir GridView bileşeni ekliyorum.


Layout tasarımından sonra sıra geldi OyunActivity oluşturmaya src/com.ornekler.sayisirala üzerinde sağ tıklayıp New > Class komutunu verip OyunActivity  adında yeni bir sınıf oluşturun. Oluşturulan bu Activity’nin AndroidManifest.xml dosyasında kaydı yapılmalı.
<appplication></application> etikerleri arasına şu satırı yazıyoruz

<activity android:label="@string/app_name" android:name=".OyunActivity" /> 


Artık OyunActivity.java dosyasını açıp kodlamaya başlayabiliriz.

package com.ornekler.sayisirala;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.app.AlertDialog;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.GridView;

public class OyunActivity extends Activity implements OnClickListener {
 
 private Date baslamaVakti;
 private Activity activity = this;
 private Timer timer;
 private List<Button> butonlar;
 private GridView gridView;
 private int sutunSayisi;
 private int satirSayisi;
 private SayilarAdapter sayilarAdapter;
 
 private void TimerMethod()
 {
  this.runOnUiThread(Timer_Tick);
 }
 
 private Runnable Timer_Tick = new Runnable() {
  public void run() {

   Date simdikiZaman = new Date();   
   long fark = simdikiZaman.getTime() - baslamaVakti.getTime();
   simdikiZaman.setTime(fark);
   SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
   activity.setTitle( "Sayı Sırala | " + sdf.format( simdikiZaman ) );
  
  }
 };
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.oyun);
        
        //Ana Activity'den extra degeleri/verileri almak icin Bundle tanimla
        Bundle extras = getIntent().getExtras();
        
        sutunSayisi = extras.getInt("sutunSayisi");
        satirSayisi = extras.getInt("satirSayisi");
        
        butonlar = new ArrayList<Button>();
        butonlariOlustur();
        
        gridView = (GridView) findViewById(R.id.gridView1);
        gridView.setNumColumns(sutunSayisi);
        sayilarAdapter = new SayilarAdapter();
        gridView.setAdapter(sayilarAdapter);
        
        baslamaVakti = new Date();
  timer = new Timer();
  timer.schedule(new TimerTask() {
   @Override
   public void run() {
    TimerMethod();
   }

  }, 0, 1000);

    }
    
    private void butonlariOlustur(){
        
  //Butonlari olustur.
  Button button;
  Typeface font = Typeface.createFromAsset(getAssets(), "font/orangefizz.ttf");
  
  for (int n = 0; n < (satirSayisi * sutunSayisi); n++){
   
   button = new Button(this);
   //Ilk buton bosluk butonu
   if (n == 0){
    button.setText("");
    button.setBackgroundColor(0xf0f195);
   }
   else {
    button.setText(Integer.toString(n));
   }
   //Font belirle
   button.setTypeface(font);

   button.setOnClickListener(this);
   button.setHeight(64);
   button.setTextSize(30);
   
   //Listeye ekle
   butonlar.add(button);
  }
  
  //Listeyi karistiralim
  Collections.shuffle(butonlar, new Random());    
    }
    
    @Override
    public void onClick(View v) {
     Button btnTiklanan = (Button) v;
     
     //Bosluk butonu ile tiklanan butonun yerini değiştir
     yerDegistir(btnTiklanan);
     
     //Oyun bitti mi?
  kontrolEt();
    }
    
   private void yerDegistir(Button btnTiklanan){
  
    //Tiklanan butonunn konumu(index)
  int tiklananKonum = butonlar.indexOf(btnTiklanan);
  Button btnBosluk;
  
  //Bosluk butonunn konumu(index)
  int boslukKonum = -1;
  
  //Butonun hangi satirda oldugunu bul
  int bulunduguSatir = (int) Math.floor( tiklananKonum / sutunSayisi );

  //1) Sayının üstüne bakmak 
  if ( ((tiklananKonum - sutunSayisi) >= 0) ) {
   
   btnBosluk = butonlar.get(tiklananKonum - sutunSayisi);
   if (btnBosluk.getText().equals(""))
    boslukKonum = (tiklananKonum - sutunSayisi);

  }
  
  //2)Sayının altına bakmak:
  if ( (tiklananKonum + sutunSayisi) < butonlar.size()) {
   
   btnBosluk = butonlar.get(tiklananKonum + sutunSayisi);
   if (btnBosluk.getText().equals(""))
    boslukKonum = (tiklananKonum + sutunSayisi);
  }
  
  //3) Bir Önceki Konuma Bakmak: 
  if ((tiklananKonum - 1 ) >= 0 && ((tiklananKonum - bulunduguSatir * sutunSayisi) != 0) ){
   
   btnBosluk = butonlar.get(tiklananKonum - 1);
   if (btnBosluk.getText().equals(""))
    boslukKonum = (tiklananKonum - 1);
   
  }
  
  //4)Bir Sonraki Konuma Bakmak: 
  if ( ((tiklananKonum + 1 ) < butonlar.size()) && (((tiklananKonum - (bulunduguSatir * sutunSayisi) + 1) != sutunSayisi)) ){
   
   btnBosluk = butonlar.get(tiklananKonum + 1);
   if (btnBosluk.getText().equals(""))
    boslukKonum = (tiklananKonum + 1);
  }
  
  //Toast.makeText(context,"Burada : " + Integer.toString(index),Toast.LENGTH_SHORT).show();
  
  //Yer değiştir
  if (boslukKonum != -1)
   Collections.swap(butonlar, tiklananKonum, boslukKonum);

  //GridView'i refresh et
  gridView.setAdapter(sayilarAdapter);
  
 }
 
 private void kontrolEt(){
  
  //1 eksigi(bosluk butonu haric) kadar dön
  for (int n = 0; n < butonlar.size() - 1; n++){
   
   Button button = butonlar.get(n);
   //Arada bosluk varsa cik
   if (button.getText().equals("")) return;
   
   //Sayialar dogru siralanmamissa cik.
   if ( n != (Integer.parseInt( button.getText().toString() ) - 1) )
    return;
   
  }
  
  timer.cancel();//sayaci durdur
  
  //Bilgi penceresi
  AlertDialog alertDialog;
  alertDialog = new AlertDialog.Builder(this).create();
  alertDialog.setTitle("Tebrikler");
  Date simdikiZaman = new Date();   
  long fark = simdikiZaman.getTime() - baslamaVakti.getTime();
  simdikiZaman.setTime(fark);
  SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
  alertDialog.setMessage(sdf.format(simdikiZaman) + " sürede bitti");
  alertDialog.show();

  //finish();

 }
    
    public class SayilarAdapter extends BaseAdapter {
     
     @Override
  public int getCount() {
   return butonlar.size();
  }

  @Override
  public Object getItem(int arg0) {
   return butonlar.get(arg0);
  }

  @Override
  public long getItemId(int arg0) {
   return arg0;
  }

  @Override
  public View getView(int position, View viewButton, ViewGroup viewGroup) {
   
   if (viewButton != null) 
    return (Button) viewButton;

   return butonlar.get(position);
   
  }
     
    }
}

12 Aralık 2011 Pazartesi

(Sayı Sırala - 3) MainActivity

Bu uygulamayı indir

Proje oluşturulduğunda src/com.ornekler.sayisirala/ yolunun altında MainActivity.java yani  MainActivity oluşturulduğunu da göreceksiniz. Bu activity’i ana ekran için kullanacağız. Kullanıcı bu ekranda zorluk derecesiniz belirleyebilecek.

Şimdi bu activity kullandığı layout’un tasarımını yapmalıyız. res/layout altındaki main.xml layout’u şu şekilde tasarlıyoruz.

main.xml
Ekrandaki bileşenlerin text özelliğine istediğinizi yazabilirsiniz. Fakat string.xml dosyasını kullanmayı düşünüyorsanız bileşenin üzerinde sağ tıklayıp “Edit Text” komutunu vererek direk string.xml dosyasına yeni satır girebilir ve bu satırın(text değerin) bileşenin text özelliğine atayabilirsiniz.

MainActivity içerisinde özelleştirilmiş dialog kutusu da kullanacağımız için birde dlg_ozel.xml adında yeni bir layout daha oluşturuyoruz.
Res/layout dizini üzerinde sağ tıklayıp New>Other… a tıklayıp Android/Android XML Layout File komutunu verip ileri tıklayalım. File kutusuna “dlg_ozel” yazıp layout oluşturalım. Aşağıdaki gibi bir tasarım yapıyorum.

dlg_ozel.xml

Layoyut tasarımının ardında MainActivity.java yı kodlamaya başlayabiliriz.

MainActivity.java

package com.ornekler.sayisirala;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        this.setTitle("Sayı Sırala - Seviye Seç");
        
        Button btnBasit = (Button) this.findViewById(R.id.btnBasit);
        Button btnOrta = (Button) this.findViewById(R.id.btnOrta);
        Button btnOzel = (Button) this.findViewById(R.id.btnOzel);
        
        Typeface font = Typeface.createFromAsset(getAssets(), "font/Corv2.ttf");
        btnBasit.setTypeface(font);
        btnBasit.setTextSize(36.f);
        
        btnOrta.setTypeface(font);
        btnOrta.setTextSize(36.f);
        
        btnOzel.setTypeface(font);
        btnOzel.setTextSize(36.f);
       
        btnBasit.setOnClickListener( new OnClickListener(){
         
   @Override
   public void onClick(View v) {
    Intent i = new Intent(getApplicationContext(), OyunActivity.class);
    i.putExtra("sutunSayisi", 3);
    i.putExtra("satirSayisi", 2);
    startActivity(i);
    
   }
        });
        
        btnOrta.setOnClickListener( new OnClickListener(){
         
   @Override
   public void onClick(View v) {
    Intent i = new Intent(getApplicationContext(), OyunActivity.class);
    i.putExtra("sutunSayisi", 3);
    i.putExtra("satirSayisi", 3);
    startActivity(i);
    
   }
        });
        
        btnOzel.setOnClickListener( new OnClickListener(){
         
   @Override
   public void onClick(View v) {
    
    AlertDialog.Builder builder;
    AlertDialog alertDialog;
    
             LayoutInflater factory = LayoutInflater.from(v.getContext());
             final View textEntryView = factory.inflate(R.layout.dlg_ozel, null);

    builder = new AlertDialog.Builder(v.getContext());
    builder.setView(textEntryView);
    builder.setTitle("Özel Ayarlar");
    builder.setMessage("Sütun ve satır sayısını gir");
  
    builder.setPositiveButton("Oyna", new DialogInterface.OnClickListener() {
     
     @Override
     public void onClick(DialogInterface dialog, int which) {
      
      EditText editTextSutunSayisi = (EditText) textEntryView.findViewById(R.id.editTextSutunSayisi);
      EditText editTextSatirSayisi = (EditText) textEntryView.findViewById(R.id.editTextSatirSayisi);
      
      Intent i = new Intent(getApplicationContext(), OyunActivity.class);
      i.putExtra("sutunSayisi", Integer.parseInt(editTextSutunSayisi.getText().toString()));
      i.putExtra("satirSayisi", Integer.parseInt(editTextSatirSayisi.getText().toString()));
      startActivity(i);

     }
    });
    
    builder.setNegativeButton("İptal", new DialogInterface.OnClickListener() {
     
     @Override
     public void onClick(DialogInterface dialog, int which) {
      dialog.cancel();
     }
    });
    
    alertDialog = builder.create();
    alertDialog.show();

   }
        });
        
    }
    
}