中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何利用Python實現星空大戰游戲

發布時間:2022-03-30 12:28:24 來源:億速云 閱讀:201 作者:小新 欄目:開發技術

小編給大家分享一下如何利用Python實現星空大戰游戲,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

一.游戲畫面

如何利用Python實現星空大戰游戲

二.游戲結束畫面

如何利用Python實現星空大戰游戲

三.游戲素材

如何利用Python實現星空大戰游戲

如何利用Python實現星空大戰游戲

四.游戲代碼

星空飛碟大戰.py

由于配音需要混音器,這里用到了pygame的混音器,

五、核心代碼

1.導入模塊

from sprites import *
import pygame.mixer

2.動態星空背景函數

def star_move():
  """動態星空背景函數"""
  for star in stars:
    star.move(0,-20)
    if star.ycor() < -height//2:
      x = random.randint(-width//2,width//2)
      y = random.randint(10+height//2,height*2)
      star.reborn(x,y,0,-20)

3.不定時產生敵機函數

def spawn_enemy():
  """不定時產生敵機函數"""
  if random.randint(1,10)==1 and len(enemys)<10:
    x = random.randint(-200,200)
    y = random.randint(100,300)
    enemy = Sprite(shape='res/ufo.png',visible=False,pos=(x,y),tag='enemy')
    enemy._rotatemode = 1
    enemy.scale(0.5)
    enemy.setheading(random.randint(1,360))
    enemy.show()

4.飛碟的移動

def enemymove():
  """飛碟的移動"""  
  for e in enemys:
    e.fd(3)    
    # 設定一定的機率讓ufo朝向player
    if random.randint(10,100) == 10 and \
       abs(e.xcor())<200 and abs(e.ycor()<250):
      e.heading(player)
    
    e.bounce_on_edge()

5.子彈的移動

def bulletmove():
  """子彈的移動"""  
  for b in list(bullets):
     b.move(0,10)
     if b.collide_edge():b.remove()

6.玩家射擊函數

def player_shoot():
  """玩家射擊函數"""
  if player.alive == False : return 
  if m1.down() and framecounter % 5 == 0 :
     b = Sprite(shape='circle',visible=False,tag='bullet')
     b.scale(0.5)
     b.color('yellow')    
     b.goto(player.pos())        # 移到player坐標
     b.show()                    # 顯示子彈
     shoot.play()                # 播放射擊聲

7.播放背景音樂與生成聲效對象

# 播放背景音樂與生成聲效對象
pygame.mixer.init()
pygame.mixer.music.load('audio/FrozenJam.ogg')
pygame.mixer.music.play(-1,0)
explosion = pygame.mixer.Sound('audio/expl3.wav')
shoot = pygame.mixer.Sound('audio/pew.wav')

8.新建屏幕

width,height = 480,640
screen = Screen()               # 新建屏幕
screen.bgcolor('black')         # 屏幕背景色為黑
screen.setup(width,height)
screen.title("星空飛碟大戰by大海老師")
screen.addshape('res/fighter.png')
screen.addshape('res/ufo.png')
frames = ['res/explosion0.png','res/explosion1.png']
[screen.addshape(frame) for frame in frames]

9.移動圖章實現星星

# 星星,用來做向下滾動背景,星星的移動也可以通過移動圖章實現
# 這樣可以有更多的星星。如果用克隆的話有數量限制,根據計算機配置不同而不同。
star = Sprite(shape='circle')
star.color('white')
star.scale(0.1)
stars = [star]
stars.extend([star.clone() for _ in range(20)])
for star in stars:
  x = random.randint(-width//2,width//2)
  y = random.randint(10+height//2,height*2)
  star.goto(x,y)

10.哭臉

cry = Sprite(shape='cry.png',visible=False,pos=(0,100))

11.玩家

player = Sprite(shape='res/fighter.png',pos=(0,-200))
player.scale(0.65)
player.alive = True             # 表示player是活的

m1 = Mouse()                    # 鼠標左鍵檢測實例
clock = Clock()                 # 實鐘對象,用來控制fps
framecounter = 0
counter = 0                     # 統計擊中的ufo數量
bullets = Group('bullet')       # 子彈組
enemys = Group('enemy')         # ufo敵人組

12.飛碟移動與子彈移動

while counter<100:
  framecounter += 1             # 幀計數器
  spawn_enemy()                 # 不定時產生敵機UFO
  player_shoot()                # 單擊鼠標左鍵,射擊子彈
  enemymove()                   # 飛碟們的移動 
  bulletmove()                  # 子彈的移動
  if player.alive:
    player.goto(mousepos())
  else:
    cry.show()                  # 顯示哭臉,表示失敗
  star_move()                   # 星空滾動背景

13.敵機的碰撞檢測

for e in list(enemys):        # 對每架敵機進行碰撞檢測
  if e.collide(player,scale=0.6):            
      explode(e.position(),frames)
      e.remove()
      explode(player.pos(),frames)
      player.remove()
      player.alive = False
      explosion.play()         # 爆炸聲
      break
  # 敵機是否碰到任意一顆子彈
  for b in list(bullets):
    if b.collide(e,scale=0.6): # 如果子彈碰到UFO        
      explode(e.position(),frames)
      e.remove()
      b.remove()
      explosion.play()         # 爆炸聲
      counter +=1              # 進行統計         
      break            

screen.title('星空飛碟大戰,當前擊斃:' +  str(counter) + " 架UFO")  
clock.tick(60)

14.闖關成功把子彈刪除

[b.remove() for b in list(bullets)] # 闖關成功把子彈刪除
for e in list(enemys):              # 每架飛碟都爆炸
  explode(e.position(),frames)
  e.remove()  
  clock.tick(10)
    
t = Turtle(visible=False)
t.color('yellow')
t.write('成功闖關!',align='center',font=('黑體',32,'normal'))

while True:
  player.goto(mousepos()) 
  star_move()                   # 星空滾動背景  
  clock.tick(60)

以上是“如何利用Python實現星空大戰游戲”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

都安| 乐亭县| 黄大仙区| 武强县| 陆丰市| 平武县| 乌苏市| 公主岭市| 东兰县| 石河子市| 樟树市| 綦江县| 恩平市| 三河市| 肇源县| 安泽县| 芒康县| 扶绥县| 唐海县| 麻江县| 利辛县| 霍邱县| 离岛区| 江津市| 宝应县| 珲春市| 乌兰浩特市| 垣曲县| 佛冈县| 桐庐县| 镇远县| 丁青县| 紫云| 清原| 土默特左旗| 郁南县| 神木县| 九龙城区| 浑源县| 沧州市| 肥东县|