برنامه های بازی و سرگرمی پایتون

saalek110

Well-Known Member
لیست:
چهار برنامه اول را هوش مصنوعی chatgpt نوشته و من با pydroid ۳ چک کردم خطا نداشت. یا کتابخانه pygame و numpy کار شده.
 
آخرین ویرایش:

saalek110

Well-Known Member
توپ و دیوار:

Python:
import pygame
import array
import random
import time

# مقداردهی اولیه
pygame.init()
pygame.mixer.init(frequency=44100, size=-16, channels=1)

# اندازه صفحه
WIDTH, HEIGHT = 600, 400
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("توپ برخوردکننده با صدا و دیواره سفید")

# رنگ‌ها
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)

# توپ
ball_radius = 15
ball_x, ball_y = WIDTH//2, HEIGHT//2
ball_dx, ball_dy = 4, 3  # سرعت توپ

# ضخامت دیواره‌ها
wall_thickness = 3

# تابع پخش صدای برخورد
def play_hit_sound():
    freq = random.randint(400,800)  # فرکانس تصادفی برای صدا
    duration_ms = 150
    sample_rate = 44100
    n_samples = int(sample_rate * duration_ms / 1000)
    buf = array.array("h", [
        int(32767 * 0.5 * (1 if (i * freq * 2 / sample_rate) % 2 < 1 else -1))
        for i in range(n_samples)
    ])
    sound = pygame.mixer.Sound(buffer=buf)
    sound.play()

# حلقه اصلی بازی
running = True
clock = pygame.time.Clock()

while running:
    screen.fill(BLACK)
    
    # رسم دیواره‌ها
    pygame.draw.rect(screen, WHITE, (0, 0, WIDTH, HEIGHT), wall_thickness)
    
    # حرکت توپ
    ball_x += ball_dx
    ball_y += ball_dy
    
    # برخورد با دیواره‌ها
    if ball_x - ball_radius <= wall_thickness or ball_x + ball_radius >= WIDTH - wall_thickness:
        ball_dx *= -1
        play_hit_sound()
    if ball_y - ball_radius <= wall_thickness or ball_y + ball_radius >= HEIGHT - wall_thickness:
        ball_dy *= -1
        play_hit_sound()
    
    # رسم توپ
    pygame.draw.circle(screen, RED, (ball_x, ball_y), ball_radius)
    
    pygame.display.flip()
    
    # رویدادها
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    clock.tick(60)  # ۶۰ فریم در ثانیه
 

saalek110

Well-Known Member
ارگ ، کلیدهایی برای زدن

Python:
import pygame
import array

# مقداردهی اولیه
pygame.init()
pygame.mixer.init(frequency=44100, size=-16, channels=1)

# اندازه صفحه
WIDTH, HEIGHT = 700, 250
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("پیانو ربات")

# رنگ‌ها
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GRAY = (200, 200, 200)
DARK_GRAY = (30, 30, 30)

# کلیدهای سفید: نام و فرکانس
white_keys = [
    {"note":"C","freq":261},
    {"note":"D","freq":293},
    {"note":"E","freq":329},
    {"note":"F","freq":349},
    {"note":"G","freq":392},
    {"note":"A","freq":440},
    {"note":"B","freq":493},
]

white_width = WIDTH // len(white_keys)
white_height = HEIGHT

# کلیدهای سیاه: فرکانس و موقعیت نسبت به کلید سفید
black_keys = [
    {"freq":277, "pos":0.7},  # C#
    {"freq":311, "pos":1.7},  # D#
    {"freq":369, "pos":3.7},  # F#
    {"freq":415, "pos":4.7},  # G#
    {"freq":466, "pos":5.7},  # A#
]
black_width = int(white_width * 0.6)
black_height = int(HEIGHT * 0.6)

# تابع پخش نت
def play_tone(frequency, duration_ms=300):
    sample_rate = 44100
    n_samples = int(sample_rate * duration_ms / 1000)
    buf = array.array("h", [
        int(32767 * 0.5 * (1 if (i * frequency * 2 / sample_rate) % 2 < 1 else -1))
        for i in range(n_samples)
    ])
    sound = pygame.mixer.Sound(buffer=buf)
    sound.play()

