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) # ۶۰ فریم در ثانیه
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
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()
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









