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);
   
  }
     
    }
}

Hiç yorum yok:

Yorum Gönder