পাইথন গেম (টিক-ট্যাক-টো বা স্নেক গেম)

প্র্যাকটিস প্রোজেক্টস - পাইথন প্রোগ্রামিং (Python Programming) - Computer Programming

454

Python দিয়ে একটি ক্লাসিক গেম তৈরি করা একটি মজাদার ও শিক্ষামূলক প্রোজেক্ট হতে পারে। এখানে দুটি জনপ্রিয় গেমের উদাহরণ দেয়া হলো: টিক-ট্যাক-টো এবং স্নেক গেম


গেম ১: টিক-ট্যাক-টো

টিক-ট্যাক-টো গেমটি Python এবং Tkinter ব্যবহার করে তৈরি করা একটি জনপ্রিয় গেম যেখানে দুটি প্লেয়ার "X" এবং "O" চিহ্ন দিয়ে গেম বোর্ড পূরণ করে। যিনি প্রথমে কোনো সারি, কলাম বা ডায়াগোনাল পূরণ করতে সক্ষম হন, তিনি বিজয়ী। এই গেমটি GUI দিয়ে খুব সহজে তৈরি করা যায়।


টিক-ট্যাক-টো গেম কোড

import tkinter as tk
from tkinter import messagebox

# Tkinter মেইন উইন্ডো তৈরি করা
root = tk.Tk()
root.title("Tic Tac Toe")

# বোর্ড তৈরি করা
board = [" " for _ in range(9)]
current_player = "X"  # শুরুতে প্লেয়ার X

# বোর্ড আপডেট ফাংশন
def update_board(button, index):
    global current_player
    if board[index] == " ":
        board[index] = current_player
        button.config(text=current_player)
        
        # বিজয়ী চেক করা
        if check_winner():
            messagebox.showinfo("Tic Tac Toe", f"Player {current_player} wins!")
            reset_board()
        elif " " not in board:
            messagebox.showinfo("Tic Tac Toe", "It's a tie!")
            reset_board()
        else:
            # প্লেয়ার পরিবর্তন করা
            current_player = "O" if current_player == "X" else "X"

# বিজয়ী চেক ফাংশন
def check_winner():
    win_conditions = [(0, 1, 2), (3, 4, 5), (6, 7, 8), 
                      (0, 3, 6), (1, 4, 7), (2, 5, 8), 
                      (0, 4, 8), (2, 4, 6)]
    for a, b, c in win_conditions:
        if board[a] == board[b] == board[c] != " ":
            return True
    return False

# বোর্ড রিসেট ফাংশন
def reset_board():
    global board, current_player
    board = [" " for _ in range(9)]
    current_player = "X"
    for button in buttons:
        button.config(text="")

