python项目飞机大战
生活随笔
收集整理的這篇文章主要介紹了
python项目飞机大战
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
實現(xiàn)步驟
1.創(chuàng)建窗口
2.創(chuàng)建一個玩家飛機,按方向鍵可以左右移動
3.給玩家飛機添加按空格鍵發(fā)射子彈功能
4.創(chuàng)建一個敵機
5.敵機自動左右移動
6.敵機自動發(fā)射子彈
1.創(chuàng)建窗口
import pygame import timedef main():#1.創(chuàng)建窗口screen = pygame.display.set_mode((480,852))#2 創(chuàng)建一個背景圖片background = pygame.image.load('./feiji/background.png')while True:#3 顯示到屏幕screen.blit(background,(0,0))pygame.display.update()time.sleep(0.05)if __name__ == '__main__':main()2.顯示玩家飛機,檢測鍵盤,控制飛機左右移動
import pygame import time from pygame.locals import *class HeroPlane(object):def __init__(self,screen_temp):self.x = 210self.y = 700 self.screen = screen_temp #游戲窗口self.image = pygame.image.load('feiji/hero1.png') def display(self):self.screen.blit(self.image,(self.x,self.y)) #加載玩家飛機到窗口def move_left(self):self.x -= 5def move_right(self):self.x += 5def key_control(hero_temp):# 獲取事件,比如按鍵等for event in pygame.event.get():# 判斷是否是點擊了退出按鈕if event.type == QUIT:print("exit")exit()# 判斷是否是按下了鍵elif event.type == KEYDOWN:# 檢測按鍵是否是a或者leftif event.key == K_a or event.key == K_LEFT:print('left')hero_temp.move_left()# 檢測按鍵是否是d或者rightelif event.key == K_d or event.key == K_RIGHT:print('right')hero_temp.move_right()# 檢測按鍵是否是空格鍵elif event.key == K_SPACE:print('space') def main():#1.創(chuàng)建窗口screen = pygame.display.set_mode((480,852),0,0)#2 創(chuàng)建一個背景圖片background = pygame.image.load('./feiji/background.png')# 創(chuàng)建一個飛機對象hero = HeroPlane(screen)while True:#把背景圖片放到窗口顯示screen.blit(background,(0,0))#顯示玩家飛機到定義的(x,y)坐標位置hero.display()pygame.display.update()#檢測鍵盤,控制玩家飛機移動key_control(hero)time.sleep(0.05)if __name__ == '__main__':main()3.玩家發(fā)射子彈
import pygame import time from pygame.locals import *class HeroPlane(object):def __init__(self,screen_temp):self.x = 210self.y = 700self.screen = screen_temp #游戲窗口self.image = pygame.image.load('feiji/hero1.png')self.bullet_list = [] #存儲發(fā)射出去的子彈def display(self):# 加載玩家飛機到窗口self.screen.blit(self.image,(self.x,self.y))for bullet in self.bullet_list:bullet.display()bullet.move()def move_left(self):self.x -= 5def move_right(self):self.x += 5def fire(self):self.bullet_list.append(Bullet(self.screen,self.x,self.y))class Bullet(object):def __init__(self,screen_temp,x,y):self.x = x + 40self.y = y - 20self.screen = screen_tempself.image = pygame.image.load('feiji/bullet.png')def display(self):self.screen.blit(self.image,(self.x,self.y))def move(self):self.y -= 20def key_control(hero_temp):# 獲取事件,比如按鍵等for event in pygame.event.get():# 判斷是否是點擊了退出按鈕if event.type == QUIT:print("exit")exit()# 判斷是否是按下了鍵elif event.type == KEYDOWN:# 檢測按鍵是否是a或者leftif event.key == K_a or event.key == K_LEFT:print('left')hero_temp.move_left()# 檢測按鍵是否是d或者rightelif event.key == K_d or event.key == K_RIGHT:print('right')hero_temp.move_right()# 檢測按鍵是否是空格鍵elif event.key == K_SPACE:print('space')hero_temp.fire() def main():#1.創(chuàng)建窗口screen = pygame.display.set_mode((480,852),0,0)#2 創(chuàng)建一個背景圖片background = pygame.image.load('./feiji/background.png')# 創(chuàng)建一個飛機對象hero = HeroPlane(screen)while True:#把背景圖片放到窗口顯示screen.blit(background,(0,0))#顯示玩家飛機到定義的(x,y)坐標位置hero.display()pygame.display.update()#檢測鍵盤,控制玩家飛機移動key_control(hero)time.sleep(0.05)if __name__ == '__main__':main()效果如下:
?4.創(chuàng)建一個敵機
--snip-- class EnemyPlane(object):def __init__(self,screen_temp):self.x = 0self.y = 0self.screen = screen_tempself.image = pygame.image.load('feiji/enemy0.png')def display(self):self.screen.blit(self.image,(self.x,self.y))--snip--def main():--snip--#4 創(chuàng)建一個敵機enemy = EnemyPlane(screen)while True:--snip--enemy.display()--snip5.控制敵機左右移動
--snip-- class EnemyPlane(object):def __init__(self,screen_temp):--snip--self.direction = 'right' #定義敵機默認往右移動--snip--def move(self):if self.direction == 'right':self.x += 8elif self.direction == 'left':self.x -= 8if self.x > 430:self.direction = 'left'elif self.x < 0:self.direction = 'right' --snip--def main():--snip--#4 創(chuàng)建一個敵機enemy = EnemyPlane(screen)enemy.move()--snip-- import pygame import time from pygame.locals import *class HeroPlane(object):def __init__(self,screen_temp):self.x = 210self.y = 700self.screen = screen_temp #游戲窗口self.image = pygame.image.load('feiji/hero1.png')self.bullet_list = [] #存儲發(fā)射出去的子彈def display(self):# 加載玩家飛機到窗口self.screen.blit(self.image,(self.x,self.y))for bullet in self.bullet_list:bullet.display()bullet.move()def move_left(self):self.x -= 5def move_right(self):self.x += 5def fire(self):self.bullet_list.append(Bullet(self.screen,self.x,self.y))class EnemyPlane(object):def __init__(self,screen_temp):self.x = 0self.y = 0self.screen = screen_tempself.image = pygame.image.load('feiji/enemy0.png')self.direction = 'right' #定義敵機默認往右移動def display(self):self.screen.blit(self.image,(self.x,self.y))def move(self):if self.direction == 'right':self.x += 8elif self.direction == 'left':self.x -= 8if self.x > 430:self.direction = 'left'elif self.x < 0:self.direction = 'right'class Bullet(object):def __init__(self,screen_temp,x,y):self.x = x + 40self.y = y - 20self.screen = screen_tempself.image = pygame.image.load('feiji/bullet.png')def display(self):self.screen.blit(self.image,(self.x,self.y))def move(self):self.y -= 20def key_control(hero_temp):# 獲取事件,比如按鍵等for event in pygame.event.get():# 判斷是否是點擊了退出按鈕if event.type == QUIT:print("exit")exit()# 判斷是否是按下了鍵elif event.type == KEYDOWN:# 檢測按鍵是否是a或者leftif event.key == K_a or event.key == K_LEFT:print('left')hero_temp.move_left()# 檢測按鍵是否是d或者rightelif event.key == K_d or event.key == K_RIGHT:print('right')hero_temp.move_right()# 檢測按鍵是否是空格鍵elif event.key == K_SPACE:print('space')hero_temp.fire() def main():#1.創(chuàng)建窗口screen = pygame.display.set_mode((480,852),0,0)#2 創(chuàng)建一個背景圖片background = pygame.image.load('./feiji/background.png')#3 創(chuàng)建一個飛機對象hero = HeroPlane(screen)#4 創(chuàng)建一個敵機enemy = EnemyPlane(screen)while True:#把背景圖片放到窗口顯示screen.blit(background,(0,0))#顯示玩家飛機到定義的(x,y)坐標位置hero.display()enemy.display()enemy.move()pygame.display.update()#檢測鍵盤,控制玩家飛機移動key_control(hero)time.sleep(0.05)if __name__ == '__main__':main() 完整代碼6.刪除子彈,只要發(fā)射出去的子彈超過邊界就刪掉
--snip-- class HeroPlane(object):--snip----snip--bullet.move()if bullet.judge(): #判斷子彈是否越界self.bullet_list.remove(bullet) --snip--class Bullet(object):--sinp--def judge(self):if self.y < 0:return Trueelse:return False--snip import pygame import time from pygame.locals import *class HeroPlane(object):def __init__(self,screen_temp):self.x = 210self.y = 700self.screen = screen_temp #游戲窗口self.image = pygame.image.load('feiji/hero1.png')self.bullet_list = [] #存儲發(fā)射出去的子彈def display(self):# 加載玩家飛機到窗口self.screen.blit(self.image,(self.x,self.y))for bullet in self.bullet_list:bullet.display()bullet.move()if bullet.judge(): #判斷子彈是否越界self.bullet_list.remove(bullet)def move_left(self):self.x -= 5def move_right(self):self.x += 5def fire(self):self.bullet_list.append(Bullet(self.screen,self.x,self.y))class EnemyPlane(object):def __init__(self,screen_temp):self.x = 0self.y = 0self.screen = screen_tempself.image = pygame.image.load('feiji/enemy0.png')self.direction = 'right' #定義敵機默認往右移動def display(self):self.screen.blit(self.image,(self.x,self.y))def move(self):if self.direction == 'right':self.x += 8elif self.direction == 'left':self.x -= 8if self.x > 430:self.direction = 'left'elif self.x < 0:self.direction = 'right'class Bullet(object):def __init__(self,screen_temp,x,y):self.x = x + 40self.y = y - 20self.screen = screen_tempself.image = pygame.image.load('feiji/bullet.png')def display(self):self.screen.blit(self.image,(self.x,self.y))def move(self):self.y -= 20def judge(self):if self.y < 200:return Trueelse:return Falsedef key_control(hero_temp):# 獲取事件,比如按鍵等for event in pygame.event.get():# 判斷是否是點擊了退出按鈕if event.type == QUIT:print("exit")exit()# 判斷是否是按下了鍵elif event.type == KEYDOWN:# 檢測按鍵是否是a或者leftif event.key == K_a or event.key == K_LEFT:print('left')hero_temp.move_left()# 檢測按鍵是否是d或者rightelif event.key == K_d or event.key == K_RIGHT:print('right')hero_temp.move_right()# 檢測按鍵是否是空格鍵elif event.key == K_SPACE:print('space')hero_temp.fire() def main():#1.創(chuàng)建窗口screen = pygame.display.set_mode((480,852),0,0)#2 創(chuàng)建一個背景圖片background = pygame.image.load('./feiji/background.png')#3 創(chuàng)建一個飛機對象hero = HeroPlane(screen)#4 創(chuàng)建一個敵機enemy = EnemyPlane(screen)while True:#把背景圖片放到窗口顯示screen.blit(background,(0,0))#顯示玩家飛機到定義的(x,y)坐標位置hero.display()enemy.display()enemy.move()pygame.display.update()#檢測鍵盤,控制玩家飛機移動key_control(hero)time.sleep(0.05)if __name__ == '__main__':main() 完整代碼7.添加敵機放射子彈功能
使用random來控制敵機發(fā)射子彈的頻率
--snip-- import randomclass EnemyPlane(object):--snip - -self.bullet_list = [] #存儲發(fā)射出去的子彈self.direction = 'right' #定義敵機默認往右移動def display(self):--snip - -bullet.move()if bullet.judge(): #判斷子彈是否越界self.bullet_list.remove(bullet)--snip--def fire(self):#控制子彈頻率random_num = random.randint(1,80)if random_num == 10 or random_num == 40:self.bullet_list.append(EnemyBullet(self.screen,self.x,self.y)) --snip--class EnemyBullet(object):def __init__(self,screen_temp,x,y):self.x = x + 25self.y = y + 40self.screen = screen_tempself.image = pygame.image.load('feiji/bullet1.png')def display(self):self.screen.blit(self.image,(self.x,self.y))def move(self):self.y += 10def judge(self):if self.y > 852:return Trueelse:return False--snip - -while True:--snip - -enemy.move()enemy.fire()--snip-- import pygame import time from pygame.locals import * import randomclass HeroPlane(object):def __init__(self,screen_temp):self.x = 210self.y = 700self.screen = screen_temp #游戲窗口self.image = pygame.image.load('feiji/hero1.png')self.bullet_list = [] #存儲發(fā)射出去的子彈def display(self):# 加載玩家飛機到窗口self.screen.blit(self.image,(self.x,self.y))for bullet in self.bullet_list:bullet.display()bullet.move()if bullet.judge(): #判斷子彈是否越界self.bullet_list.remove(bullet)def move_left(self):self.x -= 5def move_right(self):self.x += 5def fire(self):self.bullet_list.append(Bullet(self.screen,self.x,self.y))class EnemyPlane(object):def __init__(self,screen_temp):self.x = 0self.y = 0self.screen = screen_tempself.image = pygame.image.load('feiji/enemy0.png')self.bullet_list = [] #存儲發(fā)射出去的子彈self.direction = 'right' #定義敵機默認往右移動def display(self):self.screen.blit(self.image,(self.x,self.y))for bullet in self.bullet_list:bullet.display()bullet.move()if bullet.judge(): #判斷子彈是否越界self.bullet_list.remove(bullet)def move(self):if self.direction == 'right':self.x += 8elif self.direction == 'left':self.x -= 8if self.x > 430:self.direction = 'left'elif self.x < 0:self.direction = 'right'def fire(self):random_num = random.randint(1,80)if random_num == 10 or random_num == 40:self.bullet_list.append(EnemyBullet(self.screen,self.x,self.y))class Bullet(object):def __init__(self,screen_temp,x,y):self.x = x + 40self.y = y - 20self.screen = screen_tempself.image = pygame.image.load('feiji/bullet.png')def display(self):self.screen.blit(self.image,(self.x,self.y))def move(self):self.y -= 20def judge(self):if self.y < 0:return Trueelse:return Falseclass EnemyBullet(object):def __init__(self,screen_temp,x,y):self.x = x + 25self.y = y + 40self.screen = screen_tempself.image = pygame.image.load('feiji/bullet1.png')def display(self):self.screen.blit(self.image,(self.x,self.y))def move(self):self.y += 10def judge(self):if self.y > 852:return Trueelse:return Falsedef key_control(hero_temp):# 獲取事件,比如按鍵等for event in pygame.event.get():# 判斷是否是點擊了退出按鈕if event.type == QUIT:print("exit")exit()# 判斷是否是按下了鍵elif event.type == KEYDOWN:# 檢測按鍵是否是a或者leftif event.key == K_a or event.key == K_LEFT:print('left')hero_temp.move_left()# 檢測按鍵是否是d或者rightelif event.key == K_d or event.key == K_RIGHT:print('right')hero_temp.move_right()# 檢測按鍵是否是空格鍵elif event.key == K_SPACE:print('space')hero_temp.fire()def main():#1.創(chuàng)建窗口screen = pygame.display.set_mode((480,852),0,0)#2 創(chuàng)建一個背景圖片background = pygame.image.load('./feiji/background.png')#3 創(chuàng)建一個飛機對象hero = HeroPlane(screen)#4 創(chuàng)建一個敵機enemy = EnemyPlane(screen)while True:#把背景圖片放到窗口顯示screen.blit(background,(0,0))#顯示玩家飛機到定義的(x,y)坐標位置hero.display()enemy.display()enemy.move()enemy.fire()pygame.display.update()#檢測鍵盤,控制玩家飛機移動key_control(hero)time.sleep(0.05)if __name__ == '__main__':main() 完整代碼最終效果
?8.優(yōu)化代碼,創(chuàng)建基類
1 import pygame2 import time3 from pygame.locals import *4 import random5 6 class BasePlane(object):7 '''飛機類'''8 def __init__(self,screen_temp,x,y,image_name):9 self.x = x10 self.y = y11 self.screen = screen_temp #游戲窗口12 self.image = pygame.image.load(image_name)13 self.bullet_list = [] #存儲發(fā)射出去的子彈14 15 def display(self):16 # 加載飛機到窗口17 self.screen.blit(self.image,(self.x,self.y))18 #控制子彈19 for bullet in self.bullet_list:20 bullet.display()21 bullet.move()22 if bullet.judge(): #判斷子彈是否越界23 self.bullet_list.remove(bullet)24 25 class HeroPlane(BasePlane):26 '''玩家飛機'''27 def __init__(self,screen_temp):28 BasePlane.__init__(self,screen_temp,210,700,'feiji/hero1.png')29 30 def move_left(self):31 self.x -= 532 33 def move_right(self):34 self.x += 535 36 def fire(self):37 #發(fā)射子彈38 self.bullet_list.append(Bullet(self.screen,self.x,self.y))39 40 class EnemyPlane(BasePlane):41 '''敵方飛機'''42 def __init__(self, screen_temp):43 BasePlane.__init__(self, screen_temp, 0, 0, 'feiji/enemy0.png')44 self.direction = 'right' #定義敵機默認往右移動45 46 def move(self):47 if self.direction == 'right':48 self.x += 849 elif self.direction == 'left':50 self.x -= 851 52 if self.x > 430:53 self.direction = 'left'54 elif self.x < 0:55 self.direction = 'right'56 57 def fire(self):58 # 發(fā)射子彈59 random_num = random.randint(1,50)60 if random_num == 10 or random_num == 40:61 self.bullet_list.append(EnemyBullet(self.screen,self.x,self.y))62 63 class BaseBullet(object):64 '''子彈類'''65 def __init__(self,screen_temp,x,y,image_name):66 self.x = x67 self.y = y68 self.screen = screen_temp69 self.image = pygame.image.load(image_name)70 71 def display(self):72 self.screen.blit(self.image,(self.x,self.y))73 74 class Bullet(BaseBullet):75 '''玩家子彈'''76 def __init__(self,screen_temp,x,y):77 BaseBullet.__init__(self,screen_temp,x+40,y-20,'feiji/bullet.png')78 79 def move(self):80 self.y -= 2081 82 def judge(self):83 if self.y < 0:84 return True85 else:86 return False87 88 class EnemyBullet(BaseBullet):89 '''敵機子彈'''90 def __init__(self,screen_temp,x,y):91 BaseBullet.__init__(self, screen_temp, x + 25, y + 40, 'feiji/bullet1.png')92 93 def move(self):94 self.y += 1095 96 def judge(self):97 if self.y > 852:98 return True99 else: 100 return False 101 102 def key_control(hero_temp): 103 # 獲取事件,比如按鍵等 104 for event in pygame.event.get(): 105 # 判斷是否是點擊了退出按鈕 106 if event.type == QUIT: 107 print("exit") 108 exit() 109 # 判斷是否是按下了鍵 110 elif event.type == KEYDOWN: 111 # 檢測按鍵是否是a或者left 112 if event.key == K_a or event.key == K_LEFT: 113 print('left') 114 hero_temp.move_left() 115 116 # 檢測按鍵是否是d或者right 117 elif event.key == K_d or event.key == K_RIGHT: 118 print('right') 119 hero_temp.move_right() 120 # 檢測按鍵是否是空格鍵 121 elif event.key == K_SPACE: 122 print('space') 123 hero_temp.fire() 124 125 def main(): 126 #1.創(chuàng)建窗口 127 screen = pygame.display.set_mode((480,852),0,0) 128 #2 創(chuàng)建一個背景圖片 129 background = pygame.image.load('./feiji/background.png') 130 #3 創(chuàng)建一個飛機對象 131 hero = HeroPlane(screen) 132 #4 創(chuàng)建一個敵機對象 133 enemy = EnemyPlane(screen) 134 135 while True: 136 #把背景圖片放到窗口顯示 137 screen.blit(background,(0,0)) 138 #顯示玩家飛機到定義的(x,y)坐標位置 139 hero.display() #顯示玩家飛機 140 enemy.display() #顯示敵機 141 enemy.move() #玩家飛機移動 142 enemy.fire() #玩家飛機發(fā)射子彈 143 pygame.display.update() #刷新 144 #檢測鍵盤,控制玩家飛機移動 145 key_control(hero) 146 time.sleep(0.05) 147 148 if __name__ == '__main__': 149 main()?
轉載于:https://www.cnblogs.com/Jansens520/p/8469899.html
總結
以上是生活随笔為你收集整理的python项目飞机大战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++子类父类构造函数的关系
- 下一篇: POJ2942 Knights of t