亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

python版飛機大戰代碼分享

2020-02-15 23:44:43
字體:
來源:轉載
供稿:網友

利用pygame實現了簡易版飛機大戰。源代碼如下:

# -*- coding:utf-8 -*-import pygameimport sysfrom pygame.locals import *from pygame.font import *import timeimport randomclass Hero(object): #玩家 英雄類 def __init__(self, screen_temp):  self.x = 210  self.y = 700  self.life = 21  # self.life = 100  self.image = pygame.image.load("./feiji/hero1.png")  self.screen = screen_temp  self.bullet_list = []#用來存儲子彈對象的引用  #爆炸效果用的如下屬性  self.hit = False #表示是否要爆炸  self.bomb_list = [] #用來存儲爆炸時需要的圖片  self.__create_images() #調用這個方法向bomb_list中添加圖片  self.image_num = 0 #用來記錄while True的次數,當次數達到一定值時才顯示一張爆炸的圖,然后清空,,當這個次數再次達到時,再顯示下一個爆炸效果的圖片  self.image_index = 0#用來記錄當前要顯示的爆炸效果的圖片的序號 def __create_images(self):  #添加爆炸圖片  self.bomb_list.append(pygame.image.load("./feiji/hero_blowup_n1.png"))  self.bomb_list.append(pygame.image.load("./feiji/hero_blowup_n2.png"))  self.bomb_list.append(pygame.image.load("./feiji/hero_blowup_n3.png"))  self.bomb_list.append(pygame.image.load("./feiji/hero_blowup_n4.png")) def display(self):  #顯示玩家的飛機  #如果被擊中,就顯示爆炸效果,否則顯示普通的飛機效果  if self.hit == True:   self.screen.blit(self.bomb_list[self.image_index], (self.x, self.y))#(self.x, self.y)是指當前英雄的位置   #blit方法 (一個對象,左上角位置)   self.image_num += 1   print(self.image_num)   if self.image_num == 7:    self.image_num = 0    self.image_index += 1    print(self.image_index) #這里子彈打住英雄時沒有被清除掉,所以打一下,就死了   if self.image_index > 3:    time.sleep(1)    exit()#調用exit讓游戲退出    #self.image_index = 0  else:   if self.x< 0: #控制英雄,不讓它跑出界面    self.x = 0   elif self.x > 382:    self.x = 382   if self.y < 0:    self.y = 0   elif self.y > 750:    self.y = 750   self.screen.blit(self.image,(self.x, self.y))#z這里是只要沒有被打中,就一直是剛開始的樣子  #不管玩家飛機是否被擊中,都要顯示發射出去的子彈  for bullet in self.bullet_list:   bullet.display()   bullet.move() def move(self, move_x,move_y):  self.x += move_x  self.y += move_y def fire(self):  #通過創建一個子彈對象,完成發射子彈  bullet = Bullet(self.screen, self.x, self.y)#創建一個子彈對象  self.bullet_list.append(bullet) def bomb(self):  self.hit = True def judge(self):  global life  if life <= 0:   self.bomb()class Bullet(object): #玩家子彈類 def __init__(self, screen_temp, x_temp, y_temp):  self.x = x_temp + 40  self.y = y_temp - 20  self.image = pygame.image.load("./feiji/bullet.png")  self.screen = screen_temp def display(self):  self.screen.blit(self.image, (self.x, self.y)) def move(self):  self.y -= 10class Bullet_Enemy(object): #敵機子彈類 def __init__(self, screen_temp, x_temp, y_temp):  self.x = x_temp + 25  self.y = y_temp + 30  self.image = pygame.image.load("./feiji/bullet1.png")  self.screen = screen_temp def display(self):  self.screen.blit(self.image,(self.x,self.y)) def move(self, hero):  self.y += 10  global life  if (hero.y <= self.y and self.y <= hero.y + 40) and (hero.x <= self.x and self.x <= hero.x + 100):  #if self.y in range(hero.y, hero.y + 40) and self.x in range(hero.x, hero.x + 40):   life -= 10   #self.bullet_list.remove()   print("---judge_enemy---")   return True   if life<=0:    hero.bomb()  return Falseclass Bullet_Boss(object): #boss子彈類1 def __init__(self, screen_temp, x_temp, y_temp):  self.x = x_temp + 80  self.y = y_temp + 230  self.image = pygame.image.load("./feiji/bullet2.png")  self.screen = screen_temp def display(self):  self.screen.blit(self.image, (self.x, self.y)) def move(self, hero):  self.y += 6  self.x += 2  global life  if (hero.y <= self.y and self.y <= hero.y + 40) and (hero.x <= self.x and self.x <= hero.x + 100):  #if self.y in range(hero.y, hero.y + 40) and self.x in range(hero.x, hero.x + 40):   life -= 20   #self.bullet_list.remove()   print("---judge_boss---")   return True   if life<=0:    hero.bomb()  return Falseclass Bullet_Boss1(object): #boss子彈類2 def __init__(self, screen_temp, x_temp, y_temp):  self.x = x_temp + 80  self.y = y_temp + 230  self.image = pygame.image.load("./feiji/bullet2.png")  self.screen = screen_temp def display(self):  self.screen.blit(self.image, (self.x, self.y)) def move(self, hero):  self.y += 6  self.x -= 2  global life  if (hero.y <= self.y and self.y <= hero.y + 40) and (hero.x <= self.x and self.x <= hero.x + 100):  #if self.y in range(hero.y, hero.y + 40) and self.x in range(hero.x, hero.x + 40):   life -= 20   #self.bullet_list.remove()   print("---judge_boss---")   return True   if life<=0:    hero.bomb()  return Falseclass Bullet_Boss2(object): #boss子彈類3 def __init__(self, screen_temp, x_temp, y_temp):  self.x = x_temp + 80  self.y = y_temp + 230  self.image = pygame.image.load("./feiji/bullet2.png")  self.screen = screen_temp def display(self):  self.screen.blit(self.image, (self.x, self.y)) def move(self, hero):  self.y += 6  global life  if (hero.y <= self.y and self.y <= hero.y + 40) and (hero.x <= self.x and self.x <= hero.x + 100):  #if self.y in range(hero.y, hero.y + 40) and self.x in range(hero.x, hero.x + 40):   life -= 20    #self.bullet_list.remove()   print("---judge_boss---")   return True   if life<=0:    hero.bomb()  return Falseclass Base(object): #基類 類似于抽象類 def __init__(self, screen_temp, x, y, image_name):  self.x = x  self.y = y   self.screen = screen_temp  self.image = pygame.image.load(image_name)  self.alive = True def display(self):  if self.alive == True:   self.screen.blit(self.image, (self.x, self.y)) def move(self):  self.y += 5class bomb_bullet(Base): #炸彈類 def __init__(self, screen_temp):  Base.__init__(self, screen_temp, random.randint(45, 400), 0, "./feiji/bomb.png") def judge(self, hero):  if (hero.y <= self.y and self.y <= hero.y + 40) and (hero.x <= self.x and self.x <= hero.x + 100):   self.alive = False   hero.bomb()  if self.y >= 850:   #self.alive = False   self.y = 0   self.x = random.randint(45, 400)   #print("bomb.y = %d"%self.y)class supply(Base): #補給類 def __init__(self, screen_temp):  Base.__init__(self, screen_temp, random.randint(45, 400), -300, "./feiji/bomb-1.gif") def judge(self, hero):  global life  if (hero.y <= self.y and self.y <= hero.y + 40) and (hero.x <= self.x and self.x <= hero.x + 100):   self.alive = False   life += 10  if self.y >= 1500:   self.y = 0   self.x = random.randint(45, 400)   self.alive = Trueclass clear_bullet(Base): def __init__(self, screen_temp):  Base.__init__(self, screen_temp, random.randint(45, 400), 0, "./feiji/bomb-2.gif")  self.alive = False def judge(self, hero, enemies):  global q  q += 1  #self.move()  if q == 20:   #self.move()   self.alive = True   q = 0   if (hero.y <= self.y and self.y <= hero.y + 40) and (hero.x <= self.x and self.x <= hero.x + 100):    self.alive = False    for enemy in enemies:     enemy.hit == Trueclass EnemyPlane(object): #敵機類 def __init__(self, screen_temp):  self.x = random.randint(15, 480)  self.y = 0  self.image = pygame.image.load("./feiji/enemy0.png")  self.screen = screen_temp  self.bullet_list = []#用來存儲子彈對象的引用  #self.direction = "right"#用來設置這個飛機默認的移動方向  self.hit = False  self.bomb_list = []  self.__create_images()  self.image_num = 0  self.image_index = 0  #利用產生的隨機數,隨機確定飛機初始移動方向  self.k = random.randint(1, 20)  if self.k <= 10:   self.direction = "right"  elif self.k > 10:   self.direction = "left" def display(self, hero):  #顯示敵人的飛機  if not self.hit:   self.screen.blit(self.image, (self.x,self.y))  else:   self.screen.blit(self.bomb_list[self.image_index], (self.x,self.y))   self.image_num += 1   if self.image_num == 3 and self.image_index < 3:    self.image_num = 0    self.image_index += 1    #print(self.image_index)   # if self.image_index > 2:   #  time.sleep(0.1)  for bullet in self.bullet_list:   bullet.display()   if(bullet.move(hero)):    self.bullet_list.remove(bullet) def move(self):  #利用隨機數來控制飛機移動距離,以及移動范圍  d1 = random.uniform(1,3)  d2 = random.uniform(0.2,3)  p1 = random.uniform(50,100)  p2 = random.uniform(-200,0)  if self.direction == "right":   self.x += d1  elif self.direction == "left":   self.x -= d1  if self.x > 480 - p1:   #480 - 50   self.direction="left"  elif self.x < p2:   self.direction = "right"  self.y += d2 def bomb(self):  self.hit = True def __create_images(self):  self.bomb_list.append(pygame.image.load("./feiji/enemy0_down1.png"))  self.bomb_list.append(pygame.image.load("./feiji/enemy0_down2.png"))  self.bomb_list.append(pygame.image.load("./feiji/enemy0_down3.png"))  self.bomb_list.append(pygame.image.load("./feiji/enemy0_down4.png")) def fire(self):  #利用隨機數來控制敵機的開火,1/80的概率  s = random.randint(0,800)  bullet1 = Bullet_Enemy(self.screen, self.x, self.y)  if s < 10:   self.bullet_list.append(bullet1)class EnemyPlanes(EnemyPlane): #敵機群類 繼承自EnemyPlane類  def __init__(self, screen_temp):  EnemyPlane.__init__(self, screen_temp)  self.num = 0  self.enemy_list = [] #用列表存儲產生的多架敵機  self.screen = screen_temp def add_enemy(self, num):  #產生多架敵機的函數  self.num = num  for i in range(num):   enemy = EnemyPlane(self.screen)   self.enemy_list.append(enemy) def display(self, hero):  for i in range(self.num):   self.enemy_list[i].display(hero) def move(self):  for i in range(self.num):    self.enemy_list[i].move() def fire(self):  #s = random.randint(0,1000)  for i in range(self.num):   self.enemy_list[i].fire()class Boss(EnemyPlane): #boss敵機類 繼承自EnemyPlane類 def __init__(self,screen_temp):  EnemyPlane.__init__(self,screen_temp)  self.x = 150  self.y = 0  self.bomb_list = []  self.__create_images()  self.image = pygame.image.load("./feiji/enemy2.png")  self.screen = screen_temp  self.bullet_list = [] def __create_images(self):  #self.bomb_list.append(pygame.image.load("./feiji/enemy2.png"))  self.bomb_list.append(pygame.image.load("./feiji/enemy2.png"))  self.bomb_list.append(pygame.image.load("./feiji/enemy2_down1.png"))  self.bomb_list.append(pygame.image.load("./feiji/enemy2_down2.png"))  self.bomb_list.append(pygame.image.load("./feiji/enemy2_down3.png"))  self.bomb_list.append(pygame.image.load("./feiji/enemy2_down4.png"))  self.bomb_list.append(pygame.image.load("./feiji/enemy2_down5.png"))  self.bomb_list.append(pygame.image.load("./feiji/enemy2_down6.png")) def display(self, hero):  #顯示敵人的飛機  global g  #print(g)  self.screen.blit(self.bomb_list[g], (self.x,self.y))  for bullet in self.bullet_list:   bullet.display()   if(bullet.move(hero)):    self.bullet_list.remove(bullet) def move(self):  d1 = 0  self.y += 0 def fire(self):  global s  s += 1  bullet1 = Bullet_Boss(self.screen, self.x, self.y)  bullet2 = Bullet_Boss1(self.screen, self.x, self.y)  bullet3 = Bullet_Boss2(self.screen, self.x, self.y)  if s == 20:   s = 0    self.bullet_list.append(bullet1)   self.bullet_list.append(bullet2)   self.bullet_list.append(bullet3)def judge1(hero,enemy): #判斷敵機的炸毀 for bullet1 in hero.bullet_list:  if bullet1.y in range(int(enemy.y),int(enemy.y + 30)) and bullet1.x in range(int(enemy.x-10),int(enemy.x + 50)):   hero.bullet_list.remove(bullet1)   enemy.bomb()  if bullet1.y < 0 or bullet1.x < 0 or bullet1.x > 480: #刪除越界的玩家子彈   hero.bullet_list.remove(bullet1) def judge3(hero,boss): #判斷boss的炸毀 global goal, g, goal0 for bullet3 in hero.bullet_list:  if bullet3.y in range(int(boss.y), int(boss.y + 60)) and bullet3.x in range(int(boss.x), int(boss.x + 100)):   hero.bullet_list.remove(bullet3)   g += 1   boss.image = boss.bomb_list[g]   print("g = %d"%g)   if g >= 6:    boss.y, g, goal = 0, 0, 0    boss.bomb()    goal0 += 10 def clear_enemy(enemies): #清除敵機群類中被炸毀的敵機 global goal, goal0 for enemy in enemies.enemy_list:  if enemy.hit == True and enemy.image_index == 3:   enemies.enemy_list.remove(enemy)   enemies.num -= 1   goal += 1   goal0 += 5   print("goal = %d"%goal)  if enemy.y >= 850:   enemies.enemy_list.remove(enemy)   enemies.num -= 1def judge_num(enemies): #判斷頻幕上敵人的數量,如果為零,繼續添加敵人 n = random.randint(1,5) if len(enemies.enemy_list) == 0:  enemies.add_enemy(n)def show_text(screen_temp): #在屏幕上顯示文字 text = "GOAL:" + str(goal0) + "Life:" + str(life)  font_size = 50 pos = (0,0) color = (0,255,0) cur_font = pygame.font.SysFont("宋體",font_size) text_fmt = cur_font.render(text, 1, color) screen_temp.blit(text_fmt, pos)def creat_bomb(screen_temp): bomb = bomb_bullet(screen_temp) bomb_list = [] bomb_list.apend(bomb)#定義的全局變量goal = 0 #玩家得分goal0 = 0g = 0 #擊中boss的次數life = 100#生命值s = 0 #判斷大boss是否發射子彈q = 0def main(): #主函數執行 #獲取事件,比如按鍵等 bb = False move_x = 0 move_y = 0 pygame.init() screen = pygame.display.set_mode((480,852),0,32) #         210,400 background = pygame.image.load("./feiji/background.png") pygame.display.set_caption("飛機大戰") atlas = pygame.image.load("./feiji/New Atlas.png") #創建玩家飛機 hero = Hero(screen) #創建敵機群 enemis = EnemyPlanes(screen) enemis.add_enemy(5) #創建boss對象 boss = Boss(screen) #創建炸彈對象 bomb = bomb_bullet(screen) #創建補給對象 supply0 = supply(screen) clear = clear_bullet(screen) left_key, right_key, up_key, down_key, done = 0, 0, 0, 0, 0 # mark = 0#用來判斷boss發射子彈 while True:  if done:   if done % 8 == 0:    done = 1    hero.fire()   else:    done += 1  for event in pygame.event.get():   #判斷是否是點擊了退出按鈕   if event.type == QUIT:    print("exit")    exit()   #判斷是否是按下了鍵   if event.type == KEYDOWN :    #down    #檢測按鍵是否是a或者left    if event.key == K_a or event.key == K_LEFT:     #print('left')     move_x = -5     left_key += 1     #檢測按鍵是否是d或者right    elif event.key == K_d or event.key == K_RIGHT:     #print('right')     move_x = 5     right_key += 1    elif event.key == K_w or event.key == K_UP:     move_y = -5     up_key += 1    elif event.key == K_s or event.key == K_DOWN:     move_y = 5     down_key += 1    #檢測按鍵是否是空格鍵    elif event.key == K_SPACE:     #print('space')     hero.fire()     done = 1     #enemis.fire()    elif event.key == K_b:     print('b')     hero.bomb()   if event.type == KEYUP:    if event.key == K_a or event.key == K_LEFT:     left_key -= 1     if right_key == 0:      move_x = 0     else:      move_x = 5    if event.key == K_d or event.key == K_RIGHT:     right_key -= 1     if left_key == 0:      move_x = 0     else:      move_x = -5    if event.key == K_w or event.key == K_UP:     up_key -= 1     if down_key == 0:      move_y = 0     else:      move_y = 5     if event.key == K_s or event.key == K_DOWN:     down_key -= 1     if up_key == 0:      move_y = 0     else:      move_y = -5    if event.key == K_SPACE:     done = 0   screen.blit(background, (0, 0))  hero.move(move_x, move_y)  hero.display()  hero.judge()  enemis.display(hero)  enemis.move()  enemis.fire()  bomb.display()  bomb.judge(hero)  bomb.move()  supply0.display()  supply0.judge(hero)  supply0.move()  #clear.display()  #clear.judge(hero, enemis)  #clear.move()  for i in range(enemis.num):   judge1(hero, enemis.enemy_list[i])   #enemis.enemy_list[i].judge(hero)  clear_enemy(enemis)  judge_num(enemis)  show_text(screen)  if goal >= 15:   boss.display(hero)   boss.move()   # mark+=1   # if mark==8:   boss.fire()    # mark = 0   #boss.judge   judge3(hero, boss)  pygame.display.update()if __name__ == "__main__": main()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美丰满片xxx777| 久久久综合av| 成人国产精品一区二区| 欧美激情影音先锋| 久久影视电视剧免费网站| 成人免费黄色网| 视频直播国产精品| 亚洲国产精久久久久久久| 日韩中文娱乐网| 日韩av日韩在线观看| 欧美一级电影在线| 插插插亚洲综合网| 九九九久久国产免费| 欧美日本黄视频| 亚洲性av网站| 国产成人亚洲综合青青| 日韩av成人在线观看| 精品国产拍在线观看| 亚洲18私人小影院| 国产精品久久9| 亚洲国产成人久久综合一区| 亚洲国产成人精品久久久国产成人一区| 亚洲人成啪啪网站| 疯狂做受xxxx欧美肥白少妇| 国产亚洲精品久久久优势| 亚洲va男人天堂| 中文字幕v亚洲ⅴv天堂| 亚洲一区二区三区在线免费观看| 97国产精品视频人人做人人爱| 亚洲最新中文字幕| 奇米一区二区三区四区久久| 555www成人网| 亚洲免费人成在线视频观看| 国产精品白嫩初高中害羞小美女| 成人写真福利网| 亚洲性无码av在线| 国产精品中文字幕在线观看| 亚洲激情视频在线观看| 亚洲一级黄色av| 亚洲精品按摩视频| 亚洲欧美激情视频| 在线亚洲欧美视频| 国产裸体写真av一区二区| 午夜精品一区二区三区av| 成人妇女淫片aaaa视频| 成人午夜小视频| 国产91成人在在线播放| 91欧美精品成人综合在线观看| 欧美激情国产精品| 秋霞av国产精品一区| 久久精品中文字幕电影| 欧美极品美女视频网站在线观看免费| 亚洲国产又黄又爽女人高潮的| 国产精品一区二区av影院萌芽| 亚洲精品电影在线| 欧美日韩激情网| 亚洲欧美第一页| 欧美色另类天堂2015| 久久精品久久久久| 97人人模人人爽人人喊中文字| 日韩美女写真福利在线观看| 亚洲天堂视频在线观看| 日韩风俗一区 二区| 日本一区二区三区在线播放| 4p变态网欧美系列| 国产精品视频内| 亚洲第一男人天堂| 国产精品午夜国产小视频| 欧美午夜视频一区二区| 亚洲欧美在线磁力| 久久久精品欧美| 亚洲国产精品美女| 欧美视频免费在线观看| 国产欧美精品一区二区三区-老狼| 国产精品v日韩精品| 久久精品国产一区二区电影| 亚洲人成77777在线观看网| 国产91精品久久久久| 日韩欧美在线中文字幕| 疯狂做受xxxx高潮欧美日本| 色综合久久88色综合天天看泰| 日韩美女免费视频| 久久深夜福利免费观看| 国产精品白嫩初高中害羞小美女| 亚洲精品久久久久久久久久久久久| 亚洲国产婷婷香蕉久久久久久| 日韩网站免费观看高清| 午夜精品免费视频| 亚洲a在线观看| 久久精品国产电影| 国产一区二区三区视频| 97精品国产97久久久久久| 欧美xxxx14xxxxx性爽| 91精品久久久久久久久久久久久| 91麻豆桃色免费看| 992tv在线成人免费观看| 中文字幕9999| 91深夜福利视频| 国产精品丝袜白浆摸在线| 亚洲人免费视频| 日韩美女在线观看| 欧美伊久线香蕉线新在线| 欧美性受xxxx黑人猛交| 成人欧美一区二区三区黑人孕妇| 一区二区三区天堂av| 搡老女人一区二区三区视频tv| 欧美精品福利在线| 日韩在线免费视频| 69视频在线免费观看| 国产精品一区二区三区毛片淫片| 欧美日韩亚洲视频| 欧美亚洲激情在线| 4438全国亚洲精品在线观看视频| 亚洲成人在线网| 亚洲午夜小视频| 日韩av最新在线| 久久91超碰青草是什么| 亚洲天堂第二页| 国产精品久久久久91| 永久免费看mv网站入口亚洲| 亚洲国产小视频| 日韩av一区在线| 在线播放亚洲激情| 91免费版网站入口| 国产成人在线一区| 国产精品2018| 亚洲第五色综合网| 国产偷国产偷亚洲清高网站| 亚洲欧美一区二区三区情侣bbw| 国产视频精品在线| 亚洲黄色av女优在线观看| 亚洲精品综合精品自拍| 日韩视频在线免费观看| 国产精品久久电影观看| 欧美性猛交99久久久久99按摩| 久久久精品2019中文字幕神马| 国产成人aa精品一区在线播放| 亚洲精品免费在线视频| 欧美午夜激情在线| 色综合天天综合网国产成人网| 中文字幕少妇一区二区三区| 国产精品揄拍一区二区| 情事1991在线| 亚洲国产日韩欧美在线动漫| 亚洲在线免费看| 秋霞成人午夜鲁丝一区二区三区| 亚洲成av人乱码色午夜| 久久精品亚洲94久久精品| 国产精品视频播放| www.日本久久久久com.| 久久久久成人网| 精品国产美女在线| 精品国产1区2区| 国产99久久精品一区二区 夜夜躁日日躁| 久久五月天综合| 亚洲大尺度美女在线| 日韩激情在线视频| 亚洲奶大毛多的老太婆| 中文字幕av一区二区三区谷原希美| 亚洲成人久久久久| 国产精品永久在线| 国产一区二区三区欧美| 最好看的2019的中文字幕视频| 国产精品自在线|