🧩 آرایه دو بعدی
📦 آرایه دو بعدی چیست؟
آرایه دو بعدی مثل یک جدول یا صفحه شطرنج میمونه! فرض کن یه دفتر شطرنجی داری که خونهها رو با شماره سطر و شماره ستون پیدا میکنی. مثلاً خانهی سطر ۲ و ستون ۳. در پایتون آرایه دو بعدی یعنی یه لیست که توش چند تا لیست دیگه هست.
✨ مثال : مدرسه = [["کلاس اول", "کلاس دوم"], ["راهرو", "دفتر مدیر"]]
🎮 کاربردها در پروژههای بازی: ساخت بازی دوز (۳×۳)، بازی مار و پله، نقشهی مرحلهها، مینیاب، صفحهی شطرنج، پازلهای جدولی و خیلی بازیهای دیگر.
💡 چرا از آرایه دو بعدی استفاده کنیم؟ چون اکثر بازیهای جذاب دارای صفحه و مختصات هستند (مثل ایکس، وای). با آرایه دو بعدی میتوانیم هر خانه را با board[سطر][ستون] عوض کنیم، برنده را بررسی کنیم، مهره را حرکت دهیم. خیلی ساده و قدرتمند است!
🎮 ۱۰ پروژه بازی
X | O | X
—+—+—
O | X |
—+—+—
O | |
🏆 بازیکن X برنده شد!
def show_board():
for row in board:
print(“|”.join(row))
print(“—“)
def check_win(symbol):
for i in range(3):
if all(board[i][j] == symbol for j in range(3)):
return True
if all(board[j][i] == symbol for j in range(3)):
return True
if board[0][0] == board[1][1] == board[2][2] == symbol:
return True
if board[0][2] == board[1][1] == board[2][0] == symbol:
return True
return False
player = “X”
for turn in range(9):
show_board()
row = int(input(f”بازیکن {player} – سطر (۰,۱,۲): “))
col = int(input(“ستون (۰,۱,۲): “))
if board[row][col] == ” “:
board[row][col] = player
if check_win(player):
show_board()
print(f”🎉 برنده شد: {player}”)
break
player = “O” if player == “X” else “X”
else:
print(“این خانه پر شده!”)
else:
print(“مساوی!”)
•
board = [[" " for _ in range(3)] for _ in range(3)] → این خط یک آرایه دو بعدی ۳×۳ درست میکند. هر خونه یک فضای خالی است.•
def show_board(): → تابعی برای نمایش صفحه. با یک حلقه روی سطرها، هر سطر را با “|” چاپ میکند.•
def check_win(symbol): → برنده را چک میکند. با استفاده از حلقه، سه سطر و سه ستون و دو قطر را بررسی میکند.•
if all(board[i][j] == symbol for j in range(3)) → چک میکند که آیا همه خانههای سطر i برابر علامت بازیکن هستند؟ •
player = "X" → بازیکن اول X است. سپس در حلقه، خانه را بروز میکند و بعد از هر حرکت، برنده را چک میکند.
🎁 پله! میری به (۳,۴)
🏆 به خط پایان رسیدی
size = 5
board = [[0 for _ in range(size)] for _ in range(size)]
board[1][2] = 12 # پله از خانه (۱,۲) به جلو
board[3][4] = -8 # مار از (۳,۴) به عقب
pos_row, pos_col = 0, 0
while (pos_row, pos_col) != (size-1, size-1):
input(“Enter بزن تا تاس بیندازی…”)
dice = random.randint(1, 6)
print(f”تاس: {dice}”)
for _ in range(dice):
if pos_col < size-1:
pos_col += 1
elif pos_row < size-1:
pos_row += 1
pos_col = 0
else:
break
print(f"مهره در سطر {pos_row} , ستون {pos_col}")
effect = board[pos_row][pos_col]
if effect > 0:
print(“پله! جلو میری”)
for _ in range(effect):
if pos_col < size-1:
pos_col += 1
elif pos_row < size-1:
pos_row += 1
pos_col = 0
elif effect < 0:
print("مار! عقب میری")
for _ in range(-effect):
if pos_col > 0:
pos_col -= 1
elif pos_row > 0:
pos_row -= 1
pos_col = size-1
print(f”موقعیت جدید: ({pos_row},{pos_col})”)
print(“🎉 برنده شدی!”)
board به عنوان نقشه. مقدار مثبت یعنی پله، منفی یعنی مار. موقعیت مهره با (pos_row, pos_col) ذخیره میشود. بعد از تاس انداختن، مهره حرکت میکند و سپس اثر خانه را از آرایه دو بعدی میخوانیم.
خوش آمدی! مختصات سطر و ستون بگو…
سطر ۲، ستون ۳ → 💥 مین! بازی تمام شد
size = 4
board = [[“□” for _ in range(size)] for _ in range(size)]
mines = [[False for _ in range(size)] for _ in range(size)]
num_mines = 3
placed = 0
while placed < num_mines:
r = random.randint(0, size-1)
c = random.randint(0, size-1)
if not mines[r][c]:
mines[r][c] = True
placed += 1
def show():
for row in board:
print(" ".join(row))
show()
lives = 2
while lives > 0:
row = int(input(“سطر (۰-۳): “))
col = int(input(“ستون (۰-۳): “))
if mines[row][col]:
print(“💥 مین! جان داری از دست میدی”)
lives -= 1
board[row][col] = “💣”
show()
if lives == 0:
print(“باختی!”)
break
else:
print(“✅ سالم!”)
board[row][col] = “✓”
show()
win = True
for i in range(size):
for j in range(size):
if not mines[i][j] and board[i][j] == “□”:
win = False
if win:
print(“🎉 تو برنده شدی ، همه مینها رو شناسایی کردی!”)
break
board برای نمایش به کاربر و mines برای ذخیره جای مینها. کاربر مختصات میدهد، اگر mines[row][col] True بود، برخورد با مین. بعد از هر حرکت صفحه بروز میشود.
[۴,۵,۶]
[۷,۸, ] → با حرکت دادن، پازل رو حل کن
empty_r, empty_c = 2,2
def show_puzzle():
for row in puzzle:
print(row)
show_puzzle()
while puzzle != [[1,2,3],[4,5,6],[7,8,” “]]:
move = input(“حرکت w(بالا) s(پایین) a(چپ) d(راست): “)
nr, nc = empty_r, empty_c
if move == “w”:
nr = empty_r – 1
elif move == “s”:
nr = empty_r + 1
elif move == “a”:
nc = empty_c – 1
elif move == “d”:
nc = empty_c + 1
if 0 <= nr < 3 and 0 <= nc < 3:
puzzle[empty_r][empty_c], puzzle[nr][nc] = puzzle[nr][nc], puzzle[empty_r][empty_c]
empty_r, empty_c = nr, nc
show_puzzle()
else:
print("حرکت غیرمجاز")
print("🎉 پازل حل شد!")
size = 6
grid = [[“⬜” for _ in range(size)] for _ in range(size)]
stars = 5
for _ in range(stars):
r = random.randint(0,size-1)
c = random.randint(0,size-1)
grid[r][c] = “⭐”
score = 0
def show():
for row in grid:
print(” “.join(row))
while score < stars: show() row = int(input("سطر: ")) col = int(input("ستون: ")) if grid[row][col] == "⭐": print("🌟 یک ستاره گرفتی!") score += 1 grid[row][col] = "✅" else: print("❌ اینجا ستاره نیست") print(f"🎉 بردی! امتیاز نهایی: {score}")
pawn_r, pawn_c = 1, 2
chess[pawn_r][pawn_c] = “♙”
def show_chess():
for row in chess:
print(” “.join(row))
show_chess()
new_r = int(input(“سطر مقصد (۰-۷): “))
new_c = int(input(“ستون مقصد: “))
if new_c == pawn_c and new_r == pawn_r + 1:
chess[pawn_r][pawn_c] = “.”
chess[new_r][new_c] = “♙”
print(“حرکت قانونی ✅”)
else:
print(“حرکت غیرمجاز ❌”)
show_chess()
new_c == pawn_c and new_r == pawn_r+1 بررسی میکند. پس از حرکت، آرایه دو بعدی بروزرسانی میشود.
size = 5
enemies = [[“_” for _ in range(size)] for _ in range(size)]
num_enemies = 4
for _ in range(num_enemies):
r = random.randint(0,size-1)
c = random.randint(0,size-1)
enemies[r][c] = “E”
killed = 0
while killed < num_enemies:
for row in enemies:
print(" ".join(row))
row = int(input("سطر هدف: "))
col = int(input("ستون هدف: "))
if enemies[row][col] == "E":
print("💥 دشمن نابود شد!")
enemies[row][col] = "✓"
killed += 1
else:
print("آب خورد! دشمنی نیست")
print(f"🏆 همه دشمنان نابود شدند. کشتهها: {killed}")
def show_lights():
for row in lights:
print(” “.join(row))
show_lights()
while True:
r = int(input(“سطر (۰-۳): “))
c = int(input(“ستون (۰-۳): “))
if lights[r][c] == “🔴”:
lights[r][c] = “🟢”
else:
lights[r][c] = “🔴”
for dr, dc in [(1,0),(-1,0),(0,1),(0,-1)]:
nr, nc = r+dr, c+dc
if 0 <= nr < 4 and 0 <= nc < 4:
if lights[nr][nc] == "🔴":
lights[nr][nc] = "🟢"
else:
lights[nr][nc] = "🔴"
show_lights()
again = input("ادامه؟ (y/n): ")
if again == "n":
break
values = [“🐱”,”🐶”,”🐭”,”🐹”,”🐰”,”🦊”]*۲
random.shuffle(values)
board = [[“❓” for _ in range(4)] for _ in range(3)]
real_board = [values[i*4:(i+1)*4] for i in range(3)]
pairs = 0
while pairs < 6:
for row in board:
print(" ".join(row))
r1 = int(input("اولین کارت - سطر: "))
c1 = int(input("ستون: "))
board[r1][c1] = real_board[r1][c1]
for row in board:
print(" ".join(row))
r2 = int(input("دومین کارت - سطر: "))
c2 = int(input("ستون: "))
board[r2][c2] = real_board[r2][c2]
for row in board:
print(" ".join(row))
if real_board[r1][c1] == real_board[r2][c2] and (r1,c1) != (r2,c2):
print("🎉 جفت یافتی!")
pairs += 1
else:
print("❌ جفت نبود.")
board[r1][c1] = "❓"
board[r2][c2] = "❓"
print("🏆 برنده شدی ، همه جفتها پیدا شد!")
sea = [[“🌊” for _ in range(5)] for _ in range(5)]
ship_row = random.randint(0,4)
ship_col = random.randint(0,3)
sea[ship_row][ship_col] = “🚢”
sea[ship_row][ship_col+1] = “🚢”
hits = 0
while hits < 2:
for row in sea:
print(" ".join(row))
r = int(input("سطر هدف: "))
c = int(input("ستون هدف: "))
if sea[r][c] == "🚢":
print("💥 اصابت! به کشتی زدی")
sea[r][c] = "💥"
hits += 1
else:
print("❌ آب خورد!")
print("🎉 ناوگان دشمن نابود شد!")
⚠️ خطاهای رایج در کدنویسی (مخصوص نوجوانان)
❌ ۱٫ خطای تو رفتگی (IndentationError): بعد از if, for, while حتماً باید فاصله (چهار space) بزنی. همه خطوط داخلش باید یکسان شروع بشن.
❌ ۲٫ پرانتز یا براکت بسته نشده: مثل print("سلام یا my_list = [1,2,3 → حتماً پرانتز و براکت رو جفت کن.
❌ ۳٫ کاما فراموش شده بین اعضای آرایه: numbers = [10 20 30] درستش [۱۰,۲۰,۳۰]
❌ ۴٫ IndexError (اندیس خارج از محدوده): وقتی آرایه ۵ عضوی داری و اندیس ۵ رو صدا میزنی. همیشه چک کن len(آرایه) چند است.
✅ راه حل: کدها را آرام بنویس، از محیط ادیتور استفاده کن و پیام خطا را با دقت بخوان. خطاها دوست تو هستند!
“`
