BREAKING NEWS
🚀 Kaweesha launched the new AI Tech Blog! 💻 Python & Java Tutorials are now live. 🎮 Game Development Guide: Building 2D Games with Godot. 🌐 Web Hosting secrets revealed - Check the latest post!

Python Sinhala - Part 11: ආතල් එකට ගේම් එකක් හදමු! (Game Dev with Pygame) 🐍🎮

Python Pygame Tutorial Sinhala Part 11 - How to create a Snake Game step by step

Software Engineering ඉගෙන ගන්න ගොඩක් අය ආසාවෙන් බලාගෙන ඉන්න පාඩම තමයි මේ. කවුද අකමැති තමන්ගේම කියලා ගේම් එකක් හදන්න? 🎮

Python වලින් Game හදන්න පාවිච්චි කරන ලෝක ප්‍රසිද්ධ Library එක තමයි Pygame. මේකෙන් ඔයාට Super Mario, Snake, Space Invaders වගේ 2D ගේම්ස් ඕන එකක් හදන්න පුළුවන්. අද අපි හදන්නේ පොඩි කාලේ අපි හැමෝම ආසාවෙන් ගහපු Snake Game (නයාගේ ගේම් එක). 🐍

1. Pygame Install කරගමු 🛠️

මේක Python එක්ක නිකන් එන්නේ නෑ. අපි අර කලින් පාඩමේ (Part 07) ඉගෙන ගත්ත විදියට pip පාවිච්චි කරලා දාගන්න ඕනේ.

ඔයාගේ CMD (Command Prompt) එක Open කරලා මේක Type කරන්න:

pip install pygame

"Successfully installed pygame" කියලා වැටුනොත් වැඩේ ගොඩ! දැන් අපි ගේම් එකේ තියරි ටික බලමු.

2. ගේම් එකක් වැඩ කරන්නේ කොහොමද? (The Game Loop) 🔄

ගේම් එකක් කියන්නේ නිකන් සොෆ්ට්වෙයාර් එකක් නෙමෙයි. ඒක හරියට ෆිල්ම් එකක් වගේ. තිරය (Screen) තත්පරේට වාර 60ක් විතර අලුත් වෙනවා (Refresh). මේකට කියන්නේ FPS (Frames Per Second) කියලා.

ගේම් ලූප් (Game Loop) එකේ පියවර 3:
  1. Events: Player යතුරු පුවරුවේ බොත්තමක් එබුවද කියලා බලනවා. (Input).
  2. Update: නයාගේ හිස අඟලක් ඉස්සරහට යවනවා (Logic).
  3. Draw: අලුත් පිහිටීම තිරයේ අඳිනවා (Render).
මේ දේ දිගටම සිද්ධ වෙනවා ගේම් එක Close කරනකම්.

3. ඛණ්ඩාංක තලයේ සෙල්ලම (X & Y Coordinates) 📉

ගේම් එකක් හදද්දි අපි ඉස්කෝලේ ඉගෙන ගත්ත ප්‍රස්තාර (Graphs) ඕන වෙනවා.

  • X අක්ෂය: වමේ සිට දකුණට (Width).
  • Y අක්ෂය: උඩ සිට පහළට (Height).
  • (0,0): තිරයේ වම් පැත්තේ උඩම කෙළවර (Top-Left).
නයා දකුණට යනවා කියන්නේ X අගය වැඩි වෙනවා. පහළට යනවා කියන්නේ Y අගය වැඩි වෙනවා. (ඔව්, පහළට යද්දි Y වැඩි වෙනවා, අඩු වෙන්නේ නෑ!).

Mega Project: The Snake Game 🐍🍎

මේ කෝඩ් එක ටිකක් දිගයි. හැබැයි බය වෙන්න එපා. මම හැම කොටසක්ම සිංහලෙන් විස්තර කරලා තියෙන්නේ. මේක කෙලින්ම Copy කරලා VS Code එකේ snake.py කියලා Save කරලා Run කරන්න.

💻 Complete Snake Game Code

