国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

這篇具有很好參考價(jià)值的文章主要介紹了python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


0 項(xiàng)目簡(jiǎn)介

?? Hi,各位同學(xué)好呀,這里是L學(xué)長(zhǎng)!

??今天向大家分享一個(gè)今年(2022)最新完成的畢業(yè)設(shè)計(jì)項(xiàng)目作品

python小游戲畢設(shè) 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)

?? 學(xué)長(zhǎng)根據(jù)實(shí)現(xiàn)的難度和等級(jí)對(duì)項(xiàng)目進(jìn)行評(píng)分(最低0分,滿分5分)

  • 難度系數(shù):3分

  • 工作量:3分

  • 創(chuàng)新點(diǎn):4分

  • 項(xiàng)目獲?。?/strong>https://gitee.com/sinonfin/system-sharing

1 游戲介紹

幾年前,Google 給 Chrome 瀏覽器加了一個(gè)有趣的彩蛋:如果你在未聯(lián)網(wǎng)的情況下訪問網(wǎng)頁,會(huì)看到 “Unable to connect to the Internet” 或 “No internet” 的提示,旁邊是一只像素恐龍。

python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼),python
許多人可能覺得這只恐龍只是一個(gè)可愛的小圖標(biāo),在斷網(wǎng)的時(shí)候陪伴用戶。但是后來有人按下空格鍵,小恐龍開始奔跑!

這個(gè)小彩蛋成為深受人們喜愛的小游戲,風(fēng)靡至今。


今天我們用pygame做一個(gè)仿谷歌瀏覽器小恐龍游戲,游戲規(guī)則如下:

玩家通過↑↓控制小恐龍,如果玩家按下了空格鍵或者↑鍵,則小恐龍?zhí)S,如果玩家按下了↓鍵,則小恐龍低頭,否則小恐龍正常向前沖。當(dāng)小恐龍碰到這些障礙物時(shí),小恐龍就死掉了,本局游戲也隨之結(jié)束。

2 實(shí)現(xiàn)效果

python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼),python

python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼),python

python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼),python

3 Pygame介紹

簡(jiǎn)介

Pygame是一系列專門為編寫電子游戲而設(shè)計(jì)的Python模塊(modules)。Pygame在已經(jīng)非常優(yōu)秀的SDL庫的基礎(chǔ)上增加了許多功能。這讓你能夠用Python語言編寫出豐富多彩的游戲程序。

Pygame可移植性高,幾乎能在任何平臺(tái)和操作系統(tǒng)上運(yùn)行。

Pygame已經(jīng)被下載過數(shù)百萬次。

Pygame免費(fèi)開源。它在LGPL許可證(Lesser General Public License,GNU寬通用公共許可證)下發(fā)行。使用Pygame,你可以創(chuàng)造出免費(fèi)開源,可共享,或者商業(yè)化的游戲。詳情請(qǐng)見LGPL許可證。

