最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)外星人去哪了小游戲詳細(xì)代碼

 更新時(shí)間:2022年03月28日 09:30:33   作者:是夢(mèng)吧,是你吧!  
今天為大家?guī)?lái)一款小游戲,名叫外星人去哪了,用Python語(yǔ)言實(shí)現(xiàn)完成,代碼簡(jiǎn)潔易懂,感興趣的小伙伴快來(lái)看看吧

1 為什么找不見(jiàn)外星人

為什么我們見(jiàn)不到外星人? 曾經(jīng)在物理學(xué)上有一個(gè)著名人物叫費(fèi)米,大家知道費(fèi)米是在物理學(xué)上發(fā)現(xiàn)中子轟擊的人,有一個(gè)著名的費(fèi)米悖論,就是費(fèi)米追問(wèn)為什么外星人還見(jiàn)不到? 費(fèi)米的這個(gè)追問(wèn)包含的意思是這樣的,地球上產(chǎn)生人類(lèi),從幾率上講,絕不可能人類(lèi)獨(dú)在。 因?yàn)槿祟?lèi)只不過(guò)是一個(gè)自然界的造物,只要自然條件達(dá)到這個(gè)狀態(tài),生命就會(huì)進(jìn)入這個(gè)狀態(tài)。大陽(yáng)系只是一個(gè)小小的星系,僅銀河系就有兩千到四千億顆恒星。 

2 關(guān)于宇宙

天文學(xué)家今天發(fā)現(xiàn)大約有5%的恒星有行星。大家算一下,拿兩千億算,5%的恒星有行星, 這是一個(gè)多大的數(shù)量級(jí)。然后我們假定在所有的行星中只有1%是類(lèi)地行星。我們?cè)偌俣ㄔ陬?lèi)地行星中只有1%有生命,有低等生命,比如單細(xì)胞。 我們?cè)偌俣ㄓ猩男行巧现挥?%有高智生物,你就這樣一點(diǎn)一 點(diǎn)把它往下推 。你知道學(xué)界推出的結(jié)論是什么?僅銀河系大約有一百萬(wàn)顆行星上有類(lèi)似于人這樣的高智生物。 我們說(shuō)少一點(diǎn),十萬(wàn),僅銀河系。請(qǐng)記住,銀河系只不過(guò)是宇宙中數(shù)千億個(gè)星系中的一個(gè)星系。大家想想,雖然高智生物的總質(zhì)量在宇宙中極低,但它的分布量何其之大。如此之多的高智生物,它為什么沒(méi)有來(lái)到過(guò)地球?

3 宇宙物演進(jìn)程

我再給大家說(shuō)一組數(shù)據(jù)。據(jù)天文物理學(xué)家研究,一百三十七億年前,宇宙從奇點(diǎn)爆發(fā),大約在爆發(fā)以后的十七億年到五十億年之間形成恒星。大家注意,我說(shuō)最遲是五十億年恒星發(fā)生,而恒星里有5%有行星,要知道太陽(yáng)系行星和恒星之間出現(xiàn)差距僅四十億年左右。 也就是說(shuō)出現(xiàn)生命的可能性,在宇宙剛剛發(fā)生五十多億年以后就出現(xiàn)了。我這個(gè)話的意思是說(shuō),高智生物演化時(shí)間最長(zhǎng),可能可以長(zhǎng)到比我們?nèi)祟?lèi)早幾十億年。大家要知道太陽(yáng)系才五十億年,也就是宇宙爆炸以后八十多億年以后太陽(yáng)系才出現(xiàn)。 而五十億年的時(shí)候, 恒星系已經(jīng)發(fā)生了。理論上比地球人早的高智生物二十多億年以前,三十多億年以前就出現(xiàn)了,而我們?nèi)祟?lèi)文明才不過(guò)短五千年,就是有思想,有文字符號(hào),才不過(guò)短五千年。

4 游戲外星人入侵展示

視頻演示鏈接

外星人入侵

5 Python代碼實(shí)現(xiàn)

#====導(dǎo)入相關(guān)庫(kù)=====
import os
import sys
import cfg
import random
import pygame
from modules import *
 
