Python项目:《外星人入侵》代码及笔记

(via:《Python变成入门到实战》)

【项目代码】

alien_invasion.py

import pygame
from pygame.sprite import Group
from settings import Settings
from game_stats import GameStats
from scoreboard import Scoreboard
from button import Button
from ship import Ship
import game_functions as gfdef run_game():# 初始化 pygame、设置和屏幕对象pygame.init()ai_settings = Settings()screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))pygame.display.set_caption("Alien Invasion")# 创建Play按钮play_button = Button(ai_settings, screen, "Play")# 创建存储游戏统计信息的实例,并创建记分碑stats = GameStats(ai_settings)sb = Scoreboard(ai_settings, screen, stats)# 创建一艘飞船、一个子弹编组和一个外星人编组ship = Ship(ai_settings, screen)bullets = Group()aliens = Group()# 创建外星人群gf.create_fleet(ai_settings, screen, ship, aliens)# 开始游戏的主循环while True:gf.check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets)if stats.game_active:ship.update()gf.update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets)gf.update_aliens(ai_settings, screen, stats, sb, ship, aliens, bullets)gf.update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button)run_game()


game_functions.py

import sys
from time import sleep
import pygame
from bullet import Bullet
from alien import Aliendef check_keydown_events(event, ai_settings, screen, ship, bullets):"""响应按键"""if event.key == pygame.K_RIGHT:ship.moving_right = Trueelif event.key == pygame.K_LEFT:ship.moving_left = Trueelif event.key == pygame.K_SPACE:fire_bullet(ai_settings, screen, ship, bullets)elif event.key == pygame.K_q:sys.exit()def fire_bullet(ai_settings, screen, ship, bullets):"""如果还没有到达限制,就发射一颗子弹"""# 创建新子弹,并将其加入到编组bullets中if len(bullets) < ai_settings.bullets_allowed:new_bullet = Bullet(ai_settings, screen, ship)bullets.add(new_bullet)def check_keyup_events(event, ship):"""响应松开"""if event.key == pygame.K_RIGHT:ship.moving_right = Trueelif event.key == pygame.K_LEFT:ship.moving_left = Falsedef check_events(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets):"""响应按键和鼠标事件"""for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()elif event.type == pygame.KEYDOWN:check_keydown_events(event, ai_settings, screen, ship, bullets)if event.key == pygame.K_RIGHT:ship.moving_right = Trueelif event.key == pygame.K_LEFT:ship.moving_left = Trueelif event.type == pygame.KEYUP:if event.key == pygame.K_RIGHT:ship.moving_right = Falseelif event.key == pygame.K_LEFT:ship.moving_left = False# 向右移动飞船ship.rect.centerx += 1elif event.type == pygame.MOUSEBUTTONDOWN:mouse_x, mouse_y = pygame.mouse.get_pos()check_play_button(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets, mouse_x, mouse_y)def check_play_button(ai_settings, screen, stats, sb, play_button, ship, aliens, bullets, mouse_x, mouse_y):"""当玩家单击Play按钮时开始新游戏"""button_clicked = play_button.rect.collidepoint(mouse_x, mouse_y)if button_clicked and not stats.game_active:# 重置游戏设置ai_settings.initialize_dynamic_settings()# 隐藏光标pygame.mouse.set_visible(False)# 重置游戏统计信息stats.reset_stats()stats.game_active = True# 重置记分牌图像sb.prep_score()sb.prep_high_score()sb.prep_level()sb.prep_ships()# 清空外星人列表和子弹列表aliens.empty()bullets.empty()# 创建一群新的外星人,并让飞船居中create_fleet(ai_settings, screen, ship, aliens)ship.center_ship()def update_screen(ai_settings, screen, stats, sb, ship, aliens, bullets, play_button):"""更新屏幕上的图像,并切换到新屏幕"""# 每次循环时都重绘屏幕screen.fill(ai_settings.bg_color)ship.blitme()aliens.draw(screen)# 让最近绘制的屏幕可见pygame.display.flip()# 在飞船和外星人后面重绘所有子弹for bullet in bullets.sprites():bullet.draw_bullet()ship.blitme()aliens.draw(screen)# 显示得分sb.show_score()# 如果游戏处于非活动状态,就绘制Play按钮if not stats.game_active:play_button.draw_button()def update_bullets(ai_settings, screen, stats, sb, ship, aliens, bullets):"""更新子弹的位置,并删除已消失的子弹"""# 更新子弹的位置bullets.update()# 删除已消失的子弹for bullet in bullets.copy():if bullet.rect.bottom <= 0:bullets.remove(bullet)check_bullet_alien_collisions(ai_settings, screen, stats, sb, ship, aliens, bullets)def check_bullet_alien_collisions(ai_settings, screen, stats, sb, ship, aliens, bullets):"""响应子弹和外星人的碰撞"""# 删除发生碰撞的子弹和外星人collisions = pygame.sprite.groupcollide(bullets, aliens, True, True)if collisions:for aliens in collisions.values():stats.score += ai_settings.alien_points * len(aliens)sb.prep_score()check_high_score(stats, sb)if len(aliens) == 0:# 如果整群外星人都被消灭,就提高一个等级bullets.empty()ai_settings.increase_speed()# 提高等级stats.level += 1sb.prep_level()create_fleet(ai_settings, screen, ship, aliens)def get_number_aliens_x(ai_settings, alien_width):"""计算每行可容纳多少个外星人"""available_space_x = ai_settings.screen_width - alien_widthnumber_alien_x = int(available_space_x / (2 * alien_width))return number_alien_xdef get_number_rows(ai_settings, ship_height, alien_height):"""计算屏幕可容纳多少行外星人"""available_space_y = (ai_settings.screen_height - (3 * alien_height) - ship_height)number_rows = int(available_space_y / (2 * alien_height))return number_rowsdef creat_alien(ai_settings, screen, aliens, alien_number, row_number):"""创建一个外星人并将其放在当前行"""alien = Alien(ai_settings, screen)alien_width = alien.rect.widthalien.x = alien_width + 2 * alien_width * alien_numberalien.rect.x = alien.xalien.rect.y = alien.rect.height + 2 * alien.rect.height * row_numberaliens.add(alien)def create_fleet(ai_settings, screen, ship, aliens):"""创建外星人群"""# 创建一个外星人,并计算一行可容纳多少个外星人alien = Alien(ai_settings, screen)number_aliens_x = get_number_aliens_x(ai_settings, alien.rect.width)number_rows = get_number_rows(ai_settings, ship.rect.height, alien.rect.height)# 创建外星人群for row_number in range(number_rows):for alien_number in range(number_aliens_x):creat_alien(ai_settings, screen, aliens, alien_number, row_number)def check_fleet_edges(ai_settings, aliens):"""有外星人到达边缘时采取相应的措施"""for alien in aliens.sprites():if alien.check_edges():change_fleet_direction(ai_settings, aliens)breakdef change_fleet_direction(ai_settings, aliens):"""将整群外星人下移,并改变他们的方向"""for alien in aliens.sprites():alien.rect.y += ai_settings.fleet_drop_speedai_settings.fleet_direction *= -1def update_aliens(ai_settings, screen, stats, sb, ship, aliens, bullets):"""检查是否有外星人位于屏幕边缘,然后更新所有外星人的位置"""check_fleet_edges(ai_settings, aliens)aliens.update()# 检测外星人和飞船之间的碰撞if pygame.sprite.spritecollideany(ship, aliens):ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets)# 检查是否有外星人到达屏幕底端check_aliens_bottom(ai_settings, screen, stats, sb, ship, aliens, bullets)def ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets):"""响应被外星人撞到的飞船"""if stats.ships_left > 0:# 将ship_left减1stats.ships_left -= 1# 更新记分牌sb.prep_ships()# 清空外星人列表和子弹列表aliens.empty()bullets.empty()# 创建一群新的外星人,并将飞船放到屏幕底端中央create_fleet(ai_settings, screen, ship, aliens)ship.center_ship()# 暂停一会儿sleep(0.5)else:stats.game_active = Falsepygame.mouse.set_visible(True)def check_aliens_bottom(ai_settings, screen, stats, sb, ship, aliens, bullets):"""检查是否有外星人到达了屏幕底端"""screen_rect = screen.get_rect()for alien in aliens.sprites():if alien.rect.bottom >= screen_rect.bottom:# 像飞船被撞到一样进行处理ship_hit(ai_settings, screen, stats, sb, ship, aliens, bullets)breakdef check_high_score(stats, sb):"""检查是否诞生了新的最高得分"""if stats.score > stats.high_score:stats.high_score = stats.scoresb.prep_high_score()


