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) * 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()
    #==============用于控制敌方位置更新=========
    #===========移动一行===========
    enemy_move_count = 24
    enemy_move_interval = 24
    enemy_move_flag = False
    #==改变移动方向(改变方向的同时集体下降一次)===
    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
    #===用于控制敌方发射子弹===
    enemy_shot_interval = 100
    enemy_shot_count = 0
    enemy_shot_flag = False
    #===游戏进行中===
    running = True
    is_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.reward
        if pygame.sprite.spritecollide(ufo, my_bullets_group, True, None):
            ufo.is_dead = True
            myaircraft.score += ufo.reward
        #==========更新并画敌方============
        #============敌方子弹=============
        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
        #==========敌方移动================
        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
                #==========每次下降提高移动和射击速度=======
                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
        #============敌方子弹与我方飞船碰撞检测===========
        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])
            #============画飞船=============
            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])
            #===画UFO===
            ufo.draw(screen)
        #===画我方飞船子弹===
        for bullet in my_bullets_group:
            if bullet.update():
                my_bullets_group.remove(bullet)
                del bullet
            else:
                bullet.draw(screen)
        #===画敌方子弹===
        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
        # --显示文字
        # ----当前得分
        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)
        # ----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

#=============主函数======================
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实现外星人去哪了小游戏详细代码的文章就介绍到这了,更多相关Python 外星人去哪了内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解如何利用Python制作24点小游戏

    目录 先睹为快 游戏规则(改编自维基百科) 逐步实现 Step1:制作24点生成器 Step2:定义游戏精灵类 Step3:实现游戏主循环 先睹为快 24点 游戏规则(改编自维基百科) 从1~10这十个数字中随机抽取4个数字(可重复),对这四个数运用加.减.乘.除和括号进行运算得出24.每个数字都必须使用一次,但不能重复使用. 逐步实现 Step1:制作24点生成器 既然是24点小游戏,当然要先定义一个24点游戏生成器啦.主要思路就是随机生成4个有解的数字,且范围在1~10之间,代码实现如下:

  • 详解如何利用Python绘制迷宫小游戏

    目录 构思 绘制迷宫 走出迷宫 完整代码 更大的挑战 关于坐标系设置 周末在家,儿子闹着要玩游戏,让玩吧,不利于健康,不让玩吧,扛不住他折腾,于是想,不如一起搞个小游戏玩玩! 之前给他编过猜数字 和 掷骰子 游戏,现在已经没有吸引力了,就对他说:“我们来玩个迷宫游戏吧.” 果不其然,有了兴趣,于是和他一起设计实现起来,现在一起看看我们是怎么做的吧,说不定也能成为一个陪娃神器~ 先一睹为快: 构思 迷宫游戏,相对比较简单,设置好地图,然后用递归算法来寻找出口,并将过程显示出来,增强趣味性. 不如想

  • 基于Python制作打地鼠小游戏

    效果展示 打地鼠小游戏 简介 打地鼠的游戏规则相信大家都知道,这里就不多介绍了,反正就是不停地拿锤子打洞里钻出来的地鼠呗~ 首先,让我们确定一下游戏中有哪些元素.打地鼠打地鼠,地鼠当然得有啦,那我们就写个地鼠的游戏精灵类呗: '''地鼠''' class Mole(pygame.sprite.Sprite): def __init__(self, image_paths, position, **kwargs): pygame.sprite.Sprite.__init__(self) self.

  • python flappy bird小游戏分步实现流程

    目录 导语: 开发工具: 环境搭建 运行视频: 正文: 计分表 结尾: 导语: 哈喽,哈喽~今天小编又来分享小游戏了——flappy bird(飞扬的小鸟),这个游戏非常的经典,游戏中玩家必须控制一只小鸟,跨越由各种不同长度水管所组成的障碍.这个游戏能对于小编来说还是有点难度的. 开发工具: Python版本:3.6.4 相关模块: pygame模块: 以及一些python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 运行视频: 播放链接:https:

  • Python 恐龙跑跑小游戏实现流程

    导语: 谷歌浏览器中有个很有名的彩蛋:当你网络出现问题时,就会出现一个"小恐龙游戏".

  • Python Pygame实战之打砖块小游戏

    目录 导语 一.准备中 1)游戏规则: 2)环境安装 二.开始敲代码 1)配置文件 2)定义一些类 3)定义开始.结束界面 4)定义游戏 5)主函数与运行界面 三.效果展示 导语 嘿!前不久刚刚给大家过一款反弹球的小游戏嘛! 不知道大家还记得不?不记得可以看下往期的内容呢,在上一期的基础上升级了这款打砖块的小游戏,界面的话也挺简单的,经典配色原汁原味哈哈哈. 大家好,我是木木子,一个上的编程下的厅堂的女码农!今天带大家编写一款经典的打砖块儿小游戏! 小科普: 打砖块最早是由雅达利公司开发的一款独

  • Python游戏开发之魔塔小游戏的实现

    前言 这一期我们继续完善我们的魔塔小游戏. 废话不多说,让我们愉快地开始吧~ 开发工具 Python版本: 3.7.4 相关模块: cpgames模块: 以及一些python自带的模块. 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 原理简介 本期我们实现一些之前还没实现的功能,以及做一些功能优化(部分内容为了测试方便,我会把人物设置成无敌状态).首先,是拾取物品等游戏事件的提示效果,核心代码如下: '''游戏事件提示''' def showinfo(self, s

  • Python 写小游戏吃金币+打乒乓+滑雪(附源码)

    目录 1.吃金币 2.打乒乓 3.滑雪 1.吃金币 源码分享: import os import cfg import sys import pygame import random from modules import *     '''游戏初始化''' def initGame():     # 初始化pygame, 设置展示窗口     pygame.init()     screen = pygame.display.set_mode(cfg.SCREENSIZE)     pygam

  • Python+Tkinter制作猜灯谜小游戏

    目录 导语 正文 1)效果展示 2)主程序 导语 元宵节,又称上元节.灯节,是春节之后的第一个重要节日. 相传,汉文帝(前179—前157年)为庆祝周勃于正月十五勘平诸吕之乱,每逢此夜,必出宫游玩,与民同乐,在古代,夜同宵,正月又称元月,汉文帝就将正月十五定为元宵节. 随着社会和时代的变迁,元宵节的风俗习惯在不断变化,但至今仍是中国的传统节日.2008年,元宵节选入第二批国家级非物质文化遗产. 对我而言,除了吃元宵.看花灯……还有一件最重要的事情…就是… 猜灯谜!猜灯谜!!猜灯谜!!!猜谜事小,

  • Python实现外星人去哪了小游戏详细代码

    1 为什么找不见外星人 为什么我们见不到外星人? 曾经在物理学上有一个著名人物叫费米,大家知道费米是在物理学上发现中子轰击的人,有一个著名的费米悖论,就是费米追问为什么外星人还见不到? 费米的这个追问包含的意思是这样的,地球上产生人类,从几率上讲,绝不可能人类独在. 因为人类只不过是一个自然界的造物,只要自然条件达到这个状态,生命就会进入这个状态.大阳系只是一个小小的星系,仅银河系就有两千到四千亿颗恒星.  2 关于宇宙 天文学家今天发现大约有5%的恒星有行星.大家算一下,拿两千亿算,5%的恒星

  • C语言实现扫雷小游戏详细代码

    前言 扫雷是一款很经典的电脑小游戏,扫雷就是要把所有非地雷的格子找出即为胜利,输入到地雷格子就算失败.游戏主区域由很多个方格组成,输入一个方格坐标,方格即被打开并显示出方格中的数字,方格中数字则表示其周围的8个方格隐藏了几颗雷,如果点开的格子为0,即代表其周围有0颗雷. 本篇文章将用VS2013带领大家用C语言编写此款小游戏. 一.所需函数 1.埋雷函数(SetMines) 2.ShowLine 3.ShowBoard (2.3函数均为显示横线和竖线) 4.统计雷的个数函数(CountMines

  • 利用python如何实现猫捉老鼠小游戏

    python实现猫捉老鼠小游戏 首界面 开始游戏界面 然后键盘操作小老鼠上下左右移动,猫自己去追,当猫追上老鼠则游戏结束 这里用时3.2秒,最后将游戏时长与猫和老鼠都显示在主页面上 下面我把猫与老鼠的小图片也放上来供大家使用 以下是程序源代码 import turtle import time import random def up(): jerry.setheading(90) jerry.forward(20) def down(): jerry.setheading(270) jerry

  • 用Python简单实现个贪吃蛇小游戏(保姆级教程)

    一.前言 本期介绍 Python 练手级项目--贪吃蛇! 原本想推荐一个贪吃蛇的开源项目:python-console-snake,但由于该项目最近一次更新是 8 年前,而且在运行的时候出现了诸多问题.索性我就动手用 Python 重新写了一个贪吃蛇游戏. 下面我们就一起用 Python 实现一个简单有趣的命令行贪吃蛇小游戏,启动命令: git clone https://github.com/AnthonySun256/easy_games cd easy_games python snake

  • Python+Pygame制作简易版2048小游戏

    目录 导语 正文 主要代码 效果图 导语 哈喽!大家好,我是栗子,感谢大家的支持! 新的一天,新气象,程序猿们的日常开始敲敲敲,改改改——今天给大家来一款简单的小游戏! 2048小游戏——准确的来说确实是一个简单版本的! 呐呐呐 ,主要是担心很多小伙伴儿直接上界面版本的看不懂,所以做了这款简单的2048,先看这篇简单版本的吧! 正文 为了搞懂这个游戏的规则,小编去直接下载了一款2048的小游戏,上手玩了一波! 然后.........完全停不下来!23333~ 玩法: 用手指或键盘上下左右滑动,将

  • Python+Pygame实战之炫舞小游戏的实现

    目录 导语 一.环境安装 二.代码展示 三.效果展示 1)简洁版炫舞 ​2)随机截图 3)MISS节拍 导语 昨天去老姐家里蹭饭,进门的时候就看到佳佳妹(我姐的女儿)低头霹雳吧啦一顿操作猛如虎,饭好了都还在玩儿,什么东西这么好玩?一走进就看到这是一款酷似炫舞的小游戏.(死去的回忆突然在攻击我~没想到现在还有这款游戏就是不知道升级了多少次啦) 不知道你们还记不记得曾经有个风靡一时的舞蹈游戏炫舞. 我读小学的时候,大概是09年吧,这个游戏非常火爆,如果你去网吧,十个女生里,有十一个都是在玩炫舞,像我

  • Python实现Pig Latin小游戏实例代码

    前言: 本文研究的主要是Python实现pig Latin小游戏的简单代码,具体介绍如下. Pig Latin是一个语言游戏. 步骤: 1.让用户输入一个英文单词 2.确保用户输入一个有效单词 3.将单词转换成Pig Latin 4.显示转换结果 一.Input 函数:raw_input()用于输出一个字符串并等待键盘输入某字符串,最后以Enter(或Return)结束输入 original = raw_input("Enter a word:") print original 上述中

  • python实现逢七拍腿小游戏的思路详解

    逢七拍腿游戏 几个小朋友在一起玩逢七拍腿的游戏,从1开始数数,当数到7的倍数或者尾号是7时,拍一下腿.现在从1数到99,假设每个人都没有错,计算一下共要拍腿几次? 第一种实现思路:通过在for循环语句中使用continue语句来实现计算拍腿次数.首先假设可拍腿次数为最高次数99,每触发满足的条件的时候就直接跳转到下一次循环当中,最后的total减1则不执行,不满足条件时total则减1.因此实际上total减去的是不满足条件的数字,代码如下: total = 99 #记录拍腿次数的变量 for

  • 教你如何用python开发一款数字推盘小游戏

    今年年初,新一季的<最强大脑>开播了,第一集选拔的时候大家做了一个数字游戏,名叫<数字华容道>,当时何猷君以二十几秒的成绩夺得该项目的冠军,看了这个游戏之后我决定要写一个<数字华容道>的程序,过去了半年,我终于记起了这件事,今天就来实现. 数字推盘游戏(n-puzzle)是一种智力游戏,常见的类型有十五数字推盘游戏和八数字推盘游戏等.十五数字推盘游戏的板上会有十五个方块和一个大小相当于一个方块的空位(供方块移动之用),当15个数字依次排序并且最后一个格子为空位即代表挑战

  • 用Python手把手教你实现2048小游戏

    一.开发环境 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 二.环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 三.原理介绍 "使用方向键移动方块,两个数字相同的方块撞在一起后,将会合并为一个数字是原来两倍的新方块.游戏的时候尽可能多地合并这些数字方块就行了." 大概了解了游戏规则之后,我们就可以开始写这个游戏啦~首先,进行一下游戏初始化操作并播放一首自己喜欢的游戏背景音乐: # 游戏初始化 pygame.i

随机推荐