# বোর্ডের জন্য Tkinter বাটন তৈরি করা
buttons = []
for i in range(9):
    button = tk.Button(root, text=" ", font=("Arial", 24), width=5, height=2, 
                       command=lambda i=i: update_board(buttons[i], i))
    button.grid(row=i // 3, column=i % 3)
    buttons.append(button)

# Tkinter উইন্ডো লুপ শুরু করা
root.mainloop()

কোড ব্যাখ্যা

Tkinter GUI সেটআপ: Tkinter ব্যবহার করে GUI তৈরি করা হয়েছে এবং উইন্ডো শিরোনাম Tic Tac Toe সেট করা হয়েছে।

বোর্ড তৈরি: board নামক একটি তালিকা তৈরি করা হয়েছে, যা গেম বোর্ডকে প্রতিনিধিত্ব করে। প্রতিটি অবস্থানকে " " (ফাঁকা) দিয়ে শুরু করা হয় এবং প্লেয়ারের চিহ্ন অনুযায়ী আপডেট করা হয়।

update_board() ফাংশন: যখন কোনো প্লেয়ার বোর্ডের একটি নির্দিষ্ট স্থান বেছে নেয়, তখন এই ফাংশনটি বোর্ডকে আপডেট করে, বর্তমান প্লেয়ারের চিহ্ন দেখায় এবং বিজয়ী বা টাই কিনা তা চেক করে।

check_winner() ফাংশন: প্রতিটি চালের পর এই ফাংশনটি বিজয়ী চেক করে। বিভিন্ন win_conditions তালিকা অনুযায়ী যদি কোনো প্লেয়ার তিনটি সংযুক্ত চিহ্ন পূরণ করে তবে সেই প্লেয়ারকে বিজয়ী ঘোষণা করা হয়।

reset_board() ফাংশন: গেম শেষ হওয়ার পর বোর্ড এবং প্লেয়ার রিসেট করে নতুন গেম শুরু করা হয়।

Tkinter বাটন তৈরি: বোর্ডের জন্য Tkinter বাটন তৈরি করা হয়েছে, যা ৩x৩ গ্রিডে সাজানো হয়েছে। প্রতিটি বাটন ক্লিক করলে update_board() ফাংশন কল হয় এবং বোর্ড আপডেট হয়।


গেম কন্ট্রোল

  • গেমটি চালু হলে প্লেয়ার "X" প্রথমে চাল শুরু করবে।
  • কোনো প্লেয়ার বোর্ডে তিনটি সংযুক্ত চিহ্ন পূরণ করলে বিজয়ী ঘোষণা করা হবে এবং বোর্ড রিসেট হবে।
  • যদি সব ঘর পূরণ হয় এবং বিজয়ী না পাওয়া যায়, তবে গেমটি টাই হবে এবং বোর্ড রিসেট হবে।

সারসংক্ষেপ

এই টিক-ট্যাক-টো গেম গেমটি Python এবং Tkinter ব্যবহার করে তৈরি করা একটি সহজ কিন্তু মজাদার প্রোজেক্ট। এটি ব্যবহারকারীদের Python প্রোগ্রামিং এবং GUI ডিজাইনের ধারণা স্পষ্ট করতে সহায়ক হবে। চাইলে আপনি এই গেমে AI বা আরও উন্নত ফিচার যেমন স্কোর ট্র্যাকিংও যোগ করতে পারেন।


গেম ২: স্নেক গেম

স্নেক গেম একটি ক্লাসিক গেম যেখানে স্নেকটি খাবারের সন্ধান করে এবং খাবার খেলেই তার দৈর্ঘ্য বাড়ে। স্নেকটি প্রাচীর বা নিজের শরীরের সাথে ধাক্কা খেলে গেম শেষ হয়। এই গেমটি Python-এর turtle লাইব্রেরি ব্যবহার করে সহজেই তৈরি করা যায়।


স্নেক গেম কোড

import turtle
import time
import random

# গেম সেটআপ
delay = 0.1
score = 0
high_score = 0

# উইন্ডো সেটআপ
window = turtle.Screen()
window.title("Snake Game")
window.bgcolor("black")
window.setup(width=600, height=600)
window.tracer(0)

# স্নেকের মাথা তৈরি
head = turtle.Turtle()
head.speed(0)
head.shape("square")
head.color("white")
head.penup()
head.goto(0, 0)
head.direction = "stop"

# খাবার তৈরি
food = turtle.Turtle()
food.speed(0)
food.shape("circle")
food.color("red")
food.penup()
food.goto(0, 100)

segments = []

# স্কোরবোর্ড তৈরি
pen = turtle.Turtle()
pen.speed(0)
pen.shape("square")
pen.color("white")
pen.penup()
pen.hideturtle()
pen.goto(0, 260)
pen.write("Score: 0  High Score: 0", align="center", font=("Courier", 24, "normal"))

# গেম চলাচল ফাংশন
def move():
    if head.direction == "up":
        y = head.ycor()
        head.sety(y + 20)
    if head.direction == "down":
        y = head.ycor()
        head.sety(y - 20)
    if head.direction == "left":
        x = head.xcor()
        head.setx(x - 20)
    if head.direction == "right":
        x = head.xcor()
        head.setx(x + 20)

# স্নেকের চলাচলের দিক নির্দেশনা
def go_up():
    if head.direction != "down":
        head.direction = "up"

def go_down():
    if head.direction != "up":
        head.direction = "down"

def go_left():
    if head.direction != "right":
        head.direction = "left"

def go_right():
    if head.direction != "left":
        head.direction = "right"

# কিবোর্ড ইনপুট
window.listen()
window.onkey(go_up, "w")
window.onkey(go_down, "s")
window.onkey(go_left, "a")
window.onkey(go_right, "d")

# গেম লুপ
while True:
    window.update()

    # সীমানা চেক
    if head.xcor() > 290 or head.xcor() < -290 or head.ycor() > 290 or head.ycor() < -290:
        time.sleep(1)
        head.goto(0, 0)
        head.direction = "stop"

        # সেগমেন্ট পরিষ্কার করা
        for segment in segments:
            segment.goto(1000, 1000)
        segments.clear()

        # স্কোর রিসেট
        score = 0
        delay = 0.1
        pen.clear()
        pen.write(f"Score: {score}  High Score: {high_score}", align="center", font=("Courier", 24, "normal"))

    # খাবার খাওয়া
    if head.distance(food) < 20:
        # নতুন খাবার তৈরি করা
        x = random.randint(-290, 290)
        y = random.randint(-290, 290)
        food.goto(x, y)

        # স্নেকের লেজ বৃদ্ধি করা
        new_segment = turtle.Turtle()
        new_segment.speed(0)
        new_segment.shape("square")
        new_segment.color("grey")
        new_segment.penup()
        segments.append(new_segment)

        # স্কোর বাড়ানো
        score += 10
        if score > high_score:
            high_score = score

        delay -= 0.001
        pen.clear()
        pen.write(f"Score: {score}  High Score: {high_score}", align="center", font=("Courier", 24, "normal"))

    # সেগমেন্টের চলাচল
    for index in range(len(segments) - 1, 0, -1):
        x = segments[index - 1].xcor()
        y = segments[index - 1].ycor()
        segments[index].goto(x, y)

    if len(segments) > 0:
        x = head.xcor()
        y = head.ycor()
        segments[0].goto(x, y)

    move()

    # শরীরের সাথে সংঘর্ষ চেক করা
    for segment in segments:
        if segment.distance(head) < 20:
            time.sleep(1)
            head.goto(0, 0)
            head.direction = "stop"

            # সেগমেন্ট পরিষ্কার করা
            for segment in segments:
                segment.goto(1000, 1000)
            segments.clear()

            # স্কোর রিসেট
            score = 0
            delay = 0.1
            pen.clear()
            pen.write(f"Score: {score}  High Score: {high_score}", align="center", font=("Courier", 24, "normal"))

    time.sleep(delay)

window.mainloop()

কোড ব্যাখ্যা

Tkinter উইন্ডো সেটআপ: turtle.Screen() ব্যবহার করে একটি 600x600 সাইজের উইন্ডো তৈরি করা হয়েছে এবং ব্যাকগ্রাউন্ড কালো করা হয়েছে।

স্নেকের মাথা: turtle.Turtle() দিয়ে স্নেকের মাথা তৈরি করা হয়েছে এবং তা স্ক্রিনের কেন্দ্রে স্থাপন করা হয়েছে।

খাবার: র্যান্ডম লোকেশনে খাবার তৈরি করা হয়েছে, এবং যখন স্নেক মাথা খাবারের কাছে পৌঁছায়, তখন খাবারটি অন্য র্যান্ডম অবস্থানে চলে যায়।

কিবোর্ড ইনপুট: কিবোর্ড ইনপুট হিসাবে w, s, a, d ব্যবহার করা হয়েছে (উপর, নিচ, বাম, ডান)।

গেম লুপ: গেমের মূল লুপটি প্রতিনিয়ত স্নেকের অবস্থান আপডেট করে এবং স্ক্রিনে নতুন পরিস্থিতি প্রদর্শন করে।

শরীরের বৃদ্ধি এবং সংঘর্ষ: স্নেক যদি খাবার খায়, তবে তার শরীরের দৈর্ঘ্য বাড়ে, এবং যদি সে প্রাচীর বা নিজের শরীরের সাথে ধাক্কা খায়, তবে গেমটি রিসেট হয়।

স্কোরবোর্ড: স্কোর এবং হাই স্কোর ট্র্যাক করতে স্কোরবোর্ড তৈরি করা হয়েছে।


সারসংক্ষেপ

এই স্নেক গেমটি Python-এর turtle লাইব্রেরি ব্যবহার করে তৈরি করা সহজ একটি গেম। এই প্রোজেক্টটি গেম প্রোগ্রামিং, কিবোর্ড ইভেন্ট হ্যান্ডলিং এবং স্কোর ট্র্যাকিং শিখতে সহায়ক। আপনি চাইলে এই গেমে আরও ফিচার যোগ করতে পারেন, যেমন:

  • লেভেল আপ: স্কোর বাড়লে গেমের গতি বাড়ানো।
  • মাল্টিপ্লেয়ার মোড: একাধিক খেলোয়াড়ের জন্য সমর্থন।
  • প্রতিযোগিতা: টাইমার যোগ করে দ্রুততম স্কোর ট্র্যাকিং।

Python-এ স্নেক গেম তৈরি করা প্রোগ্রামিং এবং গেম ডেভেলপমেন্টের দক্ষতা বাড়াতে সহায়ক।

Content added By
Promotion

Are you sure to start over?

Loading...