settings.py*

class Settings:"""存储《外星人入侵》的所有设置的类"""def __init__(self):"""初始化游戏的设置"""# 屏幕设置self.screen_width = 1200self.screen_height = 800self.bg_color = (112, 146, 190)# 飞船的设置self.ship_limit = 3# 子弹设置self.bullet_width = 3self.bullet_height = 15self.bullet_color = 0, 0, 0self.bullets_allowed = 3# 外星人设置self.fleet_drop_speed = 10# 加快游戏节奏的速度self.speedup_scale = 1.1# 外星人点数的提高速度self.score_scale = 1.5self.initialize_dynamic_settings()def increase_speed(self):"""提高速度设置和外星人点数"""self.ship_speed_factor *= self.speedup_scaleself.bullet_speed_factor *= self.speedup_scaleself.alien_speed_factor *= self.speedup_scaleself.alien_points = int(self.alien_points * self.score_scale)print(self.alien_points)def initialize_dynamic_settings(self):"""初始化随游戏进行而变化的设置"""self.ship_speed_factor = 1.5self.bullet_speed_factor = 3self.alien_speed_factor = 1# fleet_direction为1表示向右,为-1表示向左self.fleet_direction = 1# 记分self.alien_points = 50


ship.py

import pygame
from pygame.sprite import Spriteclass Ship(Sprite):def __init__(self, ai_settings, screen):"""初始化飞船并设置其起始位置"""super(Ship, self).__init__()self.screen = screenself.ai_settings = ai_settings# 加载飞船图像并获取其外接矩形self.image = pygame.image.load('images/ship.bmp')self.rect = self.image.get_rect()self.screen_rect = screen.get_rect()# 将每艘新飞船放在屏幕底部中央self.rect.centerx = self.screen_rect.centerxself.rect.bottom = self.screen_rect.bottom# 在飞船的属性center中存储小数值self.center = float(self.rect.centerx)# 移动标志self.moving_right = Falseself.moving_left = Falsedef update(self):"""根据移动标志调整飞船的位置"""# 更新飞船的center值,而不是rectif self.moving_right and self.rect.right < self.screen_rect.right:self.center += self.ai_settings.ship_speed_factorif self.moving_left and self.rect.left > 0:self.center -= self.ai_settings.ship_speed_factor# 根据self.centerx 更新rect对象self.rect.centerx = self.centerdef blitme(self):"""在指定位置绘制飞船"""self.screen.blit(self.image, self.rect)def center_ship(self):"""让飞机在屏幕上居中"""self.center = self.screen_rect.centerx