import pygame import time import random # 1. Pygame පණ ගන්වන්න pygame.init() # පාටවල් (Colors) සාදාගැනීම (R, G, B) WHITE = (255, 255, 255) YELLOW = (255, 255, 102) BLACK = (0, 0, 0) RED = (213, 50, 80) GREEN = (0, 255, 0) BLUE = (50, 153, 213) # තිරයේ ප්‍රමාණය DIS_WIDTH = 600 DIS_HEIGHT = 400 dis = pygame.display.set_mode((DIS_WIDTH, DIS_HEIGHT)) pygame.display.set_caption("KP Snake Game 🐍") clock = pygame.time.Clock() # නයාගේ ප්‍රමාණය සහ වේගය SNAKE_BLOCK = 10 SNAKE_SPEED = 15 # ෆොන්ට්ස් (Fonts) font_style = pygame.font.SysFont("bahnschrift", 25) score_font = pygame.font.SysFont("comicsansms", 35) def your_score(score): value = score_font.render("Score: " + str(score), True, YELLOW) dis.blit(value, [0, 0]) def our_snake(snake_block, snake_list): for x in snake_list: pygame.draw.rect(dis, GREEN, [x[0], x[1], snake_block, snake_block]) def message(msg, color): mesg = font_style.render(msg, True, color) dis.blit(mesg, [DIS_WIDTH / 6, DIS_HEIGHT / 3]) # --- Game Loop එක --- def gameLoop(): game_over = False game_close = False # නයා පටන් ගන්න තැන (මැද) x1 = DIS_WIDTH / 2 y1 = DIS_HEIGHT / 2 x1_change = 0 y1_change = 0 snake_List = [] Length_of_snake = 1 # කෑම (Apple) එක තියන තැන රැන්ඩම් තෝරාගැනීම foodx = round(random.randrange(0, DIS_WIDTH - SNAKE_BLOCK) / 10.0) * 10.0 foody = round(random.randrange(0, DIS_HEIGHT - SNAKE_BLOCK) / 10.0) * 10.0 while not game_over: # පැරදුනාම එන කොටස while game_close == True: dis.fill(BLACK) message("Game Over! Press C-Play Again or Q-Quit", RED) your_score(Length_of_snake - 1) pygame.display.update() for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: game_over = True game_close = False if event.key == pygame.K_c: gameLoop() # බොත්තම් ඔබන ඒවා අඳුරගැනීම (Arrow Keys) for event in pygame.event.get(): if event.type == pygame.QUIT: game_over = True if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: x1_change = -SNAKE_BLOCK y1_change = 0 elif event.key == pygame.K_RIGHT: x1_change = SNAKE_BLOCK y1_change = 0 elif event.key == pygame.K_UP: y1_change = -SNAKE_BLOCK x1_change = 0 elif event.key == pygame.K_DOWN: y1_change = SNAKE_BLOCK x1_change = 0 # බිත්තියේ වදිනවද බැලීම if x1 >= DIS_WIDTH or x1 < 0 or y1 >= DIS_HEIGHT or y1 < 0: game_close = True x1 += x1_change y1 += y1_change dis.fill(BLACK) # තිරය කළු පාට කිරීම # කෑම එක ඇඳීම (නිල් පාටින්) pygame.draw.rect(dis, BLUE, [foodx, foody, SNAKE_BLOCK, SNAKE_BLOCK]) # නයාගේ හිස සහ ඇඟ හැදීම snake_Head = [] snake_Head.append(x1) snake_Head.append(y1) snake_List.append(snake_Head) if len(snake_List) > Length_of_snake: del snake_List[0] # තමන්ගේ ඇඟේ හැප්පුනාද බැලීම for x in snake_List[:-1]: if x == snake_Head: game_close = True our_snake(SNAKE_BLOCK, snake_List) your_score(Length_of_snake - 1) pygame.display.update() # කෑම කෑවද? if x1 == foodx and y1 == foody: foodx = round(random.randrange(0, DIS_WIDTH - SNAKE_BLOCK) / 10.0) * 10.0 foody = round(random.randrange(0, DIS_HEIGHT - SNAKE_BLOCK) / 10.0) * 10.0 Length_of_snake += 1 clock.tick(SNAKE_SPEED) pygame.quit() quit() # ගේම් එක පටන් ගන්න gameLoop()

අවසාන වශයෙන්... 🏁

සුභ පැතුම්! 🎉 ඔයා දැන් නිකන්ම ප්‍රෝග්‍රැමර් කෙනෙක් නෙමෙයි, Game Developer කෙනෙක්. මේ කෝඩ් එක දිහා හොඳට බලන්න. කොහොමද නයා කෑම කෑවම දිග වැඩි වෙන්නේ? කොහොමද බිත්තියේ වැදුනම ගේම් එක නවතින්නේ? මේ ලොජික් තේරුම් ගත්තම ඔයාට මීට වඩා ලොකු ගේම්ස් හදන්න පුළුවන්.

ඊළඟ කොටසින්: Web Development වලට අත තියමු! (Flask & Web Apps) 🌐🚀
දිගටම KP Tech Gear සමඟ රැඳී සිටින්න! 👇

Author

About

Tech enthusiast, Python/Java Developer, and Gamer. Sharing knowledge about coding and modern technology.

Discussion

Kaweesha AI ×
Hello Kaweesha! I am ready to help with Python, Java, or Hosting queries. 🤖