#==========開(kāi)始游戲==========
def startGame(screen):
    clock = pygame.time.Clock()
    # 加載字體
    font = pygame.font.SysFont('arial', 18)
    if not os.path.isfile('score'):
        f = open('score', 'w')
        f.write('0')
        f.close()
    with open('score', 'r') as f:
        highest_score = int(f.read().strip())
    # 敵方
    enemies_group = pygame.sprite.Group()
    for i in range(55):
        if i < 11:
            enemy = enemySprite('small', i, cfg.WHITE, cfg.WHITE)
        elif i < 33:
            enemy = enemySprite('medium', i, cfg.WHITE, cfg.WHITE)
        else:
            enemy = enemySprite('large', i, cfg.WHITE, cfg.WHITE)
        enemy.rect.x = 85 + (i % 11) * 50
        enemy.rect.y = 120 + (i // 11) * 45
        enemies_group.add(enemy)
    boomed_enemies_group = pygame.sprite.Group()
    en_bullets_group = pygame.sprite.Group()
    ufo = ufoSprite(color=cfg.RED)
    
    #====================我方=================
    myaircraft = aircraftSprite(color=cfg.GREEN, bullet_color=cfg.WHITE)
    my_bullets_group = pygame.sprite.Group()
    #==============用于控制敵方位置更新=========
    #===========移動(dòng)一行===========
    enemy_move_count = 24
    enemy_move_interval = 24
    enemy_move_flag = False
    #==改變移動(dòng)方向(改變方向的同時(shí)集體下降一次)===
    enemy_change_direction_count = 0
    enemy_change_direction_interval = 60
    enemy_need_down = False
    enemy_move_right = True
    enemy_need_move_row = 6
    enemy_max_row = 5
    #===用于控制敵方發(fā)射子彈===
    enemy_shot_interval = 100
    enemy_shot_count = 0
    enemy_shot_flag = False
    #===游戲進(jìn)行中===
    running = True
    is_win = False
    #=============主循環(huán)==================
    while running:
        screen.fill(cfg.BLACK)
        for event in pygame.event.get():
            #===點(diǎn)右上角的X或者按Esc鍵退出游戲=====
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    pygame.quit()
                    sys.exit()
            #===============射擊===================
            if event.type == pygame.MOUSEBUTTONDOWN:
                my_bullet = myaircraft.shot()
                if my_bullet:
                    my_bullets_group.add(my_bullet)
        #====我方子彈與敵方/UFO碰撞檢測(cè)=============
        for enemy in enemies_group:
            if pygame.sprite.spritecollide(enemy, my_bullets_group, True, None):
                boomed_enemies_group.add(enemy)
                enemies_group.remove(enemy)
                myaircraft.score += enemy.reward
        if pygame.sprite.spritecollide(ufo, my_bullets_group, True, None):
            ufo.is_dead = True
            myaircraft.score += ufo.reward
        #==========更新并畫(huà)敵方============
        #============敵方子彈=============
        enemy_shot_count += 1
        if enemy_shot_count > enemy_shot_interval:
            enemy_shot_flag = True
            enemies_survive_list = [enemy.number for enemy in enemies_group]
            shot_number = random.choice(enemies_survive_list)
            enemy_shot_count = 0
        #==========敵方移動(dòng)================
        enemy_move_count += 1
        if enemy_move_count > enemy_move_interval:
            enemy_move_count = 0
            enemy_move_flag = True
            enemy_need_move_row -= 1
            if enemy_need_move_row == 0:
                enemy_need_move_row = enemy_max_row
            enemy_change_direction_count += 1
            if enemy_change_direction_count > enemy_change_direction_interval:
                enemy_change_direction_count = 1
                enemy_move_right = not enemy_move_right
                enemy_need_down = True
                #==========每次下降提高移動(dòng)和射擊速度=======
                enemy_move_interval = max(15, enemy_move_interval-3)
                enemy_shot_interval = max(50, enemy_move_interval-10)
        #===========遍歷更新====================
        for enemy in enemies_group:
            if enemy_shot_flag:
                if enemy.number == shot_number:
                    en_bullet = enemy.shot()
                    en_bullets_group.add(en_bullet)
            if enemy_move_flag:
                if enemy.number in range((enemy_need_move_row-1)*11, enemy_need_move_row*11):
                    if enemy_move_right:
                        enemy.update('right', cfg.SCREENSIZE[1])
                    else:
                        enemy.update('left', cfg.SCREENSIZE[1])
            else:
                enemy.update(None, cfg.SCREENSIZE[1])
            if enemy_need_down:
                if enemy.update('down', cfg.SCREENSIZE[1]):
                    running = False
                    is_win = False
                enemy.change_count -= 1
            enemy.draw(screen)
        enemy_move_flag = False
        enemy_need_down = False
        enemy_shot_flag = False
        #================敵方爆炸特效===============
        for boomed_enemy in boomed_enemies_group:
            if boomed_enemy.boom(screen):
                boomed_enemies_group.remove(boomed_enemy)
                del boomed_enemy
        #============敵方子彈與我方飛船碰撞檢測(cè)===========
        if not myaircraft.one_dead:
            if pygame.sprite.spritecollide(myaircraft, en_bullets_group, True, None):
                myaircraft.one_dead = True
        if myaircraft.one_dead:
            if myaircraft.boom(screen):
                myaircraft.resetBoom()
                myaircraft.num_life -= 1
                if myaircraft.num_life < 1:
                    running = False
                    is_win = False
        else:
            #===========更新飛船================
            myaircraft.update(cfg.SCREENSIZE[0])
            #============畫(huà)飛船=============
            myaircraft.draw(screen)
        if (not ufo.has_boomed) and (ufo.is_dead):
            if ufo.boom(screen):
                ufo.has_boomed = True
        else:
            #=========更新UFO=========
            ufo.update(cfg.SCREENSIZE[0])
            #===畫(huà)UFO===
            ufo.draw(screen)
        #===畫(huà)我方飛船子彈===
        for bullet in my_bullets_group:
            if bullet.update():
                my_bullets_group.remove(bullet)
                del bullet
            else:
                bullet.draw(screen)
        #===畫(huà)敵方子彈===
        for bullet in en_bullets_group:
            if bullet.update(cfg.SCREENSIZE[1]):
                en_bullets_group.remove(bullet)
                del bullet
            else:
                bullet.draw(screen)
        if myaircraft.score > highest_score:
            highest_score = myaircraft.score
        # --得分每增加2000我方飛船增加一條生命
        if (myaircraft.score % 2000 == 0) and (myaircraft.score > 0) and (myaircraft.score != myaircraft.old_score):
            myaircraft.old_score = myaircraft.score
            myaircraft.num_life = min(myaircraft.num_life + 1, myaircraft.max_num_life)
        # --敵人都死光了的話就勝利了
        if len(enemies_group) < 1:
            is_win = True
            running = False
        # --顯示文字
        # ----當(dāng)前得分
        showText(screen, 'SCORE: ', cfg.WHITE, font, 200, 8)
        showText(screen, str(myaircraft.score), cfg.WHITE, font, 200, 24)
        # ----敵人數(shù)量
        showText(screen, 'ENEMY: ', cfg.WHITE, font, 370, 8)
        showText(screen, str(len(enemies_group)), cfg.WHITE, font, 370, 24)
        # ----歷史最高分
        showText(screen, 'HIGHEST: ', cfg.WHITE, font, 540, 8)
        showText(screen, str(highest_score), cfg.WHITE, font, 540, 24)
        # ----FPS
        showText(screen, 'FPS: ' + str(int(clock.get_fps())), cfg.RED, font, 8, 8)
        # --顯示剩余生命值
        showLife(screen, myaircraft.num_life, cfg.GREEN)
        pygame.display.update()
        clock.tick(cfg.FPS)
    with open('score', 'w') as f:
        f.write(str(highest_score))
    return is_win
 
 
#=============主函數(shù)======================
def main():
    # 初始化
    pygame.init()
    pygame.display.set_caption('宇宙演化——為什么外星人來(lái)不了地球')
    screen = pygame.display.set_mode(cfg.SCREENSIZE)
    pygame.mixer.init()
    pygame.mixer.music.load(cfg.BGMPATH)
    pygame.mixer.music.set_volume(0.4)
    pygame.mixer.music.play(-1)
    while True:
        is_win = startGame(screen)
        endInterface(screen, cfg.BLACK, is_win)
 
 
#=============運(yùn)行======================
 
if __name__ == '__main__':
    main()

到此這篇關(guān)于Python實(shí)現(xiàn)外星人去哪了小游戲詳細(xì)代碼的文章就介紹到這了,更多相關(guān)Python 外星人去哪了內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python斷點(diǎn)測(cè)試的實(shí)現(xiàn)

    python斷點(diǎn)測(cè)試的實(shí)現(xiàn)

    本文主要介紹了python斷點(diǎn)測(cè)試的實(shí)現(xiàn),包括使用print語(yǔ)句、使用Python內(nèi)置的pdb模塊以及使用集成開(kāi)發(fā)環(huán)境的三種方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • python數(shù)據(jù)抓取3種方法總結(jié)

    python數(shù)據(jù)抓取3種方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于python數(shù)據(jù)抓取的3種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 詳解python之heapq模塊及排序操作

    詳解python之heapq模塊及排序操作

    說(shuō)到排序,很多人可能第一想到的就是sorted,但是你可能不知道python中其實(shí)還有還就中方法喲,并且好多種場(chǎng)景下效率都會(huì)比sorted高。那么接下來(lái)我就依次來(lái)介紹我所知道的排序操作
    2019-04-04
  • python中的scapy抓取http報(bào)文內(nèi)容

    python中的scapy抓取http報(bào)文內(nèi)容

    這篇文章主要介紹了python中的scapy抓取http報(bào)文內(nèi)容方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python打包文件執(zhí)行報(bào)錯(cuò):ModuleNotFoundError: No module named ‘pymssql‘的解決方法

    Python打包文件執(zhí)行報(bào)錯(cuò):ModuleNotFoundError: No module 

    這篇文章給大家介紹了Python打包文件執(zhí)行報(bào)錯(cuò):ModuleNotFoundError: No module named ‘pymssql‘的解決方法,如果有遇到相同問(wèn)題的朋友可以參考閱讀一下本文
    2023-10-10
  • python字典各式各樣操作從基礎(chǔ)到高級(jí)全面示例詳解

    python字典各式各樣操作從基礎(chǔ)到高級(jí)全面示例詳解

    在Python中,字典(Dictionary)是一種強(qiáng)大而靈活的數(shù)據(jù)結(jié)構(gòu),它允許你存儲(chǔ)和檢索鍵值對(duì),本文將深入探討Python中各式各樣的字典操作,包括基本操作、高級(jí)操作以及一些實(shí)用的技巧,通過(guò)全面的示例代碼,將展示如何充分發(fā)揮字典在Python編程中的優(yōu)勢(shì)
    2023-12-12
  • Python實(shí)現(xiàn)生成隨機(jī)日期字符串的方法示例

    Python實(shí)現(xiàn)生成隨機(jī)日期字符串的方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)生成隨機(jī)日期字符串的方法,涉及Python日期時(shí)間及隨機(jī)數(shù)運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • Python使用sorted排序的方法小結(jié)

    Python使用sorted排序的方法小結(jié)

    這篇文章主要介紹了Python使用sorted排序的方法,結(jié)合三個(gè)實(shí)例分析了Python使用sorted方法進(jìn)行元素排序操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-07-07
  • python全棧要學(xué)什么 python全棧學(xué)習(xí)路線

    python全棧要學(xué)什么 python全棧學(xué)習(xí)路線

    在本文中小編給大家整理了關(guān)于python全棧要學(xué)什么以及python全棧學(xué)習(xí)路線的知識(shí)點(diǎn)內(nèi)容,需要的朋友們參考下。
    2019-06-06
  • Python完全識(shí)別驗(yàn)證碼自動(dòng)登錄實(shí)例詳解

    Python完全識(shí)別驗(yàn)證碼自動(dòng)登錄實(shí)例詳解

    今天小編就為大家分享一篇Python完全識(shí)別驗(yàn)證碼自動(dòng)登錄實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11

最新評(píng)論

古蔺县| 都江堰市| 来安县| 固始县| 宜兰县| 虞城县| 临西县| 电白县| 霍林郭勒市| 揭东县| 康马县| 北碚区| 新邵县| 大邑县| 恩施市| 阳高县| 云林县| 招远市| 小金县| 同江市| 伊吾县| 奉化市| 遂宁市| 扎兰屯市| 屏东县| 龙州县| 策勒县| 东乡县| 兴山县| 子长县| 九龙坡区| 新民市| 漳州市| 通道| 宜黄县| 霍林郭勒市| 沁阳市| 祁东县| 会理县| 昭通市| 大方县|