目录

1 为什么找不见外星人

2 关于宇宙

3 宇宙物演进程

4 游戏外星人入侵展示

5 Python代码实现


1 为什么找不见外星人

为什么我们见不到外星人?
曾经在物理学上有一个著名人物叫费米,大家知道费米是在物理学上发现中子轰击的人,有一个著名的费米悖论,就是费米追问为什么外星人还见不到?

费米的这个追问包含的意思是这样的,地球上产生人类,从几率上讲,绝不可能人类独在。
因为人类只不过是一个自然界的造物,只要自然条件达到这个状态,生命就会进入这个状态。大阳系只是一个小小的星系,仅银河系就有两千到四千亿颗恒星。

2 关于宇宙

天文学家今天发现大约有5%的恒星有行星。大家算一下,拿两千亿算,5%的恒星有行星,

这是一个多大的数量级。然后我们假定在所有的行星中只有1%是类地行星。我们再假定在类地行星中只有1%有生命,有低等生命,比如单细胞。

我们再假定有生命的行星上只有1%有高智生物,你就这样一点一 点把它往下推 。你知道学界推出的结论是什么?仅银河系大约有一百万颗行星上有类似于人这样的高智生物。

我们说少一点,十万,仅银河系。请记住,银河系只不过是宇宙中数千亿个星系中的一个星系。大家想想,虽然高智生物的总质量在宇宙中极低,但它的分布量何其之大。如此之多的高智生物,它为什么没有来到过地球?

3 宇宙物演进程

我再给大家说一组数据。据天文物理学家研究,一百三十七亿年前,宇宙从奇点爆发,大约在爆发以后的十七亿年到五十亿年之间形成恒星。大家注意,我说最迟是五十亿年恒星发生,而恒星里有5%有行星,要知道太阳系行星和恒星之间出现差距仅四十亿年左右。

也就是说出现生命的可能性,在宇宙刚刚发生五十多亿年以后就出现了。我这个话的意思是说,高智生物演化时间最长,可能可以长到比我们人类早几十亿年。大家要知道太阳系才五十亿年,也就是宇宙爆炸以后八十多亿年以后太阳系才出现。

而五十亿年的时候, 恒星系已经发生了。理论上比地球人早的高智生物二十多亿年以前,三十多亿年以前就出现了,而我们人类文明才不过短五千年,就是有思想,有文字符号,才不过短五千年。

4 游戏外星人入侵展示

外星人入侵

5 Python代码实现

