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