开心六月综合激情婷婷|欧美精品成人动漫二区|国产中文字幕综合色|亚洲人在线成视频

    1. 
      
        <b id="zqfy3"><legend id="zqfy3"><fieldset id="zqfy3"></fieldset></legend></b>
          <ul id="zqfy3"></ul>
          <blockquote id="zqfy3"><strong id="zqfy3"><dfn id="zqfy3"></dfn></strong></blockquote>
          <blockquote id="zqfy3"><legend id="zqfy3"></legend></blockquote>
          打開APP
          userphoto
          未登錄

          開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

          開通VIP
          使用pygame編寫游戲(1)

          1. 介紹

                游戲是編程應(yīng)用較多的地方。即使是寫一個(gè)最簡單的游戲,你要熟悉UI制作,數(shù)學(xué),物理學(xué),甚至人工智能。這是一個(gè)練習(xí)編程的非常有趣的方式。

                如果你是(或者不是)python語言的粉絲,你對游戲很感興趣,那么pygame是一個(gè)非常棒的游戲編程庫,你需要仔細(xì)的來學(xué)習(xí)它。它可以運(yùn)行在所有的主流平臺(tái)上,提供簡單的工具函數(shù)就能處理復(fù)雜的圖像處理,比如圖像的移動(dòng)、聲音等。

                網(wǎng)上有很多pygame的入門教程,但它們很多都是講基本的。甚至Pygame book也屬于介紹性級(jí)別的。為了更進(jìn)一步提高對pygame的掌握,我決定寫一個(gè)我自己的教程,希望能為使用pygame的人提供更進(jìn)一步的合理學(xué)習(xí)。

               本教程明確鼓勵(lì)你去改進(jìn)代碼,并強(qiáng)烈推薦做一下后面的練習(xí)題,這些練習(xí)題可以讓你對學(xué)到內(nèi)容有更好的認(rèn)知。

          2. 寫在前面

                基于以上說的,這個(gè)教程并不適合初學(xué)者。如果你剛開始學(xué)習(xí)pygame,你可以看一下這些教程,推薦看這些基本的介紹教程。

                在這里,我認(rèn)為你具備以下知識(shí):

                1. Python(你可能不是它的高級(jí)用戶,但也完全不是一個(gè)初學(xué)者)。

                2. 數(shù)學(xué)和物理學(xué)的基本知識(shí)(向量,正方形,運(yùn)動(dòng)定律,概率等等)。我會(huì)解釋所有非常見的知識(shí)點(diǎn),但我不會(huì)教你怎么增加向量,等等。

                3. 對pygame的認(rèn)知。比如,你已經(jīng)學(xué)習(xí)過我之前提到的介紹性的pygame教程。、

                還有要說的是,我之關(guān)注2D游戲,3D游戲會(huì)是更高層次更復(fù)雜,我會(huì)提出一個(gè)不是很完整的3D游戲樣本。

          3. 讓我們開始吧

               在這個(gè)部分,我們完整寫一個(gè)游戲樣例:模擬爬蟲,一些生物在屏幕上移動(dòng),從墻上彈回來,時(shí)不時(shí)的改變方向。

              雖然這稱不上是一個(gè)游戲,但這是我們實(shí)現(xiàn)更多不同想法的好的起點(diǎn)。I’ll leave myself the luxury of postponing the decision of which game it will eventually be, for now.

          4. 代碼

              第一部分完整的代碼包,包括需要的圖片,可以在這里下載。我建議你下載下來并運(yùn)行它。一遍看教程,一遍看代碼將會(huì)對你非常有好處。我在python2.5.2,pygame1.8.1上測試過了,也可能會(huì)在其它版本上運(yùn)行比較好。

          5. pygame的文檔

              pygame的API文檔很全。這里有pygame全部模塊,類,常量,函數(shù)的列表,我建議對你不熟悉的類或者方法,多去查找這個(gè)文檔。

          6. 爬蟲

          好吧,我先明確以下該部分的目標(biāo):

          • 我們想讓爬蟲能在屏幕上移動(dòng)
          • 爬蟲的總數(shù)是可以輕易的配置的
          • 爬蟲碰到墻后能反彈
          • 為讓游戲更有趣,爬蟲需要表現(xiàn)出半隨機(jī)的動(dòng)作

          那么爬蟲是什么?

          爬蟲是一張圖片,在pygame的驅(qū)動(dòng)下,能夠移動(dòng)或者旋轉(zhuǎn)。由于圖片的制作超出我的能力,我只讓爬蟲能夠向左右上下移動(dòng),而45度方向移動(dòng)無法實(shí)現(xiàn)。

          爬蟲的圖片包含在下載包中的小的.png文件中。



          注意到所有的爬蟲圖片頭部方向都是一致的。

          爬蟲是怎么移動(dòng)的?

          如果你確定讀過一個(gè)基本的pygame教程(沒有嗎?),你會(huì)知道移動(dòng)其實(shí)是一種幻覺。電腦屏幕上沒真正移動(dòng)的東西。其實(shí),程序會(huì)對一系列圖片以比人眼睛快的多的速度進(jìn)行移位。每秒30次或更多次刷新,會(huì)讓圖片看上去更加平滑。為了實(shí)現(xiàn)周期性的刷屏,游戲有一個(gè)"game loop"

          7. 游戲循環(huán)

          和GUI程序一樣,每個(gè)游戲都有一個(gè)“主循環(huán)”。在pygame中,使用了一個(gè)簡單的循環(huán),如下:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          # The main game loop
          #
          while True:
              # Limit frame speed to 50 FPS
              #
              time_passed = clock.tick(50)
           
              for event in pygame.event.get():
                  if event.type == pygame.QUIT:
                      exit_game()
           
              # Redraw the background
              screen.fill(BG_COLOR)
           
              # Update and redraw all creeps
              for creep in creeps:
                  creep.update(time_passed)
                  creep.blitme()
           
              pygame.display.flip()

          就如我說的,這是一個(gè)基本的python循環(huán)--直到用戶點(diǎn)擊關(guān)閉窗口后,會(huì)給出退出消息,響應(yīng)pygame.QUIT處理退出。

          循環(huán)執(zhí)行頻度如何?這要取決于對clock.tick的調(diào)用。clock是pygame.time.Clock的對象,在此之前已經(jīng)創(chuàng)建。調(diào)用tick的意思是:在下一個(gè)1/50秒到來前主循環(huán)休眠。在實(shí)際生活中,這限制了游戲的速度為50FPS,這是有好處的。一方面,我們可以讓游戲更加平滑真實(shí),另一方面,可以使游戲不能占用太多cpu資源。你可以嘗試修改這個(gè)值,比如,當(dāng)此值小于10,那么這個(gè)程序?qū)?huì)是什么樣呢?我們看練習(xí)1和3.

          現(xiàn)在是時(shí)候去看看關(guān)于tick的文檔了。

          每次循環(huán)都會(huì)重繪背景顏色,并且所有的爬蟲會(huì)更新繪制。最終,整個(gè)屏幕會(huì)使用flip進(jìn)行刷新(你應(yīng)該看看它的文檔了)。

          8. 在循環(huán)之前

           

          現(xiàn)在讓我們看看在主循環(huán)之前都做了那些事情:ow let’s see what comes before the main loop:

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          # Game parameters
          SCREEN_WIDTH, SCREEN_HEIGHT = 400, 400
          BG_COLOR = 150, 150, 80
          CREEP_FILENAMES = [
              'bluecreep.png',
              'pinkcreep.png',
              'graycreep.png']
          N_CREEPS = 20
           
          pygame.init()
          screen = pygame.display.set_mode(
                      (SCREEN_WIDTH, SCREEN_HEIGHT), 0, 32)
          clock = pygame.time.Clock()
           
          # Create N_CREEPS random creeps.
          creeps = []
          for i in range(N_CREEPS):
              creeps.append(Creep(screen,
                                  choice(CREEP_FILENAMES),
                                  (   randint(0, SCREEN_WIDTH),
                                      randint(0, SCREEN_HEIGHT)),
                                  (   choice([-1, 1]),
                                      choice([-1, 1])),
                                  0.1))

          開始的幾行都是可以自說明的,我認(rèn)為你已經(jīng)了解如何初始化pygame,并且創(chuàng)建display對象。但是爬蟲對象的創(chuàng)建呢?

          爬蟲是一系列爬蟲對象的集合,這是整個(gè)游戲的心臟和靈魂。下面是爬蟲類的聲明和其構(gòu)造函數(shù)的定義。

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          class Creep(Sprite):
              """ A creep sprite that bounces off walls and changes its
                  direction from time to time.
              """
              def __init__(
                      self, screen, img_filename, init_position,
                      init_direction, speed):
                  """ Create a new Creep.
           
                      screen:
                          The screen on which the creep lives (must be a
                          pygame Surface object, such as pygame.display)
           
                      img_filaneme:
                          Image file for the creep.
           
                      init_position:
                          A vec2d or a pair specifying the initial position
                          of the creep on the screen.
           
                      init_direction:
                          A vec2d or a pair specifying the initial direction
                          of the creep. Must have an angle that is a
                          multiple of 45 degres.
           
                      speed:
                          Creep speed, in pixels/millisecond (px/ms)
                  """

          構(gòu)造函數(shù)的參數(shù)有詳細(xì)的說明文檔,你可以看到它們在爬蟲被創(chuàng)建時(shí)如何匹配的。


          1
          2
          3
          4
          5
          6
          7
          creeps.append(Creep(screen,
                              choice(CREEP_FILENAMES),
                              (   randint(0, SCREEN_WIDTH),
                                  randint(0, SCREEN_HEIGHT)),
                              (   choice([-1, 1]),
                                  choice([-1, 1])),
                              0.1))

          首先,我們傳遞screen surface給爬蟲類。爬蟲將使用它判讀如何從墻上反彈回來,如何去繪制自己。

          其次,爬蟲可以從圖片列表中任意選擇一個(gè)(choice是一個(gè)標(biāo)準(zhǔn)的python模塊),它有一個(gè)屏幕隨機(jī)位置,隨機(jī)的方向,移動(dòng)速度被設(shè)定為0.1像素/每毫秒,或者說100個(gè)像素/秒。

          英文原地址 http://eli.thegreenplace.net/2008/12/13/writing-a-game-in-python-with-pygame-part-i/

          本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
          打開APP,閱讀全文并永久保存 查看更多類似文章
          猜你喜歡
          類似文章
          用pygame開發(fā)自己的游戲-2.讓方塊動(dòng)起來
          詳解pygame中的精靈和精靈組
          極速開發(fā)游戲:Python 游戲開發(fā)庫推薦
          Pygame教程
          Python|pygame基礎(chǔ)之壁球游戲
          python飛機(jī)大戰(zhàn)pygame快速入門
          更多類似文章 >>
          生活服務(wù)
          分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
          綁定賬號(hào)成功
          后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
          如果VIP功能使用有故障,
          可點(diǎn)擊這里聯(lián)系客服!

          聯(lián)系客服