優(yōu)點(diǎn)

  • 能夠輕松使用多核CPU(multi core CPUs) :如今雙核CPU很常用,8核CPU在桌面系統(tǒng)中也很便宜,而利用好多核系統(tǒng),能讓你在你的游戲中實(shí)現(xiàn)更多東西。特定的pygame函數(shù)能夠釋放令人生畏的python GIL(全局解釋器鎖),這幾乎是你用C語言才能做的事。

  • 核心函數(shù)用最優(yōu)化的C語言或匯編語言編寫:C語言代碼通常比Python代碼運(yùn)行速度快10-20倍。而匯編語言編寫的代碼(assembly code)比Python甚至快到100多倍。

  • 安裝便捷:一般僅需包管理程序或二進(jìn)制系統(tǒng)程序便能安裝。

  • 真正地可移植:支持Linux (主要發(fā)行版), Windows (95, 98, ME, 2000, XP, Vista, 64-bit Windows,), Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX等操作系統(tǒng).也能支持AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64, RISC OS, SymbianOS and OS/2,但是還沒有受到官方認(rèn)可。你也可以在手持設(shè)備,游戲控制臺(tái), One Laptop Per Child (OLPC) computer項(xiàng)目的電腦等設(shè)備中使用pygame.

  • 用法簡(jiǎn)單:無論是小孩子還是大人都能學(xué)會(huì)用pygame來制作射擊類游戲。

  • 很多Pygame游戲已發(fā)行:其中包括很多游戲大賽入圍作品、非常受歡迎的開源可分享的游戲。

  • 由你來控制主循環(huán):由你來調(diào)用pygame的函數(shù),pygame的函數(shù)并不需要調(diào)用你的函數(shù)。當(dāng)你同時(shí)還在使用其他庫來編寫各種各種的程序時(shí),這能夠?yàn)槟闾峁O大的掌控權(quán)。

  • 不需要GUI就能使用所有函數(shù):僅在命令行中,你就可以使用pygame的某些函數(shù)來處理圖片,獲取游戲桿輸入,播放音樂……

  • 對(duì)bug反應(yīng)迅速:很多bug在被上報(bào)的1小時(shí)內(nèi)就能被我們修復(fù)。雖然有時(shí)候我們確實(shí)會(huì)卡在某一個(gè)bug上很久,但大多數(shù)時(shí)候我們都是很不錯(cuò)的bug修復(fù)者。如今bug的上報(bào)已經(jīng)很少了,因?yàn)樵S多bug早已被我們修復(fù)。

  • 代碼量少:pygame并沒有數(shù)以萬計(jì)的也許你永遠(yuǎn)用不到的冗雜代碼。pygame的核心代碼一直保持著簡(jiǎn)潔特點(diǎn),其他附加物諸如GUI庫等,都是在核心代碼之外單獨(dú)設(shè)計(jì)研發(fā)的。

  • 模塊化:你可以單獨(dú)使用pygame的某個(gè)模塊。想要換著使用一個(gè)別的聲音處理庫?沒問題。pygame的很多核心模塊支持獨(dú)立初始化與使用。

最小開發(fā)框架

import pygame,sys #sys是python的標(biāo)準(zhǔn)庫,提供Python運(yùn)行時(shí)環(huán)境變量的操控

pygame.init()  #內(nèi)部各功能模塊進(jìn)行初始化創(chuàng)建及變量設(shè)置,默認(rèn)調(diào)用
size = width,height = 800,600  #設(shè)置游戲窗口大小,分別是寬度和高度
screen = pygame.display.set_mode(size)  #初始化顯示窗口
pygame.display.set_caption("小游戲程序")  #設(shè)置顯示窗口的標(biāo)題內(nèi)容,是一個(gè)字符串類型
while True:  #無限循環(huán),直到Python運(yùn)行時(shí)退出結(jié)束
    for event in pygame.event.get():  #從Pygame的事件隊(duì)列中取出事件,并從隊(duì)列中刪除該事件
        if event.type == pygame.QUIT:  #獲得事件類型,并逐類響應(yīng)
            sys.exit()   #用于退出結(jié)束游戲并退出          
    pygame.display.update()  #對(duì)顯示窗口進(jìn)行更新,默認(rèn)窗口全部重繪

代碼執(zhí)行流程

python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼),python

4 原理和實(shí)現(xiàn)

4.1 環(huán)境配置

  • Python版本:3.6.4
  • 相關(guān)模塊:
  • pygame模塊;
  • 以及一些Python自帶的模塊。

4.2 游戲初始化

# 游戲初始化
pygame.init()
screen = pygame.display.set_mode(cfg.SCREENSIZE)
pygame.display.set_caption('T-Rex Rush —— Charles的皮卡丘')
# 導(dǎo)入所有聲音文件
sounds = {}
for key, value in cfg.AUDIO_PATHS.items():
  sounds[key] = pygame.mixer.Sound(value)

4.3 創(chuàng)建游戲類

