import pygame
import random
import sqlite3
# Veritabanı bağlantısını aç
conn = sqlite3.connect('high_scores.db')
cursor = conn.cursor()
# Yüksek skorlar için tabloyu temizle
cursor.execute('DROP TABLE IF EXISTS scores')
# Yüksek skorlar için yeni tablo oluştur
cursor.execute('''
CREATE TABLE scores (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
score INTEGER NOT NULL
)
''')
conn.commit()
# Pygame'i başlat
pygame.init()
# Oyun penceresi boyutları
SCREEN_WIDTH = 400
SCREEN_HEIGHT = 600
# Renkler
WHITE = (61, 142, 185)
BLACK = (0, 0, 0)
BLUE = (0, 0, 255)
# Oyun pencereyi oluştur
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Flappy Bird")
# FPS (Saniyedeki kare sayısı)
FPS = 60
clock = pygame.time.Clock()
# Font
font = pygame.font.SysFont('Arial', 30)
# Kuş ayarları
bird_image = pygame.Surface((30, 30))
bird_image.fill(BLUE)
bird_rect = bird_image.get_rect(center=(100, SCREEN_HEIGHT // 2))
bird_velocity = 0
GRAVITY = 0.5
JUMP_STRENGTH = -10
# Borular
PIPE_WIDTH = 60
PIPE_GAP = 150
pipe_list = []
pipe_timer = 0
# Skor
score = 0
player_name = ""
# Fonksiyon: Skoru ekrana yazdır
def display_score(score, name):
score_text = font.render(f"{name}: {score}", True, WHITE)
screen.blit(score_text, (10, 10))
# Fonksiyon: Borular oluştur
def create_pipe():
pipe_height = random.randint(150, 400)
pipe_top = pygame.Rect(SCREEN_WIDTH, 0, PIPE_WIDTH, pipe_height)
pipe_bottom = pygame.Rect(SCREEN_WIDTH, pipe_height + PIPE_GAP, PIPE_WIDTH, SCREEN_HEIGHT - pipe_height - PIPE_GAP)
return pipe_top, pipe_bottom
# Fonksiyon: Boruları hareket ettir ve yok et
def move_pipes(pipes):
for pipe in pipes:
pipe.x -= 5
return [pipe for pipe in pipes if pipe.x > -PIPE_WIDTH]
# Fonksiyon: Kuşun borularla çarpışmasını kontrol et
def check_collision(pipes, bird_rect):
for pipe in pipes:
if bird_rect.colliderect(pipe):
return True
return False
# Fonksiyon: Skoru veritabanına ekle
def save_score(name, score):
cursor.execute('INSERT INTO scores (name, score) VALUES (?, ?)', (name, score))
conn.commit()
# Fonksiyon: En yüksek skorları listele
def get_high_scores(limit=5):
cursor.execute('SELECT name, score FROM scores ORDER BY score DESC LIMIT ?', (limit,))
return cursor.fetchall()
# Oyuncunun ismini almak için fonksiyon
def get_player_name():
global player_name
input_active = True
input_text = ''
while input_active:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_RETURN:
input_active = False
elif event.key == pygame.K_BACKSPACE:
input_text = input_text[:-1]
else:
input_text += event.unicode
screen.fill(BLACK)
text_surface = font.render("Enter your name: " + input_text, True, WHITE)
screen.blit(text_surface, (10, SCREEN_HEIGHT // 2))
pygame.display.flip()
player_name = input_text
# Oyuncu ismini almak
get_player_name()
# Ana oyun döngüsü
running = True
while running:
screen.fill(BLACK)
# Olayları kontrol et
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
bird_velocity = JUMP_STRENGTH
# Kuşun hareketi
bird_velocity += GRAVITY
bird_rect.y += bird_velocity
# Kuş ekranın dışına çıkarsa oyunu durdur
if bird_rect.top < 0 or bird_rect.bottom > SCREEN_HEIGHT:
save_score(player_name, score) # Skoru veritabanına kaydet
score = 0
bird_rect.center = (100, SCREEN_HEIGHT // 2)
bird_velocity = 0
pipe_list.clear()
# Boruları oluştur ve hareket ettir
pipe_timer += 1
if pipe_timer > 90:
pipe_timer = 0
pipe_list.extend(create_pipe())
pipe_list = move_pipes(pipe_list)
# Borularla çarpışma kontrolü
if check_collision(pipe_list, bird_rect):
save_score(player_name, score) # Skoru veritabanına kaydet
score = 0
bird_rect.center = (100, SCREEN_HEIGHT // 2)
bird_velocity = 0
pipe_list.clear()
# Skor artışı
for pipe in pipe_list:
if pipe.right == bird_rect.left:
score += 1
# Ekrana çizim yap
screen.blit(bird_image, bird_rect)
for pipe in pipe_list:
pygame.draw.rect(screen, WHITE, pipe)
display_score(score, player_name)
# Ekranı güncelle
pygame.display.flip()
# FPS ayarla
clock.tick(FPS)
# Yüksek skorları göster
high_scores = get_high_scores()
print("Top 5 High Scores:")
for i, hs in enumerate(high_scores, 1):
print(f"{i}. {hs[0]}: {hs[1]}")
pygame.quit()
# Veritabanı bağlantısını kapat
conn.close()