五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

隕石動效完成!從零開始用Python編程制作飛機大戰(zhàn)游戲 P07

2023-08-22 00:19 作者:我真帥啊kk  | 我要投稿

'''編完之后回頭看有看不懂代碼的意義?來看看我的加注釋版吧,標記了各個代碼的意義,如有問題敬請指出'''?

# Time : 2023/6/30 22:08

# !/user/bin/env python3

# -*- coding: utf-8 -*-

import random # 導入random庫,進行隨機運算


import pygame # 導入pygame庫


import os # 導入os庫進行文件操作


# 定義常量

WIDTH = 500 # 窗口的寬

HEIGHT = 600 # 窗口的高

WHITE = (255, 255, 255) # 白色RGB常量

GREEN = (0, 255, 0) # 綠色RGB常量

RED = (255, 0, 0) # 紅石RGB常量

YELLOW = (255, 255, 0) # 黃色RGB常量

BLACK = (0, 0, 0) # 黑色RGB常量


# 游戲初始化

pygame.init() # 游戲初始化

pygame.mixer.init() # 音頻初始化

screen = pygame.display.set_mode((WIDTH, HEIGHT)) # 設置界面寬高

pygame.display.set_caption('飛機大戰(zhàn)(plane_war)') # 設置標題

clock = pygame.time.Clock() # 創(chuàng)建時鐘對象


# 加載圖片

background_img = pygame.image.load(os.path.join('img', 'background.png')).convert() # 背景圖

player_img = pygame.image.load(os.path.join('img', 'player.png')).convert() # 加載飛機圖片

rock_img = pygame.image.load(os.path.join('img', 'rock.png')).convert() # 加載隕石圖片

bullet_img = pygame.image.load(os.path.join('img', 'bullet.png')).convert() # 加載子彈圖片


rock_imges = [] # 創(chuàng)建隕石圖片列表

for i in range(7): # for循環(huán)遍歷

rock_imges.append(pygame.image.load(os.path.join('img', f'rock{i}.png')).convert())

# 格式化字符串,遍歷出每一個圖片素材并加進隕石圖片列表


# 加載聲音

shoot_sound = pygame.mixer.Sound(os.path.join('sound', 'shoot.wav')) # 加載射擊音效

# 加載隕石爆炸音效,組成列表

expl_sounds = [

pygame.mixer.Sound(os.path.join('sound', 'expl0.wav')),

pygame.mixer.Sound(os.path.join('sound', 'expl1.wav'))

]

pygame.mixer.music.load(os.path.join('sound', 'background.ogg')) # 加載背景音樂

pygame.mixer.music.set_volume(0.5) # 調(diào)整背景音樂音量



class Player(pygame.sprite.Sprite): # 創(chuàng)建玩家類

def __init__(self): # 初始化函數(shù)

pygame.sprite.Sprite.__init__(self)

self.image = pygame.transform.scale(player_img, (50, 40)) # 角色設置成飛機圖片,并調(diào)整圖片大小

self.image.set_colorkey(BLACK) # 將素材中的黑色改透明


self.rect = self.image.get_rect() # 獲得輪廓

self.radius = 23 # 設置半徑

# pygame.draw.circle(self.image, RED, self.rect.center, self.radius)


self.rect.centerx = WIDTH / 2 # 設置x中心

self.rect.bottom = HEIGHT - 20 # 底部坐標


self.speedx = 8 # 設置x速度


def update(self): # 位置更新

key_pressed = pygame.key.get_pressed() # 鍵狀態(tài)的列表

if key_pressed[pygame.K_RIGHT]: # 按下右方向鍵向右移動

self.rect.x += self.speedx


if key_pressed[pygame.K_LEFT]: # 檢測按下左方向鍵

self.rect.x -= self.speedx # 將x減speedx,相當于向左移動


if self.rect.right > WIDTH: # 檢測是否超過右邊緣

self.rect.right = WIDTH # 條件達成則回到右邊緣


if self.rect.left < 0: # 檢測是否超過左邊緣

self.rect.left = 0 # 條件達成則回到左邊緣


def shoot(self):

bullet = Bullet(

self.rect.centerx, self.rect.centery) # 創(chuàng)建子彈對象

all_sprites.add(bullet) # 將子彈對象加進角色列表中

bullets.add(bullet) # 將子彈對象加進子彈角色列表中

shoot_sound.play() # 播放子彈發(fā)射的聲音



class Rock(pygame.sprite.Sprite): # 創(chuàng)建隕石類

def __init__(self): # 初始化函數(shù)

pygame.sprite.Sprite.__init__(self)

self.image_origin = random.choice(rock_imges) # 將角色設置成隕石圖片

self.image_origin.set_colorkey(BLACK) # 將素材中的黑色改為透明

self.image = self.image_origin.copy() # 拷貝原本圖片到變量


self.rect = self.image.get_rect() # 獲得輪廓


self.radius = self.rect.width / 2.3 # 設置半徑

# pygame.draw.circle(self.image, RED, self.rect.center, self.radius)


self.rect.x = random.randrange(0, WIDTH - self.rect.width) # 設置隕石掉下來的x

self.rect.y = random.randrange(-180, -100) # 設置隕石初始y


# self.speedy = random.randrange(2, 5) # 隨機設置掉下速度

self.speedy = 1

self.speedx = random.randrange(-3, 3) # 隨機左右移動


self.rot_degree = random.randrange(-3, 3) # 隨機設置累加速度的值

