Oyunun oynanması için bu activity kullanacağız. Öncelikle “oyun” adında bir layout oluşturup şu şekilde bir tasarım yapalım.
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