bullet.py

import pygame
from pygame.sprite import Spriteclass Bullet(Sprite):"""一个对飞船发射的子弹进行管理的类"""def __init__(self, ai_settings, screen, ship):"""在飞船所处的位置创建一个子弹对象"""super(Bullet, self).__init__()self.screen = screen# 在(0,0)初创建一个表示子弹的矩形,再设置正确的位置self.rect = pygame.Rect(0, 0, ai_settings.bullet_width, ai_settings.bullet_height)self.rect.centerx = ship.rect.centerxself.rect.top = ship.rect.top# 存储用小数表示的子弹位置self.y = float(self.rect.y)self.color = ai_settings.bullet_colorself.speed_factor = ai_settings.bullet_speed_factordef update(self):"""向上移动子弹"""# 更新表示子弹位置的小数值self.y -= self.speed_factor# 更新表示子弹的rect的位置self.rect.y = self.ydef draw_bullet(self):"""在屏幕上绘制子弹"""pygame.draw.rect(self.screen, self.color, self.rect)


alien.py

import pygame
from pygame.sprite import Spriteclass Alien(Sprite):"""表示单个外星人的类"""def __init__(self, ai_settings, screen):"""初始化外星人并设置其起始位置"""super(Alien, self).__init__()self.screen = screenself.ai_settings = ai_settings# 加载外星人图像,并设置其rect属性self.image = pygame.image.load('images/alien.bmp')self.rect = self.image.get_rect()# 每个外星人最初都在屏幕左上角附近self.rect.x = self.rect.widthself.rect.y = self.rect.height# 存储外星人的准确位置self.x = float(self.rect.x)def blitme(self):"""在指定位置绘制外星人"""self.screen.blit(self.image, self.rect)def check_edges(self):"""如果外星人位于屏幕边缘,就返回True"""screen_rect = self.screen.get_rect()if self.rect.right >= screen_rect.right:return Trueelif self.rect.left <= 0:return Truedef update(self):"""向左或向右移动外星人"""self.x += (self.ai_settings.alien_speed_factor * self.ai_settings.fleet_direction)self.rect.x = self.x