首先,我們來明確一下該游戲包含哪些游戲精靈類:

  • 小恐龍:由玩家控制以躲避路上的障礙物;

  • 路面:游戲的背景;

  • 云:游戲的背景;

  • 飛龍:路上的障礙物之一,小恐龍碰上就會(huì)死掉;

  • 仙人掌:路上的障礙物之一,小恐龍碰上就會(huì)死掉;

  • 記分板:記錄當(dāng)前的分?jǐn)?shù)和歷史最高分。

4.4 云、路面以及仙人掌類

云,路面以及仙人掌來說,定義起來很簡(jiǎn)單,我們只需要加載對(duì)應(yīng)的游戲元素圖片:

python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼),python
python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼),python

python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼),python

'''地板'''
class Ground(pygame.sprite.Sprite):
  def __init__(self, imagepath, position, **kwargs):
    pygame.sprite.Sprite.__init__(self)
    # 導(dǎo)入圖片
    self.image_0 = pygame.image.load(imagepath)
    self.rect_0 = self.image_0.get_rect()
    self.rect_0.left, self.rect_0.bottom = position
    self.image_1 = pygame.image.load(imagepath)
    self.rect_1 = self.image_1.get_rect()
    self.rect_1.left, self.rect_1.bottom = self.rect_0.right, self.rect_0.bottom
    # 定義一些必要的參數(shù)
    self.speed = -10
  '''更新地板'''
  def update(self):
    self.rect_0.left += self.speed
    self.rect_1.left += self.speed
    if self.rect_0.right < 0:
      self.rect_0.left = self.rect_1.right
    if self.rect_1.right < 0:
      self.rect_1.left = self.rect_0.right
  '''將地板畫到屏幕'''
  def draw(self, screen):
    screen.blit(self.image_0, self.rect_0)
    screen.blit(self.image_1, self.rect_1)

'''云'''
class Cloud(pygame.sprite.Sprite):
  def __init__(self, imagepath, position, **kwargs):
    pygame.sprite.Sprite.__init__(self)
    # 導(dǎo)入圖片
    self.image = pygame.image.load(imagepath)
    self.rect = self.image.get_rect()
    self.rect.left, self.rect.top = position
    # 定義一些必要的參數(shù)
    self.speed = -1
  '''將云畫到屏幕上'''
  def draw(self, screen):
    screen.blit(self.image, self.rect)
  '''更新云'''
  def update(self):
    self.rect = self.rect.move([self.speed, 0])
    if self.rect.right < 0:
      self.kill()

'''仙人掌'''
class Cactus(pygame.sprite.Sprite):
  def __init__(self, imagepaths, position=(600, 147), sizes=[(40, 40), (40, 40)], **kwargs):
    pygame.sprite.Sprite.__init__(self)
    # 導(dǎo)入圖片
    self.images = []
    image = pygame.image.load(imagepaths[0])
    for i in range(3):
      self.images.append(pygame.transform.scale(image.subsurface((i*101, 0), (101, 101)), sizes[0]))
    image = pygame.image.load(imagepaths[1])
    for i in range(3):
      self.images.append(pygame.transform.scale(image.subsurface((i*68, 0), (68, 70)), sizes[1]))
    self.image = random.choice(self.images)
    self.rect = self.image.get_rect()
    self.rect.left, self.rect.bottom = position
    self.mask = pygame.mask.from_surface(self.image)
    # 定義一些必要的變量
    self.speed = -10
  '''畫到屏幕上'''
  def draw(self, screen):
    screen.blit(self.image, self.rect)
  '''更新'''
  def update(self):
    self.rect = self.rect.move([self.speed, 0])
    if self.rect.right < 0:
      self.kill()

4.5 計(jì)分板

記分板的定義類似,只不過它不需要移動(dòng),但是需要實(shí)時(shí)地更新當(dāng)前 的分?jǐn)?shù):

