Python飛機大戰
先用pip裝上pygame
左下角開啟終端,輸入pip install pygame
安裝成功
Pygamed的官方文件
測試一下好不好使(注意直譯器要選裝了pygame的那個)
import pygame
print(pygame.__version__)
結果如下:
程式碼如下:
plane_main.py
import pygame
# 從plane_sprites裡面匯入每個類。不需要用句點表示
from plane_sprites import *
# 繼承object
class PlaneGame(object):
# python三引號允許一個字串跨多行,寫多行註釋用
"""飛機大戰主遊戲"""
def __init__(self):
print("遊戲初始化")
# create window
self.screen = pygame.display.set_mode(SCREEN_RECT.size)
# create clock
self.clock = pygame.time.Clock()
# create sprites and groups
self.__create_sprites()
# create enemy
pygame.time.set_timer(CREATE_ENEMY_EVENT, 700)
pygame.time.set_timer(HERO_FIRE_EVENT, 500)
def __create_sprites(self):
# create bg sprites and groups
bg1 = Background()
bg2 = Background(True)
self.back_group = pygame.sprite.Group(bg1, bg2)
# create enemy group
self.enemy_group = pygame.sprite.Group()
# create hero sprites and groups
self.hero = Hero()
self.hero_group = pygame.sprite.Group(self.hero)
def start_game(self):
print("game starts!")
while True:
self.clock.tick(FRAME_PER_SEC)
self.__event_handler()
self.__check_collide()
self.__update_sprites()
pygame.display.update()
def __event_handler(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
PlaneGame.__game_over()
elif event.type == CREATE_ENEMY_EVENT:
enemy = Enemy()
self.enemy_group.add(enemy)
elif event.type == HERO_FIRE_EVENT:
self.hero.fire()
keys_pressed = pygame.key.get_pressed()
if keys_pressed[pygame.K_RIGHT]:
self.hero.speed = 10
elif keys_pressed[pygame.K_LEFT]:
self.hero.speed = -10
else:
self.hero.speed = 0
def __check_collide(self):
pygame.sprite.groupcollide(self.hero.bullets, self.enemy_group, True, True)
enemies = pygame.sprite.spritecollide(self.hero, self.enemy_group, True)
if len(enemies) > 0:
self.hero.kill()
PlaneGame.__game_over()
def __update_sprites(self):
self.back_group.update()
self.back_group.draw(self.screen)
self.enemy_group.update()
self.enemy_group.draw(self.screen)
self.hero_group.update()
self.hero_group.draw(self.screen)
self.hero.bullets.update()
self.hero.bullets.draw(self.screen)
@staticmethod
def __game_over():
print("game over")
pygame.quit()
exit()
if __name__ == '__main__':
game = PlaneGame()
game.start_game()
plane_sprites.py
import random
import pygame
# 螢幕大小
SCREEN_RECT = pygame.Rect(0, 0, 480, 700)
FRAME_PER_SEC = 60
CREATE_ENEMY_EVENT = pygame.USEREVENT
HERO_FIRE_EVENT = pygame.USEREVENT + 1
class GameSprite(pygame.sprite.Sprite):
def __init__(self, image_name, speed=1):
# use father class method
super().__init__()
self.image = pygame.image.load(image_name)
self.rect = self.image.get_rect()
self.speed = speed
def update(self):
# move up
self.rect.y += self.speed
class Background(GameSprite):
def __init__(self, is_alt=False):
super().__init__("./images/background.png")
# judge weather is alternative image
if is_alt:
self.rect.y = -self.rect.height
def update(self):
super().update()
# if is out of screen, move
if self.rect.y >= SCREEN_RECT.height:
self.rect.y = -self.rect.height
class Enemy(GameSprite):
def __init__(self):
super().__init__("./images/enemy1.png")
self.speed = random.randint(1, 5)
self.rect.bottom = 0
max_x = SCREEN_RECT.width - self.rect.width
self.rect.x = random.randint(0, max_x)
def update(self):
super().update()
if self.rect.y >= SCREEN_RECT.height:
print("game over")
pygame.quit()
exit()
def __del__(self):
print("killed!")
class Hero(GameSprite):
def __init__(self):
super().__init__("./images/me1.png", 0)
self.rect.centerx = SCREEN_RECT.centerx
self.rect.bottom = SCREEN_RECT.bottom - 120
self.bullets = pygame.sprite.Group()
def update(self):
self.rect.x += self.speed
# Hero can not be out of screen
if self.rect.x < 0:
self.rect.x = 0
elif self.rect.right > SCREEN_RECT.right:
self.rect.right = SCREEN_RECT.right
def fire(self):
print("firing")
for i in (1, 2, 3):
bullet = Bullet()
bullet.rect.bottom = self.rect.y - i * 20
bullet.rect.centerx = self.rect.centerx
self.bullets.add(bullet)
class Bullet(GameSprite):
def __init__(self):
super().__init__("./images/bullet1.png", -2)
def update(self):
super().update()
if self.rect.bottom < 0:
self.kill()
def __del__(self):
print("bullet is destroyed")
這個還有若干可以改進的點,例如生命值,子彈手動發射,子彈數,子彈種類,擊毀動畫,敵機種類,敵機炸彈,補血,暫停介面
相關文章
- 飛機大戰
- 飛機大戰小程式(1)
- Java小遊戲——飛機大戰Java遊戲
- Java實現飛機大戰遊戲Java遊戲
- 飛機大戰和javaweb商城專案JavaWeb
- 基於Flutter Canvas的飛機大戰(一)FlutterCanvas
- 基於Flutter Canvas的飛機大戰(二)FlutterCanvas
- python 入門實戰改進B站小甲魚飛機大戰增強版4.0Python
- python及pygame雷霆戰機遊戲專案實戰01 控制飛機PythonGAM遊戲
- 500行程式碼,教你用python寫個微信飛機大戰行程Python
- tkinter飛機大戰測試程式by李興球
- canvas繪製“飛機大戰”小遊戲,真香!Canvas遊戲
- 無聊嗎?寫個【飛機大戰】來玩吧(下篇)
- 無聊嗎?寫個【飛機大戰】來玩吧(上篇)
- Python_從零開始學習_(49) 飛機大戰_物件導向設計類Python物件
- 微信飛機大戰小遊戲編寫分享(上)遊戲
- 【筆記】《Python大戰機器學習》筆記Python機器學習
- 微信demo小遊戲:飛機大戰從無到有遊戲
- java飛機大戰小遊戲作業二次開發Java遊戲
- 飛機大戰中rect屬性儲存小數值解釋
- html+js 實現 推箱子 貪吃蛇和簡單的飛機大戰HTMLJS
- python 坦克大戰原始碼Python原始碼
- HTML5遊戲開發(四):飛機大戰之顯示場景和元素HTML遊戲開發
- HTML5遊戲開發(五):飛機大戰之讓所有元素動起來HTML遊戲開發
- python 打飛機專案 ( 基類封裝 )Python封裝
- python 打飛機專案 ( 讓敵機發射子彈 )Python
- 誰知道大連哪裡可以開飛機票哪裡可以買到假飛機票報銷哪裡可以做假的飛機票-大連攜程網
- python機器學習實戰(二)Python機器學習
- 無人飛機
- 史丹佛大學李飛飛等人談AI醫療:病床邊的計算機視覺AI計算機視覺
- 想要上手機器翻譯?飛槳教你用Transformer 一戰到底ORM
- 法國海軍計算機遭病毒入侵戰機受影響停飛兩天計算機
- “降維打擊”的《飛機大廚Airplane Chefs》能帶領著Cooking遊戲起飛嗎?AI遊戲
- python開發植物大戰殭屍遊戲Python遊戲
- Python寫個“點球大戰”小遊戲Python遊戲
- 匹馬搶三關:訊飛翻譯機3.0的破障之戰
- 飛機小專案
- [原始碼和文件分享]基於VC++的MFC類庫的飛機大戰遊戲的設計與實現原始碼C++遊戲