日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pygame开发PC端微信打飞机游戏

發(fā)布時(shí)間:2024/4/14 编程问答 71 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pygame开发PC端微信打飞机游戏 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?pygame開發(fā)PC端微信打飛機(jī)游戲?

一、項(xiàng)目簡介
1. 介紹
本項(xiàng)目類似曾經(jīng)火爆的微信打飛機(jī)游戲。游戲?qū)⑹褂肞ython語言開發(fā),主要用到pygame的API。游戲最終將會(huì)以python源文件game.py形式完成,只需要運(yùn)行python game.py就可以進(jìn)入游戲。
游戲最終效果截圖如下:


2. 知識(shí)點(diǎn)
本實(shí)驗(yàn)中將介紹在Linux桌面環(huán)境下使用Python及pygame快速開發(fā)小游戲的方式。可以通過這個(gè)游戲入門pygame游戲開發(fā)。
3. 參考文檔

  • 代碼參考 Kill-Console寫的PythonShootGame

  • 文檔參考?pygame文檔

4. 安裝依賴包
(以下內(nèi)容需要在實(shí)驗(yàn)樓官方網(wǎng)站實(shí)現(xiàn),不需要的也可以直接跳過)

需要安裝pygame庫來支持本實(shí)驗(yàn)所需的代碼運(yùn)行。
在實(shí)驗(yàn)環(huán)境中打開Xfce終端,并輸入以下命令來安裝pygame,會(huì)提示輸入shiyanlou的密碼,密碼也是shiyanlou:
$ sudo apt-get update$ sudo apt-get install python-pygame
二、技術(shù)設(shè)計(jì)
1. 游戲角色
本游戲中所需的角色包括玩家飛機(jī)、敵機(jī)及***。用戶可以通過鍵盤移動(dòng)玩家飛機(jī)在屏幕上的位置來打擊不同位置的敵機(jī)。因此設(shè)計(jì)以下Player,Enemy和Bullet三個(gè)類對(duì)應(yīng)三種游戲角色。
對(duì)于Player,需要的操作有射擊和移動(dòng)兩種,移動(dòng)又分為上下左右4種情況。
對(duì)于Enemy,則比較簡單,只需要移動(dòng)即可,從屏幕上方出現(xiàn)并移動(dòng)到屏幕下方。
對(duì)于Bullet,與飛機(jī)相同,僅需要以一定速度移動(dòng)即可。
2. 游戲功能
相信玩過微信打飛機(jī)的朋友都熟悉,這里將游戲做了簡化。飛機(jī)的速度固定,***的速度固定,基本操作是移動(dòng)玩家飛機(jī),目標(biāo)飛機(jī)隨機(jī)從屏幕上方出現(xiàn)并勻速落到下方,***從玩家飛機(jī)發(fā)出,碰到目標(biāo)飛機(jī)會(huì)擊毀,如果目標(biāo)飛機(jī)碰到玩家飛機(jī),則Game Over并顯示分?jǐn)?shù)。
三、代碼實(shí)現(xiàn)
1. 界面顯示