#====导入相关库=====
import os
import sys
import cfg
import random
import pygame
from modules import *#==========开始游戏==========
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) * 50enemy.rect.y = 120 + (i // 11) * 45enemies_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()#==============用于控制敌方位置更新=========#===========移动一行===========enemy_move_count = 24enemy_move_interval = 24enemy_move_flag = False#==改变移动方向(改变方向的同时集体下降一次)===enemy_change_direction_count = 0enemy_change_direction_interval = 60enemy_need_down = Falseenemy_move_right = Trueenemy_need_move_row = 6enemy_max_row = 5#===用于控制敌方发射子弹===enemy_shot_interval = 100enemy_shot_count = 0enemy_shot_flag = False#===游戏进行中===running = Trueis_win = False#=============主循环==================while running:screen.fill(cfg.BLACK)for event in pygame.event.get():#===点右上角的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碰撞检测=============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.rewardif pygame.sprite.spritecollide(ufo, my_bullets_group, True, None):ufo.is_dead = Truemyaircraft.score += ufo.reward#==========更新并画敌方============#============敌方子弹=============enemy_shot_count += 1if enemy_shot_count > enemy_shot_interval:enemy_shot_flag = Trueenemies_survive_list = [enemy.number for enemy in enemies_group]shot_number = random.choice(enemies_survive_list)enemy_shot_count = 0#==========敌方移动================enemy_move_count += 1if enemy_move_count > enemy_move_interval:enemy_move_count = 0enemy_move_flag = Trueenemy_need_move_row -= 1if enemy_need_move_row == 0:enemy_need_move_row = enemy_max_rowenemy_change_direction_count += 1if enemy_change_direction_count > enemy_change_direction_interval:enemy_change_direction_count = 1enemy_move_right = not enemy_move_rightenemy_need_down = True#==========每次下降提高移动和射击速度=======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 = Falseis_win = Falseenemy.change_count -= 1enemy.draw(screen)enemy_move_flag = Falseenemy_need_down = Falseenemy_shot_flag = False#================敌方爆炸特效===============for boomed_enemy in boomed_enemies_group:if boomed_enemy.boom(screen):boomed_enemies_group.remove(boomed_enemy)del boomed_enemy#============敌方子弹与我方飞船碰撞检测===========if not myaircraft.one_dead:if pygame.sprite.spritecollide(myaircraft, en_bullets_group, True, None):myaircraft.one_dead = Trueif myaircraft.one_dead:if myaircraft.boom(screen):myaircraft.resetBoom()myaircraft.num_life -= 1if myaircraft.num_life < 1:running = Falseis_win = Falseelse:#===========更新飞船================myaircraft.update(cfg.SCREENSIZE[0])#============画飞船=============myaircraft.draw(screen)if (not ufo.has_boomed) and (ufo.is_dead):if ufo.boom(screen):ufo.has_boomed = Trueelse:#=========更新UFO=========ufo.update(cfg.SCREENSIZE[0])#===画UFO===ufo.draw(screen)#===画我方飞船子弹===for bullet in my_bullets_group:if bullet.update():my_bullets_group.remove(bullet)del bulletelse:bullet.draw(screen)#===画敌方子弹===for bullet in en_bullets_group:if bullet.update(cfg.SCREENSIZE[1]):en_bullets_group.remove(bullet)del bulletelse: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.scoremyaircraft.num_life = min(myaircraft.num_life + 1, myaircraft.max_num_life)# --敌人都死光了的话就胜利了if len(enemies_group) < 1:is_win = Truerunning = False# --显示文字# ----当前得分showText(screen, 'SCORE: ', cfg.WHITE, font, 200, 8)showText(screen, str(myaircraft.score), cfg.WHITE, font, 200, 24)# ----敌人数量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)# ----FPSshowText(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#=============主函数======================
def main():# 初始化pygame.init()pygame.display.set_caption('宇宙演化——为什么外星人来不了地球')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)#=============运行======================if __name__ == '__main__':main()

宇宙物演进程——外星人去哪了游戏代码(Python实现)相关推荐

  1. 详解携程与去哪儿的“去携之战”

    "江山易改,本性难移"讲述的不仅仅是人,还有公司. 近日,在线旅游行业在曝"口水战",其中的主角分别是携程与去哪儿网.根据去哪儿透露的信息显示,早在两年前,携程 ...

  2. python 携程_请教两个关于使用 python 爬去哪儿,携程等机票网站的问题

    初学 python . 近期公司由于业务原因,需要想办法获取到携程与去哪儿的机票信息. 于是我尝试用 python+urllib 对这两个网站上的信息进行抓取. 去哪儿的爬虫代码如下:(初学 pyth ...

  3. Litepal在没有存数据之前,需要在主线程中去先去存一些不必要的数据

    使用Llitepal存储的时候,当数据库为空的时候在子线程去存储数据无法存储,单目调试说的是调到主线程中去了!然后我在主线程中先存入点数据在去子线程存就可以了,这个bug卡了3个小时,在这里记录一下. ...

  4. 携程、去哪儿、艺龙,三分归一统的复盘与展望

    http://www.huxiu.com/article/144320/1.html?f=index_feed_article 日前携程.艺龙.去哪儿先后公布了2015年Q4及全年财报.艺龙退市在即, ...

  5. Python 异步,协程,学起来好头疼,Python爬虫程序能调用GPU去爬东西吗?

    78 技术人社群日报时间 文章目录 Python 爬虫程序能调用 GPU 去爬东西吗? Python 异步,协程--,学起来好头疼 有没有牛子大的说下 `matplotlib` 里 `plot` 和 ...

  6. h5仿同程、携程、去哪儿酒店预订webapp项目实例

    最近利用html5开发的仿携程.去哪儿酒店预订系统--微酒店预订weHotelOrd,使用到了html5+css3+jqUI+layerMobile+swiper+dateRangePicker等技术 ...

  7. [通用技术]在不同语言中用协程实现全排列算法(C++/Lua/Python/C#)

    我这里实现全排列的基本算法如下(C++): 1 #include <algorithm> 2 #include <iostream> 3 #include <vector ...

  8. python协程详解_彻底搞懂python协程-第一篇(关键词1-4)

    任何复杂的概念或系统都不是凭空出现的,我们完全可以找到它的演化历程,寻根究底终会发现,其都是在一系列并不那么复杂的简单组件上发展演化而来! by 落花僧 本文通过一系列关键概念,逐步递进理解协程. 0 ...

  9. Axie Infinity 是一个受神奇宝贝启发的宇宙,任何人都可以通过熟练的游戏玩法和对生态系统的贡献来赚取代币

    Axie Infinity Axie Infinity 是一个受神奇宝贝启发的宇宙,任何人都可以通过熟练的游戏玩法和对生态系统的贡献来赚取代币.玩家可以为他们的宠物战斗.收集.饲养和建立一个陆地王国. ...

最新文章

  1. 国内首家智能心电SaaS平台“琅瑞医疗”获Pre-A轮融资,磐霖资本主投...
  2. 10.17 配置IP,网络问题排查
  3. 比较简单的创造印象派画风的网站
  4. 数据库读写分离 - MyBatis
  5. js操作json方法总结
  6. 携程“线上摆摊”:1晚赚3105万
  7. 实验2.3 使用重载函数模板重新实现上小题中的函数Max1
  8. Qt信号阻塞和断开信号槽
  9. Hue使用之Inceptor篇
  10. AI眼中的世界 ——人工智能绘画进阶
  11. 核方法也称为核技巧(Kernel method)
  12. Word插入页码和目录
  13. 古都侠隐-评《侠隐》
  14. 免费的在线Web文件管理器:Net2FTP,Pydio,eXtplorer,KodExplorer–功能强大
  15. python实操实例100例_趣学Python算法100例
  16. 利用 Python 分析城市各区域楼盘
  17. DllPlugin动态链接库插件
  18. Mysql经典面试题(建议收藏)
  19. Ansible中的常用模块介绍
  20. 8.遍历二叉树、线索二叉树、森林

热门文章

  1. LaTex粗略的学习笔记(表格)
  2. python3还会有中文输出乱码问题?!!
  3. CAD转PDF如何设置其为高质量黑白形式?
  4. OnTheHub 免费取得Offfice/Windows 正版序号,学生/教师限定
  5. win10是linux发行版,网友调侃Win10是最好的Linux发行版
  6. 宁夏新八景[之一]:古峡新韵
  7. 敏锐嗅出商机,她瞄准花卉市场的空白,将花店开出名气
  8. reddit_Reddit如何设计和编码其详尽的愚人节体验,/ r / place
  9. 360安全卫士添加信任区
  10. mplayer undefined reference to `av_lzo1x_decode''render_one_glyph'