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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

飞机大战(源码+素材)

發(fā)布時(shí)間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 飞机大战(源码+素材) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

素材:https://fy98.cn
最近自學(xué)了一些爬蟲知識,沒有及時(shí)更新博客。這兩天花時(shí)間做了一個(gè)類似飛機(jī)大戰(zhàn)的游戲,再次放出源碼以及思路。

需要實(shí)現(xiàn)的地方:
主角動(dòng)作 碰撞效果 敵機(jī)狀態(tài) 分?jǐn)?shù)記錄 游戲暫停 子彈效果 子彈傷害
設(shè)計(jì)思路:
設(shè)計(jì)游戲框架背景循環(huán)圖
設(shè)計(jì)主角動(dòng)作 操控 (鼠標(biāo)或鍵盤都可)
產(chǎn)生敵機(jī)工廠 產(chǎn)生敵機(jī)
設(shè)計(jì)子彈效果 主角發(fā)射子彈
設(shè)計(jì)獎(jiǎng)勵(lì)效果
設(shè)計(jì)子彈 主角 敵機(jī) 獎(jiǎng)勵(lì) 相互碰撞的結(jié)果
主函數(shù) 循環(huán)事件
-----------大概思路就是這些 ----------------
下面先放出效果圖




-----------放出代碼思路-------------

