项目名称:python飞机大战
编程语言:python
用到关键知识:pygame模块,python基础,os文件读写,以及面向对象思想方法!
实现功能:
1:飞机的移动,发射子弹,手雷,生命值,生命条
2:敌飞机有3种形态(小,中,大)不同的飞机大小不一样,生命值不一样,爆炸动画也不一样
3:背景音乐,子弹击中敌机会发生碰撞的爆炸动画和音效
4:随机产生补给(双射子弹和全屏炸弹)
5:难度逐渐增加(同一屏幕出现的飞机更多)
6:历史最高分纪录
项目分析:一个类文件(Main.py),音乐音效共计10余种,照片素材共计30余张,代码共计800行左右!

代码如下:(一个类文件(800行代码))

import pygame
import sys
import traceback
from pygame.locals import *
from random import *
pygame.init()
pygame.mixer.init()
bg_size = width, height = 480, 700
screen = pygame.display.set_mode(bg_size)
pygame.display.set_caption('飞机大战')
background = pygame.image.load('images/background.png').convert()
# 定义颜色
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
WHITE = (255, 255, 255)
# 载入音乐
pygame.mixer.music.load('sound/bjmusic.wav')
pygame.mixer.music.set_volume(0.1)
bullet_sound = pygame.mixer.Sound('sound/bullet.wav')
bullet_sound.set_volume(0.2)
bomb_sound = pygame.mixer.Sound('sound/use_bomb.wav')
bomb_sound.set_volume(0.2)
supply_sound = pygame.mixer.Sound('sound/supply.wav')
supply_sound.set_volume(0.2)
get_bomb_sound = pygame.mixer.Sound('sound/get_bomb.wav')
get_bomb_sound.set_volume(0.2)
get_bullet_sound = pygame.mixer.Sound('sound/get_bullet.wav')
get_bullet_sound.set_volume(0.2)
upgrade_sound = pygame.mixer.Sound('sound/upgrade.wav')
upgrade_sound.set_volume(0.2)
enemy3_fly_sound = pygame.mixer.Sound('sound/enemy3_flying.wav')
enemy3_fly_sound.set_volume(0.6)
enemy1_down_sound = pygame.mixer.Sound('sound/enemy1_down.wav')
enemy1_down_sound.set_volume(0.2)
enemy2_down_sound = pygame.mixer.Sound('sound/enemy2_down.wav')
enemy2_down_sound.set_volume(0.2)
enemy3_down_sound = pygame.mixer.Sound('sound/enemy3_down.wav')
enemy3_down_sound.set_volume(0.2)
me_down_sound = pygame.mixer.Sound('sound/me_down.wav')
me_down_sound.set_volume(0.2)
# 设置我的飞机类:设置我的飞机类:设置我的飞机类:设置我的飞机类:设置我的飞机类class MyPlane(pygame.sprite.Sprite):def __init__(self, bg_size):super(MyPlane, self).__init__()self.image1 = pygame.image.load('images/me1.png').convert_alpha()self.image2 = pygame.image.load('images/me2.png').convert_alpha()self.destroy_images = []self.destroy_images.extend([pygame.image.load('images/me_destroy_1.png').convert_alpha(),pygame.image.load('images/me_destroy_2.png').convert_alpha(),pygame.image.load('images/me_destroy_3.png').convert_alpha(),pygame.image.load('images/me_destroy_4.png').convert_alpha()])self.rect = self.image1.get_rect()self.width, self.height = bg_size[0], bg_size[1]self.active = Trueself.invincible = Falseself.mask = pygame.mask.from_surface(self.image2)self.rect.left, self.rect.top = (self.width - self.rect.width) // 2, self.height - self.rect.height - 60self.speed = 10def moveUp(self):if self.rect.top > 0:self.rect.top -= self.speedelse:self.rect.top = 0def moveDown(self):if self.rect.bottom < self.height - 60:self.rect.bottom += self.speedelse:self.rect.bottom = self.height - 60def moveLeft(self):if self.rect.left > 0:self.rect.left -= self.speedelse:self.rect.left = 0def moveRight(self):if self.rect.right < self.width:self.rect.right += self.speedelse:self.rect.right = self.widthdef reset(self):self.rect.left, self.rect.top = (self.width - self.rect.width) // 2, self.height - self.rect.height - 60self.active = Trueself.invincible = True
# 设置敌人的飞机:# 设置敌人的飞机:# 设置敌人的飞机:# 设置敌人的飞机:# 设置敌人的飞机class SmallEnemy(pygame.sprite.Sprite):energy = 1def __init__(self, bg_size):super(SmallEnemy, self).__init__()self.image = pygame.image.load('images/enemy1.png').convert_alpha()self.destroy_images = []self.destroy_images.extend([pygame.image.load('images/enemy1_down1.png').convert_alpha(),pygame.image.load('images/enemy1_down2.png').convert_alpha(),pygame.image.load('images/enemy1_down3.png').convert_alpha(),pygame.image.load('images/enemy1_down4.png').convert_alpha()])self.rect = self.image.get_rect()self.width, self.height = bg_size[0], bg_size[1]self.active = Trueself.mask = pygame.mask.from_surface(self.image)self.speed = 2self.reset()self.energy = SmallEnemy.energyself.hit = Falsedef move(self):if self.rect.top < self.height:self.rect.top += self.speedelse:self.reset()def reset(self):self.rect.left, self.rect.top = randint(0, self.width - self.rect.width), randint(-5 * self.height, 0)self.active = Trueself.energy = SmallEnemy.energyclass MidEnemy(pygame.sprite.Sprite):energy = 8def __init__(self, bg_size):super(MidEnemy, self).__init__()self.image = pygame.image.load('images/enemy2.png').convert_alpha()self.destroy_images = []self.destroy_images.extend([pygame.image.load('images/enemy2_down1.png').convert_alpha(),pygame.image.load('images/enemy2_down2.png').convert_alpha(),pygame.image.load('images/enemy2_down3.png').convert_alpha(),pygame.image.load('images/enemy2_down4.png').convert_alpha()])self.image_hit = pygame.image.load('images/enemy2_hit.png').convert_alpha()self.rect = self.image.get_rect()self.width, self.height = bg_size[0], bg_size[1]self.active = Trueself.speed = 1self.mask = pygame.mask.from_surface(self.image)self.reset()self.energy = MidEnemy.energyself.hit = Falsedef move(self):if self.rect.top < self.height:self.rect.top += self.speedelse:self.reset()def reset(self):self.rect.left, self.rect.top = randint(0, self.width - self.rect.width), randint(-10 * self.height, -self.height)self.active = Trueself.energy = MidEnemy.energyclass BigEnemy(pygame.sprite.Sprite):energy = 20def __init__(self, bg_size):super(BigEnemy, self).__init__()self.image1 = pygame.image.load('images/enemy3_n1.png').convert_alpha()self.image2 = pygame.image.load('images/enemy3_n2.png').convert_alpha()self.destroy_images = []self.destroy_images.extend([pygame.image.load('images/enemy3_down1.png').convert_alpha(),pygame.image.load('images/enemy3_down2.png').convert_alpha(),pygame.image.load('images/enemy3_down3.png').convert_alpha(),pygame.image.load('images/enemy3_down4.png').convert_alpha(),pygame.image.load('images/enemy3_down5.png').convert_alpha(),pygame.image.load('images/enemy3_down6.png').convert_alpha()])self.image_hit = pygame.image.load('images/enemy3_hit.png').convert_alpha()self.rect = self.image1.get_rect()self.width, self.height = bg_size[0], bg_size[1]self.active = Trueself.speed = 1self.mask = pygame.mask.from_surface(self.image1)self.appear = Falseself.reset()self.energy = BigEnemy.energyself.hit = Falsedef move(self):if self.rect.top < self.height:self.rect.top += self.speedelse:self.reset()def reset(self):self.rect.left, self.rect.top =  randint(0, self.width - self.rect.width), randint(-20 * self.height, -10 * self.height)self.active = Trueself.energy = BigEnemy.energy# 设置补给:# 设置补给:# 设置补给:# 设置补给:# 设置补给
class Bullet_Supply(pygame.sprite.Sprite):def __init__(self, bg_size):super(Bullet_Supply, self).__init__()self.image = pygame.image.load('images/bullet_supply.png').convert_alpha()self.rect = self.image.get_rect()self.width, self.height = bg_size[0], bg_size[1]self.rect.left, self.rect.bottom = randint(0, self.width - self.rect.width), -100self.speed = 5self.active = Falseself.mask = pygame.mask.from_surface(self.image)def move(self):if self.rect.top < self.height:self.rect.top += self.speedelse:self.active = Falsedef reset(self):self.active = Trueself.rect.left, self.rect.bottom = randint(0, self.width - self.rect.width), -100class Bomb_Supply(pygame.sprite.Sprite):def __init__(self, bg_size):super(Bomb_Supply, self).__init__()self.image = pygame.image.load('images/bomb_supply.png').convert_alpha()self.rect = self.image.get_rect()self.width, self.height = bg_size[0], bg_size[1]self.rect.left, self.rect.bottom = randint(0, self.width - self.rect.width), -100self.speed = 5self.active = Falseself.mask = pygame.mask.from_surface(self.image)def move(self):if self.rect.top < self.height:self.rect.top += self.speedelse:self.active = Falsedef reset(self):self.active = Trueself.rect.left, self.rect.bottom = randint(0, self.width - self.rect.width), -100# 设置我方发射子弹类
class Bullet1(pygame.sprite.Sprite):def __init__(self, position):super(Bullet1, self).__init__()self.image = pygame.image.load("images/bullet1.png").convert_alpha()self.rect = self.image.get_rect()self.rect.left, self.rect.top = positionself.speed = 12self.active = Trueself.mask = pygame.mask.from_surface(self.image)def move(self):self.rect.top -= self.speedif self.rect.top < 0:self.active = Falsedef reset(self, position):self.rect.left, self.rect.top = positionself.active = Trueclass Bullet2(pygame.sprite.Sprite):def __init__(self, position):super(Bullet2, self).__init__()self.image = pygame.image.load("images/bullet2.png").convert_alpha()self.rect = self.image.get_rect()self.rect.left, self.rect.top = positionself.speed = 14self.active = Falseself.mask = pygame.mask.from_surface(self.image)def move(self):self.rect.top -= self.speedif self.rect.top < 0:self.active = Falsedef reset(self, position):self.rect.left, self.rect.top = positionself.active = True
# 主程序的实现 :# 主程序的实现   :# 主程序的实现   :# 主程序的实现   :# 主程序的实现def add_small_enemies(group1, group2, num):for i in range(num):e1 = SmallEnemy(bg_size)group1.add(e1)group2.add(e1)
def add_mid_enemies(group1, group2, num):for i in range(num):e2 = MidEnemy(bg_size)group1.add(e2)group2.add(e2)
def add_big_enemies(group1, group2, num):for i in range(num):e3 = BigEnemy(bg_size)group1.add(e3)group2.add(e3)def inc_speed(target, inc):for each in target:each.speed += inc
def main():# 播放音乐pygame.mixer.music.play(-1)# 实例化我方飞机me =MyPlane(bg_size=bg_size)# 实例化敌方飞机enemies = pygame.sprite.Group()# 实例化敌方小型飞机small_enemies = pygame.sprite.Group()add_small_enemies(small_enemies, enemies, 15)# 实例化敌方中型飞机mid_enemies = pygame.sprite.Group()add_mid_enemies(mid_enemies, enemies, 4)# 实例化敌方大型飞机big_enemies = pygame.sprite.Group()add_big_enemies(big_enemies, enemies, 2)# 实例化普通子弹bullet1 = []bullet1_index = 0BULLET1_NUM = 4for i in range(BULLET1_NUM):bullet1.append(Bullet1((me.rect.centerx-10 , me.rect.centery)))# 实例超级子弹bullet2 = []bullet2_index = 0BULLET2_NUM = 8for i in range(BULLET2_NUM // 2):bullet2.append(Bullet2((me.rect.centerx - 33, me.rect.centery)))bullet2.append(Bullet2((me.rect.centerx + 30, me.rect.centery)))# 中弹图片索引e1_destroy_index = 0e2_destroy_index = 0e3_destroy_index = 0me_destroy_index = 0# 统计得分score = 0score_font = pygame.font.Font("font/font1.ttf", 36)# 标志是否暂停游戏paused = Falsepaused_nor_image = pygame.image.load("images/pause_nor.png").convert_alpha()paused_pressed_image = pygame.image.load( "images/pause_pressed.png").convert_alpha()resume_nor_image = pygame.image.load('images/resume_nor.png').convert_alpha()resume_pressed_image = pygame.image.load('images/resume_pressed.png').convert_alpha()paused_rect = paused_nor_image.get_rect()paused_rect.left, paused_rect.top = width - paused_rect.width - 10, 10paused_image = paused_nor_image# 设置难度level = 1# 全屏炸弹bomb_image = pygame.image.load('images/bomb.png').convert_alpha()bomb_rect = bomb_image.get_rect()bomb_font = pygame.font.Font("font/font1.ttf", 48)bomb_num = 3# 每20秒发放一个补给包bullet_supply = Bullet_Supply(bg_size)bomb_supply = Bomb_Supply(bg_size)SUPPLY_TIME = USEREVENTpygame.time.set_timer(SUPPLY_TIME, 20 * 1000)DOUBLE_BULLTET_TIME = USEREVENT + 1INVINCIBLE_TIME = USEREVENT + 2# 标志是否使用超级子弹is_double_bullet = False# 生命数量life_image = pygame.image.load('images/life.png').convert_alpha()life_rect = life_image.get_rect()life_num = 3# 用于切换我方飞机图片switch_plane = True# 游戏结束画面gameover_font = pygame.font.Font("font/font1.TTF", 48)again_image = pygame.image.load("images/again.png").convert_alpha()again_rect = again_image.get_rect()gameover_image = pygame.image.load("images/gameover.png").convert_alpha()gameover_rect = gameover_image.get_rect()# 用于延迟切换delay = 100recorded = Falseclock = pygame.time.Clock()running = Truewhile running:for event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()elif event.type == MOUSEBUTTONDOWN:if event.button == 1 and paused_rect.collidepoint(event.pos):paused = not pausedif paused:pygame.time.set_timer(SUPPLY_TIME, 0)pygame.mixer.music.pause()pygame.mixer.pause()else:pygame.time.set_timer(SUPPLY_TIME, 20 * 1000)pygame.mixer.music.unpause()pygame.mixer.unpause()elif event.type == MOUSEMOTION:if paused_rect.collidepoint(event.pos):if paused:paused_image = resume_pressed_imageelse:paused_image = paused_pressed_imageelse:if paused:paused_image = resume_nor_imageelse:paused_image = paused_nor_imageelif event.type == KEYDOWN:if event.key == K_SPACE:if bomb_num:bomb_num -= 1bomb_sound.play()for each in enemies:if each.rect.bottom > 0:each.active = Falseelif event.type == SUPPLY_TIME:supply_sound.play()if choice([True, False]):bomb_supply.reset()else:bullet_supply.reset()elif event.type == DOUBLE_BULLTET_TIME:is_double_bullet = Falsepygame.time.set_timer(DOUBLE_BULLTET_TIME, 0)elif event.type == INVINCIBLE_TIME:me.invincible = Falsepygame.time.set_timer(INVINCIBLE_TIME, 0)# 根据用户得分增加难度if level == 1 and score > 5000:level = 2upgrade_sound.play()# 增加3架小型敌机, 2架中型敌机和1架大型敌机add_small_enemies(small_enemies, enemies, 3)add_mid_enemies(mid_enemies, enemies, 2)add_big_enemies(big_enemies, enemies, 1)# 提升小型敌机的速度inc_speed(target=small_enemies, inc=1)elif level == 2 and score > 30000:level = 3upgrade_sound.play()# 增加5架小型敌机, 3架中型敌机和2架大型敌机add_small_enemies(small_enemies, enemies, 5)add_mid_enemies(mid_enemies, enemies, 3)add_big_enemies(big_enemies, enemies, 2)# 提升小型敌机的速度inc_speed(target=small_enemies, inc=1)inc_speed(target=mid_enemies, inc=1)elif level == 3 and score > 60000:level = 4upgrade_sound.play()# 增加5架小型敌机, 3架中型敌机和2架大型敌机add_small_enemies(small_enemies, enemies, 5)add_mid_enemies(mid_enemies, enemies, 3)add_big_enemies(big_enemies, enemies, 2)# 提升小型敌机的速度inc_speed(target=small_enemies, inc=1)inc_speed(target=mid_enemies, inc=1)elif level == 4 and score > 100000:level = 5upgrade_sound.play()# 增加5架小型敌机, 3架中型敌机和2架大型敌机add_small_enemies(small_enemies, enemies, 5)add_mid_enemies(mid_enemies, enemies, 3)add_big_enemies(big_enemies, enemies, 2)# 提升小型敌机的速度inc_speed(target=small_enemies, inc=1)inc_speed(target=mid_enemies, inc=1)inc_speed(target=big_enemies, inc=1)screen.blit(background, (0, 0))if life_num and not paused:# 检测键盘按键操作key_pressed = pygame.key.get_pressed()if key_pressed[K_w] or key_pressed[K_UP]:me.moveUp()if key_pressed[K_s] or key_pressed[K_DOWN]:me.moveDown()if key_pressed[K_a] or key_pressed[K_LEFT]:me.moveLeft()if key_pressed[K_d] or key_pressed[K_RIGHT]:me.moveRight()# 绘制全屏炸弹补给if bomb_supply.active:bomb_supply.move()screen.blit(bomb_supply.image, bomb_supply.rect)if pygame.sprite.collide_mask(me, bomb_supply):get_bomb_sound.play()if bomb_num < 3:bomb_num += 1bomb_supply.active = False# 绘制超级子弹补给if bullet_supply.active:bullet_supply.move()screen.blit(bullet_supply.image, bullet_supply.rect)if pygame.sprite.collide_mask(me, bullet_supply):get_bullet_sound.play()# 发射超级子弹is_double_bullet = Truepygame.time.set_timer(DOUBLE_BULLTET_TIME, 18 * 1000)bullet_supply.active = False# 发射子弹if not(delay % 10):bullet_sound.play()if is_double_bullet:bullets = bullet2bullets[bullet2_index].reset((me.rect.centerx - 40, me.rect.centery))bullets[bullet2_index +1].reset((me.rect.centerx + 20, me.rect.centery))bullet2_index = (bullet2_index + 2) % BULLET2_NUMelse:bullets = bullet1bullets[bullet1_index].reset((me.rect.centerx-10, me.rect.centery-10))bullet1_index = (bullet1_index + 1) % BULLET1_NUM# 碰撞检测 检测子弹是否击中敌机for b in bullets:if b.active:b.move()screen.blit(b.image, b.rect)enemy_hit = pygame.sprite.spritecollide(b, enemies, False, pygame.sprite.collide_mask)if enemy_hit:b.active = Falsefor each in enemy_hit:each.hit = Trueeach.energy -= 1if each.energy == 0:each.active = False# 绘制敌方大型机for each in big_enemies:if each.active:each.move()if each.hit:screen.blit(each.image_hit, each.rect)each.hit = Falseelse:if switch_plane:screen.blit(each.image1, each.rect)else:screen.blit(each.image2, each.rect)# 绘制血条pygame.draw.line(screen, BLACK,(each.rect.left, each.rect.top - 5),(each.rect.right, each.rect.top - 5),2)energy_remain = each.energy / BigEnemy.energyif energy_remain > 0.2:energy_color = GREENelse:energy_color = REDpygame.draw.line(screen, energy_color,(each.rect.left, each.rect.top - 5),(each.rect.left + each.rect.width * energy_remain,each.rect.top - 5),2)if each.rect.bottom == -10:enemy3_fly_sound.play(-1)each.appear = True# 离开画面, 关闭音效if each.rect.bottom < -10 and each.appear:enemy3_fly_sound.stop()each.appear = Falseelse:# 毁灭if e3_destroy_index == 0:enemy3_down_sound.play()if not(delay % 2):screen.blit(each.destroy_images[e3_destroy_index], each.rect)e3_destroy_index = (e3_destroy_index + 1) % 6if e3_destroy_index == 0:enemy3_fly_sound.stop()score += 1000each.reset()# 绘制敌方中型机for each in mid_enemies:if each.active:each.move()if each.hit:screen.blit(each.image_hit, each.rect)each.hit = Falseelse:screen.blit(each.image, each.rect)# 绘制血槽pygame.draw.line(screen, BLACK,(each.rect.left, each.rect.top - 5),(each.rect.right, each.rect.top - 5),2)# 当生命大于20%显示绿色, 否则显示红色energy_remain = each.energy / MidEnemy.energyif energy_remain > 0.2:energy_color = GREENelse:energy_color = REDpygame.draw.line(screen, energy_color,(each.rect.left, each.rect.top - 5),(each.rect.left + each.rect.width * energy_remain,each.rect.top - 5),2)else:# 毁灭if e2_destroy_index == 0:enemy2_down_sound.play()if not(delay % 2):screen.blit(each.destroy_images[e2_destroy_index], each.rect)e2_destroy_index = (e2_destroy_index + 1) % 4if e2_destroy_index == 0:score += 600each.reset()# 绘制敌方小型机for each in small_enemies:if each.active:each.move()screen.blit(each.image, each.rect)else:# 毁灭if e1_destroy_index == 0:enemy1_down_sound.play()if not(delay % 2):screen.blit(each.destroy_images[e1_destroy_index], each.rect)e1_destroy_index = (e1_destroy_index + 1) % 4if e1_destroy_index == 0:score += 100each.reset()# 检测我方飞机碰撞enemies_down = pygame.sprite.spritecollide(me, enemies, False, pygame.sprite.collide_mask)if enemies_down and not me.invincible:me.active = Falsefor each in enemies_down:each.active = False# 绘制我方飞机if me.active:if switch_plane:screen.blit(me.image1, me.rect)else:screen.blit(me.image2, me.rect)else:# 毁灭if me_destroy_index == 0:me_down_sound.play()if not(delay % 2):screen.blit(me.destroy_images[me_destroy_index], me.rect)me_destroy_index = (me_destroy_index + 1) % 4if me_destroy_index == 0:life_num -= 1me.reset()pygame.time.set_timer(INVINCIBLE_TIME, 3 * 1000)# 绘制全屏炸弹数量bomb_text = bomb_font.render("× %d" % bomb_num, True, WHITE)text_rect = bomb_text.get_rect()screen.blit(bomb_image, (10, height - 10 - bomb_rect.height))screen.blit(bomb_text, (20 + bomb_rect.width,height - 5 - text_rect.height))# 绘制剩余生命数量if life_num:for i in range(life_num):screen.blit(life_image,((width - 10 - (i + 1) * life_rect.width),height - 10 - life_rect.height))# 绘制得分score_text = score_font.render('Score : %d' % score, True, WHITE)screen.blit(score_text, (10, 5))#  绘制游戏结束画面elif life_num == 0:# 背景音乐停止pygame.mixer.music.stop()pygame.mixer.stop()# 停止发放补给pygame.time.set_timer(SUPPLY_TIME, 0)if not recorded:recorded =True# 读取历史最高分with open('record.txt', 'r') as f:record_score = int(f.read())# 判断是否高于历史最高分if score > record_score:with open('record.txt', 'w') as f:f.write(str(score))# 绘制结束界面record_score_text = score_font.render("Best : %d" % record_score, True, (255, 255, 255))screen.blit(record_score_text, (10, 45))gameover_text1 = gameover_font.render("Your Score", True, (255, 255, 255))gameover_text1_rect = gameover_text1.get_rect()gameover_text1_rect.left, gameover_text1_rect.top = (width - gameover_text1_rect.width) // 2, height // 3screen.blit(gameover_text1, gameover_text1_rect)gameover_text2 = gameover_font.render(str(score), True, (255, 255, 255))gameover_text2_rect = gameover_text2.get_rect()gameover_text2_rect.left, gameover_text2_rect.top =(width - gameover_text2_rect.width) // 2, gameover_text1_rect.bottom + 10screen.blit(gameover_text2, gameover_text2_rect)again_rect.left, again_rect.top = (width - again_rect.width) // 2, gameover_text2_rect.bottom + 50screen.blit(again_image, again_rect)gameover_rect.left, gameover_rect.top = (width - again_rect.width) // 2, again_rect.bottom + 10screen.blit(gameover_image, gameover_rect)# 如果用户按下鼠标左键if pygame.mouse.get_pressed()[0]:# 获取鼠标坐标pos = pygame.mouse.get_pos()if again_rect.left < pos[0] < again_rect.right and again_rect.top < pos[1] < again_rect.bottom:main()elif gameover_rect.left < pos[0] < gameover_rect.right and gameover_rect.top < pos[1] < gameover_rect.bottom:pygame.quit()sys.exit()screen.blit(paused_image, paused_rect)if not(delay % 11):switch_plane = not switch_planedelay -= 1if not delay:delay = 100pygame.display.flip()clock.tick(60)
if __name__ == '__main__':main()部分运行截图:

python--飞机大战(课程设计)相关推荐

  1. 【Python飞机大战课程设计及源代码】

    摘 要:根据课程要求,以及面向对象程序设计的编程思想,在Windows操作系统环境下,运用PyCharm编译程序,以Python语言为开发语言,最终实现飞机大战游戏相应的游戏操作功能.Python是一 ...

  2. Python程序设计,pygame飞机大战课程设计

    *飞机大战游戏设计 摘 要:根据课程要求,以及面向对象程序设计的编程思想,在Windows操作系统环境下,运用PyCharm编译程序,以Python语言为开发语言,最终实现飞机大战游戏相应的游戏操作功 ...

  3. 飞机大战课程设计报告

    飞机大战游戏的设计与开发 摘要:在未来的世界里,地球已经不能使人类居住下去,于是人们开始向月球移民,在移民过程中,发现了比我们快一步的生物居住在那,双方都行驶战斗机开始了一场激烈的战斗,多次战斗无果, ...

  4. Python实验,用pygame做飞机大战游戏设计

    飞机大战游戏设计 摘 要:根据课程要求,以及面向对象程序设计的编程思想,在Windows操作系统环境下,运用PyCharm编译程序,以Python语言为开发语言,最终实现飞机大战游戏相应的游戏操作功能 ...

  5. python飞机大战设计思路_python飞机大战pygame游戏背景设计详解

    本文实例讲述了python飞机大战pygame游戏背景设计.分享给大家供大家参考,具体如下: 目标 背景交替滚动的思路确定 显示游戏背景 01. 背景交替滚动的思路确定 运行 备课代码,观察 背景图像 ...

  6. python飞机大战功能模块图_基于Python的飞机大战游戏设计

    第 2 3 卷 第 1 期 2019年 3 月 扬 州 职 业 大 学 学 报 Journal of Yangzhou Polytechnic College Vol .23 No . 1 Mar . ...

  7. 【Python知识点梳理】8.飞机大战(面向对象设计思维)

    8.飞机大战(面向对象设计思维) 文章目录 1.飞机大战效果展示 2.我方飞机类 3.敌方飞机类 4.子弹类 5.补给类 6.主函数 总结 1.飞机大战效果展示   飞机大战(面向对象设计思维),主要 ...

  8. 基于python的飞机大战游戏设计与实现

    基于python的飞机大战游戏设计与实现,采用MySQL+pygame+Tkinter实现飞机大战游戏,主要功能有注册+登录+游戏初始化(开始游戏+游戏操作说明+版权信息)+游戏主界面[设置敌机种类并 ...

  9. Python“飞机大战”上下左右移动空格发射子弹

    下载点此去 最后面有运行视频 一.项目背景 作为一名学习计算机的学生,在以往,我认为学习计算机要么就是无所不能的黑客,要么就是能制作出各种软件程序的大神.我选择pygame板块,制作一款能随意更改游戏 ...

  10. python飞机大战任务报告_Python飞机大战实战项目案例

    都说实践是检验知识掌握程度的最好测试.随着Python学习者的增长,越来越多的零基础入门课程让人眼花缭乱.虽然说基础理论的学习十分重要,但是如果仅仅只学习理论知识,也是远远不够的.飞机大战的项目实战可 ...

最新文章

  1. ESXi6.5环境搭建(五:常见问题及解决方案实验总结)
  2. linux c 获取 CPU、内存、IO、磁盘、网速
  3. 调试笔记--keil 断点调试小技巧
  4. 移动设备wap手机网页html5通过特殊链接:打电话,发短信,发邮件详细教程
  5. python默认安装地址_python多版本下设置python3为默认的方法
  6. Android官方开发文档Training系列课程中文版:Activity测试之创建运行测试
  7. sql一个表中两个字段合并求和
  8. Tokenisation word segmentation sentence segmentation
  9. JavaWeb -- Struts1 使用示例: 表单校验 防表单重复提交 表单数据封装到实体
  10. 一个简单的python爬虫,以豆瓣妹子“http://www.dbmeizi.com/category/2?p= ”为例
  11. ROS学习笔记9 —— launch文件
  12. DisGeNET的初步认识
  13. mysql查询性能测试工具_性能测试之数据库监控分析工具PMM
  14. 能提取HTML网页正文的网站,智能提取网页正文新方法
  15. 玲珑oj 1129 ST
  16. [配置]keepalived配置高可用虚拟IP不通
  17. nid java_java – jstack输出缺少tid和nid信息
  18. java的public int_Java语言中“int”、“public”、“static int ”有什么区别?
  19. netdisk 基于Flask的个人网盘
  20. 基于JAVA水质监测数据采集系统计算机毕业设计源码+数据库+lw文档+系统+部署

热门文章

  1. 8.25 欢乐emmm赛
  2. 开发自己的编程语言(五)—— CIL中间代码的生成
  3. Js判断是否为数字,是否为空,是否为整形,是否为浮点型,是否为对象
  4. package-info类
  5. Qt信号和槽函数连接不成功原因
  6. python把http字符串转码https%3A%2F%2F转https://
  7. IDEA这么优化后,代码跑得嗖嗖的...
  8. wps计算机一级考试,计算机等级考试一级WPS-Office考试大纲
  9. 一分钟了解阿里云产品:万网虚拟主机如何正确绑定域名
  10. 经典linux c程序,经典 c 程序 100 例