'''記分板'''
class Scoreboard(pygame.sprite.Sprite):
  def __init__(self, imagepath, position, size=(11, 13), is_highest=False, bg_color=None, **kwargs):
    pygame.sprite.Sprite.__init__(self)
    # 導(dǎo)入圖片
    self.images = []
    image = pygame.image.load(imagepath)
    for i in range(12):
      self.images.append(pygame.transform.scale(image.subsurface((i*20, 0), (20, 24)), size))
    if is_highest:
      self.image = pygame.Surface((size[0]*8, size[1]))
    else:
      self.image = pygame.Surface((size[0]*5, size[1]))
    self.rect = self.image.get_rect()
    self.rect.left, self.rect.top = position
    # 一些必要的變量
    self.is_highest = is_highest
    self.bg_color = bg_color
    self.score = '00000'
  '''設(shè)置得分'''
  def set(self, score):
    self.score = str(score).zfill(5)
  '''畫到屏幕上'''
  def draw(self, screen):
    self.image.fill(self.bg_color)
    for idx, digital in enumerate(list(self.score)):
      digital_image = self.images[int(digital)]
      if self.is_highest:
        self.image.blit(digital_image, ((idx+3)*digital_image.get_rect().width, 0))
      else:
        self.image.blit(digital_image, (idx*digital_image.get_rect().width, 0))
    if self.is_highest:
      self.image.blit(self.images[-2], (0, 0))
      self.image.blit(self.images[-1], (digital_image.get_rect().width, 0))
    screen.blit(self.image, self.rect)

上面代碼用is_highest變量來區(qū)分該記分板是否用于記錄游戲最高分,還是只是記錄當(dāng)前的分?jǐn)?shù),做該區(qū)分的原因是游戲最高分前面有HI標(biāo)識(shí),所以占的空間更大:

python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼),python

4.6 飛龍

飛龍的定義就稍微復(fù)雜一些了,因?yàn)樗粌H需要向左移動(dòng),還需要做出不停扇動(dòng)翅膀的效果。具體而言,飛龍有兩張圖:

python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼),python

你需要做的就是每隔一段時(shí)間就切換一次當(dāng)前的飛龍圖片,以實(shí)現(xiàn)飛龍扇動(dòng)翅膀的效果:

'''飛龍'''
class Ptera(pygame.sprite.Sprite):
  def __init__(self, imagepath, position, size=(46, 40), **kwargs):
    pygame.sprite.Sprite.__init__(self)
    # 導(dǎo)入圖片
    self.images = []
    image = pygame.image.load(imagepath)
    for i in range(2):
      self.images.append(pygame.transform.scale(image.subsurface((i*92, 0), (92, 81)), size))
    self.image_idx = 0
    self.image = self.images[self.image_idx]
    self.rect = self.image.get_rect()
    self.rect.left, self.rect.centery = position
    self.mask = pygame.mask.from_surface(self.image)
    # 定義一些必要的變量
    self.speed = -10
    self.refresh_rate = 10
    self.refresh_counter = 0
  '''畫到屏幕上'''
  def draw(self, screen):
    screen.blit(self.image, self.rect)
  '''更新'''
  def update(self):
    if self.refresh_counter % self.refresh_rate == 0:
      self.refresh_counter = 0
      self.image_idx = (self.image_idx + 1) % len(self.images)
      self.loadImage()
    self.rect = self.rect.move([self.speed, 0])
    if self.rect.right < 0:
      self.kill()
    self.refresh_counter += 1
  '''載入當(dāng)前狀態(tài)的圖片'''
  def loadImage(self):
    self.image = self.images[self.image_idx]
    rect = self.image.get_rect()
    rect.left, rect.top = self.rect.left, self.rect.top
    self.rect = rect
    self.mask = pygame.mask.from_surface(self.image)

4.7 小恐龍

最后,我們需要定義一下小恐龍類,也就是最復(fù)雜的一個(gè)游戲精靈類。它有低頭,跳躍,普通前進(jìn)三種狀態(tài)。對(duì)于低頭來說:

python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼),python

你只需要和飛龍扇動(dòng)翅膀一樣,不斷切換兩張低頭的圖片以實(shí)現(xiàn)小恐龍跑動(dòng)的效果就可以了。

對(duì)于普通狀態(tài)也是類似的:

python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼),python

