個人的な動物園またはPygameについて少し-パート1

画像

Pygameは、Python言語でゲームを開発するための非常に優れたフレームワークです。 さらに、2Dおよび3Dでの動作がサポートされているだけでなく、必要に応じて、多くの一般的なグラフィックおよび物理エンジンにバインダーをインストールすることもできます。 ちなみに、Pygameはゲーム専用に使用する必要はありません。また、データベースへの何らかの3次元フロントエンドなど、通常とは異なるインターフェースを持つプログラムを作成することもできます。

したがって、実際には、このフレームワークを使用する基本的な原則についてお話ししたかったのですが、おそらく誰かが役に立つでしょう:)



行こう!



Pygameのクラスとメソッドにアクセスするには、初期化する必要があります。 ちなみに、グローバルゲームタイマーはモジュールが初期化されると正確に開始し、プログラマーはいつでも初期化の最初から数秒で時間を取得できます。 単純なウィンドウを作成します。

Copy Source | Copy HTML import pygame from pygame.locals import * def init_window (): pygame.init() window = pygame.display.set_mode(( 550 , 480 )) pygame.display.set_caption( 'My own little world' ) def main (): init_window () if __name__ == '__main__' : main ()



  1. Copy Source | Copy HTML import pygame from pygame.locals import * def init_window (): pygame.init() window = pygame.display.set_mode(( 550 , 480 )) pygame.display.set_caption( 'My own little world' ) def main (): init_window () if __name__ == '__main__' : main ()



  2. Copy Source | Copy HTML import pygame from pygame.locals import * def init_window (): pygame.init() window = pygame.display.set_mode(( 550 , 480 )) pygame.display.set_caption( 'My own little world' ) def main (): init_window () if __name__ == '__main__' : main ()



  3. Copy Source | Copy HTML import pygame from pygame.locals import * def init_window (): pygame.init() window = pygame.display.set_mode(( 550 , 480 )) pygame.display.set_caption( 'My own little world' ) def main (): init_window () if __name__ == '__main__' : main ()



  4. Copy Source | Copy HTML import pygame from pygame.locals import * def init_window (): pygame.init() window = pygame.display.set_mode(( 550 , 480 )) pygame.display.set_caption( 'My own little world' ) def main (): init_window () if __name__ == '__main__' : main ()



  5. Copy Source | Copy HTML import pygame from pygame.locals import * def init_window (): pygame.init() window = pygame.display.set_mode(( 550 , 480 )) pygame.display.set_caption( 'My own little world' ) def main (): init_window () if __name__ == '__main__' : main ()



  6. Copy Source | Copy HTML import pygame from pygame.locals import * def init_window (): pygame.init() window = pygame.display.set_mode(( 550 , 480 )) pygame.display.set_caption( 'My own little world' ) def main (): init_window () if __name__ == '__main__' : main ()



  7. Copy Source | Copy HTML import pygame from pygame.locals import * def init_window (): pygame.init() window = pygame.display.set_mode(( 550 , 480 )) pygame.display.set_caption( 'My own little world' ) def main (): init_window () if __name__ == '__main__' : main ()



  8. Copy Source | Copy HTML import pygame from pygame.locals import * def init_window (): pygame.init() window = pygame.display.set_mode(( 550 , 480 )) pygame.display.set_caption( 'My own little world' ) def main (): init_window () if __name__ == '__main__' : main ()



  9. Copy Source | Copy HTML import pygame from pygame.locals import * def init_window (): pygame.init() window = pygame.display.set_mode(( 550 , 480 )) pygame.display.set_caption( 'My own little world' ) def main (): init_window () if __name__ == '__main__' : main ()





コードをCのような方法で設計したので、読みやすくなりました。 実際には、これまでに認識できることはあまりありません:)まず、必要なモジュールをインポートし(sishnikovの場合-名前空間を記述)、フレームワークを初期化し、550 x 480のディメンションを持つウィンドウを作成し、タイトルに「My own little world」を付けます。

このコードを実行しようとした人は、ウィンドウが表示後すぐに消えることに気付いたと思います。 これは、メッセージを受信するためのグローバルな無限ループについてまだ説明していないため、ウィンドウには何の関係もないためです。 この間違いを修正します。