# حلقه اصلی
running = True
while running:
    screen.fill(GRAY)
    
    # رسم کلیدهای سفید
    for i, k in enumerate(white_keys):
        pygame.draw.rect(screen, WHITE, (i*white_width, 0, white_width, white_height))
        pygame.draw.rect(screen, BLACK, (i*white_width, 0, white_width, white_height), 2)
    
    # رسم کلیدهای سیاه
    for bk in black_keys:
        x = int(bk["pos"] * white_width)
        pygame.draw.rect(screen, BLACK, (x, 0, black_width, black_height))
    
    pygame.display.flip()
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.MOUSEBUTTONDOWN:
            mx, my = event.pos
            # اول بررسی کلیدهای سیاه (روی سفیدها قرار دارند)
            for bk in black_keys:
                x = int(bk["pos"] * white_width)
                if x <= mx < x + black_width and my <= black_height:
                    play_tone(bk["freq"])
                    break
            else:
                # بررسی کلیدهای سفید
                for i, k in enumerate(white_keys):
                    if i*white_width <= mx < (i+1)*white_width:
                        play_tone(k["freq"])
                        break
 

saalek110

Well-Known Member
ارگ دو آکوردی یعنی ۲ تا ۷ تا کلید:

Python:
import pygame
import numpy as np

pygame.init()
screen = pygame.display.set_mode((800, 300))
pygame.display.set_caption("ارگ پایدار با Pygame")

fs = 44100
volume = 0.5
duration = 0.3  # کوتاه برای لمس سریع

# نت‌ها
notes = {
    'C4':261.63, 'C#4':277.18, 'D4':293.66, 'D#4':311.13,
    'E4':329.63, 'F4':349.23, 'F#4':369.99, 'G4':392.00,
    'G#4':415.30, 'A4':440.00, 'A#4':466.16, 'B4':493.88,
    'C5':523.25, 'C#5':554.37, 'D5':587.33, 'D#5':622.25,
    'E5':659.25, 'F5':698.46, 'F#5':739.99, 'G5':783.99,
    'G#5':830.61, 'A5':880.00, 'A#5':932.33, 'B5':987.77
}

# --- تابع ساخت صدا ---
def make_sound(freq):
    t = np.linspace(0, duration, int(fs*duration), False)
    wave = np.sin(2*np.pi*freq*t) * 32767
    wave = wave.astype(np.int16)
    # استریو پایدار با column_stack و C-contiguous
    stereo_wave = np.column_stack((wave, wave)).copy()
    sound = pygame.sndarray.make_sound(stereo_wave)
    return sound

# --- ساخت صدای همه نت‌ها ---
sounds = {note: make_sound(freq) for note, freq in notes.items()}

# کلیدها
white_keys = ['C4','D4','E4','F4','G4','A4','B4','C5','D5','E5','F5','G5','A5','B5']
black_keys = ['C#4','D#4','F#4','G#4','A#4','C#5','D#5','F#5','G#5','A#5']
key_width = 50
key_height = 200
black_width = 30
black_height = 120
black_positions = [0.7,1.7,3.7,4.7,5.7,7.7,8.7,10.7,11.7,12.7]

# --- حلقه اصلی ---
running = True
while running:
    screen.fill((0,0,0))
    
    # سفیدها
    for i, key in enumerate(white_keys):
        rect = pygame.Rect(i*key_width, 0, key_width, key_height)
        pygame.draw.rect(screen, (255,255,255), rect)
        pygame.draw.rect(screen, (0,0,0), rect, 2)
    
    # سیاه‌ها
    for i, key in enumerate(black_keys):
        rect = pygame.Rect(int(black_positions[i]*key_width), 0, black_width, black_height)
        pygame.draw.rect(screen, (0,0,0), rect)
        pygame.draw.rect(screen, (0,0,0), rect, 2)
    
    pygame.display.flip()
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        
        elif event.type == pygame.KEYDOWN:
            key_map = {
                pygame.K_z:'C4', pygame.K_s:'C#4', pygame.K_x:'D4', pygame.K_d:'D#4',
                pygame.K_c:'E4', pygame.K_v:'F4', pygame.K_g:'F#4', pygame.K_b:'G4',
                pygame.K_h:'G#4', pygame.K_n:'A4', pygame.K_j:'A#4', pygame.K_m:'B4',
                pygame.K_q:'C5', pygame.K_2:'C#5', pygame.K_w:'D5', pygame.K_3:'D#5',
                pygame.K_e:'E5', pygame.K_r:'F5', pygame.K_5:'F#5', pygame.K_t:'G5',
                pygame.K_6:'G#5', pygame.K_y:'A5', pygame.K_7:'A#5', pygame.K_u:'B5'
            }
            note = key_map.get(event.key)
            if note:
                sounds[note].play()
        
        elif event.type == pygame.MOUSEBUTTONDOWN:
            x, y = event.pos
            for i, key in enumerate(white_keys):
                rect = pygame.Rect(i*key_width, 0, key_width, key_height)
                if rect.collidepoint(x,y):
                    sounds[key].play()
            for i, key in enumerate(black_keys):
                rect = pygame.Rect(int(black_positions[i]*key_width), 0, black_width, black_height)
                if rect.collidepoint(x,y):
                    sounds[key].play()