對(duì)于跳躍狀態(tài),我們則可以通過初中學(xué)的上拋和自由落體運(yùn)動(dòng)公式來建模,從而計(jì)算小恐龍?jiān)谪Q直方向上的位置。具體而言,代碼實(shí)現(xiàn)如下:

'''小恐龍'''
class Dinosaur(pygame.sprite.Sprite):
  def __init__(self, imagepaths, position=(40, 147), size=[(44, 47), (59, 47)], **kwargs):
    pygame.sprite.Sprite.__init__(self)
    # 導(dǎo)入所有圖片
    self.images = []
    image = pygame.image.load(imagepaths[0])
    for i in range(5):
      self.images.append(pygame.transform.scale(image.subsurface((i*88, 0), (88, 95)), size[0]))
    image = pygame.image.load(imagepaths[1])
    for i in range(2):
      self.images.append(pygame.transform.scale(image.subsurface((i*118, 0), (118, 95)), size[1]))
    self.image_idx = 0
    self.image = self.images[self.image_idx]
    self.rect = self.image.get_rect()
    self.rect.left, self.rect.bottom = position
    self.mask = pygame.mask.from_surface(self.image)
    # 定義一些必要的變量
    self.init_position = position
    self.refresh_rate = 5
    self.refresh_counter = 0
    self.speed = 11.5
    self.gravity = 0.6
    self.is_jumping = False
    self.is_ducking = False
    self.is_dead = False
    self.movement = [0, 0]
  '''跳躍'''
  def jump(self, sounds):
    if self.is_dead or self.is_jumping:
      return
    sounds['jump'].play()
    self.is_jumping = True
    self.movement[1] = -1 * self.speed
  '''低頭'''
  def duck(self):
    if self.is_jumping or self.is_dead:
      return
    self.is_ducking = True
  '''不低頭'''
  def unduck(self):
    self.is_ducking = False
  '''死掉了'''
  def die(self, sounds):
    if self.is_dead:
      return
    sounds['die'].play()
    self.is_dead = True
  '''將恐龍畫到屏幕'''
  def draw(self, screen):
    screen.blit(self.image, self.rect)
  '''載入當(dāng)前狀態(tài)的圖片'''
  def loadImage(self):
    self.image = self.images[self.image_idx]
    rect = self.image.get_rect()
    rect.left, rect.top = self.rect.left, self.rect.top
    self.rect = rect
    self.mask = pygame.mask.from_surface(self.image)
  '''更新小恐龍'''
  def update(self):
    if self.is_dead:
      self.image_idx = 4
      self.loadImage()
      return
    if self.is_jumping:
      self.movement[1] += self.gravity
      self.image_idx = 0
      self.loadImage()
      self.rect = self.rect.move(self.movement)
      if self.rect.bottom >= self.init_position[1]:
        self.rect.bottom = self.init_position[1]
        self.is_jumping = False
    elif self.is_ducking:
      if self.refresh_counter % self.refresh_rate == 0:
        self.refresh_counter = 0
        self.image_idx = 5 if self.image_idx == 6 else 6
        self.loadImage()
    else:
      if self.refresh_counter % self.refresh_rate == 0:
        self.refresh_counter = 0
        if self.image_idx == 1:
          self.image_idx = 2
        elif self.image_idx == 2:
          self.image_idx = 3
        else:
          self.image_idx = 1
        self.loadImage()
    self.refresh_counter += 1

4.8 游戲主循環(huán)

最后寫游戲主循環(huán)

游戲主循環(huán)的邏輯很簡(jiǎn)單,即每幀游戲畫面,我們都需要檢測(cè)一下玩家的操作,如果玩家按下了空格鍵或者↑鍵,則小恐龍?zhí)S,如果玩家按下了↓鍵,則小恐龍低頭,否則小恐龍正常向前沖。

