Kotlin ile basit bir Sudoku oyunu örneği oluşturabiliriz. Bu örnekte, bir Sudoku tahtası oluşturacak, kullanıcının hücrelere sayı girmesini sağlayacak ve temel doğrulama işlemlerini gerçekleştireceğiz. Bu örnek, Android platformunda çalışacak şekilde tasarlanmıştır.
1. Proje Kurulumu
Öncelikle, build.gradle
dosyasına herhangi bir ek bağımlılık eklemenize gerek yok. Temel Android bileşenlerini kullanacağız.
2. Sudoku Tahtası Oluşturma
Sudoku tahtası, 9x9 bir grid olacak. Her hücre, bir TextView
veya EditText
olarak temsil edilebilir. Bu örnekte, GridLayout
kullanarak tahtayı oluşturacağız.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp"
android:gravity="center">
<GridLayout
android:id="@+id/sudokuGrid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:rowCount="9"
android:columnCount="9"
android:layout_marginBottom="16dp" />
<Button
android:id="@+id/checkButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Check Solution" />
</LinearLayout>
3. Sudoku Tahtasını Programatik Olarak Oluşturma
MainActivity.kt
dosyasında, GridLayout
'a 9x9 hücre ekleyeceğiz. Her hücre bir EditText
olacak ve kullanıcı bu hücrelere sayı girebilecek.
MainActivity.kt
package com.example.sudokugame
import android.os.Bundle
import android.text.InputType
import android.view.Gravity
import android.widget.EditText
import android.widget.GridLayout
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
private lateinit var sudokuGrid: GridLayout
private val boardSize = 9
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
sudokuGrid = findViewById(R.id.sudokuGrid)
createSudokuBoard()
findViewById<Button>(R.id.checkButton).setOnClickListener {
if (checkSolution()) {
Toast.makeText(this, "Congratulations! You solved the puzzle!", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "Incorrect solution. Keep trying!", Toast.LENGTH_SHORT).show()
}
}
}
private fun createSudokuBoard() {
val cellSize = resources.displayMetrics.widthPixels / boardSize
for (row in 0 until boardSize) {
for (col in 0 until boardSize) {
val editText = EditText(this).apply {
layoutParams = GridLayout.LayoutParams().apply {
width = cellSize
height = cellSize
rowSpec = GridLayout.spec(row)
columnSpec = GridLayout.spec(col)
}
inputType = InputType.TYPE_CLASS_NUMBER
gravity = Gravity.CENTER
setBackgroundResource(R.drawable.cell_border) // Hücre kenarlıkları için
}
sudokuGrid.addView(editText)
}
}
}
private fun checkSolution(): Boolean {
val board = Array(boardSize) { IntArray(boardSize) }
for (row in 0 until boardSize) {
for (col in 0 until boardSize) {
val cell = sudokuGrid.getChildAt(row * boardSize + col) as EditText
val number = cell.text.toString().toIntOrNull() ?: 0
board[row][col] = number
}
}
return isValidSudoku(board)
}
private fun isValidSudoku(board: Array<IntArray>): Boolean {
// Satır kontrolü
for (row in board) {
if (row.distinct().size != row.count { it != 0 }) return false
}
// Sütun kontrolü
for (col in 0 until boardSize) {
val column = mutableListOf<Int>()
for (row in 0 until boardSize) {
column.add(board[row][col])
}
if (column.distinct().size != column.count { it != 0 }) return false
}
// 3x3 blok kontrolü
for (blockRow in 0 until 3) {
for (blockCol in 0 until 3) {
val block = mutableListOf<Int>()
for (row in 0 until 3) {
for (col in 0 until 3) {
block.add(board[blockRow * 3 + row][blockCol * 3 + col])
}
}
if (block.distinct().size != block.count { it != 0 }) return false
}
}
return true
}
}
4. Hücre Kenarlıkları İçin Drawable Dosyası
Hücrelerin kenarlıklarını belirgin hale getirmek için res/drawable/cell_border.xml
dosyasını oluşturun.
<!-- res/drawable/cell_border.xml -->
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<stroke
android:width="1dp"
android:color="#000000" />
</shape>
5. Uygulamayı Çalıştırma
Uygulamayı çalıştırdığınızda, 9x9 bir Sudoku tahtası göreceksiniz. Kullanıcı hücrelere sayı girebilir ve "Check Solution" butonuna tıklayarak çözümün doğru olup olmadığını kontrol edebilir.
6. Geliştirmeler
Bu örnek, temel bir Sudoku oyunu sağlar. Daha gelişmiş özellikler eklemek için aşağıdaki adımları düşünebilirsiniz:
Sudoku Çözücü: Otomatik olarak Sudoku çözen bir algoritma ekleyebilirsiniz.
Zorluk Seviyeleri: Farklı zorluk seviyelerinde Sudoku bulmacaları oluşturabilirsiniz.
UI İyileştirmeleri: Hücrelere renkler ekleyerek kullanıcı deneyimini artırabilirsiniz.
Yeni Bulmaca: Her oyunda yeni bir Sudoku bulmacası oluşturabilirsiniz.
Bu örnek, Kotlin ve Android kullanarak Sudoku oyunu oluşturmanın temel adımlarını göstermektedir. İhtiyaçlarınıza göre genişletebilir ve özelleştirebilirsiniz.
Hiç yorum yok:
Yorum Gönder