Java ve Kotlinde Fare Yakalama Oyunu Yapımı
Java ve Kotlinde Fare Yakalama Oyunu Yapımı
Bir fare yakalama oyunu yapmak için önce temel mantığı anlamak gerekir. Bu tür bir oyun, ekranda rastgele hareket eden bir fareyi (veya bir nesneyi) yakalamayı içerir. Kullanıcı fareyi yakalamaya çalışır ve her yakalamada puan alır. Bu uygulamayı hem Kotlin‘de hem de Java‘da yapacağız. Aşağıda her iki dilde de bu uygulamanın adım adım nasıl yapılacağını göstereceğim.
Oyun Mantığı
- Bir oyun ekranı oluşturulur.
- Ekranda rastgele pozisyonlarda bir fare (veya nesne) belirir.
- Kullanıcı fareye tıklarsa, fare rastgele yeni bir pozisyonda tekrar belirir ve kullanıcı puan alır.
- Oyun belirli bir süre sonunda biter ve son puan ekranda gösterilir.
Kotlin ile Fare Yakalama Oyunu
Kotlin için, Android Studio kullanarak bir Android uygulaması geliştireceğiz. Bu oyunu oluşturmak için temel Android bileşenlerini kullanacağız.
Adım 1: Android Projesi Oluşturma
- Android Studio’yu açın ve “New Project” seçeneğiyle yeni bir proje oluşturun.
- “Empty Activity” seçin.
- Projenizi isimlendirin ve dil olarak Kotlin seçin.
Adım 2: XML Arayüzü Tasarlama
activity_main.xml
dosyasına gidin ve birConstraintLayout
içine birImageView
(fareyi temsil edecek), birTextView
(puanı gösterecek) ve birButton
(oyunu başlatmak için) ekleyin.
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:app=”http://schemas.android.com/apk/res-auto”
xmlns:tools=”http://schemas.android.com/tools”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
tools:context=”.MainActivity”><TextView
android:id=”@+id/scoreTextView”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”Score: 0″
android:textSize=”24sp”
app:layout_constraintTop_toTopOf=”parent”
app:layout_constraintStart_toStartOf=”parent”
app:layout_constraintEnd_toEndOf=”parent”
app:layout_constraintBottom_toTopOf=”@id/startButton”
/><Button
android:id=”@+id/startButton”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”Start Game”
app:layout_constraintBottom_toBottomOf=”parent”
app:layout_constraintStart_toStartOf=”parent”
app:layout_constraintEnd_toEndOf=”parent”
/><ImageView
android:id=”@+id/mouseImageView”
android:layout_width=”100dp”
android:layout_height=”100dp”
android:src=”@drawable/mouse”
android:layout_margin=”16dp”
app:layout_constraintTop_toBottomOf=”@id/scoreTextView”
app:layout_constraintStart_toStartOf=”parent”
app:layout_constraintEnd_toEndOf=”parent”
/>
</androidx.constraintlayout.widget.ConstraintLayout>
Adım 3: MainActivity’yi Kodlama
MainActivity.kt
dosyasına gidin ve oyunun mantığını kodlayın.
import android.os.Bundle
import android.os.Handler
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import kotlin.random.Randomclass MainActivity : AppCompatActivity() {
private var score = 0
private lateinit var scoreTextView: TextView
private lateinit var mouseImageView: ImageView
private val handler = Handler()
private val gameDuration: Long = 30000 // Oyun süresi 30 saniye
private var isGameActive = falseprivate val moveMouseTask = object : Runnable {
override fun run() {
if (isGameActive) {
moveMouse()
handler.postDelayed(this, 1000) // Fare her saniye bir yer değiştirir
}
}
}override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)scoreTextView = findViewById(R.id.scoreTextView)
mouseImageView = findViewById(R.id.mouseImageView)mouseImageView.setOnClickListener {
if (isGameActive) {
score++
scoreTextView.text = “Score: $score”
moveMouse()
}
}findViewById<Button>(R.id.startButton).setOnClickListener {
startGame()
}
}private fun moveMouse() {
val screenWidth = resources.displayMetrics.widthPixels
val screenHeight = resources.displayMetrics.heightPixels
val randomX = Random.nextInt(screenWidth – mouseImageView.width)
val randomY = Random.nextInt(screenHeight – mouseImageView.height)mouseImageView.x = randomX.toFloat()
mouseImageView.y = randomY.toFloat()
}private fun startGame() {
score = 0
scoreTextView.text = “Score: $score”
isGameActive = true
handler.post(moveMouseTask)handler.postDelayed({
isGameActive = false
scoreTextView.text = “Game Over! Final Score: $score”
}, gameDuration)
}
}
Adım 4: Oyun Kaynaklarını Ekleyin
res/drawable
dizinine bir fare resmi ekleyin (mouse.png
).
Adım 5: Uygulamayı Çalıştırın
- Uygulamayı çalıştırarak farenin her saniyede bir pozisyon değiştirdiğini ve tıklandığında puanın arttığını göreceksiniz.
Java ile Fare Yakalama Oyunu
Şimdi aynı oyunu Java dilinde yazacağız. Bu sefer Android yerine basit bir Java Swing uygulaması oluşturacağız.
Adım 1: Java Swing Projesi Oluşturma
- Bir Java projesi oluşturun ve Swing kütüphanesini kullanarak bir oyun ekranı hazırlayın.
Adım 2: GUI Tasarımı
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Random;public class MouseGame extends JFrame {
private int score = 0;
private JLabel scoreLabel;
private JButton mouseButton;
private Timer timer;
private Random random = new Random();public MouseGame() {
setTitle(“Catch the Mouse”);
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(null);scoreLabel = new JLabel(“Score: 0”);
scoreLabel.setBounds(10, 10, 100, 30);
add(scoreLabel);mouseButton = new JButton(“Mouse”);
mouseButton.setBounds(150, 150, 100, 100);
add(mouseButton);mouseButton.addMouseListener(new MouseAdapter() {
@Override
public void mousePressed(MouseEvent e) {
score++;
scoreLabel.setText(“Score: ” + score);
moveMouse();
}
});timer = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
moveMouse();
}
});JButton startButton = new JButton(“Start Game”);
startButton.setBounds(150, 300, 100, 30);
add(startButton);startButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
score = 0;
scoreLabel.setText(“Score: 0”);
timer.start();
}
});
}private void moveMouse() {
int x = random.nextInt(getWidth() – mouseButton.getWidth());
int y = random.nextInt(getHeight() – mouseButton.getHeight() – 50); // 50 üst panel için
mouseButton.setLocation(x, y);
}public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MouseGame().setVisible(true);
}
});
}
}