Python:
from tkinter import *
import random
from PIL import Image, ImageTk
class UFOGame:
def __init__(self, canvas, cow_img, obstacle_img, bonus_img, ufo_img):
self.canvas = canvas
self.cow_img = cow_img
self.obstacle_img = obstacle_img
self.bonus_img = bonus_img
self.ufo_img = ufo_img
self.score = 0
self.speed = 0
self.health = 3
self.paused = True
self.id_ufo = canvas.create_image(50, 100, image=self.ufo_img)
self.text_score = self.canvas.create_text(610, 30, text="Score : 0", font=("Arial", 16), fill="red")
self.text_speed = self.canvas.create_text(510, 30, text="Speed : 0", font=("Arial", 16), fill="blue")
self.text_health = self.canvas.create_text(410, 30, text="Health : 3", font=("Arial", 16), fill="green")
self.x = 0
self.y = 0
self.canvas.bind_all('<KeyPress-Left>', self.move_left)
self.canvas.bind_all('<KeyPress-Right>', self.move_right)
self.canvas.bind_all('<KeyPress-Up>', self.move_up)
self.canvas.bind_all('<KeyPress-Down>', self.move_down)
self.canvas.bind_all('<KeyPress-p>', self.toggle_pause)
self.canvas.bind_all('<KeyPress-s>', self.start_game)
self.cow = Cow(canvas, cow_img)
self.obstacles = [Obstacle(canvas, obstacle_img) for _ in range(3)]
self.bonuses = [Bonus(canvas, bonus_img) for _ in range(2)]
self.text_start = canvas.create_text(350, 200, text="Press 'S' to Start", font=("Arial", 16), fill="blue")
self.paused = True
def draw(self):
if not self.paused:
self.canvas.move(self.id_ufo, self.x, self.y)
coord = self.canvas.coords(self.id_ufo)
canvas_width = self.canvas.winfo_width()
canvas_height = self.canvas.winfo_height()
if coord[0] < 10 or coord[0] > canvas_width - 10 or coord[1] < 10 or coord[1] > canvas_height - 10:
self.health -= 1
self.canvas.itemconfig(self.text_health, text="Health : %s" % self.health)
if self.health == 0:
self.game_over()
else:
self.canvas.coords(self.id_ufo, 50, 100)
self.x = 0
self.y = 0
if self.catch_cow(coord):
self.score += 1
if self.score % 10 == 0:
self.health += 1
self.canvas.itemconfig(self.text_health, text="Health : %s" % self.health)
self.canvas.coords(self.cow.id, random.randint(50, canvas_width - 50), random.randint(50, canvas_height - 50))
self.speed += 1
self.canvas.itemconfig(self.text_score, text="Score : %s" % self.score)
self.canvas.itemconfig(self.text_speed, text="Speed : %s" % self.speed)
if self.hit_obstacle(coord):
self.health -= 1
self.canvas.itemconfig(self.text_health, text="Health : %s" % self.health)
if self.health == 0:
self.game_over()
if self.collect_bonus(coord):
self.score += 5
self.canvas.itemconfig(self.text_score, text="Score : %s" % self.score)
def move_right(self, event):
self.x = 1 + (self.speed / 100)
self.y = 0
def move_left(self, event):
self.x = -1 - (self.speed / 100)
self.y = 0
def move_up(self, event):
self.x = 0
self.y = -1 - (self.speed / 100)
def move_down(self, event):
self.x = 0
self.y = 1 + (self.speed / 100)
def catch_cow(self, pos):
cow_pos = self.canvas.coords(self.cow.id)
return (pos[0] > cow_pos[0] - 25 and pos[0] < cow_pos[0] + 25) and (pos[1] > cow_pos[1] - 25 and pos[1] < cow_pos[1] + 25)
def hit_obstacle(self, pos):
for obstacle in self.obstacles:
obstacle_pos = self.canvas.coords(obstacle.id)
if (pos[0] > obstacle_pos[0] - 25 and pos[0] < obstacle_pos[0] + 25) and (pos[1] > obstacle_pos[1] - 25 and pos[1] < obstacle_pos[1] + 25):
return True
return False
def collect_bonus(self, pos):
for bonus in self.bonuses:
bonus_pos = self.canvas.coords(bonus.id)
if (pos[0] > bonus_pos[0] - 25 and pos[0] < bonus_pos[0] + 25) and (pos[1] > bonus_pos[1] - 25 and pos[1] < bonus_pos[1] + 25):
return True
return False
def game_over(self):
self.x = 0
self.y = 0
self.canvas.coords(self.id_ufo, 700, 700)
self.text_gameover = self.canvas.create_text(350, 150, text="Game Over", font=("Arial", 25), fill="red")
self.canvas.create_text(350, 200, text="Press 'R' to Restart", font=("Arial", 16), fill="blue")
self.canvas.bind_all('<KeyPress-r>', self.restart)
def restart(self, event):
self.canvas.delete(self.text_gameover)
self.score = 0
self.speed = 0
self.health = 3
self.canvas.itemconfig(self.text_score, text="Score : %s" % self.score)
self.canvas.itemconfig(self.text_speed, text="Speed : %s" % self.speed)
self.canvas.itemconfig(self.text_health, text="Health : %s" % self.health)
self.canvas.coords(self.id_ufo, 50, 100)
self.x = 0
self.y = 0
def toggle_pause(self, event):
self.paused = not self.paused
def start_game(self, event):
self.paused = False
self.canvas.delete(self.text_start)
self.canvas.unbind_all('<KeyPress-s>')
class Cow:
def __init__(self, canvas, cow_img):
self.canvas = canvas
self.id = canvas.create_image(10, 10, image=cow_img)
self.canvas.move(self.id, 150, 20)
class Obstacle:
def __init__(self, canvas, obstacle_img):
self.canvas = canvas
self.id = canvas.create_image(random.randint(50, 620), random.randint(50, 320), image=obstacle_img)
class Bonus:
def __init__(self, canvas, bonus_img):
self.canvas = canvas
self.id = canvas.create_image(random.randint(50, 620), random.randint(50, 320), image=bonus_img)
# Ana program
tk = Tk()
tk.title('UFO Game')
# Arka plan resmini yükle
background_img = ImageTk.PhotoImage(Image.open("MainBackground.png"))
canvas = Canvas(tk, width=679, height=374, bd=0, highlightthickness=0)
canvas.create_image(0, 0, image=background_img, anchor=NW)
canvas.pack()
# Resimleri yükle
ufo_img = ImageTk.PhotoImage(Image.open('Ufo.png'))
cow_img = ImageTk.PhotoImage(Image.open('Cow.png'))
obstacle_img = ImageTk.PhotoImage(Image.open('Obstacle.png'))
bonus_img = ImageTk.PhotoImage(Image.open('Bonus.png'))
# Oyunu başlat
game = UFOGame(canvas, cow_img, obstacle_img, bonus_img, ufo_img)
# Olay döngüsünü başlat
def game_loop():
game.draw()
game.cow.draw()
for obstacle in game.obstacles:
obstacle.draw()
for bonus in game.bonuses:
bonus.draw()
tk.after(5, game_loop)
tk.after(5, game_loop)
tk.mainloop()
Bu kod, Tkinter ve PIL (Pillow) kütüphanelerini kullanarak basit bir UFO oyunu oluşturur. Kodun genel açıklaması şöyledir:
1. Ana Program (tk ve canvas):
- tk = Tk(): Oyunun ana penceresini oluşturur.
- background_img: Arka plan resmini yükler ve bir Canvas nesnesi oluşturur.
- canvas: Oyun alanını temsil eden bir Canvas nesnesi oluşturulur.
2. Resimlerin Yüklenmesi (ImageTk.PhotoImage):
- ufo_img, cow_img, obstacle_img, bonus_img: UFO, inek, engel ve bonus resimlerini yükler.
3. UFOGame Sınıfı:
- __init__: Oyunun başlangıç durumunu ayarlar. UFO'nun, ineklerin, engellerin ve bonusların başlangıç pozisyonlarını ve diğer özelliklerini tanımlar.
- draw(): Oyunun ana döngüsünü işler. UFO'nun hareketini yönetir, çarpışmaları kontrol eder, skor ve sağlık durumunu günceller, oyunun bitip bitmediğini kontrol eder.
4. Cow, Obstacle ve Bonus Sınıfları:
- Cow, Obstacle, Bonus sınıfları her biri kendi çizimlerini ve başlangıç pozisyonlarını tanımlar.
5. Olay İşleme ve Oyun Döngüsü:
- canvas.bind_all: Klavye olaylarını dinler (hareketler, oyunu duraklatma vs.).
- game_loop(): Ana oyun döngüsüdür. Belirli bir süre sonra (tk.after) oyun alanını güncellemek için game.draw() ve diğer nesnelerin çizimlerini işler.
6. Oyunun Başlatılması:
- game = UFOGame(canvas, cow_img, obstacle_img, bonus_img, ufo_img): UFOGame sınıfından bir oyun örneği oluşturulur ve oyun başlatılır.
- tk.mainloop(): Tkinter ana döngüsünü başlatır ve oyunu çalışır hale getirir.
Bu şekilde, oyuncunun UFO'yu kontrol ederek inekleri yakalamaya çalıştığı, engellerden kaçınmaya çalıştığı ve bonusları topladığı basit bir oyun ortamı oluşturulmuş olur.
Bu UFO oyunu kodunu çalıştırmak için aşağıdaki adımları takip edebilirsiniz:
1. Gerekli Kütüphaneleri Yükleyin:
- Kod PIL (Pillow) kütüphanesini ve Tkinter'ı kullanmaktadır. Eğer bu kütüphaneler yüklü değilse, yüklemelerini yapmanız gerekebilir. Genellikle Python'un standart kütüphaneleri arasında bulunurlar, ancak yine de kontrol etmek faydalı olabilir.
2. Resim Dosyalarını Hazırlayın:
- Kod, UFO (Ufo.png), inek (Cow.png), engel (Obstacle.png) ve bonus (Bonus.png) için resim dosyaları kullanmaktadır. Bu dosyaların mevcut olduğundan ve doğru yol üzerinde olduğundan emin olun.
3. Kodu Çalıştırın:
- Kod, bir Python dosyasında veya bir Python ortamında çalıştırılabilir. Kodu bir metin düzenleyicide (örneğin, Visual Studio Code, PyCharm gibi) açın ve çalıştırın.
4. Oyunu Oynayın:
- Kod çalıştırıldığında, bir oyun penceresi açılacak ve arka plan resmi ve oyun nesneleri (UFO, inekler, engeller, bonuslar) görünecektir. Oyunu başlatmak için klavyeden "S" tuşuna basın. UFO'yu klavye ok tuşlarıyla hareket ettirin, inekleri yakalayın, engellerden kaçının ve bonusları toplayın.
5. Oyunun Sonlanması ve Yeniden Başlatılması:
- Oyunun bitmesi durumunda ekranda "Game Over" mesajı görünecek ve "R" tuşuna basarak oyunu yeniden başlatabilirsiniz.
Bu adımları takip ederek, UFO oyununu başarıyla çalıştırabilir ve oynayabilirsiniz.