代碼實(shí)現(xiàn)所需的resources圖片文件都可以通過下述命令獲取:

  • $git clone https://github.com/shiyanlou/PythonShootGame.git


  • 詳細(xì)步驟

    • 初始化pygame

    • 設(shè)置游戲界面大小、背景圖片及標(biāo)題

    • 游戲主循環(huán)內(nèi)需要處理游戲界面的初始化、更新及退出

    • 顯示玩家飛機(jī)(代碼中使用的resources/image/shoot.png圖里包含多種飛機(jī),只需要使用pygame.image的subsurface API根據(jù)位置截取shoot.png中所需的圖片)

    示例代碼

    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 29 30 31 32 33 34 35 36 37 38 39 #1.?初始化pygame pygame.init() #2.?設(shè)置游戲界面大小、背景圖片及標(biāo)題 #?游戲界面像素大小 screen?=?pygame.display.set_mode((480,?800)) #?游戲界面標(biāo)題 pygame.display.set_caption('飛機(jī)大戰(zhàn)') #?背景圖 background?=?pygame.image.load('resources/image/background.png').convert() #?Game?Over的背景圖 game_over?=?pygame.image.load('resources/image/gameover.png') #?飛機(jī)圖片 plane_img?=?pygame.image.load('resources/image/shoot.png') #?截取玩家飛機(jī)圖片 player?=?plane_img.subsurface(pygame.Rect(0,?99,?102,?126)) #3.?游戲主循環(huán)內(nèi)需要處理游戲界面的初始化、更新及退出 while?True:? ???#?初始化游戲屏幕 ????screen.fill(0) ????screen.blit(background,?(0,?0))???? ????? ????#?顯示玩家飛機(jī)在位置[200,600] ????screen.blit(player,?[200,?600])???? ????? ????#?更新游戲屏幕 ????pygame.display.update()???? ????? ????#?游戲退出事件 ????for?event?in?pygame.event.get():???? ????????if?event.type?==?pygame.QUIT: ????????????pygame.quit() ????????????exit()

    ?


    2. 事件處理
    在主循環(huán)中處理鍵盤輸入的事件(上下左右按鍵操作),增加游戲操作交互(玩家飛機(jī)的上下左右移動(dòng))。
    詳細(xì)步驟

    • 獲取鍵盤事件(上下左右按鍵)

    • 處理鍵盤事件(移動(dòng)飛機(jī)的位置)

    • 將上述步驟代碼放入游戲主循環(huán)中

    示例代碼

    1 2 3 4 5 6 7 8 9 10 11 12 #1.?獲取鍵盤事件(上下左右按鍵) key_pressed?=?pygame.key.get_pressed() #2.?處理鍵盤事件(移動(dòng)飛機(jī)的位置) if?key_pressed[K_w]?or?key_pressed[K_UP]: ????player.moveUp() if?key_pressed[K_s]?or?key_pressed[K_DOWN]: ????player.moveDown() if?key_pressed[K_a]?or?key_pressed[K_LEFT]: ????player.moveLeft() if?key_pressed[K_d]?or?key_pressed[K_RIGHT]: ????player.moveRight()

    ?


    3. ***處理
    ***由玩家飛機(jī)發(fā)出,并以一定速度向界面上方移動(dòng)。
    詳細(xì)步驟

    • 生成***,需要控制發(fā)射頻率

    • 以固定速度移動(dòng)***

    • 移動(dòng)出屏幕后刪除***

    • 敵機(jī)被***擊中效果處理(下一節(jié)處理)

    示例代碼

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #1.?生成***,需要控制發(fā)射頻率 #?首先判斷玩家飛機(jī)沒有被擊中 if?not?player.is_hit:?? ??if?shoot_frequency?%?15?==?0: ????????player.shoot(bullet_img) ????shoot_frequency?+=?1 ????if?shoot_frequency?>=?15: ????????shoot_frequency?=?0 ????????? for?bullet?in?player.bullets:?? ??#2.?以固定速度移動(dòng)*** ????bullet.move()?? ??#3.?移動(dòng)出屏幕后刪除*** ????if?bullet.rect.bottom?<?0: ????????player.bullets.remove(bullet)???????????? #?顯示*** player.bullets.draw(screen)

    ?


    4. 敵機(jī)處理
    敵機(jī)需要隨機(jī)在界面上方產(chǎn)生,并以一定速度向下移動(dòng)。
    詳細(xì)步驟

    • 生成敵機(jī),需要控制生成頻率

    • 移動(dòng)敵機(jī)

    • 敵機(jī)與玩家飛機(jī)碰撞效果處理

    • 移動(dòng)出屏幕后刪除敵機(jī)

    • 敵機(jī)被***擊中效果處理

    示例代碼

    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 29 30 31 32 33 34 35 36 37 38 39 40 41 #1.?生成敵機(jī),需要控制生成頻率 if?enemy_frequency?%?50?==?0: ????enemy1_pos?=?[random.randint(0,?SCREEN_WIDTH?-?enemy1_rect.width),?0] ????enemy1?=?Enemy(enemy1_img,?enemy1_down_imgs,?enemy1_pos) ????enemies1.add(enemy1) enemy_frequency?+=?1if?enemy_frequency?>=?100: ????enemy_frequency?=?0 ????? for?enemy?in?enemies1:???? ????#2.?移動(dòng)敵機(jī) ????enemy.move()?? ????#3.?敵機(jī)與玩家飛機(jī)碰撞效果處理 ????if?pygame.sprite.collide_circle(enemy,?player): ????????enemies_down.add(enemy) ????????enemies1.remove(enemy) ????????player.is_hit?=?True ????????break ????#4.?移動(dòng)出屏幕后刪除飛機(jī)???? ????if?enemy.rect.top?<?0: ????????enemies1.remove(enemy) ????????? #5.?敵機(jī)被***擊中效果處理 #?將被擊中的敵機(jī)對(duì)象添加到擊毀敵機(jī)Group中,用來渲染擊毀動(dòng)畫 enemies1_down?=?pygame.sprite.groupcollide(enemies1,?player.bullets,?1,?1) for?enemy_down?in?enemies1_down: ????enemies_down.add(enemy_down) ????? #?敵機(jī)被***擊中效果顯示 for?enemy_down?in?enemies_down:?? ??if?enemy_down.down_index?==?0:??? ???????pass ????if?enemy_down.down_index?>?7: ????????enemies_down.remove(enemy_down) ????????score?+=?1000 ????????continue ????screen.blit(enemy_down.down_imgs[enemy_down.down_index?/?2],?enemy_down.rect) ????enemy_down.down_index?+=?1 ????? #?顯示敵機(jī) enemies1.draw(screen)

    ?


    5. 得分顯示
    在游戲界面固定位置顯示消滅了多少目標(biāo)敵機(jī)。
    示例代碼

    1 2 3 4 5 6 #?繪制得分 score_font?=?pygame.font.Font(None,?36) score_text?=?score_font.render(str(score),?True,?(128,?128,?128)) text_rect?=?score_text.get_rect() text_rect.topleft?=?[10,?10] screen.blit(score_text,?text_rect)

    ?

    四、完整代碼參考
    大家可以按照上述步驟組合出自己的打飛機(jī)游戲,也可以登陸實(shí)驗(yàn)樓官方網(wǎng)站參考完整代碼。

    (http://www.shiyanlou.com/courses/49)

    更多基礎(chǔ)課、項(xiàng)目課歡迎登陸實(shí)驗(yàn)樓官方網(wǎng)站http://www.shiyanlou.com/courses/

    總結(jié)

    以上是生活随笔為你收集整理的pygame开发PC端微信打飞机游戏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。