然后在游戲中,我們隨機(jī)產(chǎn)生云,飛龍和仙人掌這些游戲場(chǎng)景和障礙物,并且和路面一起以相同的速度向左移動(dòng),從而實(shí)現(xiàn)小恐龍向右移動(dòng)的視覺效果。在移動(dòng)的過程中,我們需要對(duì)小恐龍和仙人掌,小恐龍和飛龍進(jìn)行碰撞檢測(cè),當(dāng)小恐龍碰到這些障礙物時(shí),小恐龍就死掉了,本局游戲也隨之結(jié)束。

需要注意的是我們應(yīng)該使用collide_mask函數(shù)來進(jìn)行更為精確的碰撞檢測(cè),而不是之前的collide_rect函數(shù):

python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼),python

即當(dāng)兩個(gè)目標(biāo)的最小外接矩形有重疊時(shí),collide_rect就會(huì)判定兩個(gè)目標(biāo)有碰撞,這顯然是不合理的,會(huì)給玩家?guī)磔^差的游戲體驗(yàn)。

另外,當(dāng)分?jǐn)?shù)每提高一千分,我們就和原版的游戲一樣增加一點(diǎn)場(chǎng)景和障礙物向左移動(dòng)的速度(也就是增加小恐龍向右移動(dòng)的速度)。

最后,把當(dāng)前所有的游戲元素綁定到屏幕上并更新當(dāng)前的屏幕就ok了。

