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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python飞机大战游戏素材_python实现飞机大战小游戏

發(fā)布時間:2023/12/9 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python飞机大战游戏素材_python实现飞机大战小游戏 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文實例為大家分享了python實現飛機大戰(zhàn)的具體代碼,供大家參考,具體內容如下

初學Python,寫了一個簡單的Python小游戲。

師出bilibili某前輩

pycharm自帶了第三方庫pygame,安裝一下就好了,很方便。

雖然很多大佬已經給出了步驟,我這里還是啰嗦一下,也為了自己鞏固一下。

上圖:

這里再給出代碼的邏輯架構

plane_main.py

import pygame

from plane_sprites import *

class PlaneGame(object):

"""飛機大戰(zhàn)主游戲"""

def __init__(self):

print("游戲初始化")

#1.創(chuàng)建游戲窗口

self.screen=pygame.display.set_mode(SCREEN_RECT.size)

#2.創(chuàng)建游戲的時鐘

self.clock=pygame.time.Clock()

#3.調用私有方法,精靈和精靈組的創(chuàng)建

self.__creat_sprites()

#4.設置定時器事件-1s敵機出現

pygame.time.set_timer(CREATE_ENEMY_EVENT,1000)

pygame.time.set_timer(HERO_FIRE_EVENT, 500)

def __creat_sprites(self):

# 創(chuàng)建精靈

bg1 = Background()

bg2 = Background(True)

# 創(chuàng)建精靈組

self.back_group = pygame.sprite.Group(bg1,bg2)

#創(chuàng)建敵機的精靈組

self.enemy_group=pygame.sprite.Group()

#創(chuàng)建英雄的精靈和精靈組

self.hero=Hero()

self.hero_group=pygame.sprite.Group(self.hero)

self.enemy_hit_group=pygame.sprite.Group();

def start_game(self):

print("游戲開始.....")

while True:

#1.設置刷新幀率

self.clock.tick(FRAME_PER_SEC)

#2.事件監(jiān)聽

self.__event_handler()

#3.碰撞檢測

self.__check_collide()

#4.更新繪制精靈組

self.__update_sprites()

#5.更新顯示

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:

print("敵機出場")

#創(chuàng)建敵機精靈

enemy=Enemy()

#將敵機精靈添加到敵機精靈組

self.enemy_group.add(enemy)

elif event.type==HERO_FIRE_EVENT:

self.hero.fire()

#elif event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT:

#print("向右移動....")

#使用鍵盤模塊

keys_pressed=pygame.key.get_pressed()

#判斷元組中對應的按鍵索引值

if keys_pressed[pygame.K_RIGHT]:

self.hero.speed=3

elif keys_pressed[pygame.K_LEFT]:

self.hero.speed = -3

else:

self.hero.speed = 0

def __check_collide(self):

#1.子彈摧毀敵機

enemy_hit = pygame.sprite.groupcollide(self.hero.bullets, self.enemy_group, True, True)

#2.敵機撞毀英雄

enemies=pygame.sprite.spritecollide(self.hero,self.enemy_group,True)

if len(enemies)>0:

#讓英雄犧牲

# self.hero.explode()

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("游戲結束")

pygame.quit()

exit()

if __name__ == '__main__':

#創(chuàng)建游戲對象

game=PlaneGame()

#啟動游戲

game.start_game()

plane_sprites.py

import random

import pygame

#屏幕大小常量

SCREEN_RECT=pygame.Rect(0,0,480,700)

#刷新幀率

FRAME_PER_SEC=60

explode_index=0

#創(chuàng)建定時器常量

CREATE_ENEMY_EVENT=pygame.USEREVENT

#創(chuàng)建發(fā)射子彈事件

HERO_FIRE_EVENT=pygame.USEREVENT+1

class GameSprite(pygame.sprite.Sprite):

"""飛機大戰(zhàn)游戲精靈"""

def __init__(self,image_name,speed=1):

# 調用父類的初始化方法

super().__init__()

# 定義對象的屬性

self.image=pygame.image.load(image_name)

self.rect=self.image.get_rect()

self.speed=speed

def update(self):

#在屏幕的垂直方向運動

self.rect.y+=self.speed

class Background(GameSprite):

"""游戲背景精靈"""

def __init__(self,is_alt=False):

#1.調用父類方法,實現精靈創(chuàng)建(image/rect/speed)

super().__init__("./images/background.png")

#2.判斷是否是交替圖像

if is_alt:

self.rect.y = -self.rect.height

def update(self):

#1.調用父類方法實現

super().update()

#2.判斷圖像是否移除屏幕,若移除,則設置到屏幕上面

if self.rect.y>=SCREEN_RECT.height:

self.rect.y= -self.rect.height

class Enemy(GameSprite):

"""敵機精靈"""

def __init__(self):

#1.調用父類方法,創(chuàng)建敵機精靈,指定敵機圖片

super().__init__("./images/enemy1.png")

#2.指定敵機的初始隨機速度1-3

self.speed=random.randint(1,3)

#3.指定敵機的初始隨機位置

self.rect.bottom=0

max_x=SCREEN_RECT.width-self.rect.width

self.rect.x=random.randint(0,max_x)

self.explode_index=0

def update(self):

#1.調用父類方法,保持垂直方向飛行

super().update()

#2.判斷是否飛出屏幕,如果是,則刪除精靈

if self.rect.y>=SCREEN_RECT.height:

#kill方法可以將精靈從精靈組中移出,精靈就會被自動銷毀,然后調用下面方法

self.kill()

#if self.explode_index==5:

#return

if self.explode_index!=0:

new_rect=self.rect

super.__init__("./images/enemy1_down1.png")

self.explode_index=self.explode_index+1

self.rect=new_rect

def __del__(self):

# print("敵機掛了%s"% self.rect)

pass

class Hero(GameSprite):

"""英雄精靈"""

def __init__(self):

#1.調用父類方法

super().__init__("./images/me1.png",0)

#2.設置英雄的初始位置

self.rect.centerx=SCREEN_RECT.centerx

self.rect.bottom=SCREEN_RECT.bottom-120

#創(chuàng)建子彈精靈組

self.bullets=pygame.sprite.Group()

def update(self):

self.rect.x+=self.speed

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("發(fā)射子彈...")

for i in (0,1,2):

#1.創(chuàng)建精靈組

bullet=Bullet()

#2.設置精靈位置

bullet.rect.bottom=self.rect.y-i*20

bullet.rect.centerx=self.rect.centerx

#3.添加到精靈組

self.bullets.add(bullet)

def explode(self,screen):

new_rect=self.rect

for i in (1,2,3,4):

super.__init__("./images/me_destroy_2.png")

self.rect.centerx=new_rect.centerx

self.rect.centery=new_rect.centery

screen.blit(self.image,(self.rect.x,self.rect.y))

pygame.display.update()

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("子彈被銷毀")

運行結果:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持我們。

本文標題: python實現飛機大戰(zhàn)小游戲

本文地址: http://www.cppcns.com/jiaoben/python/285094.html

總結

以上是生活随笔為你收集整理的python飞机大战游戏素材_python实现飞机大战小游戏的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。