Taş Kağıt Makas Oyunu Python Kodları

Taş Kağıt Makas, iki veya daha fazla oyuncunun ellerindeki taş, kağıt ve makas sembollerini kullanarak karşılıklı olarak oynadığı bir oyundur. Oyuncular, taş, kağıt veya makas sembollerinden birini seçerler ve seçimlerini aynı anda açıklarlar. Ardından, seçimlere göre belirlenen kurallara göre kazanan belirlenir.

Oyunda, taş kağıt makas sembolleri şu şekilde kullanılır:

  • Taş, makası kırar.
  • Makas, kağıdı keser.
  • Kağıt, taşı sarar.

Bu temel kurallara göre, oyuncuların stratejileri ve seçimleriyle oyun ilerler. Kazanan, karşı tarafa göre avantajlı sembolü seçen oyuncudur.

Taş Kağıt Makas oyununun kökeni tam olarak bilinmemektedir. Ancak, oyunun Japon kökenli olduğu düşünülmektedir. Birçok kültürde ve ülkede farklı isimlerle bilinen bu oyun, dünya genelinde popüler hale gelmiştir. Taş Kağıt Makas oyunu, farklı ülkeler ve kültürler arasında çeşitli isimlerle bilinir. İşte Taş Kağıt Makas'ın bazı farklı isimleri:

  • İngilizce: Rock Paper Scissors
  • İspanyolca: Piedra, Papel, Tijera
  • Fransızca: Pierre, Feuille, Ciseaux
  • Almanca: Schere, Stein, Papier
  • İtalyanca: Sasso, Carta, Forbici
  • Japonca: Janken
  • Korece: 가위 바위 보 (Kawi, Bawi, Bo)
  • Çince: 石头剪刀布 (Shítou, Jiǎndāo, Bù)
  • Rusça: Камень, Ножницы, Бумага (Kamen', Nozhnitsy, Bumaga)
  • Arapça: حجر ورقة مقص (Hajar, Waraqa, Miqyas)

Taş Kağıt Makas, özellikle çocuklar arasında yaygın olarak oynanan bir oyun olmasının yanı sıra, bazı ülkelerde yetişkinler arasında da eğlenceli bir rekabet unsuru olarak kullanılır. Ayrıca, bilgisayar oyunlarında da sıklıkla karşılaşılan bir öğe olarak yer almaktadır.

Günümüzde taş kağıt makas oyununun farklı ve özellikle eğlenceli versiyonlarına denk geldiğimiz gibi bilgisayarda oynarken de aynı çeşitliliği sağlayabilmekteyiz. Biz burada 'taş','kağıt' veya 'makas' şeklinde kullanıcı girişi yaptıracağız ve kodlarımızı çeşitli sınırlar/kurallar eşliğinde oluşturacağız. Sizler bu kodlara bakarak kendi kurallarınızı belirleyebilirsiniz. Mesela süre ekleyebilir, aradaki fark belli bir değere ulaşınca oyunun sonlanmasını isteyebilirsiniz...

Taş Kağıt Makas Oyunu Python Kodu:

import random
import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, 
                             QHBoxLayout, QPushButton, QLabel, QMessageBox)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont, QPixmap