game_stats.py*

class GameStats:"""跟踪游戏的统计信息"""def __init__(self, ai_settings):"""初始化统计信息"""self.ai_settings = ai_settingsself.reset_stats()# 游戏刚启动时处于活动状态self.game_active = False# 在任何情况下都不应重置最高分self.high_score = 0def reset_stats(self):"""初始化在游戏运行期间可能变化的统计信息"""self.ships_left = self.ai_settings.ship_limitself.score = 0self.level = 1


scoreboard.py*

import pygame.font
from pygame.sprite import Groupfrom ship import Shipclass Scoreboard:"""报告得分信息的类"""def __init__(self, ai_settings, screen, stats):"""初始化显示得分涉及的属性"""self.screen = screenself.screen_rect = screen.get_rect()self.ai_settings = ai_settingsself.stats = stats# 显示得分信息时使用的字体设置self.text_color = (30, 30, 30)self.font = pygame.font.SysFont(None, 48)# 准备包含得最高得分和当前得分的初始图像self.prep_score()self.prep_high_score()self.prep_level()self.prep_ships()def prep_level(self):"""将等级转换为渲染的图像"""self.level_image = self.font.render(str(self.stats.level), True, self.text_color, self.ai_settings.bg_color)# 将等级放在得分下方self.level_rect = self.level_image.get_rect()self.level_rect.right = self.score_rect.rightself.level_rect.top = self.score_rect.bottom + 10def prep_score(self):"""将得分转换为一幅渲染的图像"""rounded_score = int(round(self.stats.score, -1))score_str = "{:,}".format(rounded_score)self.score_image = self.font.render(score_str, True, self.text_color, self.ai_settings.bg_color)# 将得分放在屏幕右上角self.score_rect = self.score_image.get_rect()self.score_rect.right = self.screen_rect.right - 20self.score_rect.top = 20def show_score(self):"""在屏幕上显示当前得分和最高得分"""self.screen.blit(self.score_image, self.score_rect)self.screen.blit(self.high_score_image, self.high_score_rect)self.screen.blit(self.level_image, self.level_rect)# 绘制飞船self.ships.draw(self.screen)def prep_high_score(self):"""将最高分转换为渲染的图像"""high_score = int(round(self.stats.high_score, -1))high_score_str = "{:,}".format(high_score)self.high_score_image = self.font.render(high_score_str, True, self.text_color, self.ai_settings.bg_color)# 最高得分放在屏幕顶部中央self.high_score_rect = self.high_score_image.get_rect()self.high_score_rect.centerx = self.screen_rect.centerxself.high_score_rect.top = self.score_rect.topdef prep_ships(self):"""显示还余下多少艘飞船"""self.ships = Group()for ship_number in range(self.stats.ships_left):ship = Ship(self.ai_settings, self.screen)ship.rect.x = 10 + ship_number * ship.rect.widthship.rect.y = 10self.ships.add(ship)


button.py*