Copy Source | Copy HTML



  1. インポートシステム
  2. pygameをインポートする
  3. pygame.locals インポート から *
  4. def init_window ():
  5. pygame.init()
  6. window = pygame.display.set_mode((550、480))
  7. pygame.display.set_caption( 「自分の小さな世界」
  8. def 入力 (イベント):
  9. イベント内のイベントの場合:
  10. if (event.type == QUIT) または (event.type == KEYDOWN および event.key == K_ESCAPE):
  11. sys .exit( 0
  12. その他
  13. 合格する
  14. def アクション ():
  15. 一方 1
  16. 入力 (pygame.event.get())
  17. def main ():
  18. init_window ()
  19. アクション ()
  20. if __name__ == '__main__'main ()


ご覧のとおり、メッセージを受信する無限のサイクルが始まります。 メッセージQUITが送信される(ウィンドウの十字をクリックする)か、 ESCAPEボタンが押されると、アプリケーションは作業を終了します。

しかし、ウィンドウは空で、黒く、面白くありません。 その上に何かを描くにはどうしますか? まず、 背景を説明します。 単色で塗りつぶすか、奇妙なことに、適切なサイズの画像をアップロードして、座標(0,0)で表示することができます。

Copy Source | Copy HTML



  1. 輸入 OS
  2. def load_image (名前):
  3. fullname = os .path.join( 'data' 、name) #フォルダー内の写真は 'data'フォルダーにあります
  4. 試してください
  5. image = pygame.image.load(フルネーム)
  6. pygame.error を除き 、メッセージ: 決して知らない:)
  7. 「画像を読み込めません:」 、名前を印刷
  8. SystemExit、メッセージを上げる
  9. image = image.convert() #ゲームで表示する画像を調整します。 アルファチャネルがある場合、convert_alpha()
  10. 画像を返す 、image.get_rect()
  11. def draw_background ():
  12. screen = pygame.display.get_surface() #描画する表面を取得
  13. background = pygame.Surface(screen.get_size()) #とそのサイズ
  14. background = background.convert()
  15. background.fill((0、0、0)) #色で塗りつぶす
  16. screen.blit(background、(0、0)) #1色で塗りつぶされた背景を描く
  17. back、back_rect = load_image"grass.jpg"#または草の写真をアップロード
  18. screen.blit(back、(0、0)) #そしてそれを描く
  19. pygame.display.flip() #画面バッファーを切り替える
  20. 戻る
  21. def main ():
  22. init_window()
  23. bk = draw_background ()
  24. アクション()


ここで最も重要な行は、 screen = pygame.display.get_surface()screen.blit(back、(0、0))およびpygame.display.flip()です。 Pygameを使用する場合、描画が毎回何らかの表面で行われることを覚えておくことが重要です。 同時に、 バックバッファが動作します 。つまり、描画はスクリーンバッファに移動し、フリップ()メソッドは、いわば、画面を「反転」し、バッファに発生した変更を画面に表示します。



それでは、小さな世界に小さな生き物を追加しましょう。 これを行うには、動物、たとえば象を作成します:)まず、画像を読み込むための関数を少し書き直します。 次に、その理由を説明します。

Copy Source | Copy HTML



  1. def load_image (名前、カラーキー=なし):
  2. fullname = os .path.join( 'data' 、name)
  3. 試してください
  4. image = pygame.image.load(フルネーム)
  5. pygame.error を除き 、メッセージ:
  6. 「画像を読み込めません:」 、名前を印刷
  7. SystemExit、メッセージを上げる
  8. image = image.convert()
  9. colorkey None でない 場合
  10. colorkey -1の 場合
  11. colorkey = image.get_at((0,0))
  12. image.set_colorkey(colorkey、RLEACCEL)
  13. 画像を返す 、image.get_rect()
  14. クラス Animal (pygame.sprite.Sprite):
  15. def __init__ (self、img、cX、cY):
  16. pygame.sprite.Sprite。 __init__ (自己)
  17. self .image、 self .rect = load_image (img、 -1
  18. screen = pygame.display.get_surface()
  19. self .area = screen.get_rect()
  20. self .cX = cX
  21. self .cY = cY
  22. self .coord =(cX、cY)
  23. プリント 「動物の産卵」自己 .coord
  24. クラス 動物 ):
  25. def __init__ (self、cX、cY):
  26. 動物 __init__ (self、 "Elephant.bmp" 、cX、cY)


私は「なぜbmp ??」のinする感嘆を予見します。 私は答えます-経験のために:)別のスキルを取得したので-座標( colorkey = image.get_at((0,0)) )で画像から色を取得するため、全体の画像でこの色を完全に透明にすることができます( image.set_colorkey (colorkey、RLEACCEL) )! アルファチャンネルなしで突然写真をアップロードする必要がある場合に便利です。



pygame.sprite.Spriteは、標準のpygameスプライトクラスです。 知らない人のために:スプライトは、ゲームオブジェクトに必要な多くのプロパティを持つフラットな画像です。 特に、動くようにしたり、あらゆる種類の相互作用を教えたりすることができます。



そして今、私たちがする必要があるのは、象をジャングルに打ち込むことだけです!

Copy Source | Copy HTML



  1. def アクション (bk):
  2. creatures_list = [] #すべての動物のリスト。 新しいものを追加すると便利になります
  3. screen = pygame.display.get_surface()
  4. elephant = Elephant( 10、10#座標x = 10、y = 10に象を配置します
  5. creatures_list.append(象)
  6. animals = pygame.sprite.RenderPlain(creatures_list) #すべての動物をRenderPlainクラスに入れて、画面にスプライトを表示します
  7. 一方 1
  8. 入力 (pygame.event.get())
  9. screen.blit(bk、(0、0))
  10. animals.update() #標準の検証方法、突然何かが変更されました。 動きを説明するのに便利
  11. animals.draw(画面)
  12. pygame.display.flip()
  13. def main ():
  14. init_window()
  15. bk = draw_background()
  16. アクション (bk)


上記のコードを最適化する必要があることに同意します。特に、背景を描くために曲線を蹴らないでください。しかし、一般に、すべてが明確でなければなりません。



そして最後に、私の小さな開発の実際のスクリーンショット、Pygameの紹介です。 写真の周りの緑色の輪郭はbmp処理の欠陥です。現在、pngの下にすべてを再描画しています。 グリッドは、Pygameを使用した描画の最も単純な例です。次回はこれについて説明します。







質問に答え、批判に耳を傾ける準備ができています。



All Articles