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:
- Events: Player යතුරු පුවරුවේ බොත්තමක් එබුවද කියලා බලනවා. (Input).
- Update: නයාගේ හිස අඟලක් ඉස්සරහට යවනවා (Logic).
- 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
pygame.init()
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
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])
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
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()
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 සමඟ රැඳී සිටින්න! 👇
Discussion