import pygame.fontclass Button:def __init__(self, ai_settings, screen, msg):"""初始化按钮的属性"""self.screen = screenself.screen_rect = screen.get_rect()# 设置按钮的尺寸和其他属性self.width, self.height = 200, 50self.button_color = (163, 73, 164)self.text_color = (255, 255, 255)self.font = pygame.font.SysFont(None, 48)# 创建按钮的rect对象,并使其居中self.rect = pygame.Rect(0, 0, self.width, self.height)self.rect.center = self.screen_rect.center# 按钮的标签秩序创建一次self.prep_msg(msg)def prep_msg(self, msg):"""将msg渲染为图像,并使其在按钮上居中"""self.msg_image = self.font.render(msg, True, self.text_color, self.button_color)self.msg_image_rect = self.msg_image.get_rect()self.msg_image_rect.center = self.rect.centerdef draw_button(self):# 绘制一个用颜色填充的按钮,再绘制文本self.screen.fill(self.button_color, self.rect)self.screen.blit(self.msg_image, self.msg_image_rect)


【项目素材】


【项目总结】

《外星人入侵》游戏项目是跟着教材讲解在做,相对书中所讲做了一点小改变。
改变主要体现在外观上。首先背景采用了蓝灰色,RGB值是112,146,190,接着是飞船和外星人的形状做出了改变,都是在素材网上下载的图片,但在更改图片大小时,照片背景直接由透明转成了白色,所以需要对图像背景重新着色成RGB:112,146,190,以求只显示出飞船和外星人的轮廓。但是图像轮廓周围有还会有一些白色,这就需要对图像轮廓周围一点点的涂色,从而获得更加完美的界面显示效果。其次是对子弹颜色和子弹的长宽值进行了更改,使界面的配色、元素比例更加的协调。游戏开始前的play按钮设置成了RGB为163,73,164的紫色,与背景属于同一色系,界面看起来更加的好看。
左上角显示了三个飞船图像,表明剩余的飞船数量。不足之处在于,本来希望游戏界面元素大小适宜,不会过分拥挤,但是却造成了左上角的飞船会挡到最上面一行第一个外星人。
点击play按钮游戏开始后,每射杀一个外星人得分是50,右上角第一行是本局所得的总分,第二行为关卡数,每个关卡中的外星人射杀完后会进入下一关,关卡数自动加一。上方中间显示的是最高得分。随着关数增加外星人的活动速度按照1.1提速。
若飞船与外星人两者相碰撞,左上角的飞机数量会少一个,短暂停留1.5秒然后重新从这关开始。
直到最后一艘飞船也与外星人相碰,则游戏结束,界面中央重新出现play按钮,点击以后重新开始,如果新的一局游戏最高得分大于上局游戏,则最高分被刷新。


代码学习总结:

1.模块pygame: 包含开发游戏所需的功能。
模块sys:玩家退出时,将使用该模块来退出游戏。
(可参考:Python中的sys模块)

2.pygame.init
参考博客园博客:【pygame】pygame的init()
【摘要】
①init所起作用为:初始化(initialize)
②pygame.init :初始化背景设置,让Pygame能够正确地工作.
在使用pygame模块完成游戏开发的想法的之前,电脑需要检查这个模块是否完整,能否正常提供给我们帮助,检查的动作即为pygame.init()

3.pygame.display:Pygame 中用于控制窗口和屏幕显示的模块。
(参考:Pygame详解(二)display模块)
【摘要】
①pygame.display.set_mode():初始化一个准备显示的窗口或屏幕
在这里,调用pygame.display.set_mode() 来创建一个名为screen 的显示窗口,这个游戏的所有图形元素都将在其中绘制。
对象screen是一个surface。在Pygame中,surface是屏幕的一部分,用于显示游戏元素。在这个游戏中,每个元素(如外星人或飞船)都是一个surface。
display.set_mode() 返回的surface表示整个游戏窗口。我们激活游戏的动画循环后,每经过一次循环都将自动重绘这个surface。
(详情参考:Pygame详解(十二):Surface 对象)
实参(800,1200)是一个元组,指定了游戏窗口的尺寸。通过将尺寸传递给pygame.display.set_mode() ,创建一个宽1200像素、高800像素的游戏窗口(可以根据自己的显示器尺寸调整这些值)。
②pygame.display.set_caption(): Set the current window caption(设置当前窗口标题)
③pygame.display.flip():更新整个待显示的 Surface 对象到屏幕上(命令Pygame让最近绘制的屏幕可见。)
在这里,它在每次执行while 循环时都绘制一个空屏幕,并擦去旧屏幕,使得只有新屏幕可见。
在我们移动游戏元素时,pygame.display.flip() 将不断更新屏幕,以显示元素的新位置,并在原来的位置隐藏元素,从而营造平滑移动的效果。