pygame.quit()
 

saalek110

Well-Known Member
طرح بازی هواپیمای آتاری، یک سری مستطیل از بالا می آید می خورد به هواپیما که یک مستطیل قرمز است.‌

Python:
import pygame
import array
import random
import time

# مقداردهی اولیه
pygame.init()
pygame.mixer.init(frequency=44100, size=-16, channels=1)

# اندازه صفحه
WIDTH, HEIGHT = 600, 400
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("هواپیمای مینیمال")

# رنگ‌ها
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
BLUE = (50, 150, 255)

# ضخامت دیواره‌ها
wall_thickness = 20

# هواپیما باریک
plane_width, plane_height = 10, 40  # باریک مثل تنه درخت
plane_x = WIDTH//2 - plane_width//2
plane_y = HEIGHT - plane_height - 10
plane_speed = 5

# موانع کوچک و کمتر
obstacle_width = 6
obstacle_height = 20
obstacles = []
obstacle_gap = 1000  # 1 ثانیه فاصله بین موانع

# امتیاز
score = 0
font = pygame.font.SysFont(None, 30)

# تابع پخش صدای برخورد
def play_hit_sound():
    freq = random.randint(400,800)
    duration_ms = 150
    sample_rate = 44100
    n_samples = int(sample_rate * duration_ms / 1000)
    buf = array.array("h", [
        int(32767 * 0.5 * (1 if (i * freq * 2 / sample_rate) % 2 < 1 else -1))
        for i in range(n_samples)
    ])
    sound = pygame.mixer.Sound(buffer=buf)
    sound.play()

# ایجاد موانع از بالا
def create_obstacle():
    x = random.randint(wall_thickness, WIDTH - wall_thickness - obstacle_width)
    y = -obstacle_height
    obstacles.append(pygame.Rect(x, y, obstacle_width, obstacle_height))

# حلقه اصلی بازی
running = True
clock = pygame.time.Clock()
obstacle_timer = 0

while running:
    dt = clock.tick(60)
    screen.fill(BLACK)
    
    # رسم دیواره‌ها
    pygame.draw.rect(screen, WHITE, (0, 0, wall_thickness, HEIGHT))
    pygame.draw.rect(screen, WHITE, (WIDTH-wall_thickness, 0, wall_thickness, HEIGHT))
    
    # کنترل با کلیدها
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        plane_x -= plane_speed
    if keys[pygame.K_RIGHT]:
        plane_x += plane_speed
    
    # برخورد با دیواره‌ها
    if plane_x <= wall_thickness:
        plane_x = wall_thickness
        play_hit_sound()
    if plane_x + plane_width >= WIDTH - wall_thickness:
        plane_x = WIDTH - wall_thickness - plane_width
        play_hit_sound()
    
    # رسم هواپیما باریک
    plane_rect = pygame.Rect(plane_x, plane_y, plane_width, plane_height)
    pygame.draw.rect(screen, RED, plane_rect)
    
    # ایجاد موانع جدید با احتمال کم (یک دهم قبل)
    obstacle_timer += dt
    if obstacle_timer > obstacle_gap:
        create_obstacle()
        obstacle_timer = 0
    
    # حرکت موانع به سمت پایین و برخورد
    for obs in obstacles[:]:
        obs.y += 3
        pygame.draw.rect(screen, BLUE, obs)
        if plane_rect.colliderect(obs):
            play_hit_sound()
            score -= 1
            obstacles.remove(obs)
        elif obs.y > HEIGHT:
            obstacles.remove(obs)
            score += 1  # عبور موفق = افزایش امتیاز
    
    # نمایش امتیاز
    score_text = font.render(f"Score: {score}", True, WHITE)
    screen.blit(score_text, (WIDTH - 120, 10))
    
    pygame.display.flip()
    
    # مدیریت رویدادها
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
 

جدیدترین ارسال ها

بالا