class RockPaperScissorsGame(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Taş - Kağıt - Makas Oyunu")
        self.setFixedSize(500, 600)
        
        self.user_score = 0
        self.computer_score = 0
        self.round_count = 0
        
        self.initUI()
        
    def initUI(self):
        # Ana widget ve layout
        central_widget = QWidget()
        self.setCentralWidget(central_widget)
        layout = QVBoxLayout()
        
        # Başlık
        title = QLabel("Taş - Kağıt - Makas")
        title.setFont(QFont("Arial", 20, QFont.Bold))
        title.setAlignment(Qt.AlignCenter)
        title.setStyleSheet("color: #2c3e50; margin: 20px;")
        
        # Skor paneli
        score_layout = QHBoxLayout()
        self.user_score_label = QLabel("Sen: 0")
        self.computer_score_label = QLabel("Bilgisayar: 0")
        self.round_label = QLabel("Round: 0")
        
        for label in [self.user_score_label, self.computer_score_label, self.round_label]:
            label.setFont(QFont("Arial", 14))
            label.setStyleSheet("color: #34495e;")
            score_layout.addWidget(label)
        
        # Seçim görüntüleme alanı
        self.choice_display = QLabel()
        self.choice_display.setAlignment(Qt.AlignCenter)
        self.choice_display.setMinimumHeight(150)
        self.choice_display.setStyleSheet("border: 2px solid #bdc3c7; border-radius: 10px;")
        
        # Sonuç gösterimi
        self.result_label = QLabel("İlk oyuncu sen olmak için bir seçim yap!")
        self.result_label.setFont(QFont("Arial", 16))
        self.result_label.setAlignment(Qt.AlignCenter)
        self.result_label.setStyleSheet("color: #7f8c8d; margin: 10px;")
        
        # Butonlar
        button_layout = QHBoxLayout()
        
        self.rock_btn = QPushButton("Taş")
        self.paper_btn = QPushButton("Kağıt")
        self.scissors_btn = QPushButton("Makas")
        
        buttons = [self.rock_btn, self.paper_btn, self.scissors_btn]
        for btn in buttons:
            btn.setFont(QFont("Arial", 14))
            btn.setMinimumHeight(50)
            btn.setStyleSheet("""
                QPushButton {
                    background-color: #3498db;
                    color: white;
                    border: none;
                    border-radius: 8px;
                    padding: 10px;
                }
                QPushButton:hover {
                    background-color: #2980b9;
                }
                QPushButton:pressed {
                    background-color: #21618c;
                }
            """)
            button_layout.addWidget(btn)
        
        # Buton eventleri
        self.rock_btn.clicked.connect(lambda: self.play_game('taş'))
        self.paper_btn.clicked.connect(lambda: self.play_game('kağıt'))
        self.scissors_btn.clicked.connect(lambda: self.play_game('makas'))
        
        # Yeniden başlat butonu
        restart_btn = QPushButton("Yeniden Başlat")
        restart_btn.setFont(QFont("Arial", 12))
        restart_btn.setStyleSheet("""
            QPushButton {
                background-color: #e74c3c;
                color: white;
                border: none;
                border-radius: 6px;
                padding: 8px;
            }
            QPushButton:hover {
                background-color: #c0392b;
            }
        """)
        restart_btn.clicked.connect(self.reset_game)
        
        # Layout'a widget'ları ekle
        layout.addWidget(title)
        layout.addLayout(score_layout)
        layout.addWidget(self.choice_display)
        layout.addWidget(self.result_label)
        layout.addLayout(button_layout)
        layout.addWidget(restart_btn)
        
        central_widget.setLayout(layout)
    
    def play_game(self, user_choice):
        choices = ['taş', 'kağıt', 'makas']
        computer_choice = random.choice(choices)
        
        self.round_count += 1
        self.round_label.setText(f"Round: {self.round_count}")
        
        # Sonuç hesapla
        result = self.determine_winner(user_choice, computer_choice)
        
        # Görsel gösterim
        display_text = f"Sen: {user_choice.upper()}  vs  Bilgisayar: {computer_choice.upper()}"
        self.choice_display.setText(display_text)
        
        # Sonucu göster ve skoru güncelle
        if result == 'user':
            self.user_score += 1
            self.result_label.setText("Kazandın! 🎉")
            self.result_label.setStyleSheet("color: #27ae60; font-size: 16px;")
        elif result == 'computer':
            self.computer_score += 1
            self.result_label.setText("Bilgisayar kazandı! 🤖")
            self.result_label.setStyleSheet("color: #e74c3c; font-size: 16px;")
        else:
            self.result_label.setText("Berabere! 🤝")
            self.result_label.setStyleSheet("color: #f39c12; font-size: 16px;")
        
        # Skorları güncelle
        self.user_score_label.setText(f"Sen: {self.user_score}")
        self.computer_score_label.setText(f"Bilgisayar: {self.computer_score}")
        
        # 5 round'da bir durumu göster
        if self.round_count % 5 == 0:
            self.show_progress()
    
    def determine_winner(self, user_choice, computer_choice):
        if user_choice == computer_choice:
            return 'tie'
        
        winning_conditions = {
            'taş': 'makas',
            'kağıt': 'taş',
            'makas': 'kağıt'
        }
        
        if winning_conditions[user_choice] == computer_choice:
            return 'user'
        else:
            return 'computer'
    
    def show_progress(self):
        if self.user_score > self.computer_score:
            message = "Tebrikler! Öndesiniz! 🚀"
        elif self.computer_score > self.user_score:
            message = "Bilgisayar önde! Daha iyisini yapabilirsin! 💪"
        else:
            message = "Berabere! İyi mücadele! ⚔️"
        
        QMessageBox.information(self, "5 Round Durumu", 
                               f"{message}\n\nSen: {self.user_score}\nBilgisayar: {self.computer_score}")
    
    def reset_game(self):
        self.user_score = 0
        self.computer_score = 0
        self.round_count = 0
        
        self.user_score_label.setText("Sen: 0")
        self.computer_score_label.setText("Bilgisayar: 0")
        self.round_label.setText("Round: 0")
        self.choice_display.setText("")
        self.result_label.setText("İlk oyuncu sen olmak için bir seçim yap!")
        self.result_label.setStyleSheet("color: #7f8c8d; font-size: 16px;")

def main():
    app = QApplication(sys.argv)
    
    # Uygulama stilini ayarla
    app.setStyle('Fusion')
    
    game = RockPaperScissorsGame()
    game.show()
    
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

 

Oyunun Teknik Altyapısı ve Özellikleri

Oyunumuz PyQt5 kütüphanesi sayesinde profesyonel bir masaüstü uygulaması olarak karşımıza çıkıyor. 500x600 piksel boyutundaki pencerede, modern bir renk şeması ve düzenli bir arayüz kullanıcıyı karşılıyor. Oyun, tamamen nesne yönelimli programlama prensipleriyle yazıldığı için kolayca genişletilebilir ve özelleştirilebilir bir yapıya sahip.

Kullanıcı deneyimini ön planda tutan arayüzde, üç ana buton (Taş, Kağıt, Makas) merkezi bir konumda yer alıyor. Her buton hover ve press efektleriyle zenginleştirilmiş, böylece kullanıcı etkileşimi görsel olarak da desteklenmiş. Skor takibi için özel bir panel bulunuyor; kullanıcı skoru, bilgisayar skoru ve round sayacı sürekli olarak güncelleniyor.

Oynanış Mekaniği ve Kurallar

Oyunun temel mekaniği oldukça basit ama bir o kadar da stratejik. Kullanıcı üç seçenekten birini seçiyor: taş, kağıt veya makas. Bilgisayar rastgele bir seçim yapıyor ve sonuç kurallara göre belirleniyor:

  • Taş, makası kırarak kazanır

  • Kağıt, taşı sararak kazanır

  • Makas, kağıdı keserek kazanır

  • Aynı seçimler berabere ile sonuçlanır

Her round sonucunda skorlar anında güncelleniyor ve kazanan renkli bir mesajla belirtiliyor. Yeşil renk kullanıcı zaferini, kırmızı bilgisayar zaferini, turuncu ise beraberliği simgeliyor. Bu görsel feedback sayesinde oyun dinamikleri anında anlaşılabiliyor.

İlerleme Takibi ve Oyun İstatistikleri

Oyunun en dikkat çekici özelliklerinden biri de 5 roundda bir gelen ilerleme raporu. Bu raporda oyuncuya mevcut skor durumu hakkında bilgi veriliyor ve motive edici mesajlarla oyun deneyimi zenginleştiriliyor. "Tebrikler! Öndesiniz!" gibi pozitif geri bildirimler oyuncuyu teşvik ederken, "Bilgisayar önde! Daha iyisini yapabilirsin!" gibi mesajlar mücadele ruhunu canlı tutuyor.

Yeniden başlat butonu sayesinde oyuncu istediği zaman skorları sıfırlayıp yeni bir oyuna başlayabiliyor. Bu esneklik, özellikle arkadaş grupları arasında yapılan maçlarda büyük kolaylık sağlıyor.

Eğitsel Değer ve Geliştirme Potansiyeli

Bu proje, Python'da grafik arayüz geliştirmek isteyenler için mükemmel bir başlangıç noktası. PyQt5'in temel özelliklerini sergilerken, olay yönetimi (event handling), layout düzeni ve widget kullanımı gibi konularda pratik deneyim sunuyor.

Oyun, mevcut haliyle bile oldukça eğlenceli olsa da, geliştirmeye açık birçok yanı bulunuyor. Örneğin; oyun geçmişi kaydı, istatistiksel analizler, zorluk seviyeleri veya çok oyunculu mod gibi özellikler eklenerek daha da zenginleştirilebilir.

Sonuç

Bu taş-kağıt-makas oyunu, klasik bir çocuk oyununun modern programlama teknikleriyle nasıl hayat bulabileceğinin güzel bir örneği. Sadece 200 satırın altındaki kodla, tam fonksiyonel ve görsel olarak tatmin edici bir uygulama yaratmak mümkün. İster programlama öğrenmek isteyen bir beginner olun, ister yeni projeler arayan bir geliştirici, bu oyun size ilham verecek ve keyifli vakit geçirmenizi sağlayacaktır.

Oyunu çalıştırmak için tek ihtiyacınız olan Python ve PyQt5 kütüphanesi. Kurulum sonrası "python game.py" komutuyla hemen oynamaya başlayabilirsiniz. İyi eğlenceler!

python, 'python taş kağıt makas oyunu', 'python ile oyun', 'python taş kağıt makas', 'python taş kağıt makas oyunu kodları'', python taş kağıt makas oyunu kodu', 'python pygame', 'python pygame kütüphanesi', pygame, 'taş kağıt makas örnek kodlar', 'oyun kodlama örnekleri', 'örnek oyun kodu', 'python örnek oyun kodu', 'python tkinter', 'python tkinter kütüphanesi', 'tkinter kütüphanesi örnek oyun', 'Rock Paper Scissors', 'Piedra, Papel, Tijera', 'Pierre, Feuille, Ciseaux', 'Schere Stein Papier'

Bilgilendirme

www.aliosmangokcan.com sayfasına gösterdiğiniz ilgiden dolayı teşekkür ederim. İçeriklerle ilgili duygu ve düşüncelerinizi mail adresim üzerinden iletebilirsiniz...

 

İstatistikler

  • Kullanıcılar 1
  • Makaleler 113
  • Makale Görüntüleme 1003941