4.bg_color=(205,186,150)
screen.fill(bg_color)
在Pygame中,颜色是以RGB值指定的。 在❷处,我们调用方法screen.fill() ,用背景色填充屏幕;这个方法只接受一个实参:一种颜色。
RGB色彩体系
即红蓝绿三个通道的颜色组合
该体系覆盖所能感知的所有颜色
每个颜色通道的取值范围为0-255的整数或者0-1的小数
颜色值(255, 0, 0)表示红色,(0, 255, 0)表示绿色,而(0, 0, 255)表示蓝色。通过组合不同的RGB值,可创建1600万种颜色。
在这里,在颜色值(230, 230, 230)中,红色、蓝色和绿色量相同,它将背景设置为一种浅灰色。
RGB颜色对照表查询网站:96编辑器

5.pygame.QUIT:卸载所有之前被初始化的 pygame 模块。
当python 解释器关闭时,这个方法将被无条件地调用,所以程序并不需要调用这个方法,除非想要终止 pygame 资源,并继续执行其他功能。多次执行这个方法也是没有问题的。
调用这个方法 pygame.QUIT() 会结束所有模块,但不会结束程序。
(摘自:Pygame详解(十五))
pygame.quit()是pygame.init()函数的一种相反的函数,它运行的代码会使得Pygame库停止工作。

6.sys.exit()
退出程序,正常退出时exit(0),一般情况下执行到程序末尾,解释器自动退出,但是如果需要中途退出程序,可以调用sys.exit函数。
在调用sys.exit()终止程序之前,总是应该先调用pygame.quit()。
如果event对象是一个停止事件,就会调用pygame.QUIT()和sys.exit()函数。

7.pygame.event:用于处理事件与事件队列的 Pygame 模块。(事件是用户玩游戏时执行的操作,如按键或移动鼠标。)
参考:Pygame详解(四):event模块
【摘要】
pygame.event.get(): 从队列中获取事件
8.事件循环
为让程序响应事件,我们编写一个事件循环,以侦听事件,并根据发生的事件执行相应的任务。
在这里,for 循环就是一个事件循环。 为访问Pygame检测到的事件,我们使用方法pygame.event.get() 。所有键盘和鼠标事件都将促使for 循环运行。在这个循环中,我们将编写一系列的if 语句来检测并响应特定的事件。例如,玩家单击游戏窗口的关闭按钮时,将检测到pygame.QUIT 事件,而我们调用sys.exit() 来退出游戏。
9.run_game()
这将初始化游戏并开始主循环。 (即调用定义好的函数run_game())

10.
编写一个名为settings 的模块,其中包含一个名为Settings 的类,用于将所有设置存储在一个地方,以免在代码中到处添加设置。这样,我们就能传递一个设置对象,而不是众多不同的设置。另外,这让函数调用更简单,且在项目增大时修改游戏的外观更容易:要修改游戏,只需修改 settings.py中的一些值,而无需查找散布在文件中的不同设置。

(未总结完)