# 游戲主循環(huán)
clock = pygame.time.Clock()
while True:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      pygame.quit()
      sys.exit()
    elif event.type == pygame.KEYDOWN:
      if event.key == pygame.K_SPACE or event.key == pygame.K_UP:
        dino.jump(sounds)
      elif event.key == pygame.K_DOWN:
        dino.duck()
    elif event.type == pygame.KEYUP and event.key == pygame.K_DOWN:
      dino.unduck()
  screen.fill(cfg.BACKGROUND_COLOR)
  # --隨機(jī)添加云
  if len(cloud_sprites_group) < 5 and random.randrange(0, 300) == 10:
    cloud_sprites_group.add(Cloud(cfg.IMAGE_PATHS['cloud'], position=(cfg.SCREENSIZE[0], random.randrange(30, 75))))
  # --隨機(jī)添加仙人掌/飛龍
  add_obstacle_timer += 1
  if add_obstacle_timer > random.randrange(50, 150):
    add_obstacle_timer = 0
    random_value = random.randrange(0, 10)
    if random_value >= 5 and random_value <= 7:
      cactus_sprites_group.add(Cactus(cfg.IMAGE_PATHS['cacti']))
    else:
      position_ys = [cfg.SCREENSIZE[1]*0.82, cfg.SCREENSIZE[1]*0.75, cfg.SCREENSIZE[1]*0.60, cfg.SCREENSIZE[1]*0.20]
      ptera_sprites_group.add(Ptera(cfg.IMAGE_PATHS['ptera'], position=(600, random.choice(position_ys))))
  # --更新游戲元素
  dino.update()
  ground.update()
  cloud_sprites_group.update()
  cactus_sprites_group.update()
  ptera_sprites_group.update()
  score_timer += 1
  if score_timer > (cfg.FPS//12):
    score_timer = 0
    score += 1
    score = min(score, 99999)
    if score > highest_score:
      highest_score = score
    if score % 100 == 0:
      sounds['point'].play()
    if score % 1000 == 0:
      ground.speed -= 1
      for item in cloud_sprites_group:
        item.speed -= 1
      for item in cactus_sprites_group:
        item.speed -= 1
      for item in ptera_sprites_group:
        item.speed -= 1
  # --碰撞檢測(cè)
  for item in cactus_sprites_group:
    if pygame.sprite.collide_mask(dino, item):
      dino.die(sounds)
  for item in ptera_sprites_group:
    if pygame.sprite.collide_mask(dino, item):
      dino.die(sounds)
  # --將游戲元素畫到屏幕上
  dino.draw(screen)
  ground.draw(screen)
  cloud_sprites_group.draw(screen)
  cactus_sprites_group.draw(screen)
  ptera_sprites_group.draw(screen)
  score_board.set(score)
  highest_score_board.set(highest_score)
  score_board.draw(screen)
  highest_score_board.draw(screen)
  # --更新屏幕
  pygame.display.update()
  clock.tick(cfg.FPS)
  # --游戲是否結(jié)束
  if dino.is_dead:
    break

5 最后

項(xiàng)目獲?。?/strong>https://gitee.com/sinonfin/system-sharing文章來源地址http://www.zghlxwxcb.cn/news/detail-778193.html

到了這里,關(guān)于python畢設(shè)分享 仿谷歌瀏覽器小恐龍小游戲設(shè)計(jì)與實(shí)現(xiàn) (源碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • python用selenium模擬谷歌瀏覽器點(diǎn)頁面

    python用selenium模擬谷歌瀏覽器點(diǎn)頁面

    1、cmd安裝selenium,輸入pip?install?selenium 2、模擬點(diǎn)擊熱搜第一條進(jìn)去,連接如下 https://weibo.com/newlogin?tabtype=weibogid=102803openLoginLayer=0url=https%3A%2F%2Fweibo.com%2F 3、查看谷歌版本 ? 4、并去下面下載對(duì)應(yīng)版本的webdriver,解壓后把chromedriver.exe放入python目錄 CNPM Binaries Mirror https://regist

    2024年01月21日
    瀏覽(102)
  • Python--使用selenium通過chromedriver調(diào)用谷歌瀏覽器

    Python--使用selenium通過chromedriver調(diào)用谷歌瀏覽器

    原文網(wǎng)址:Python--使用selenium通過chromedriver調(diào)用谷歌瀏覽器_IT利刃出鞘的博客-CSDN博客 ? ? ? ? 本文用實(shí)例介紹Python如何使用selenium通過chromedriver調(diào)用谷歌瀏覽器。 谷歌瀏覽器訪問:chrome://version/ 注意:通過【幫助= 關(guān)于Google Chrome 】這種方式來查看會(huì)導(dǎo)致谷歌瀏覽器自動(dòng)更新

    2023年04月21日
    瀏覽(24)
  • python使用selenium 打開谷歌瀏覽器閃退, 怎么解決

    在使用 Selenium 操作 Chrome 瀏覽器時(shí),如果 Chrome 瀏覽器閃退,則可能是以下幾個(gè)方面出現(xiàn)了問題: 1. Chromedriver 版本與 Chrome 瀏覽器版本不匹配 你需要確保你正在使用的 Chromedriver 版本與你的 Chrome 瀏覽器版本匹配。你可以在 Chromedriver 官網(wǎng)上找到最新版本的 Chromedriver,并下載

    2024年02月11日
    瀏覽(88)
  • python使用selenium 打開谷歌瀏覽器閃退解決辦法

    在使用 Selenium 操作 Chrome 瀏覽器時(shí),如果 Chrome 瀏覽器閃退,則可能是以下幾個(gè)方面出現(xiàn)了問題: 1. Chromedriver 版本與 Chrome 瀏覽器版本不匹配 你需要確保你正在使用的 Chromedriver 版本與你的 Chrome 瀏覽器版本匹配。你可以在 Chromedriver 官網(wǎng)上找到最新版本的 Chromedriver,并下載

    2024年02月08日
    瀏覽(94)
  • (python3爬蟲二)Linux安裝谷歌瀏覽器以及對(duì)應(yīng)版本驅(qū)動(dòng)程序

    (python3爬蟲二)Linux安裝谷歌瀏覽器以及對(duì)應(yīng)版本驅(qū)動(dòng)程序

    上一步《(python3爬蟲一)linux寶塔搭建python3.x+flask+selenium-CSDN博客》完成后 進(jìn)行安裝瀏覽器以及對(duì)應(yīng)驅(qū)動(dòng) 我安裝的瀏覽器版本是118以此為例 1.安裝瀏覽器 參考(Linux 安裝 Google 瀏覽器_谷歌瀏覽器linux_消失的星期六的博客-CSDN博客) 方式1?使用服務(wù)器下載解壓?? 方式2? 手動(dòng)

    2024年02月02日
    瀏覽(42)
  • 已解決Python.selenium爬蟲必備設(shè)置永久禁止谷歌瀏覽器自動(dòng)升級(jí)(親測(cè)有效)

    已解決Python.selenium爬蟲必備設(shè)置永久禁止谷歌瀏覽器自動(dòng)升級(jí)(親測(cè)有效)

    問題描述:selenium框架自動(dòng)化操作瀏覽器的時(shí)候,需要安裝瀏覽器驅(qū)動(dòng) WebDriver ,而 WebDriver 驅(qū)動(dòng)需要對(duì)應(yīng)瀏覽器的版本才運(yùn)行。但是我們常用的谷歌瀏覽器是有自動(dòng)更新的,就會(huì)經(jīng)常導(dǎo)致 WebDriver 版本和谷歌瀏覽器版本對(duì)應(yīng)不上,運(yùn)行代碼就會(huì)出現(xiàn)如下報(bào)錯(cuò)信息。 每次去下載

    2024年02月10日
    瀏覽(24)
  • edge瀏覽器插件打包安裝到谷歌瀏覽器上

    edge瀏覽器插件打包安裝到谷歌瀏覽器上

    沒有安裝插件的瀏覽器不能算的上是一個(gè)瀏覽器,眾所周知的原因谷歌無法打開,所有也就無法安裝谷歌應(yīng)用商店的插件,但是Edge瀏覽器是可以安裝訪問插件,又因?yàn)閑gde瀏覽器用的是谷歌的內(nèi)核,所有大部分的Edge瀏覽器插件在谷歌上一樣是可以使用的。下面就來看一下怎么

    2024年02月13日
    瀏覽(99)
  • Python+selenium自動(dòng)化測(cè)試——啟動(dòng)谷歌瀏覽器閃退問題 Traceback (most recent call last)

    Python+selenium自動(dòng)化測(cè)試——啟動(dòng)谷歌瀏覽器閃退問題 Traceback (most recent call last)

    后臺(tái)報(bào)錯(cuò):Traceback (most recent call last) 當(dāng)我們使用Python+selenium調(diào)用谷歌瀏覽器出現(xiàn)閃退問題時(shí),其實(shí)是谷歌的驅(qū)動(dòng)和瀏覽器的版本不一致。 from time import sleep from selenium import webdriver driver=webdriver.Chrome() ?1.下載谷歌瀏覽器驅(qū)動(dòng)=瀏覽器版本——對(duì)應(yīng)上 http://chromedriver.storage.googlea

    2024年02月11日
    瀏覽(93)
  • selenium-webdriver調(diào)用谷歌瀏覽器和火狐瀏覽器

    selenium-webdriver調(diào)用谷歌瀏覽器和火狐瀏覽器

    nodejs selenium-webdriver 操作文檔 https://www.npmjs.com/package/selenium-webdriver 1.調(diào)用谷歌瀏覽器 2.調(diào)用火狐瀏覽器 下面設(shè)置了一些選項(xiàng) ? 需要設(shè)置環(huán)境變量,在CMD中firefox可以打開瀏覽器 否則報(bào)錯(cuò) Expected browser binary location, but unable to find binary in default location, no \\\'moz:firefoxOpti ?

    2024年02月02日
    瀏覽(106)
  • ChromeDriver | 谷歌瀏覽器驅(qū)動(dòng)下載地址 及 瀏覽器版本禁止更新

    ChromeDriver | 谷歌瀏覽器驅(qū)動(dòng)下載地址 及 瀏覽器版本禁止更新

    在使用selenoum時(shí),需要chrome瀏覽器的版本和chrome瀏覽器驅(qū)動(dòng)的版本一致匹配,才能進(jìn)行自動(dòng)化測(cè)試 國內(nèi)可以搜到的谷歌瀏覽器下載地址里面最新的驅(qū)動(dòng)器只有114版本的 CNPM Binaries Mirror 在其他博主那找到了最新版本12X的谷歌驅(qū)動(dòng)器下載地址,里面有最新的版本:Chrome for Testin

    2024年02月21日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包