雷电pygame代码
生活随笔
收集整理的這篇文章主要介紹了
雷电pygame代码
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
import pygame, os
import time
import random
from pygame.sprite import Sprite
from pygame.sprite import Groupdef fire_music():pass# 設(shè)置開(kāi)火音樂(lè)# effect = pygame.mixer.Sound('sounds/fire.wav')# pygame.mixer.Sound.play(effect)class Boss(Sprite):def __init__(self,boss_img_name):super().__init__()# 加載BOSS圖片self.image = pygame.image.load('圖片/'+boss_img_name+'.png').convert_alpha()# 轉(zhuǎn)換BOSS大小# self.image = pygame.transform.scale(self.image, (1, 12))# 生成BOSS矩形框架self.rect = self.image.get_rect()self.blood = 1000# boss左右移動(dòng)的速度self.speed = 3.5def move(self):if self.rect.centerx>=512:self.speed =-self.speedif self.rect.centerx<=0:self.speed = -self.speedself.rect.centerx +=self.speedclass Enemy(Sprite):def __init__(self,screen):# 必須設(shè)置繼承精靈 不然在使用精靈函數(shù)時(shí)會(huì)報(bào)錯(cuò)super().__init__()# 獲取屏幕對(duì)象self.screen = screen# 隨機(jī) 生成5個(gè)編號(hào)alien_num = random.randint(1,5)# 隨機(jī) 加載五個(gè)飛機(jī)中的某個(gè)self.image = pygame.image.load('圖片/alien_' + str(alien_num) + '.png')# picture = pygame.transform.scale(picture, (1280, 720))self.image = pygame.transform.scale(self.image,(62,62))# 獲取飛機(jī)的 rectself.rect = self.image.get_rect()# 擊落本機(jī)獲得的分?jǐn)?shù)self.score = 10# 加載子彈的圖片self.bullet_img = pygame.image.load("圖片/alien_bullet.png").convert_alpha()self.bullet_img = pygame.transform.scale(self.bullet_img, (12, 12))# 以下為可以調(diào)節(jié)子彈尺寸的代碼# picture = pygame.transform.scale(picture, (1280, 720))#飛機(jī)的移動(dòng)速度self.speed = random.randint(3,5)#生成子彈精靈組合self.bullets = Group()# 敵機(jī)射擊頻率self.shoot_frequency = 0# 飛機(jī)出現(xiàn)def move(self):self.rect.top += 5#暫時(shí)不用射擊# self.shoot()# self.moveBullet()# 發(fā)射子彈def shoot(self):if self.shoot_frequency % 200 == 0:bullet = Enemy_Bullet(self.bullet_img, self.rect.midbottom)self.bullets.add(bullet)self.shoot_frequency += 1if self.shoot_frequency > 200:self.shoot_frequency = 1# 刪除子彈def moveBullet(self):for bullet in self.bullets:bullet.move()if bullet.rect.bottom < 0:self.bullets.remove(bullet)# 繪制子彈def drawBullets(self, scr):self.bullets.draw(scr)class Enemy_Bullet(pygame.sprite.Sprite):def __init__(self, init_pos):pygame.sprite.Sprite.__init__(self)self.image = pygame.image.load("圖片/alien_bullet.png").convert_alpha()self.image = pygame.transform.scale(self.image, (12, 12))self.rect = self.image.get_rect()# 敵機(jī)子彈初始位置設(shè)置self.rect.midbottom = init_posself.rect.centery +=36self.speed = 8def move(self):self.rect.top += self.speed
class MyHero(Sprite):_rate = 100 # 每幀停留的毫秒數(shù)def __init__(self,screen,size = 1):super().__init__()# 獲取屏幕對(duì)象self.screen = screen# 獲取整張圖片self.image_big = pygame.image.load('圖片/hero.png').convert_alpha()# subsurface 形成大圖的子表面框架# 獲取飛機(jī)正面圖片self.image = self.image_big.subsurface(pygame.Rect(120, 0, 318 - 240, 87))# 獲取飛機(jī)正面矩形框架尺寸self.rect = self.image.get_rect()# 獲取屏幕對(duì)象矩形self.screen_rect = screen.get_rect()# 獲取屏幕正中x坐標(biāo)self.rect.centerx = self.screen_rect.centerx# 獲取屏幕底部y坐標(biāo)self.rect.centery = self.screen_rect.bottom - self.rect.height# 設(shè)置飛機(jī)初始位置self.centerX = float(self.rect.centerx)self.centerY = float(self.rect.centery)# 飛機(jī)尾焰self.air = None# 設(shè)置飛機(jī)尾焰位置self.air_rect = pygame.Rect(self.centerX - 20,self.centerY+int((self.rect.height+72)/2)-10-36,40,72)#玩家所有發(fā)射子彈的集合self.bullets = Group()self.bullet_image = pygame.image.load('圖片/bullet_1.png').convert_alpha()# 子彈射擊def shoot(self):# 產(chǎn)生一顆子彈實(shí)例bullet = Bullet(self.bullet_image,self.rect.midtop)# 在group子彈精靈集合中加入子彈self.bullets.add(bullet)# 子彈刪除def moveBullet(self):# 逐個(gè)檢查子彈精靈集合 到達(dá)屏幕頂端的子彈刪除for bullet in self.bullets:bullet.move()if bullet.rect.bottom < 0:self.bullets.remove(bullet)# 子彈顯示def drawBullets(self, scr):# 將精靈集合中的子彈繪制到屏幕上self.bullets.draw(scr)# 向上飛時(shí),增加噴射火焰def set_air(self, case):if case == 'up':air = pygame.image.load('圖片/air.png').convert_alpha()img = air.subsurface(pygame.Rect(80, 0, 50, 87))self.air = imgelif case == 'remove':self.air = None# 根據(jù)移動(dòng)方向獲取飛機(jī)移動(dòng)狀態(tài)的圖片def set_image(self, case):if case=='left':rect = pygame.Rect(195,0,318-248,87)image = self.image_big.subsurface(rect)elif case =='right':rect = pygame.Rect(195,0,318-248,87)image = pygame.transform.flip(self.image_big.subsurface(rect), True, False)elif case == 'up' or case == 'down':rect = pygame.Rect(120, 0, 318 - 240, 87)image = self.image_big.subsurface(rect)self.image = imageclass Bullet(pygame.sprite.Sprite):def __init__(self, bullet_img, init_pos):pygame.sprite.Sprite.__init__(self)self.image = bullet_imgself.rect = bullet_img.get_rect()self.rect.midbottom = init_posself.speed = 25def move(self):self.rect.top -= self.speed# 初始化pygame
pygame.init()
# pygame.mixer.init()
# pygame.mixer_music.load('sounds/enviro.mp3') # 加載播放音樂(lè)
# pygame.mixer.music.play(-1) #-1 為循環(huán)播放
# 設(shè)置游戲主題
pygame.display.set_caption('AirCraft')
# 初始化屏幕大小
screen = pygame.display.set_mode((512,768))# 設(shè)置游戲背景圖片
# 游戲剛開(kāi)始時(shí)的背景圖
bg_img0 = pygame.image.load('圖片/start_bg.jpg').convert()
# 加載游戲開(kāi)始圖標(biāo)
start_img = pygame.image.load('圖片/start.png').convert_alpha()
start_rect = start_img.get_rect()
start_rect.centerx = 262
start_rect.centery = 455
# 游戲進(jìn)行中的背景圖
bg_img1 = pygame.image.load('圖片/map1.jpg').convert()
bg_img2 = bg_img1.copy()
# 游戲結(jié)束時(shí)的背景圖
bg_img3 = pygame.image.load('圖片/map3.jpg').convert()
# 加載游戲結(jié)束圖標(biāo)
gameover_img = pygame.image.load('圖片/gameover.png').convert_alpha()
# 加載游戲成功圖標(biāo)
gamesuccess = pygame.image.load('圖片/success.png').convert_alpha()# 加載重玩圖標(biāo)
restart_img = pygame.image.load('圖片/restart.png').convert_alpha()
restart_rect = restart_img.get_rect()
restart_rect.centerx = 249
restart_rect.centery = 420
# 背景圖片初始位置
pos_y1 = -768
pos_y2 = 0# 實(shí)例化BOSS
boss = Boss('boss_1')
bosses = Group()
bosses.add(boss)
# 測(cè)試主角圖片
# air = pygame.image.load('圖片/air.png').convert_alpha()
# img = air.subsurface(pygame.Rect(80, 0, 50, 87))
# image_big = pygame.image.load('圖片/hero.png').convert_alpha()
# image = image_big.subsurface(pygame.Rect(195,0,318-248,87))# 生成我方飛機(jī)
student_plane = MyHero(screen)# 生成敵方飛機(jī)
# 生成敵機(jī)group
enemies = Group()
# 生成敵機(jī)子彈
enemy_bullets = Group()
max_enemies = 9 # 設(shè)置敵機(jī)數(shù)量總數(shù)為9
# 敵機(jī)隨機(jī)出現(xiàn)的節(jié)奏 下方randint參數(shù) 為43,55
ran1,ran2 = 30,40# 生成計(jì)時(shí)頻率變量
sec = 0
# 生成分?jǐn)?shù)
score = 0
# 設(shè)置系統(tǒng)字體
my_font = pygame.font.Font('fonts/msyh.ttf', 18)# 游戲主循環(huán)
# 設(shè)置游戲狀態(tài) 開(kāi)始 結(jié)束
game = 'wait'while True:# 游戲在等待狀態(tài)if game =='wait':# 最小游戲框架一個(gè)都不能省略for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()# 檢測(cè)鼠標(biāo)是否按下 重新開(kāi)始按鈕if event.type == pygame.MOUSEBUTTONDOWN:# 檢測(cè)鼠標(biāo)點(diǎn)擊位置是否與重啟rect重疊if start_rect.collidepoint(event.pos):student_plane.__init__(screen)game = 'ing'# 游戲結(jié)束游戲畫(huà)面暫停screen.blit(bg_img0, (0, 0))screen.blit(start_img, start_rect)# 測(cè)試尾焰位置pygame.display.flip()time.sleep(0.05)# 游戲進(jìn)行狀態(tài)elif game == 'ing':# 設(shè)置這3行 監(jiān)聽(tīng)事件 并且內(nèi)部設(shè)定了延遲防止游戲卡死# 屏幕滾動(dòng)-----------------------------------------------------screen.blit(bg_img1, (0, pos_y1))screen.blit(bg_img2, (0, pos_y2))# 測(cè)試尾焰位置# screen.blit(img, (100, 100))pos_y1 += 1pos_y2 += 1# 屏幕背景滾動(dòng)完畢后重置位置if pos_y1 >= 0:pos_y1 = -768if pos_y2 >= 768:pos_y2 = 0for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()# 監(jiān)聽(tīng)鍵盤(pán)事件# 按鍵彈起取消飛機(jī)向上尾焰 矯正飛機(jī)姿勢(shì)if event.type == pygame.KEYUP:student_plane.set_image('down')student_plane.air = None# 發(fā)射子彈if event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE and len(student_plane.bullets) <6: # 檢查子彈集合的數(shù)量限制子彈最大數(shù)量fire_music()# 產(chǎn)生一顆子彈實(shí)例# 在group子彈精靈集合中加入子彈student_plane.shoot()# 將精靈集合中的子彈繪制到屏幕上student_plane.drawBullets(screen)# 逐個(gè)檢查子彈精靈集合 到達(dá)屏幕頂端的子彈刪除student_plane.moveBullet()keys = pygame.key.get_pressed()if keys[pygame.K_a]:# 設(shè)置飛機(jī)狀態(tài)圖片student_plane.set_image('left')if student_plane.rect.centerx>=40:student_plane.rect.centerx -=8.5elif keys[pygame.K_d]:# 設(shè)置飛機(jī)狀態(tài)圖片student_plane.set_image('right')if student_plane.rect.centerx <= 478:student_plane.rect.centerx +=8.5elif keys[pygame.K_w]:#設(shè)置飛機(jī)狀態(tài)圖片student_plane.set_image('up')student_plane.set_air('up')if student_plane.rect.centery >= 45:student_plane.rect.centery -=8.5elif keys[pygame.K_s]:# 設(shè)置飛機(jī)狀態(tài)圖片student_plane.set_image('down')if student_plane.rect.centery <= 727:student_plane.rect.centery +=8.5# 顯示飛機(jī)screen.blit(student_plane.image,student_plane.rect)if student_plane.air != None:screen.blit(student_plane.air, (student_plane.rect.centerx-30, student_plane.rect.centery+33))# 敵機(jī) ---------------------------------------------------------------------------------------# 敵機(jī)移動(dòng)# 控制時(shí)間節(jié)奏 sec變量sec +=1#隨機(jī)控制生成敵機(jī)的節(jié)奏rhy = random.randint(ran1,ran2)# 敵機(jī)最多數(shù)量if sec%rhy ==0 and len(enemies) < max_enemies or sec ==1: # 設(shè)置敵機(jī)數(shù)量總數(shù)為9# 生成一只敵機(jī)enemy = Enemy(screen)enemy.rect.centerx=random.randint(0,512)# 生成上述敵機(jī)的子彈enemy_bullet = Enemy_Bullet((enemy.rect.centerx,enemy.rect.centery))# 敵機(jī)group 和 敵機(jī)子彈group加載敵機(jī)和子彈enemies.add(enemy)enemy_bullets.add(enemy_bullet)# 敵機(jī)出現(xiàn) 和 敵機(jī)子彈出現(xiàn)enemies.draw(screen)enemy_bullets.draw(screen)# 迭代敵機(jī)集合for enemy in enemies:# 讓每個(gè)對(duì)象移動(dòng)起來(lái)enemy.move()# 敵機(jī)超出屏幕邊界后 自動(dòng)刪除敵機(jī)collision_over1 = pygame.sprite.collide_rect(student_plane, enemy)if collision_over1:# 為了重啟游戲時(shí) 防止有舊子彈和飛機(jī)存在enemies.remove(enemy)game = 'over'if enemy.rect.bottom >768:enemies.remove(enemy)for enemy_bullet in enemy_bullets:# 讓每個(gè)對(duì)象移動(dòng)起來(lái)enemy_bullet.move()collision_over2 = pygame.sprite.collide_rect(student_plane, enemy_bullet)if collision_over2:# 為了重啟游戲時(shí) 防止有舊子彈和飛機(jī)存在enemy_bullets.remove(enemy_bullet)game = 'over'# 敵機(jī)子彈超出屏幕邊界后 自動(dòng)刪除敵機(jī)if enemy_bullet.rect.bottom >768:enemy_bullets.remove(enemy_bullet)# -----------------------Boss --------------------------if score >=140:# 小敵機(jī)出現(xiàn)的節(jié)奏ran1,ran2 = 15,25max_enemies = 17screen.blit(boss.image,boss.rect)boss.move()for my_bullet in student_plane.bullets:hit_boss = pygame.sprite.collide_rect(boss,my_bullet)if hit_boss:boss.blood -=1.2score+=1if boss.blood <=0:game = 'success'# 處理碰撞 ---------------------------碰撞檢測(cè)--------------------------------------------------# 參數(shù):# group1:精靈組1。# group2:精靈組2。# dokill1:發(fā)生碰撞時(shí),是否銷(xiāo)毀精靈組1中的發(fā)生碰撞的精靈。# dokill2:發(fā)生碰撞時(shí),是否銷(xiāo)毀精靈組2中的發(fā)生碰撞的精靈。collisions = pygame.sprite.groupcollide(student_plane.bullets, enemies, True, True)if collisions:score+=10# -----------游戲結(jié)束------------# 分?jǐn)?shù)和獎(jiǎng)勵(lì)的顯示-------------------------------------------------------------------------surface1 = my_font.render(u"當(dāng)前得分:%s"%(score),True,[255,0,0])screen.blit(surface1,[20,20])# 更新畫(huà)面pygame.display.flip()# 設(shè)置幀數(shù)和延遲time.sleep(0.05)#游戲結(jié)束狀態(tài)elif game == 'over':score = 0# 最小游戲框架一個(gè)都不能省略for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()# 檢測(cè)鼠標(biāo)是否按下 重新開(kāi)始按鈕if event.type == pygame.MOUSEBUTTONDOWN:# 檢測(cè)鼠標(biāo)點(diǎn)擊位置是否與重啟rect重疊if restart_rect.collidepoint(event.pos):student_plane.__init__(screen)game = 'ing'# 游戲結(jié)束游戲畫(huà)面暫停screen.blit(bg_img1, (0, pos_y1))screen.blit(bg_img2, (0, pos_y2))screen.blit(gameover_img, (163, 310))screen.blit(restart_img, restart_rect)# 測(cè)試尾焰位置# screen.blit(img, (100, 100))pos_y1 += 0pos_y2 += 0pygame.display.flip()time.sleep(0.05)# surface2 = my_font.render("Game Over" , True, [255, 0, 0])# screen.blit(surface1, [250, 350])elif game == 'success':score = 0boss.blood = 1000# 最小游戲框架一個(gè)都不能省略for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()# 檢測(cè)鼠標(biāo)是否按下 重新開(kāi)始按鈕if event.type == pygame.MOUSEBUTTONDOWN:# 檢測(cè)鼠標(biāo)點(diǎn)擊位置是否與重啟rect重疊if restart_rect.collidepoint(event.pos):student_plane.__init__(screen)game = 'ing'# 游戲結(jié)束游戲畫(huà)面暫停screen.blit(bg_img1, (0, pos_y1))screen.blit(bg_img2, (0, pos_y2))screen.blit(gamesuccess, (170, 220))screen.blit(restart_img, restart_rect)# 測(cè)試尾焰位置# screen.blit(img, (100, 100))pos_y1 += 0pos_y2 += 0pygame.display.flip()time.sleep(0.05)
要圖片的
私信
總結(jié)
以上是生活随笔為你收集整理的雷电pygame代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 48种字体特效
- 下一篇: 物联网发展的十个预言