Python项目:《外星人入侵》代码及笔记 via:《Python变成入门到实战》相关推荐

  1. python项目软件代码_七套Python库快速提升您项目的代码可维护性,软件工程,代码库...

    保护项目未来可维护性的一种理想方式,在于利用外部库检查您的代码运行状况.以下是目前开发人员最喜爱的的代码梳理库,它们能够以强制方式执行一致性样式,并确保项目在成熟之后仍具备可接受的测试覆盖率. 当软件 ...

  2. Python的IDE:基于Eclipse/MyEclipse软件的PyDev插件配置python的开发环境(不同python项目加载不同版本的python)—从而实现Python编程图文教程之详细攻略

    Python的IDE:基于Eclipse/MyEclipse软件的PyDev插件配置python的开发环境(不同python项目加载不同版本的python)-从而实现Python编程图文教程之详细攻略 ...

  3. DSB2017项目grt123代码学习笔记一:项目基本情况

    DSB2017项目grt123代码学习笔记一:项目基本情况 Kaggle上Data Science Bowl 2017年肺结节检测比赛第一名grt123团队的算法. github地址:https:// ...

  4. 视频教程-python项目之博客系统开发-Python

    python项目之博客系统开发 TriAquae开源运维软件创始人,混迹IT运维领域多年,曾就职于松下.国政通.飞信.中金.NOKIA等公司,维护过少至几十台,多至数万台设备的IT系统,致力于提高企业 ...

  5. Python项目外星人入侵(一):实现宇宙飞船

    文章目录 Python项目:外星人入侵(一) 安装Pygame 安装pip 安装Pygame 开始游戏项目 创建Pygame窗口以及响应用户输入 设置背景颜色 创建设置类 添加飞船图像 创建ships ...

  6. 记录第一个 python项目 外星人入侵小游戏

    学习目标:提升自己的编程能力## 标题 *> 可谓是一波三折 ,刚开始看的一本电子书 里面是python2.0的内容,我敲着在3系列的编译器试着2.0的代码可谓好不酸爽 那报错 绝了 学习内容: ...

  7. python项目开发计划_面向中级 Python 开发人员的 13 个项目构想

    建立信心:无论项目的复杂程度如何,你都会更加相信自己创建软件的能力. 探索其他技术:你将了解构建完整产品所需的其他技术,如数据库.服务器和其他语言. 更好地理解编程概念:你将学习更好地编写代码,并了解 ...

  8. python项目-30 个惊艳的Python开源项目

    在过去的一年里,Mybridge AI 比较了近15000个开源Python项目,选择了前30名(概率只有0.2%). 这是一个竞争异常激烈的名单,精挑细选了2017年1月到12月之间发布的最佳开源P ...

  9. python项目归纳总结-这4个Python实战项目,让你瞬间读懂Python!

    原标题:这4个Python实战项目,让你瞬间读懂Python! 来自:https://www.toutiao.com/a6593456515221291528/ Python 是一种极具可读性和通用性 ...

  10. python项目-推荐 10 个有趣的 Python 练手项目

    想成为一个优秀的Python程序员,没有捷径可走,势必要花费大量时间在键盘后. 而不断地进行各种小项目开发,可以为之后的大开发项目积攒经验,做好准备. 但不少人都在为开发什么项目而苦恼. 因此,我为大 ...

最新文章

  1. JdbcTemplate详解 - 2
  2. Javascript学习资源整理
  3. java 动态创建实例_java – 有没有办法动态创建类(而不是实例)?
  4. 如何修复修复损坏的TAU G2的.u2文件
  5. php中日期选择代码,实现JS日期时间选择器
  6. ubuntu系统下如何修改host
  7. java为什么要分为service层,dao层,controller层
  8. Asp.Net实例:C# 绘制统计图(二) ——折线统计图的绘制
  9. Android的SharedPreferences存取String和List<String>类型(在Activity和Fragment内使用)
  10. Coursera机器学习课后作业Matlab代码(1~9周)
  11. GoF 的 23 种设计模式
  12. Jtag接口定义及含义
  13. awesomes前端资源库网站
  14. 键盘与鼠标按键的键值对照表
  15. 自然语言生成之n-gram
  16. Tao Admin免费开源后台管理系统
  17. 啥是原神?女友说想要全角色语音+表情包,顺手用python把高清图也整下来了
  18. mac电脑最好用的图片浏览器,没有之一
  19. cobar mysql部署方案_Cobar的安装和配置步骤
  20. 【计组】懂了,时钟周期、机器周期、指令周期、总线周期、存储周期。

热门文章

  1. 大三了,意识到了数学、物理、外语的重要……
  2. java创建linux文件_Java生成文件夹
  3. Flutter ListView不显示出来
  4. Android中自定义TextView的形状--圆形-椭圆形-圆角矩形-线条
  5. C++:实现量化cliquet option棘轮期权测试实例
  6. 校正叠加(calibrated stacking)方法—技术
  7. SQL语言中的子查询
  8. 小电科技上市“搁浅”:先行者怪兽充电“坑惨”投资人,业绩难平
  9. 用USB无线网卡在新平台全新移植并构建Linux无线网络
  10. c语言reentrant,Reentrant Non-reentrant Function