import pygame,os,sys,math,time,random from pygame.locals import *#分析飛機(jī)大戰(zhàn):#1.開始界面: 背景,標(biāo)題,按鈕 ,底部動(dòng)畫,背景音樂music # 開始界面類: # 屬性: 圖片 , 屏幕 # 方法: 顯示 #開始界面 圖片 startImgs=[pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bk2.jpg"),(640,825)), #開始界面背景圖pygame.image.load(r"Game_Main\Img_File\title2.png"), #開始界面標(biāo)題pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\icon2.png"), (220, 60)), #開始按鈕圖標(biāo)pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\loading.png"),(640,640)), #背景襯托圖 透明圓pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\music_stop.png"),(45,45)), #音樂暫停按鈕pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\music_start.png"),(45,45)), #音樂開始按鈕pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\mouse3.png"),(30,30)), #鼠標(biāo)指針pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\icon2.png"),(284,82)), #開始按鈕圖標(biāo) 變換圖pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bk1.png"),(640,850)), #850-825 #游戲內(nèi)背景1pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bk4.png"),(640,850)), #游戲內(nèi)背景2# pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bk6.jpeg"),(640,825)), #載入界面圖] #加載界面底部四張圖 組成動(dòng)畫效果 statBotImg=[pygame.image.load(r"Game_Main\Img_File\1.png"), pygame.image.load(r"Game_Main\Img_File\2.png"), pygame.image.load(r"Game_Main\Img_File\3.png"), pygame.image.load(r"Game_Main\Img_File\4.png"), pygame.image.load(r"Game_Main\Img_File\5.png"), pygame.image.load(r"Game_Main\Img_File\6.png"), pygame.image.load(r"Game_Main\Img_File\7.png"), pygame.image.load(r"Game_Main\Img_File\8.png"), pygame.image.load(r"Game_Main\Img_File\9.png"), pygame.image.load(r"Game_Main\Img_File\10.png"), pygame.image.load(r"Game_Main\Img_File\11.png"),] #開始界面類 class StartPanel:#判斷鼠標(biāo)是否在開始游戲按鈕上isIn_Start=False#判斷鼠標(biāo)是否在BGM按鈕上isIn_BGM=False#判斷是否暫停BGMisOn_BGM=Truedef __init__(self,screen,imgs=startImgs):self.screen=screenself.imgs=imgs# self.btmimgs=btmimgs#控制標(biāo)題浮動(dòng)self.sin_y=0#顯示開始界面def Show(self):self.screen.blit(self.imgs[0],(0,0))#背景:#開始界面 游戲標(biāo)題 如果鼠標(biāo)停留 標(biāo)題回到初始位置Place_title=self.screen.blit(self.imgs[1],(180+30*math.cos(self.sin_y),100+50*math.sin(self.sin_y)))tempC=Place_title.collidepoint(pygame.mouse.get_pos())self.sin_y += 0.05if self.sin_y>=100: #約束變量累加過大 產(chǎn)生的系統(tǒng)卡頓self.sin_y=0elif tempC:Place_title=tempC#BGM開關(guān)if StartPanel.isOn_BGM==True:Place_BGM=self.screen.blit(self.imgs[4], (30, 740))tempA = Place_BGM.collidepoint(pygame.mouse.get_pos())StartPanel.isIn_BGM = tempAelse:Place_BGM = self.screen.blit(self.imgs[5], (33, 743))tempA = Place_BGM.collidepoint(pygame.mouse.get_pos())StartPanel.isIn_BGM = tempA#開始界面 開始按鈕Place_StartBtm=self.screen.blit(self.imgs[2],(210,350))tempB=Place_StartBtm.collidepoint(pygame.mouse.get_pos())StartPanel.isIn_Start=tempB# self.isIn_Start=tempBif StartPanel.isIn_Start:# if self.isIn_Start:self.screen.blit(self.imgs[7], (185, 340))#開始界面 背景襯托圖 透明圓self.screen.blit(self.imgs[3],(0,66))# 鼠標(biāo)指針temp=pygame.mouse.get_pos()self.screen.blit(self.imgs[6], pygame.mouse.get_pos()) #游戲加載界面 loadImages=[pygame.transform.scale(pygame.image.load("Game_Main/Img_File/bk5.png"),(640,800)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/bk6.png"),(150,160)), ] class LoadWindows():#控制圖片變換 時(shí)間load_time=Falsetime_add=0def __init__(self, screen, pos,imgs=loadImages,btmimgs=statBotImg):self.screen=screenself.imgs=loadImages[0]self.rect=self.imgs.get_rect()self.rect.topleft=posself.image=imgsself.btmimgs = btmimgs# 控制加載界面底部圖片動(dòng)畫self.btmIndex = 0self.btmAdd = 0 # 累加變量 控制動(dòng)畫速度def Show(self):#判斷 加載界面是否完成if self.load_time==False:self.time_add += 1#渲染圖片self.screen.blit(self.imgs, self.rect)self.screen.blit(self.image[1], (10, 10))if self.time_add == 260:self.load_time = Trueself.Move()#渲染文字self.screen.blit(font_tips.render("Tips:",True,pygame.Color("black")),(25,540))self.screen.blit(font_tips.render("1.您可通過F1鍵更換鍵鼠操作模式。",True,pygame.Color("red")),(50,580))self.screen.blit(font_tips.render("2.游戲主界面左下角可關(guān)閉背景音樂。ESC鍵可強(qiáng)制返回主界面",True,pygame.Color("red")),(50,610))self.screen.blit(font_tips.render("3.空格鍵可暫停游戲,再次按下即可開啟。",True,pygame.Color("red")),(50,640))self.screen.blit(font_tips.render("4.更多精彩內(nèi)容將會陸續(xù)更新。",True,pygame.Color("red")),(50,670))# self.screen.blit(font.render("最終分?jǐn)?shù):%s"%heroObj.score, True, pygame.Color("green")), (self.rect.center[0]-230,self.rect.center[1]-75))#底部四個(gè)圖 形成動(dòng)圖self.screen.blit(self.btmimgs[self.btmIndex],(245,700))self.btmAdd+=1if self.btmAdd==25: #控制圖片轉(zhuǎn)換速度self.btmIndex+=1self.btmAdd=0if self.btmIndex>=11: #限制轉(zhuǎn)換圖片索引 使其循環(huán)self.btmIndex=0def Move(self):if self.rect.x==0:self.rect.move(0,0)else:self.rect = self.rect.move(-32, 40) #2.游戲界面類 #游戲界面背景 class GameBG:def __init__(self,image1,image2,screen1,screen2,speed1,speed2) -> None:#背景1 背景2 背景2 在上層 speed小self.image1=image1self.image2=image1.copy()self.rect1=self.image1.get_rect()self.rect2=self.image2.get_rect()self.rect2.topleft=(0,-850)self.image3 = image2self.image4 = image2.copy()self.rect3 = self.image3.get_rect()self.rect4 = self.image4.get_rect()self.rect4.topleft = (0, -850)self.screen1=screen1self.speed1 = speed1self.screen2 = screen2self.speed2 = speed2def Show(self):#背景底板1self.rect1 = self.rect1.move(0, self.speed1)self.rect2 = self.rect2.move(0, self.speed1)if self.rect1.y>=825:self.rect1.y=self.rect2.y-850if self.rect2.y>=825:self.rect2.y=self.rect1.y-850self.screen1.blit(self.image1, self.rect1)self.screen1.blit(self.image2, self.rect2)#背景 云2self.rect3 = self.rect3.move(0, self.speed2)self.rect4 = self.rect4.move(0, self.speed2)if self.rect3.y>=825:self.rect3.y = self.rect4.y - 850if self.rect4.y >= 825:self.rect4.y = self.rect3.y - 850self.screen2.blit(self.image3, self.rect3)self.screen2.blit(self.image4, self.rect4) #主角圖片 GameImg=[pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\hero3.png"), (68, 68)),# pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\hero3.png"),(68,68)),# pygame.image.load(r"Game_Main\Img_File\hero3.png"), #主角1# pygame.image.load(r"Game_Main\Img_File\hero3.png"), #主角2pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\hero4.png"),(68,68)),pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\heroskill.png"),(120,120)),pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(20,20)),pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(40,40)),pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(60,80)),pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(80,80)),pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(100,100)),pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(80,80)),pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(60,60)),pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(40,40)),pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(20,20)),pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\planpigu4.png"),(0,0)),pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\safetao.png"),(200,200)), ] #主角類 class Hero:#人物移動(dòng)up = Falsedown = Falseleft = Falseright = False#判斷人物是否死亡isHeroDead=False#isIn判斷鼠標(biāo)在主角的上方isIn=False#判斷切換鍵鼠操作isCMK=False#子彈類 約束速度 類型buttleAdd=0#子彈類 控制彈道buttleCurve=0#BUG_1模式 BUG1持續(xù)時(shí)間On_Off_BUG1=FalseBUG1_time=0#主角動(dòng)態(tài)屁股控制herf_pigu=3#主角動(dòng)態(tài)屁股速度herf_pigu_Add=0#檢測主角安全狀態(tài)以及安全時(shí)間isSafe=FalsesafeTime=0#死亡畫面deadIndex=0deadAdd=0# 可釋放大招次數(shù)R_skill = 0#image2 screen2 speed2 都是最上層云的屬性 其余為主角def __init__(self,image,pos,screen,speed,hp,score,bulletspeed,image2,screen2,speed2):self.image = GameImg[0]self.rect = self.image.get_rect() # 獲得矩形對象self.rect.topleft = pos # 初始化位置self.screen = screenself.speed = speedself.hp = hpself.score = scoreself.bulletspeed=bulletspeed#控制子彈速度 以及子彈圖片self.imgs=imageself.heroAdd=0self.heroIndex=0#云背景self.image3 = image2self.image4 = image2.copy()self.rect3 = self.image3.get_rect()self.rect4 = self.image4.get_rect()self.rect4.topleft = (0, -850)self.speed2=speed2self.screen2=screen2def Move(self): #移動(dòng)# 鍵盤移動(dòng)if Hero.up:self.rect = self.rect.move(0, -self.speed)elif Hero.down:self.rect = self.rect.move(0, self.speed)elif Hero.left:self.rect = self.rect.move(-self.speed, 0)elif Hero.right:self.rect = self.rect.move(self.speed, 0)#鼠標(biāo)移動(dòng)if Hero.isCMK:self.rect.center=pygame.mouse.get_pos()#更換鍵盤操作 默認(rèn)else:Hero.isIn=self.rect.collidepoint(pygame.mouse.get_pos())#約束移動(dòng)區(qū)間640 800 68 68if self.rect.x>=572:self.rect.x=572if self.rect.x<=0:self.rect.x=0if self.rect.y>=732:self.rect.y=732if self.rect.y<=0:self.rect.y=0#顯示主角def Show(self):if self.hp>0:self.Move()self.Collide()self.screen.blit(self.imgs[self.herf_pigu], (self.rect.bottomleft[0]+10,self.rect.midbottom[1]))#控制噴氣速度self.herf_pigu_Add += 1if self.herf_pigu_Add==4:self.herf_pigu += 1self.herf_pigu_Add=0if self.herf_pigu==13:self.herf_pigu=3#主角是否開啟BUG1模式 切換不同人物特if self.On_Off_BUG1 ==False:self.screen.blit(self.imgs[0], self.rect)else:self.screen.blit(self.imgs[1], self.rect)# self.screen.blit(self.imgs[2], (self.rect[0]-25,self.rect[1]-20))#發(fā)射子彈#開啟BUG1模式if self.On_Off_BUG1 == True:heroObj.BUG1_time+=1#控制子彈速度 和 子彈的變換樣式self.buttleAdd += 1self.buttleCurve+=0.1if self.buttleAdd>3:# Bullet(BulletImages[2],self.screen,(self.rect.midtop[0]-7,self.rect.midtop[1]),speed=self.bulletspeed)Bullet(BulletImages[1],self.screen,(self.rect.midtop[0]-25+(30*math.sin(self.buttleCurve)),self.rect.midtop[1]),speed=self.bulletspeed+15)Bullet(BulletImages[0],self.screen,(self.rect.midtop[0]+18+(-30*math.sin(self.buttleCurve)),self.rect.midtop[1]),speed=self.bulletspeed+15)Bullet1(BulletImages[3],self.screen,(self.rect.midtop[0]-20,self.rect.midtop[1]),speed=self.bulletspeed+15)# Bullet1(BulletImages[3],self.screen,(self.rect.midtop[0]-20-(40*math.sin(self.buttleCurve)),self.rect.midtop[1]),speed=self.bulletspeed+15)Bullet2(BulletImages[3],self.screen,(self.rect.midtop[0]-20,self.rect.midtop[1]),speed=self.bulletspeed+15)# Bullet2(BulletImages[3],self.screen,(self.rect.midtop[0]-20-(40*math.sin(self.buttleCurve)),self.rect.midtop[1]),speed=self.bulletspeed+15)self.buttleAdd = 0#啥都不開啟 普通模式elif self.On_Off_BUG1==False:self.buttleAdd += 1if self.buttleAdd == 10:Bullet(BulletImages[2],self.screen,(self.rect.midtop[0]-7,self.rect.midtop[1]),speed=self.bulletspeed+50)self.buttleAdd = 0#約束彈道函數(shù) 優(yōu)化運(yùn)行if self.buttleCurve>10:self.buttleCurve=0#遍歷子彈列表 打印for bullet1 in Bullettemp:bullet1.Show()#控制 BUG1的時(shí)間if self.BUG1_time > 100:self.BUG1_time = 0self.On_Off_BUG1 = False# for bullet in Bullettemp2:# bullet.Show2()#背景 云# self.rect3 = self.rect3.move(0, self.speed2)# self.rect4 = self.rect4.move(0, self.speed2)# if self.rect3.y>=825:# self.rect3.y = self.rect4.y - 850# if self.rect4.y >= 825:# self.rect4.y = self.rect3.y - 850# self.screen2.blit(self.image3, self.rect3)# self.screen2.blit(self.image4, self.rect4)else:self.Dead()soundlist[4].play()def Dead(self): #死亡global isPlay#播放死亡動(dòng)畫self.screen.blit(deadImages[self.deadIndex],self.rect)soundlist[0].play()self.deadAdd+=1if self.deadAdd==4:self.deadIndex+=1self.deadAdd=0if self.deadIndex==len(deadImages):self.deadIndex=0# 判斷分?jǐn)?shù)更新if self.score > history:UpdateScore(self.score)heroObj.isHeroDead=True# isPlay = Falsedef Collide(self): #碰撞#碰撞獎(jiǎng)勵(lì)tempReward=pygame.sprite.spritecollideany(self,rewardlist,collided=pygame.sprite.collide_mask)if tempReward!=None:#判斷! 當(dāng)hero血量滿時(shí) 血不增加 并且 補(bǔ)給血不會消失if tempReward.tag==3 and self.hp>=10:passelse:if tempReward.tag==1:self.On_Off_BUG1=Trueself.BUG1_time=0elif tempReward.tag==2:for i in enemylist:i.hp=0elif tempReward.tag==3 and self.hp<10:self.hp+=1if tempReward in rewardlist:rewardlist.remove(tempReward)#碰撞敵機(jī)if self.isSafe==False:tempEnemy=pygame.sprite.spritecollideany(self,enemylist,collided=pygame.sprite.collide_mask)if tempEnemy!=None:tempEnemy.hp=0self.hp -= 1self.isSafe=Trueelse:self.safeTime+=1self.screen.blit(GameImg[13],(self.rect[0]-68,self.rect[1]-68))if self.safeTime==100:self.safeTime=0self.isSafe=False #3.子彈類 #子彈圖片 BulletImages=[pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bullet6.png"), (15, 30)),pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bullet5.png"), (15, 30)),pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bullet3.png"), (15, 30)),pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bullet4.png"), (50, 30)),pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bullet3.png"), (15, 30)),pygame.transform.scale(pygame.image.load(r"Game_Main\Img_File\bullet3.png"), (15, 30)), ] #臨時(shí)存儲子彈列表 Bullettemp=[] class Bullet:def __init__(self,image,screen,pos,speed):self.image = imageself.screen=screenself.rect=self.image.get_rect() #獲得主角對象self.rect.center=pos #初始化位置self.speed=speedBullettemp.append(self)soundlist[1].play()def Show(self):self.rect=self.rect.move(0,-self.speed) #移動(dòng)self.screen.blit(self.image,self.rect) #位置#消失子彈if self.rect.y < -50:if self in Bullettemp:Bullettemp.remove(self)#碰撞檢測self.Collide()def Collide(self):temp=pygame.sprite.spritecollideany(self,enemylist,collided=pygame.sprite.collide_mask)if temp!=None:temp.hp-=1if self in Bullettemp:Bullettemp.remove(self) #散彈子彈向右 class Bullet1(Bullet):def __init__(self, image, screen, pos, speed):super().__init__(image, screen, pos, speed)def Show(self):self.rect=self.rect.move(20,-self.speed) #移動(dòng)self.screen.blit(self.image, self.rect) # 位置# 消失子彈if self.rect.y < -50:if self in Bullettemp:Bullettemp.remove(self)# 碰撞檢測self.Collide()def Collide(self):super().Collide() #散彈子彈向左 class Bullet2(Bullet):def __init__(self, image, screen, pos, speed):super().__init__(image, screen, pos, speed)def Show(self):self.rect=self.rect.move(-20,-self.speed) #移動(dòng)self.screen.blit(self.image, self.rect) # 位置# 消失子彈if self.rect.y < -50:if self in Bullettemp:Bullettemp.remove(self)# 碰撞檢測self.Collide()def Collide(self):super().Collide() #4.敵機(jī)類 #敵機(jī)圖片 enemyimage=[pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair1.png"),(60,60)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair2.png"),(60,60)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair3.png"),(60,60)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair4.png"), (120, 120)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair5.png"),(120,120)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair6.png"),(120,120)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair7.png"),(240,240)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair8.png"),(240,240)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair9.png"),(240,240)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/enemyair10.png"),(240,240)), ] #存放敵機(jī)飛機(jī) enemylist=[] #敵機(jī)類 class Enemy:def __init__(self,imgs,screen,speed,pos,hp,tag):self.imgs=imgsself.image=imgsself.screen=screenself.speed=speedself.rect=self.image.get_rect()self.rect.midbottom=posself.tag=tagself.hp=hp#死亡動(dòng)畫索引self.deadIndex=0self.deadAdd=0#存放新產(chǎn)生飛機(jī)enemylist.append(self)def Show(self):if self.hp>0:self.Move()self.screen.blit(self.image,self.rect)else:self.Dead()def Move(self):self.rect=self.rect.move(0,self.speed)if self.rect.y>=801:if self in enemylist:enemylist.remove(self)def Dead(self):#播放死亡動(dòng)畫self.screen.blit(deadImages[self.deadIndex],self.rect)soundlist[0].play()self.deadAdd+=1if self.deadAdd==2:self.deadIndex+=1self.deadAdd=0if self.deadIndex==len(deadImages):if self.tag == 1:heroObj.score += 1elif self.tag == 2:heroObj.score += 3elif self.tag == 3:heroObj.score += 5enemylist.remove(self)def Collide(self):pass #5.獎(jiǎng)勵(lì)類 rewardImage=[pygame.transform.scale(pygame.image.load("Game_Main/Img_File/reward1.png"),(80,80)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/reward2.png"),(80,80)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/reward3.png"),(80,80)), ] rewardlist=[] #存放獎(jiǎng)勵(lì) class Reward:def __init__(self,image,screen,speed,pos,tag):self.image=imageself.screen=screenself.speed=speedself.rect=self.image.get_rect()self.rect.midbottom=posself.tag=tag#存放新產(chǎn)生獎(jiǎng)勵(lì)rewardlist.append(self)def Show(self):self.Move()self.screen.blit(self.image,self.rect)def Move(self):self.rect=self.rect.move(0,self.speed)if self.rect.y>=801:if self in rewardlist:rewardlist.remove(self) #工廠 類 敵機(jī) 和獎(jiǎng)勵(lì) class Factory:createAdd=0createrewardAdd=0@staticmethoddef CreateEnemy():#隨機(jī)產(chǎn)生敵機(jī)Factory.createAdd+=1if Factory.createAdd==20:ranNum=random.randint(1,100)if ranNum<=70:Enemy(enemyimage[random.randint(0,2)],screen=screen,speed=random.randint(4,6),pos=(random.randint(0,580),-60),hp=1,tag=1)elif ranNum<=90:Enemy(enemyimage[random.randint(3,5)],screen=screen,speed=random.randint(2,3),pos=(random.randint(0,520),-120),hp=3,tag=2)elif ranNum<=100:Enemy(enemyimage[random.randint(6,9)],screen=screen,speed=random.randint(1,2),pos=(random.randint(0,400),-240),hp=10,tag=3)Factory.createAdd=0soundlist[3].set_volume(0.05)# soundlist[3].play()for temp in enemylist:temp.Show()@staticmethoddef CreateReward():Factory.createrewardAdd+=1if Factory.createrewardAdd==100:ranNum=random.randint(1,10)if ranNum==1:Reward(rewardImage[0],screen=screen,speed=random.randint(4,6),pos=(random.randint(0,560),-81),tag=1)elif ranNum==2:Reward(rewardImage[1],screen=screen,speed=random.randint(4,6),pos=(random.randint(0,560),-81),tag=2)elif ranNum == 3:Reward(rewardImage[2], screen=screen, speed=random.randint(4, 6), pos=(random.randint(0, 560), -81),tag=3)Factory.createrewardAdd=0for i in rewardlist:i.Show() #用戶死亡結(jié)束畫面類 #死亡動(dòng)畫動(dòng)圖 deadImages=[pygame.transform.scale(pygame.image.load("Game_Main/Img_File/da_0.png"),(80,40)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/da_1.png"),(80,80)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/da_2.png"),(80,80)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/da_3.png"),(80,80)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/da_4.png"),(80,80)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/da_5.png"),(80,80)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/da_6.png"),(80,80)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/da_7.png"),(80,80)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/da_8.png"),(80,80)), ] #死亡界面 gameImgs=[pygame.transform.scale(pygame.image.load("Game_Main/Img_File/gameover1.jpg"),(640,800)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/gameover2.png"),(611,412)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/gameover3.png"), (150, 100)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/gameover4.png"), (180, 75)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/gameover4.png"), (220, 90)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/gameover5.png"), (64, 64)),pygame.transform.scale(pygame.image.load("Game_Main/Img_File/gameover5.png"), (80, 80)), ] class GameOver:#判斷鼠標(biāo)在哪個(gè)位置上isMouse_In_end=FalseisMouse_In_again = Falsedef __init__(self,imgs,pos,screen) -> None:self.imgs=gameImgsself.image=gameImgs[0]self.rect=self.image.get_rect()self.rect.topleft=posself.screen=screendef Show(self):pygame.mouse.set_visible(True)#顯示背景板self.screen.blit(gameImgs[0], self.rect)#顯示美女self.screen.blit(gameImgs[1],(self.rect))#GameOver圖標(biāo)self.screen.blit(gameImgs[2], (self.rect.midtop[0],self.rect.midtop[1]+30))#繼續(xù)游戲圖標(biāo)again_icon=self.screen.blit(gameImgs[3], (self.rect.center[0]-80,self.rect.center[1]+30))self.isMouse_In_again=again_icon.collidepoint(pygame.mouse.get_pos())if self.isMouse_In_again:self.screen.blit(gameImgs[4], (self.rect.center[0] - 100, self.rect.center[1] + 20))#結(jié)束游戲圖標(biāo)end_icon=self.screen.blit(gameImgs[5], (self.rect.topright[0]-100, self.rect.topright[1]+10))self.isMouse_In_end=end_icon.collidepoint(pygame.mouse.get_pos())if self.isMouse_In_end:self.screen.blit(gameImgs[6], (self.rect.topright[0] - 109, self.rect.topright[1] + 5))#結(jié)束界面文字self.screen.blit(font.render("最終分?jǐn)?shù):%s"%heroObj.score, True, pygame.Color("green")), (self.rect.center[0]-230,self.rect.center[1]-75))self.screen.blit(font.render("歷史最高分:%s"%history, True, pygame.Color("green")), (self.rect.center[0]+20,self.rect.center[1]-75))self.Move()def Move(self):if self.rect.y<0:self.rect=self.rect.move(0,12)else:self.rect=self.rect.move(0,0) #**************************************************************** #判斷游戲是否開始 isPlay=False #創(chuàng)建整體幀率速度 clock=pygame.time.Clock() #字體對象 pygame.font.init() font=pygame.font.Font("Game_Main/Img_File/fount.otf",35) font_end=pygame.font.Font("Game_Main/Img_File/fount.otf",80) font_tips=pygame.font.Font("Game_Main/Img_File/fount.otf",20) #1.引入 pygame.init() #2.生產(chǎn)屏幕 screen2=pygame.display.set_mode((640,800)) screen=pygame.display.set_mode((640,800)) #3.BGM pygame.mixer.music.load(r"Game_Main/Img_File/bgm2.wav") pygame.mixer.music.play(-1) #4.產(chǎn)生開始界面對象 startObj=StartPanel(screen) #加載界面 loadObj=LoadWindows(screen=screen,pos=(640,-800)) #5.游戲背景對象 gameObj=GameBG(image1=startImgs[8],image2=startImgs[9],screen1=screen,screen2=screen2,speed1=4,speed2=2) #6.游戲主角對象 heroObj=Hero(image=GameImg,pos=(310,600),screen=screen,speed=25,hp=1,score=0,bulletspeed=10,image2=startImgs[9],screen2=screen2,speed2=2) #7.游戲結(jié)束畫面 gameoverObj=GameOver(imgs=gameImgs,pos=(0,-800),screen=screen) #歷史分?jǐn)?shù) history=0 #8.音效 soundlist=[ pygame.mixer.Sound("Game_Main/Img_File/boom.wav"), pygame.mixer.Sound("Game_Main/Img_File/fashe.wav"), pygame.mixer.Sound("Game_Main/Img_File/kaishiyouxi.ogg"), pygame.mixer.Sound("Game_Main/Img_File/planhuxiao.wav"), pygame.mixer.Sound("Game_Main/Img_File/herodead.wav"), ] #7.事件 監(jiān)測 方法 def EventAll():global isPlayfor event in pygame.event.get():#退出事件if event.type==pygame.QUIT:pygame.quit()sys.exit()#鼠標(biāo)事件if event.type==pygame.MOUSEBUTTONDOWN:#開始按鈕事件 是否開始游戲if event.button==1 and StartPanel.isIn_Start==1:StartPanel.isIn_Start=False# 讀取歷史分?jǐn)?shù) 初始化信息InitMethod()gameObj.Show()soundlist[2].play()isPlay = Trueif event.button==1 and gameoverObj.isMouse_In_again==1:gameoverObj.isMouse_In_again=FalseheroObj.isHeroDead=False# 讀取歷史分?jǐn)?shù) 初始化信息InitMethod()gameObj.Show()soundlist[2].play()isPlay = TrueheroObj.isHeroDead = Falseif event.button==1 and gameoverObj.isMouse_In_end==1:exit()sys.exit()#右鍵開啟BUG模式# if event.button==3:# Hero.On_Off_BUG1=not Hero.On_Off_BUG1#BGM按鈕事件 更替聲音按鈕圖標(biāo)elif event.button==1 and StartPanel.isIn_BGM==1:StartPanel.isOn_BGM=not StartPanel.isOn_BGMif StartPanel.isOn_BGM:pygame.mixer.music.unpause()else:pygame.mixer.music.pause()# 鍵盤if event.type == pygame.KEYDOWN: # 按下#返回主菜單if event.key==pygame.K_ESCAPE:isPlay=False#暫停 死循環(huán) 處理if event.key==pygame.K_SPACE:x=Truepygame.mixer_music.pause()while x:for stop in pygame.event.get():if stop.type==pygame.KEYDOWN:if stop.key==pygame.K_SPACE:pygame.mixer_music.unpause()x=Falsebreak#主角移動(dòng)if event.key == pygame.K_w:Hero.up = Trueelif event.key == pygame.K_s:Hero.down = Trueelif event.key == pygame.K_a:Hero.left = Trueelif event.key == pygame.K_d:Hero.right = Trueif event.type == pygame.KEYUP: # 抬起if event.key == pygame.K_w:Hero.up = Falseelif event.key == pygame.K_s:Hero.down = Falseelif event.key == pygame.K_a:Hero.left = Falseelif event.key == pygame.K_d:Hero.right = Falseif event.type==pygame.KEYDOWN:if event.key==pygame.K_F1:Hero.isCMK=not Hero.isCMK #讀取配置文件 def ReadScore(path="score.json"):if os.path.exists(path):with open(path,"r") as f_r:return int(f_r.read())else:with open(path,"w") as f_w:f_w.write("0")return 0 #更新配置文件 def UpdateScore(newScore,path="score.json"):with open(path,"w") as f_w:f_w.write(str(newScore)) #初始化信息 def InitMethod():global historyhistory=ReadScore()heroObj.hp=1heroObj.score=0heroObj.rect.topleft=(310,600)enemylist.clear()Bullettemp.clear()rewardlist.clear()gameoverObj.rect.topleft=(0,-800) def Main():pygame.mouse.set_visible(False)while True:EventAll()if isPlay and heroObj.isHeroDead==False:#開始游戲主體loadObj.Show()if loadObj.load_time==True:gameObj.Show()Factory.CreateEnemy()Factory.CreateReward()heroObj.Show()#顯示信息screen.blit(font.render("血量:%s"%heroObj.hp,True,pygame.Color("red")),(0,0))screen.blit(font.render("分?jǐn)?shù):%s"%heroObj.score,True,pygame.Color("red")),(0,50))screen.blit(font.render("歷史最高分:%s"%history,True,pygame.Color("red")),(0,100))screen.blit(font.render("終極技能:%s" %(heroObj.R_skill), True, pygame.Color("green")), (200, 0))elif isPlay==False:#開始界面startObj.Show()elif isPlay and heroObj.isHeroDead==True:gameoverObj.Show()#更新畫面pygame.display.update()#設(shè)置幀率clock.tick(120) if __name__=="__main__":Main()

如果想要素材的話請留言吧~

總結(jié)

以上是生活随笔為你收集整理的飞机大战(源码+素材)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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