pygame
आवश्यक
खोज…
ड्राइंग और एक बुनियादी एनीमेशन
इस कार्यक्रम में कुछ आकृतियाँ और ' हैलो वर्ल्ड! 'और एक छवि को खिड़की के हर कोने में जाने दें।
पूरा कोड:
import pygame,sys
from pygame.locals import *
pygame.init()
FPS = 30 #frames per second setting
fpsClock = pygame.time.Clock()
#set up the window
screen = pygame.display.set_mode((500,400), 0, 32)
pygame.display.set_caption('drawing')
#set up the colors
black = ( 0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)
green = ( 0, 255, 0)
blue = ( 0, 0, 255)
imageImg = pygame.image.load('baddie.png')
imagex = 320
imagey = 220
direction = 'left'
fontObj = pygame.font.Font('freesansbold.ttf', 32)
text = fontObj.render('Hello World!', True, green, blue)
rect = text.get_rect()
rect.center = (200, 150)
# the main game loop
while True:
screen.fill(white)
# draw a green polygon onto the surface
pygame.draw.polygon(screen, green, ((146, 0), (291, 106), (236, 277), (56, 277), (0, 106)))
# draw some blue lines onto the surface
pygame.draw.line(screen, blue, (60, 60), (120, 60), 4)
pygame.draw.line(screen, blue, (120, 60), (60, 120))
pygame.draw.line(screen, blue, (60, 120), (120, 120), 4)
# draw a blue circle onto the surface
pygame.draw.circle(screen, blue, (300, 50), 100, 0)
# draw a red ellipse onto the surface
pygame.draw.ellipse(screen, red, (300, 250, 80,80), 1)
# draw a red rectangle onto the surface
pygame.draw.rect(screen,red, (200, 150, 100, 50))
# draw the text onto the surface
screen.blit(text, rect)
if direction == 'right':
imagex += 5
if imagex == 320:
direction = 'down'
elif direction == 'down':
imagey += 5
if imagey == 220:
direction = 'left'
elif direction == 'left':
imagex -= 5
if imagex == 20:
direction = 'up'
elif direction == 'up':
imagey -= 5
if imagey == 20:
direction = 'right'
screen.blit(imageImg, (imagex, imagey))
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
fpsClock.tick(FPS)
pygame और विंडो सेट करना:
import pygame,sys
from pygame.locals import *
pygame.init()
#set up the window
screen = pygame.display.set_mode((500,400), 0, 32)
pygame.display.set_caption('drawing')
सफेद पृष्ठभूमि आरेखण:
इस फ़ंक्शन में आप पृष्ठभूमि के रंग को परिभाषित करते हैं।
screen.fill(white)
हरे बहुभुज आरेखण:
यहां आप प्रदर्शन सतह, रंग और बहुभुज के हर कोने की स्थिति (x और y निर्देशांक) को परिभाषित करते हैं, आप उस घड़ी की दिशा में और वामावर्त कर सकते हैं।
pygame.draw.polygon(screen, green, ((146, 0), (291, 106), (236, 277), (56, 277), (0, 106)))
नीली रेखाएँ खींचना:
इस फ़ंक्शन में आप डिस्प्ले सतह, रंग, पहले और अंतिम बिंदु और लाइन की चौड़ाई को परिभाषित करते हैं (यदि आप एक चौड़ाई नहीं देते हैं, तो यह सिर्फ 1 है)।
pygame.draw.line(screen, blue, (60, 60), (120, 60), 4)
pygame.draw.line(screen, blue, (120, 60), (60, 120))
pygame.draw.line(screen, blue, (60, 120), (120, 120), 4)
नीला वृत्त खींचना:
इस फ़ंक्शन में आप प्रदर्शन सतह, रंग, स्थिति, त्रिज्या और सर्कल की चौड़ाई को परिभाषित करते हैं (यदि आप चौड़ाई के लिए 0 देते हैं, तो यह एक सादा सर्कल है)।
pygame.draw.circle(screen, blue, (300, 50), 100, 0)
दीर्घवृत्त खींचना:
इस फ़ंक्शन में आप डिस्प्ले सतह, रंग, स्थिति, क्षैतिज आकार और ऊर्ध्वाधर आकार और चौड़ाई को परिभाषित करते हैं।
pygame.draw.ellipse(screen, red, (300, 250, 80,80), 1)
आयत बनाना:
इस फ़ंक्शन में आप डिस्प्ले सतह, रंग, स्थिति और क्षैतिज और ऊर्ध्वाधर आकार को परिभाषित करते हैं।
pygame.draw.rect(screen,red, (200, 150, 100, 50))
पाठ को परिभाषित करना:
पहले आप इस फ़ंक्शन के साथ अपने पाठ के प्रकार और आकार को परिभाषित करते हैं:
fontObj = pygame.font.Font('freesansbold.ttf', 32)
फिर आप वास्तविक पाठ को परिभाषित करते हैं, यदि पाठ बोल्ड है, रंग और, यदि आप चाहते हैं, तो अंकन का रंग। आप इस फ़ंक्शन के साथ ऐसा कर सकते हैं:
text = fontObj.render('Hello World!', True, green, blue)
यदि आप अपने पाठ को चिह्नित करना चाहते हैं, तो आपको pygame को बताना होगा कि इस समारोह के साथ:
rect = text.get_rect()
और यदि आप पाठ के केंद्र की स्थिति को परिभाषित करना चाहते हैं, तो आप इस कार्य को कर सकते हैं:
rect.center = (200, 150)
पाठ खींचना:
यदि आपने एक अंकन और / या केंद्र को परिभाषित किया है:
screen.blit(text, rect)
अन्यथा आपको पाठ की स्थिति को परिभाषित करना है इसलिए पाठ को इस तरह खींचें:
screen.blit(text, (100,50))
छवि को परिभाषित करना:
यहां आप परिभाषित करते हैं कि आप किस छवि का उपयोग करना चाहते हैं (यदि आप इसे इस तरह करते हैं, तो छवि फ़ाइल को आपकी प्रोग्राम फ़ाइल के समान निर्देशिका में होना चाहिए), प्रारंभ स्थिति (x और y) और छवि की दिशा।
image = pygame.image.load('image.png')
baddiex = 320
baddiey = 220
direction = 'left'
छवि को एनिमेट करना:
कोड के इस हिस्से के साथ हम छवि की दिशा की जांच करते हैं, अगर यह एक कोने तक पहुंच गया है, यदि हां, तो दिशा को बदल दें, यदि नहीं, तो उसी दिशा में छवि को 5 पिक्सेल आगे खींचें।
if direction == 'right':
imagex += 5
if imagex == 360:
direction = 'down'
elif direction == 'down':
imagey += 5
if imagey == 260:
direction = 'left'
elif direction == 'left':
imagex -= 5
if imagex == 20:
direction = 'up'
elif direction == 'up':
imagey -= 5
if imagey == 20:
direction = 'right'
screen.blit(imageImg, (imagex, imagey))
नोट: मेरी छवि 20x20 पिक्सेल है, मैं उपयोग करता हूं if imagex == 360:
और if imagey == 260:
क्योंकि तब मेरी छवि अन्य 2 कोनों की तरह खिड़की के किनारे से 20 पिक्सेल है। यदि आपकी छवि का आकार अलग है, तो आपको संभवतः उन संख्याओं को बदलना होगा।
छोड़ने के लिए जाँच:
यहां हम जांचते हैं कि क्या आपने pygame विंडो को बंद कर दिया है, और यदि हां, तो विंडो को बंद कर दें, यदि आप इसे अपने प्रोग्राम में कहीं नहीं लिखते हैं, तो आप संभवतः विंडो को बंद नहीं कर पाएंगे।
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
स्क्रीन को अपडेट करना:
इस फ़ंक्शन के साथ आप स्क्रीन को अपडेट करते हैं ताकि आपके द्वारा खींची गई सब कुछ दिखाई दे।
pygame.display.update()
एफपीएस सेटिंग:
इस फ़ंक्शन के साथ आप pygame को पर्याप्त नींद लेने के लिए कहते हैं ताकि आपकी FPS सेटिंग सम्मानित हो।
fpsClock.tick(FPS)
पीआईएल के साथ उपयोग करना
जब आपको PIL और Pygame दोनों का उपयोग करना पड़ता है क्योंकि उन दोनों में गुम कार्यशीलता है, तो आपको Pygame Surfaces और PIL Images के बीच कनवर्ट करने का एक तरीका चाहिए, अधिमानतः उन्हें डिस्क पर लिखे बिना।
उसके लिए आप दोनों पुस्तकालयों में दिए गए "टॉरिंग" और "डीस्ट्रिंग" कार्यों का उपयोग कर सकते हैं।
PIL से Pygame में रूपांतरण:
strFormat = 'RGBA'
raw_str = image.tostring("raw", strFormat)
surface = pygame.image.fromstring(raw_str, image.size, strFormat)
Pygame से पीआईएल में रूपांतरण:
strFormat = 'RGBA'
raw_str = pygame.image.tostring(surface, strFormat, False)
image = Image.frombytes(strFormat, surface.get_size(), raw_str)