self.total_degree = 0 # 初始化旋轉(zhuǎn)的速度


def rotate(self):

self.total_degree += self.rot_degree # 累加速度

self.total_degree = self.total_degree % 360 # 將旋轉(zhuǎn)速遞設為旋轉(zhuǎn)速度除360的余數(shù),以防旋轉(zhuǎn)速遞超過360

self.image = pygame.transform.rotate(self.image_origin, self.total_degree) # 圖片轉(zhuǎn)動

center = self.rect.center # 將中心點位置保存在變量中

self.rect = self.image.get_rect() # 獲取長方形輪廓

self.rect.center = center # 將之前保存的中心點重新賦值給self.rect.center,以保持圖像的中心位置不變。





def update(self): # 位置更新

self.rotate() # 調(diào)用隕石轉(zhuǎn)動方法

self.rect.y += self.speedy # 隕石不斷增加y坐標

self.rect.x += self.speedx # 隕石不斷更新x坐標

if self.rect.top > HEIGHT or self.rect.left > WIDTH or self.rect.right < 0: # 判斷輪廓超出邊緣就重新回到上面

self.rect.x = random.randrange(0, WIDTH - self.rect.width) # 設置隕石掉下來的x

self.rect.y = random.randrange(-100, -40) # 設置隕石初始y


self.speedy = random.randrange(2, 10) # 隨機設置掉下速度

self.speedx = random.randrange(-3, 3) # 隨機左右移動



class Bullet(pygame.sprite.Sprite): # 創(chuàng)建子彈類

def __init__(self, x, y): # 初始化函數(shù)

pygame.sprite.Sprite.__init__(self)

self.image = bullet_img # 將角色設置成子彈圖片

self.image.set_colorkey(BLACK) # 將素材中的黑色改為透明


self.rect = self.image.get_rect() # 獲得輪廓

self.rect.x = x # 設置子彈初始的的x,與飛機x一樣

self.rect.y = y # 設置子彈初始的的y,與飛機y一樣


self.speedy = -10 # 子彈飛行速度(y變化的跨度)


def update(self): # 位置更新

self.rect.y += self.speedy # 子彈不斷增加y坐標

if self.rect.bottom < 0: # 檢測子彈超過邊緣,則清除

self.kill() # 清除角色



all_sprites = pygame.sprite.Group() # 創(chuàng)建所有角色表

rocks = pygame.sprite.Group() # 創(chuàng)建隕石角色表

bullets = pygame.sprite.Group() # 創(chuàng)建子彈角色表


player = Player() # 創(chuàng)建玩家類對象

all_sprites.add(player) # 將創(chuàng)建的玩家類對象放入角色列表


pygame.mixer.music.play(-1) # 循環(huán)播放背景音樂


for item in range(10): # 循環(huán)10次,共創(chuàng)建10個隕石對象

rock = Rock() # 創(chuàng)建隕石對象

all_sprites.add(rock) # add:增加,將隕石對象加進角色列表

rocks.add(rock) # 將隕石對象加進隕石列表


running = True # 定義工具變量用于控制循環(huán)

while running: # 主循環(huán),循環(huán)至關(guān)閉窗口


clock.tick(60) # 設置幀數(shù)


for event in pygame.event.get(): # 獲取事件


if event.type == pygame.QUIT: # 判斷是否為退出事件

running = False # 如果是,則將變量設為False,停止循環(huán)

elif event.type == pygame.KEYDOWN: # 檢測有按鍵按下

if event.key == pygame.K_SPACE: # 判斷是否為空格

player.shoot() # 如果是,則調(diào)用射擊函數(shù)射出子彈


all_sprites.update() # 調(diào)用角色池里面的位置更新方法


hits_rock_and_bullet = pygame.sprite.groupcollide(rocks, bullets, True, True) # 檢測隕石是否碰到子彈,

# 如果碰到則刪除并新建一個隕石

for hit in hits_rock_and_bullet:

random.choice(expl_sounds).play() # 播放隕石被擊碎的音頻

r = Rock() # 新建一個隕石對象并賦值到r

all_sprites.add(r) # 在所有角色表中增加隕石對象

rocks.add(r) # 在隕石角色表中增加隕石對象


hits_rock_and_player = pygame.sprite.spritecollide(player, rocks, False, pygame.sprite.collide_circle) # 檢測隕石碰到飛機

if hits_rock_and_player:

running = False # 將工具變量設為False,停止游戲


screen.fill(BLACK) # 設置窗口界面顏色,顯示畫面

screen.blit(background_img, (0, 0)) # 填充背景圖片


all_sprites.draw(screen) # 繪制角色


pygame.display.update() # 更新狀態(tài)


pygame.quit() # 退出


隕石動效完成!從零開始用Python編程制作飛機大戰(zhàn)游戲 P07的評論 (共 條)

分享到微博請遵守國家法律
甘南县| 长宁县| 常熟市| 彝良县| 莱芜市| 洪湖市| 昌吉市| 宜兰市| 汉中市| 聂拉木县| 赫章县| 介休市| 西吉县| 罗平县| 新兴县| 浦城县| 库车县| 南雄市| 法库县| 新和县| 澄城县| 池州市| 衡山县| 镶黄旗| 达州市| 鸡西市| 通城县| 娄烦县| 全椒县| 丽水市| 安溪县| 射阳县| 陵水| 庄河市| 云浮市| 海城市| 洞口县| 吉木乃县| 瓦房店市| 高安市| 鄂托克前旗|