def run(self): pygame.init() self.clock = pygame.time.Clock() aspect = self.map['width'] * 1.0 / self.map['height'] self.w = 700 self.h = int(self.w / aspect) self.surface = pygame.display.set_mode((self.w, self.h)) self.planes = [] self.planes.append(plane.Plane(self)) while True: dt = 1.0 / FRAME_RATE # handle events: for event in pygame.event.get(): if event.type == pygame.QUIT: break # make new planes: if random.random() < dt * NEW_PLANES_PER_SECOND: self.planes.append(plane.Plane(self)) # update existing planes: for p in self.planes: p.advance(dt) # render graphics: render.render(self) pygame.display.update() self.clock.tick(FRAME_RATE) pygame.quit()
def TestUnique_3(): print("###################################################") p1 = pl.Plane([0, 1, -1], 2) p2 = pl.Plane([1, -1, 1], 2) p3 = pl.Plane([3, -4, 1], 1) lSys = ls.LinearSystem([p1, p2, p3]) lSys.SolveSystem() print(str(lSys))
def Test_RandomSystem(): print("###################################################") p1 = pl.Plane([1, 2, 3], 10) p2 = pl.Plane([4, 5, 6], 11) p3 = pl.Plane([7, 8, 9], 12) lSys = ls.LinearSystem([p1, p2, p3]) lSys.SolveSystem() print(str(lSys))
def Test_InfiniteSolutions_2(): print("###################################################") p1 = pl.Plane([1, 2, 1], -1) p2 = pl.Plane([3, 6, 2], 1) p3 = pl.Plane([-1, -2, -1], 1) lSys = ls.LinearSystem([p1, p2, p3]) lSys.SolveSystem() print(str(lSys))
def Test_InfiniteSolutions_1(): print("###################################################") p1 = pl.Plane([1, -2, 1], 1) p2 = pl.Plane([1, 0, -2], 2) p3 = pl.Plane([-1, 4, -4], 0) lSys = ls.LinearSystem([p1, p2, p3]) lSys.SolveSystem() print(str(lSys))
def TestUnique_1(): print("###################################################") p1 = pl.Plane([-1, 1, 1], -2) p2 = pl.Plane([1, -4, 4], 21) p3 = pl.Plane([7, -5, -11], 0) lSys = ls.LinearSystem([p1, p2, p3]) lSys.SolveSystem() print(str(lSys))
def TestUnique_2(): print("###################################################") p1 = pl.Plane([1, 1, 0], 1) p2 = pl.Plane([0, 1, 1], 0) p3 = pl.Plane([0, 0, 1], -1) lSys = ls.LinearSystem([p1, p2, p3]) lSys.SolveSystem() print(str(lSys))
def setUp(self): self.neigh2d = Neighborhood(0) self.offsets2d = [(-1, 0), (1, 0)] self.plane2d = plane.Plane((100, 100)) self.neigh2d.populate(self.plane2d, self.offsets2d) self.neigh3d = Neighborhood(0) self.offsets3d = [(-1, 0, 0), (1, 0, 1)] self.plane3d = plane.Plane((100, 100, 100)) self.neigh3d.populate(self.plane3d, self.offsets3d)
def test_status(self): """ It returns the current status ('flying' by default) """ my_plane = plane.Plane() result = my_plane.status self.assertEqual(result, 'flying')
def createPlane(self, mesh, creator, args): """Creates a true plane from a polyPlane node. mesh is the mesh node that takes its input from creator. creator is an import Node which must be of type polyPlane. args is a dictionary that already contains the basic WorldObject arguments that can be passed to the constructor. """ parentnode = mesh.getParent() w = creator.getAttrValue("width", "w", "float", 1, 1.0) h = creator.getAttrValue("height", "h", "float", 1, 1.0) sw = creator.getAttrValue("subdivisionWidth", "sw", "int", 1, 1) sh = creator.getAttrValue("subdivisionHeight", "sh", "int", 1, 1) ax = vec3( creator.getAttrValue("axis", "ax", "double3", 1, vec3(0, 1, 0))) if ax != vec3(0, 0, 1): print "WARNING: Plane %s ignored because axis!=z" % node.getName() return # args["transform"] *= self.axisToTransform(ax) self.getRigidBodyArgs(parentnode, args) if "static" in args: del args["static"] p = plane.Plane(lx=w, ly=h, segmentsx=sw, segmentsy=sh, **args) self.newWorldObject(p, parentnode.getName())
def run(self, omega_plane=540, v_plane=240, omega_missile=150, v_missile=500): """ () -> void runs the game routine ORDER OR OPERATION: 1. move() 2. shift() 3. pos() """ # seed(7) self.alive = True self.score = 0 self.init_display() self.plane = plane.Plane(400, 200, 0, v_plane, omega_plane, self.fps) self.missiles = [] self.missiles.append( missile.Missile(randint(-100, 900), 0, 0, v_missile, omega_missile, 0, 0, self.fps, 1)) try: while self.alive: # main game loop self.mainloop(omega_missile, v_missile) cprint("You got destroyed by the AIM9X Sidewinder", 'red', 'on_green', attrs=['bold']) cprint("Press <ENTER> to restart", 'red') while not self.alive and self.running: # restart loop self.restart() except KeyboardInterrupt: self.quit()
def test_land(self): """ It changes the plane status to 'landed' """ my_plane = plane.Plane() my_plane.land() result = my_plane.status self.assertEqual(result, 'landed')
def reset(self): self.sfx = music.Music() self.sfx.play_sfx() self.speed = 1 self.tunnel = tunnel.Tunnel() self.score = 0 self.is_paused = False self.plane = plane.Plane() self.jump_velo = -1 self.is_game_over = False
def setUp(self): self.neighborhood = Neighborhood(0) self.plane2d = plane.Plane((10, 10)) self.config2d = Configuration(0, plane=self.plane2d, offsets={ (-1, -1): 1, (-1, 0): 1, (1, -1): 1, (0, 0): 1 }) self.plane3d = plane.Plane((100, 100, 100)) self.config3d = Configuration(1, plane=self.plane3d, offsets={ (-1, 0, 1): 1, (-2, 1, 1): 1, (-1, 0, 0): 0 })
def plane_test(): import plane nx = float(document.getElementById('plane_n_x').value) ny = float(document.getElementById('plane_n_y').value) nz = float(document.getElementById('plane_n_z').value) ox = float(document.getElementById('plane_off_x').value) oy = float(document.getElementById('plane_off_y').value) oz = float(document.getElementById('plane_off_z').value) pl = plane.Plane([nx,ny,nz],[ox,oy,oz]) document.getElementById('plane_normal').innerHTML = "{}: {}".format('Normal', pl.normal) document.getElementById('plane_off').innerHTML = "{}: {}".format('Offset', pl.offset) document.getElementById('plane_getXYZ').innerHTML = "{}: {}".format('getXYZ()', pl.getXYZ()) document.getElementById('plane_goify').innerHTML = "{}: {}".format('goify()', pl.goify())
def setUp(self): """ """ self.plane2d = plane.Plane((100, 100)) self.config = c.Configuration(1, plane=self.plane2d, offsets={ (-1, 0): 1, (-1, 1): 0, (0, 1): 1, (1, 1): 1, })
def __init__(self, cps=1, states=100, dimen=2): """ @cps: Cell planes. By default this is 1, but can be any positive number. Any non-positive number is assumed to be 1. @states: The number of cells that should be included in any dimension. The number of total states will be cps * states^dimen @dimen: The dimensions of the cellular automata. For example, for an N-tuple array, the dimension is N. """ pl_cnt = max(cps, 1) grid_dimen = (states,) * dimen self.planes = [plane.Plane(grid_dimen) for _ in range(pl_cnt)] self.master = self.planes[0] self.ticks = [(0, 1)] self.total = 0
def test_plane_and_line_intersection(self): # Setup some_point_on_plane = np.array([-2, -4, -4]) plane_normal = np.array([3, 2, -4]) _plane = plane.Plane(some_point_on_plane=some_point_on_plane, normal=plane_normal) _line = line.Line(point_a=np.array([2, 2, 7]), point_b=np.array([1, 3, 5])) # Run result = utils.get_plane_and_line_intersection(_plane, _line) # Validate print(result) self.assertTrue(np.isclose(result[0], -0.86, atol=0.1)) self.assertTrue(np.isclose(result[1], 4.86, atol=0.1)) self.assertTrue(np.isclose(result[2], 1.29, atol=0.1))
def closestPointToPoint(self, point, optionalTarget=None): p = plane.Plane() edgeList = [line3.Line3(), line3.Line3(), line3.Line3()] projectedPoint = vector3.Vector3() closestPoint = vector3.Vector3() result = optionalTarget or vector3.Vector3() minDistance = float("inf") # project the point onto the plane of the triangle p.setFromCoplanarPoints(self.a, self.b, self.c) p.projectPoint(point, projectedPoint) # check if the projection lies within the triangle if self.containsPoint(projectedPoint) == True: # if so, self is the closest point result.copy(projectedPoint) else: # if not, the point falls outside the triangle. the result is the closest point to the triangle"s edges or vertices edgeList[0].set(self.a, self.b) edgeList[1].set(self.b, self.c) edgeList[2].set(self.c, self.a) for i in xrange(len(edgeList)): edgeList[i].closestPointToPoint(projectedPoint, True, closestPoint) distance = projectedPoint.distanceToSquared(closestPoint) if distance < minDistance: minDistance = distance result.copy(closestPoint) return result
def Task7_PlaneIntersections(): print("###################################################") p1 = plane.Plane([-0.412, 3.806, 0.728], -3.46) p2 = plane.Plane([1.03, -9.515, -1.82], 8.65) p3 = plane.Plane([2.611, 5.528, 0.283], 4.6) p4 = plane.Plane([7.715, 8.306, 5.342], 3.76) p5 = plane.Plane([-7.926, 8.625, -7.217], -7.952) p6 = plane.Plane([-2.692, 2.875, -2.404], -2.443) orientation12, intersect12 = p1.GetIntersection(p2) orientation34, intersect34 = p3.GetIntersection(p4) orientation56, intersect56 = p5.GetIntersection(p6) PrintResult_Task7(orientation12, intersect12) PrintResult_Task7(orientation34, intersect34) PrintResult_Task7(orientation56, intersect56)
def setUp(self): self.test_environment = elements.Environment() self.test_plane = plane.Plane()
def main(): running = True #敌人和主角索引(毁灭播放) enemy_index = 0 b_enemy_index = 0 my_plane_index = 0 #建立一个主角飞机 me = plane.Plane(bg_size) clock = pygame.time.Clock() #刷新状态 judge_num = 100 switch_plane = True #建立小型飞机敌人列表 s_enemys = pygame.sprite.Group() #建立中型飞机列表 m_enemys = pygame.sprite.Group() #大型飞机列表 b_enemys = pygame.sprite.Group() all_enemys = pygame.sprite.Group() #总分数 all_grade = 0 grade_font = pygame.font.Font('font\\font.ttf', 36) #建立补给列表 bomb_rec = pygame.sprite.Group() super_rec = pygame.sprite.Group() all_rec = pygame.sprite.Group() #建立子弹列表 bullets = pygame.sprite.Group() all_bullets = pygame.sprite.Group() #炸弹数目 bomb_num = 3 #加载炸弹图片 bomb_image = pygame.image.load(st.bomb) bomb_font = pygame.font.Font(st.grade_font, 48) #判断子弹类型 is_super = False while running: screen.blit(bg, (0, 0)) for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() #触发对应事件(小中大飞机出现) if event.type == ADD_SE: new_s_enemy = enemy.SEnemy(bg_size) s_enemys.add(new_s_enemy) all_enemys.add(new_s_enemy) if event.type == ADD_ME: new_m_enemy = enemy.MEnemy(bg_size) m_enemys.add(new_m_enemy) all_enemys.add(new_m_enemy) if event.type == ADD_BE: new_b_enemy = enemy.BEnemy(bg_size) b_enemys.add(new_b_enemy) all_enemys.add(new_b_enemy) #子弹事件 if event.type == EMIT: if not is_super: new_bullet = bullet.Bullet(me.rect.midtop) bullets.add(new_bullet) else: super_bullet_1 = bullet.Bullet((me.rect.midtop[0] - 35, me.rect.bottom + me.rect.height / 2)) super_bullet_2 = bullet.Bullet((me.rect.midtop[0] + 25, me.rect.bottom + me.rect.height / 2)) bullets.add(super_bullet_1) bullets.add(super_bullet_2) #补给事件 if event.type == ADD_RE: rec_type = random.choice([True, False]) if rec_type: new_bomb = recruit.Recruit(bg_size) bomb_rec.add(new_bomb) else: new_super_rec = recruit.Recruit(bg_size) super_rec.add(new_super_rec) if event.type == pygame.KEYDOWN: if event.key == K_SPACE: if bomb_num > 0: bomb_num -= 1 for e in all_enemys: e.alive = False if e in s_enemys: all_grade += 3000 if e in m_enemys: all_grade += 6000 else: all_grade += 12000 #整个键盘序列,当被按下时,Bool为真 key_pressed = pygame.key.get_pressed() if key_pressed[K_w] or key_pressed[K_UP]: me.moveup() if key_pressed[K_a] or key_pressed[K_LEFT]: me.moveleft() if key_pressed[K_s] or key_pressed[K_DOWN]: me.movedown() if key_pressed[K_d] or key_pressed[K_RIGHT]: me.moveright() clock.tick(60) #飞机动态频率 if not (judge_num % 5): switch_plane = not switch_plane judge_num -= 1 if not judge_num: judge_num = 100 #碰撞检测 enemy_down = pygame.sprite.spritecollide(me, all_enemys, False, pygame.sprite.collide_mask) if enemy_down: me.alive = False for e in enemy_down: e.alive = False #检测子弹是否击中 for b in bullets: enemy_hit = pygame.sprite.spritecollide(b, all_enemys, False, pygame.sprite.collide_mask) if enemy_hit: b.alive = False for e in enemy_hit: if e in m_enemys or e in b_enemys: e.hp -= 1 if e.hp <= 0: e.alive = False if e in m_enemys: all_grade += 6000 else: all_grade += 12000 else: e.alive = False all_grade += 3000 #检测主角是否得到炸弹 if bomb_rec: for e in bomb_rec: if e.alive == True: e.move() screen.blit(e.image_1, e.rect) if pygame.sprite.collide_mask(me, e): bomb_num += 1 e.alive = False #检测是否得到超级子弹 if super_rec: for e in super_rec: if e.alive == True: e.move() screen.blit(e.image_2, e.rect) if pygame.sprite.collide_mask(me, e): is_super = True e.alive = False #绘制飞机 if me.alive: if switch_plane: screen.blit(me.image_2, me.rect) else: screen.blit(me.image_1, me.rect) else: screen.blit(me.d_image[my_plane_index], me.rect) my_plane_index = (my_plane_index + 1) % 4 if my_plane_index == 0: pass #绘制敌人(小中大飞机)依靠存活状态检测是否毁灭 for each in all_enemys: each.move() if each.alive: if each not in s_enemys: pygame.draw.line(screen, BLACK, (each.rect.left, each.rect.top - 5),\ (each.rect.right, each.rect.top - 5), 3) hp_res = each.hp / enemy.BEnemy.hp if hp_res: pygame.draw.line(screen, GREEN, (each.rect.left, each.rect.top - 5), \ (each.rect.left + each.rect.width * hp_res, each.rect.top - 5), 3) if each in b_enemys: if switch_plane: screen.blit(each.image_1, each.rect) else: screen.blit(each.image_2, each.rect) else: screen.blit(each.image, each.rect) else: if each not in b_enemys: screen.blit(each.d_image[enemy_index], each.rect) enemy_index = (enemy_index + 1) % 4 if enemy_index == 0: each.kill() else: screen.blit(each.d_image[b_enemy_index], each.rect) b_enemy_index = (b_enemy_index + 1) % 6 if b_enemy_index == 0: each.kill() #绘制分数 grade_text = grade_font.render("grade: %s" % str(all_grade), True, WHITE) screen.blit(grade_text, (10, 5)) #绘制子弹 for each in bullets: each.moveup() if each.alive: if not is_super: screen.blit(each.image, each.rect) else: screen.blit(each.image_super, each.rect) else: each.kill() #绘制炸弹数量 bomb_text = bomb_font.render("X %d" % bomb_num, True, WHITE) text_rect = bomb_text.get_rect() screen.blit(bomb_image, (10, bg_rect.height - 10 - text_rect.height)) screen.blit(bomb_text, (20 + text_rect.width, bg_rect.height - 5 - text_rect.height)) #刷新界面 pygame.display.flip()
#coding=utf-8 import plane import vector v1 = vector.Vector([-0.412, 3.806, 0.728]) p1 = plane.Plane(v1, -3.46) v2 = vector.Vector([1.03, -9.515, -1.82]) p2 = plane.Plane(v2, 8.65) print p1.is_parallel(p2) print p1.is_equal(p2) v1 = vector.Vector([2.611, 5.528, 0.283]) p1 = plane.Plane(v1, 4.6) v2 = vector.Vector([7.715, 8.306, 5.342]) p2 = plane.Plane(v2, 3.76) print p1.is_parallel(p2) print p1.is_equal(p2) v1 = vector.Vector([-7.926, 8.625, -7.212]) p1 = plane.Plane(v1, -7.952) v2 = vector.Vector([-2.642, 2.875, -2.404]) p2 = plane.Plane(v2, -2.443) print p1.is_parallel(p2) print p1.is_equal(p2)
def plane(self, optionalTarget=None): result = optionalTarget or plane.Plane() return result.setFromCoplanarPoints(self.a, self.b, self.c)
def main(): pygame.init() pygame.mixer.init() life_image = 'image/life.png' bg_music = 'music/game_music.ogg' background = "image/background.png" button_music = 'music/button.wav' about_me = 'image/about_me.png' about_me_image = pygame.image.load(about_me) about_me_rect = about_me_image.get_rect() MyLife = pygame.image.load(life_image) Mybackground1 = pygame.image.load(background) life_rect = MyLife.get_rect() bg_size = 480, 700 screen = pygame.display.set_mode(bg_size) pygame.display.set_caption("飞机大战") MyBullet = [] Enemy = [] kill = [] score = 0 score_font = pygame.font.Font("font/font.ttf", 36) num = 5 num1 = 0 num2 = 0 num3 = 0 harm = 1 pygame.key.set_repeat(100, 100) clock = pygame.time.Clock() MyPlane = plane.Plane(bg_size) Enemy_group = pygame.sprite.Group() bg_music = pygame.mixer.Sound(bg_music) button_sound = pygame.mixer.Sound(button_music) bg_music.play(-1) super_Bullet = False running = True again = False My_Protection_cover = plane.Protection_cover(bg_size) paused = False pause_nor_image = pygame.image.load("image/pause_nor.png").convert_alpha() pause_pressed_image = pygame.image.load( "image/pause_pressed.png").convert_alpha() resume_nor_image = pygame.image.load( "image/resume_nor.png").convert_alpha() resume_pressed_image = pygame.image.load( "image/resume_pressed.png").convert_alpha() again_image = pygame.image.load("image/again.png").convert_alpha() gameover_image = pygame.image.load("image/gameover.png").convert_alpha() me_image = pygame.image.load('image/me.png').convert_alpha() me_rect = me_image.get_rect() gameover_rect = gameover_image.get_rect() again_rect = again_image.get_rect() paused_rect = pause_nor_image.get_rect() paused_rect.left, paused_rect.top = bg_size[0] - paused_rect.width - 10, 10 paused_image = pause_nor_image tnt_num = 10 while running: if MyPlane.dead == True: MyPlane = plane.Plane(bg_size) MyPlane.not_dead = not MyPlane.not_dead MyPlane.life_num = oldLife again = True num4 = 0 for event in pygame.event.get(): if event.type == QUIT: bg_music.stop() pygame.quit() sys.exit() if event.type == KEYDOWN and MyPlane.dead == False: if event.key == K_TAB: MyPlane.not_dead = not MyPlane.not_dead if event.key == K_RETURN: if harm < 11: harm += 1 if harm >= 11: harm = 1 if event.key == K_SPACE: if tnt_num > 0: button_sound.play() for each in Enemy: kill.append(each) score += each.score Enemy.clear() Enemy_group = pygame.sprite.Group() tnt_num -= 1 if event.type == MOUSEBUTTONDOWN: if event.button == 1 and paused_rect.collidepoint(event.pos): paused = not paused if paused: bg_music.stop() else: bg_music.play(-1) if event.type == MOUSEMOTION: if paused_rect.collidepoint(event.pos) == True: if paused == True: paused_image = resume_pressed_image if paused == False: paused_image = pause_pressed_image else: if paused == True: paused_image = resume_nor_image if paused == True: paused_image = pause_nor_image screen.blit(Mybackground1, (0, 0)) key = pygame.key.get_pressed() if MyPlane.dead == False and paused == False: if key[K_w] or key[K_UP]: MyPlane.move([0, -1]) if key[K_s] or key[K_DOWN]: MyPlane.move([0, 1]) if key[K_a] or key[K_LEFT]: MyPlane.move([-1, 0]) if key[K_d] or key[K_RIGHT]: MyPlane.move([1, 0]) if key[K_j] or key[K_1]: if num1 == num: temp = bullet.Bullet(MyPlane.rect.centerx, MyPlane.rect.top, harm) music = pygame.mixer.Sound(temp.music) music.play() MyBullet.insert(0, temp) num1 = 0 num1 += 1 for each in Enemy: if each.disappear == True: Enemy.remove(each) elif paused == False: each.move() if each.Enemytype == 'BigEnemy' and each.hit == False: if num3 >= 5: screen.blit(each.default_image[0], each.rect) elif num3 <= 5: screen.blit(each.default_image[1], each.rect) elif each.hit == False: screen.blit(each.default_image[0], each.rect) else: screen.blit(each.hit_image[0], each.rect) for each in MyBullet: if each.disappear == True: MyBullet.remove(each) elif paused == False: each.move() screen.blit(each.image, each.rect) for x in MyBullet: for y in Enemy: if pygame.sprite.collide_rect(x, y): MyBullet.remove(x) y.life -= harm break if MyPlane.not_dead == False: enemies_down = pygame.sprite.spritecollide\ (MyPlane, Enemy_group, False, pygame.sprite.collide_mask) else: enemies_down = pygame.sprite.spritecollide\ (My_Protection_cover, Enemy_group, False, pygame.sprite.collide_mask) if enemies_down: if MyPlane.not_dead == False and MyPlane.dead == False: MyPlane.life_num -= 1 oldLife = MyPlane.life_num kill.append(MyPlane) MyPlane.dead = True tnt_num = 10 for each in enemies_down: Enemy_group.remove(each) score += each.score try: Enemy.remove(each) except: pass each.dead() kill.append(each) if (num2 % 30) == 0 and num2 != 0: x = randint(0, bg_size[0]) temp = enemy.SmallEnemy(bg_size) temp.init_image() temp.init_pos(randint(0, bg_size[0]), 0) Enemy.append(temp) Enemy_group.add(temp) if (num2 % 90) == 0 and num2 != 0: x = randint(0, bg_size[0]) temp = enemy.MidEnemy(bg_size) temp.init_image() temp.init_pos(randint(0, bg_size[0]), 0) Enemy.insert(0, temp) Enemy_group.add(temp) if (num2 % 250) == 0 and num2 != 0: x = randint(0, bg_size[0]) temp = enemy.BigEnemy(bg_size) temp.init_image() temp.init_pos(randint(0, bg_size[0]), 0) Enemy.append(temp) Enemy_group.add(temp) num2 = 0 for k in kill: if len(k.dead_image) <= 0: kill.remove(k) continue else: screen.blit(k.dead_image[0], k.rect) del k.dead_image[0] for each in Enemy: if each.life <= 0: each.dead() Enemy.remove(each) Enemy_group.remove(each) kill.append(each) score += each.score continue if each.life <= each.hitLife / 2 and each.hit == False: each.hit = True if num3 >= 10: num3 = 0 num2 += 1 num3 += 1 if MyPlane.not_dead == True and paused == False: My_Protection_cover.move\ (MyPlane.rect.centerx,MyPlane.rect.centery) screen.blit(\ My_Protection_cover.image,\ My_Protection_cover.rect) if MyPlane.dead == False: if num3 <= 5: screen.blit(MyPlane.default_image[0], MyPlane.rect) elif num3 > 5: screen.blit(MyPlane.default_image[1], MyPlane.rect) score_text = score_font.render("Score : %s" % str(score), True, (255, 0, 0)) screen.blit(score_text, (10, 5)) for i in range(0, MyPlane.life_num): screen.blit(MyLife, (0 + (life_rect.w * i), bg_size[1] - life_rect.h)) if MyPlane.life_num <= 0: game_over_text = score_font.render\ ("Game Over" , True, (0, 0, 0)) game_over_rect = game_over_text.get_rect() screen.blit(Mybackground1, (0, 0)) Enemy.clear() running = False bg_music.stop() is_about_me = False again_rect.left, again_rect.top =\ ((bg_size[0]- again_rect.width) // 2, bg_size[1]//2-gameover_rect.height) gameover_rect.left , gameover_rect.top =\ ((bg_size[0] - gameover_rect.width) // 2, bg_size[1]//2) about_me_rect.left, about_me_rect.top = \ ((bg_size[0] - about_me_rect.width) // 2, bg_size[1]//2+about_me_rect.height) me_rect.left, me_rect.top = (bg_size[0] - me_rect.width) // 2, ( bg_size[1] // 2 - me_rect.height - about_me_rect.height) while True: for event in pygame.event.get(): if event.type == QUIT: bg_music.stop() pygame.quit() sys.exit() if event.type == MOUSEBUTTONDOWN: 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() elif about_me_rect.left < pos[0] < about_me_rect.right and \ about_me_rect.top < pos[1] < about_me_rect.bottom: is_about_me = not is_about_me game_over_rect = game_over_text.get_rect() screen.blit(Mybackground1, (0, 0)) screen.blit\ (game_over_text,((bg_size[0] - game_over_rect.width) // 2, bg_size[1]//2-100)) if is_about_me == True: screen.blit(me_image, me_rect) screen.blit(score_text, (0, 10)) screen.blit(again_image, again_rect) screen.blit(gameover_image, gameover_rect) screen.blit(about_me_image, about_me_rect) pygame.display.flip() clock.tick(60) if again == True: num4 += 1 if num4 == 600: del num4 again = False MyPlane.not_dead = False pos = pygame.mouse.get_pos() if paused_rect.left < pos[0] < paused_rect.right and \ paused_rect.top < pos[1] < paused_rect.bottom: if paused == True: paused_image = resume_pressed_image if paused == False: paused_image = pause_pressed_image else: if paused == True: paused_image = resume_nor_image if paused == False: paused_image = pause_nor_image screen.blit(paused_image, paused_rect) pygame.display.flip() clock.tick(60)
def main(): pygame.init() pygame.display.set_caption('Plane War') screen = pygame.display.set_mode((616, 900)) #背景音乐 pygame.mixer.init() pygame.mixer.music.load('../testsounds/bg_music.ogg') pygame.mixer.music.play(-1) bg_img = pygame.image.load('../images/background.png').convert_alpha() gameover_img = pygame.image.load('../images/gameover.png').convert_alpha() gameagain_img = pygame.image.load('../images/again.png').convert_alpha() level = 1 score = 0 myfont = pygame.font.Font('../font/myfont.ttf', 24) #炸弹 bomb_img = pygame.image.load('../images/bomb.png').convert_alpha() bomb_rect = bomb_img.get_rect() bomb_rect.left, bomb_rect.top = (5, bg_img.get_height() - bomb_rect.height - 5) bom_num = 3 b_supply = bomb_supply.BombSupply(bg_img) p = plane.Plane(bg_img) #子弹精灵组 bulletlist = [] b_group = pygame.sprite.Group() for i in range(5): mybullet = bullet.Bullet(p.rect.midtop) b_group.add(mybullet) bulletlist.append(mybullet) #敌机精灵组 enemy_group = pygame.sprite.Group() small_group = pygame.sprite.Group() for s in range(15): s = enemy_plane.Enemy('../images/enemy1.png', 5, bg_img, 3, 1) add_group(enemy_group, small_group, s) mid_group = pygame.sprite.Group() for m in range(10): m = enemy_plane.Enemy('../images/enemy2.png', 10, bg_img, 2, 10) add_group(enemy_group, mid_group, m) large_group = pygame.sprite.Group() for i in range(5): l = enemy_plane.Enemy('../images/enemy3_n1.png', 10, bg_img, 1, 20) add_group(enemy_group, large_group, l) pause_nor_img = pygame.image.load('../images/pause_nor.png') pause_pressed_img = pygame.image.load('../images/pause_pressed.png') resume_nor_img = pygame.image.load('../images/resume_nor.png') resume_pressed_img = pygame.image.load('../images/resume_pressed.png') pause_img = pause_nor_img pause_rect = pause_img.get_rect() pause_rect.left, pause_rect.top = (bg_img.get_width() - pause_rect.width - 5, 5) pause_flag = False p_index = 0 mid_index = 0 large_index = 0 b_index = 0 clock = pygame.time.Clock() chang_img = True delay = 0 running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == MOUSEBUTTONDOWN: #点击鼠标左键,并在按钮区域 if event.button == 1 and pause_rect.collidepoint(event.pos): pause_flag = not pause_flag elif event.type == MOUSEMOTION: if pause_rect.collidepoint(event.pos): #暂停 if pause_flag: pause_img = resume_pressed_img else: pause_img = pause_pressed_img else: if pause_flag: pause_img = resume_nor_img else: pause_img = pause_nor_img elif event.type == KEYDOWN: if event.key == K_SPACE: if bom_num > 0: for e in enemy_group: if e.alive and e.rect.bottom > 0: e.alive = False if e in small_group: score += 100 elif e in mid_group: score += 300 else: score += 500 bom_num -= 1 pressed_keys = pygame.key.get_pressed() if pressed_keys[K_LEFT]: p.move_left() if pressed_keys[K_RIGHT]: p.move_right() if pressed_keys[K_UP]: p.move_up() if pressed_keys[K_DOWN]: p.move_down() screen.fill((255, 255, 255)) screen.blit(bg_img, bg_img.get_rect()) #描绘暂停 screen.blit(pause_img, pause_rect) #渲染字体,显示分数 mytext = myfont.render('Score:%d' % score, True, (255, 0, 0), (255, 255, 255)) screen.blit(mytext, mytext.get_rect()) #显示等级 mytext = myfont.render('Level:%d' % level, True, (0, 0, 255), (255, 255, 255)) screen.blit(mytext,(bg_img.get_width()-mytext.get_rect().width-5,\ bg_img.get_height()-mytext.get_rect().height-5)) #显示炸弹 if bom_num > 0: screen.blit(bomb_img, bomb_rect) mytext = myfont.render('X %d' % bom_num, True, (255, 0, 0), (255, 255, 255)) screen.blit(mytext, (bomb_rect.right + 2, bomb_rect.top + 20)) if not pause_flag: if level == 1 and score > 2000: level = 2 speed_increase(small_group, 2) speed_increase(mid_group, 1) elif level == 2 and score > 5000: level = 3 speed_increase(small_group, 3) speed_increase(mid_group, 2) #描绘炸弹补给包 if b_supply.alive: b_supply.move() screen.blit(b_supply.image, b_supply.rect) blocksupply = pygame.sprite.collide_rect(b_supply, p) if blocksupply: bom_num += 1 b_supply.alive = False else: b_supply.reset() #描绘子弹 if delay % 15 == 0: bulletlist[b_index].reset(p.rect.midtop) b_index = (b_index + 1) % 5 for i in bulletlist: if i.alive: i.move() screen.blit(i.image, i.rect) #检测子弹与敌机碰撞 blocklist = pygame.sprite.spritecollide( i, enemy_group, False, pygame.sprite.collide_mask) for e in blocklist: if e in small_group: score += 100 e.alive = False else: e.energy -= 1 if e.energy == 0: if e in mid_group: score += 300 else: score += 500 e.alive = False #???? i.alive = False else: i.reset(p.rect.midtop) #描绘敌机 for i in mid_group: if i.alive: i.move() screen.blit(i.image, i.rect) pygame.draw.line(screen,(0,0,0),(i.rect.left,i.rect.top-5),\ (i.rect.right,i.rect.top-5),2) current_energy = i.energy / 10 if current_energy < 0.2: color_paint = (255, 0, 0) else: color_paint = (0, 255, 0) pygame.draw.line(screen,color_paint,(i.rect.left,i.rect.top-5),\ (i.rect.left+i.rect.width*current_energy,i.rect.top-5),2) else: screen.blit(i.destroy_mid_image[mid_index], i.rect) if delay % 3 == 0: mid_index += 1 if mid_index == 4: mid_index = 0 i.reset(10, 5, 10) for i in small_group: if i.alive: i.move() screen.blit(i.image, i.rect) else: i.reset(5, 0, 1) for i in large_group: if i.alive: i.move() screen.blit(i.image, i.rect) pygame.draw.line(screen,(0,0,0),(i.rect.left,i.rect.top-5),\ (i.rect.right,i.rect.top-5)) current_energy = i.energy / 20 if current_energy < 0.2: color_paint = (255, 0, 0) else: color_paint = (0, 255, 0) pygame.draw.line(screen,color_paint,(i.rect.left,i.rect.top-5),\ (i.rect.left+i.rect.width*current_energy,i.rect.top-5),2) else: screen.blit(i.destroy_large_image[large_index], i.rect) if delay % 3 == 0: large_index += 1 if large_index == 6: large_index = 0 i.reset(15, 10, 20) #检测我方飞机与敌方飞机碰撞 blocklist2 = pygame.sprite.spritecollide(p, enemy_group, False, pygame.sprite.collide_mask) for i in blocklist2: i.alive = False p.alive = False #描绘我方飞机 if p.alive: if chang_img: screen.blit(p.image1, p.rect) else: screen.blit(p.image2, p.rect) else: screen.blit(p.destroy_image[p_index], p.rect) if delay % 10 == 0: p_index += 1 if p_index == 4: p_index = 0 screen.blit(gameagain_img,((bg_img.get_width()-gameagain_img.get_width())/2,\ bg_img.get_height()/2)) screen.blit(gameover_img,((bg_img.get_width()-gameover_img.get_width())/2,\ bg_img.get_height()/2+60)) delay += 1 if delay % 5 == 0: chang_img = False else: chang_img = True pygame.display.update() clock.tick(30) pygame.quit()
plane.handle(turb) print(plane) plane.check_angle() time.sleep(1) if __name__ == "__main__": planes = [] processes = [] number_of_planes = 4 for i in range(number_of_planes): planes.append(plane.Plane()) planes[1].take_off() planes[2].take_off() planes[3].take_off() planes[3].take_off() planes[3].land() try: for i in range(number_of_planes): planes.append(plane.Plane()) process = multiprocessing.Process(target=simulate, args=[planes[i]]) process.start() processes.append(process)
import plane pygame.init() bg = pygame.image.load('./images/background.png') windowSize = (480, 700) screen = pygame.display.set_mode(windowSize) screen.blit(bg, (0, 0)) pygame.display.update() clock = pygame.time.Clock() # 创建飞机,并添加到精灵组中,自动重绘 hero = plane.Plane() # 创建精灵图"组",该对象可以调用 update, draw 方法重绘 spriteGroup = pygame.sprite.Group(hero) # 创建用户事件对象变量 EVENT_CREATE_ENEMY = pygame.USEREVENT # 使用计时器,每秒触发一次用户事件 pygame.time.set_timer(EVENT_CREATE_ENEMY, 1000) while True: event = pygame.event.poll() if event.type == pygame.QUIT: pygame.quit() exit() elif event.type == EVENT_CREATE_ENEMY: # 判断,如果是用户事件,就创建敌机 enemy = game_sprite.GameSprite("./images/enemy1.png") # 创建敌机对象 spriteGroup.add(enemy) # 添加到数据中
bg = pygame.image.load('bg11.jpg').convert() bg_rect = bg.get_rect() bg2 = pygame.image.load('bg22.jpg').convert() bg2_rect = bg2.get_rect() bg2_rect.top = -bg2_rect.height - (bg_rect.height - height) bg_rect.top = -(bg_rect.height - height) gameover = pygame.image.load('gover.png').convert_alpha() Plane = plane.Plane(bgsize) pygame.mixer.music.load("吉森信 - Gun's & Roses (Paradise Lunch).ogg") destroyed = [pygame.image.load('1.png').convert_alpha(),\ pygame.image.load('2.png').convert_alpha(),\ pygame.image.load('3.png').convert_alpha(),\ pygame.image.load('4.png').convert_alpha(),\ pygame.image.load('5.png').convert_alpha(),\ pygame.image.load('6.png').convert_alpha()] destroyed_en1 = [pygame.image.load('1的副本.png').convert_alpha(),\ pygame.image.load('2的副本.png').convert_alpha(),\ pygame.image.load('3的副本.png').convert_alpha(),\ pygame.image.load('4的副本.png').convert_alpha(),\ pygame.image.load('5的副本.png').convert_alpha(),\
def main(): run = True # 循环控制参数 start = False # 游戏开始参数 paussed = True # 暂停标志参数 clock = pygame.time.Clock() # 帧率控制 delay = 100 # 延迟设置 score = 0 # 设置得分 grade1 = 50 # 小型敌机分数 grade2 = 300 # 中型敌机分数 grade3 = 600 # 大型敌机分数 level = 1 # 等级水平 life_num = 3 # 生命数 # 字体设置 score_font = pygame.font.Font("font/font.ttf", 35) game_over_font = pygame.font.Font("font/font.ttf", 30) # 设置"游戏准备"图片精灵 game_loadings = list() game_loadings_index = 0 game_loadings_num = 3 game_loadings.append(game_loading1) game_loadings.append(game_loading2) game_loadings.append(game_loading3) # 背景音乐播放 bg_music.play(-1) # 实例化我方飞机 hero = plane.Plane(bg_size) # 实例化敌机组 enemies = pygame.sprite.Group() # 实例化小型敌机 mini_enemise = pygame.sprite.Group() add_enemies('mini', bg_size, mini_enemise, enemies, 16) # 实例化中型敌机 medium_enemise = pygame.sprite.Group() add_enemies('medium', bg_size, medium_enemise, enemies, 8) # 实例化大型敌机 large_enemise = pygame.sprite.Group() add_enemies('large', bg_size, large_enemise, enemies, 4) # 实例化子弹 bullets = [] # 子弹索引下标 bullets_index = 0 # 子弹数目 bullet_num = 4 # 炮弹数目 bomb_num = 3 for i in range(bullet_num): bullets.append(bullet.Bullet(hero.rect.midtop)) # 实例化补给 bomb_supply = supply.Bomb_Supply(bg_size) # 设置一个定时事件 supply_time = USEREVENT pygame.time.set_timer(supply_time, msec) # 游戏循环 while run: # 事件检测 for event in pygame.event.get(): # 右上角关闭按钮检测 if event.type == QUIT: pygame.quit() sys.exit() # 鼠标点击检测 elif event.type == MOUSEBUTTONDOWN: if event.button == 1: # 游戏开始 start = True if event.button == 1 and paused_rect.collidepoint(event.pos): paussed = not paussed if not paussed: pygame.time.set_timer(supply_time, 0) # 暂停音效 pygame.mixer.music.pause() pygame.mixer.pause() else: pygame.time.set_timer(supply_time, msec) # 恢复音效 pygame.mixer.music.unpause() pygame.mixer.unpause() if event.button == 1 and game_restart_rect.collidepoint( event.pos): # 重新开始 main() # 鼠标放置坐标检测 elif event.type == MOUSEMOTION: if paused_rect.collidepoint(event.pos): if paussed: paused_image = game_resume_pressed else: paused_image = game_pause_pressed else: if paussed: paused_image = game_resume_nor else: paused_image = game_pause_nor # 键盘按键检测 elif event.type == KEYDOWN: if event.key == K_SPACE: if bomb_num: bomb_num -= 1 enemy3_down_sound.play() # 按下空格后,销毁屏幕内所有敌机 for each in enemies: if each.rect.bottom > 0: each.survival = False # 定时时间检测 elif event.type == supply_time: bomb_supply.set_position() # 视情况提升等级 if level < get_level(score) + 1: level += 1 game_achievement_sound.play() # 增加一定批次的敌机 add_enemies('mini', bg_size, mini_enemise, enemies, 3) add_enemies('medium', bg_size, medium_enemise, enemies, 2) add_enemies('large', bg_size, large_enemise, enemies, 1) # 提升小型敌机速度 up_speed(mini_enemise, 1) print('等级提升') if not (level % 2) and bullet_num < 6: # 每提升两次敌机数量,就加一发子弹,上限是6 print('子弹数目增加') bullet_num += 1 bullets.append(bullet.Bullet(hero.rect.midtop)) # 游戏开始 if start: # 绘制背景图像 screen.blit(background, (0, 0)) # 绘制分数 score_text = score_font.render("Score : %s" % str(score), True, WHITE) screen.blit(score_text, (10, 5)) # 绘制炸弹 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)) # 绘制暂停按钮 screen.blit(paused_image, paused_rect) if life_num and paussed: # 碰撞检测 enemies_down = pygame.sprite.spritecollide( hero, enemies, False, pygame.sprite.collide_mask) if enemies_down: hero.survival = False for enemy_down in enemies_down: enemy_down.survival = False # 发射子弹 if not (delay % bullet_speed): bullets[bullets_index].set_position(hero.rect.midtop) bullets_index = (bullets_index + 1) % bullet_num # 子弹碰撞检测 for b in bullets: if b.survival: b.move() screen.blit(b.bullet, b.rect) enemy_hit = pygame.sprite.spritecollide( b, enemies, False, pygame.sprite.collide_mask) # 被击中后 if enemy_hit: b.survival = False for e in enemy_hit: if e in medium_enemise or e in large_enemise: e.hp -= 1 e.hit = True if e.hp == 0: e.survival = False else: e.survival = False # 绘制炸弹补给 if bomb_supply.survival: bomb_supply.move() screen.blit(bomb_supply.bomb, bomb_supply.rect) # 炸弹补给碰撞检测 if pygame.sprite.collide_mask(bomb_supply, hero): if bomb_num < 3: bomb_num += 1 # 销毁炸弹补给 bomb_supply.survival = False # 绘制小型敌机图像 for mini_enemy in mini_enemise: # 存活判断 if mini_enemy.survival: # 小型敌机移动 mini_enemy.move() # 绘制图像 screen.blit(mini_enemy.enemy, mini_enemy.rect) else: # 销毁敌机 if not (delay % destroy_speed): if mini_enemy.spirits_index == 0: # 播放敌机销毁声音 enemy1_down_sound.play() # 绘制销毁动画 screen.blit( mini_enemy.death_spirits[ mini_enemy.spirits_index], mini_enemy.rect) mini_enemy.spirits_index = mini_enemy.spirits_index + 1 if mini_enemy.spirits_index == 4: # 增加分数 score += grade1 # 重新设置敌机 mini_enemy.set_position() # 绘制中型敌机图像 for medium_enemy in medium_enemise: # 存活判断 if medium_enemy.survival: # 中型敌机移动 medium_enemy.move() # 被击中判定 if medium_enemy.hit: screen.blit(medium_enemy.enemy_hit, medium_enemy.rect) medium_enemy.hit = False else: # 绘制图像 screen.blit(medium_enemy.enemy, medium_enemy.rect) # 绘制血槽 draw_start = (medium_enemy.rect.left, medium_enemy.rect.top - 5) draw_end = (medium_enemy.rect.right, medium_enemy.rect.top - 5) pygame.draw.line(screen, RED, draw_start, draw_end, 2) # 计算剩余血量 surplus_hp = medium_enemy.hp / enemy.MediumEnemy.hp draw_end = (medium_enemy.rect.left + medium_enemy.rect.width * surplus_hp, medium_enemy.rect.top - 5) pygame.draw.line(screen, GREEN, draw_start, draw_end, 2) else: # 销毁敌机 if not (delay % destroy_speed): if medium_enemy.spirits_index == 0: # 播放敌机销毁声音 enemy2_down_sound.play() # 绘制销毁动画 screen.blit( medium_enemy.death_spirits[ medium_enemy.spirits_index], medium_enemy.rect) medium_enemy.spirits_index = medium_enemy.spirits_index + 1 if medium_enemy.spirits_index == 4: # 增加分数 score += grade2 # 重新设置敌机 medium_enemy.set_position() # 绘制大型敌机图像 for large_enemy in large_enemise: # 存活判断 if large_enemy.survival: # 大型敌机移动 large_enemy.move() # 被击中判定 if large_enemy.hit: screen.blit(large_enemy.enemy_hit, large_enemy.rect) large_enemy.hit = False else: # 绘制敌机图形 screen.blit(large_enemy.enemy, large_enemy.rect) # 绘制血槽 draw_start = (large_enemy.rect.left, large_enemy.rect.top - 5) draw_end = (large_enemy.rect.right, large_enemy.rect.top - 5) pygame.draw.line(screen, RED, draw_start, draw_end, 2) # 计算剩余血量 surplus_hp = large_enemy.hp / enemy.LargeEnemy.hp draw_end = (large_enemy.rect.left + large_enemy.rect.width * surplus_hp, large_enemy.rect.top - 5) pygame.draw.line(screen, GREEN, draw_start, draw_end, 2) if large_enemy.rect.bottom > -50: # 播放敌机飞行声音 enemy3_out_sound.play(-1) else: # 销毁敌机 if not (delay % destroy_speed): if large_enemy.spirits_index == 0: # 播放敌机销毁声音 enemy3_down_sound.play() # 绘制销毁动画 screen.blit( large_enemy.death_spirits[ large_enemy.spirits_index], large_enemy.rect) large_enemy.spirits_index = large_enemy.spirits_index + 1 if large_enemy.spirits_index == 6: # 增加分数 score += grade3 # 关闭音效 enemy3_out_sound.stop() # 重新设置敌机 large_enemy.set_position() # 绘制飞机图像 if hero.survival: # 检测键盘,控制我方飞机移动 hero.move() screen.blit(hero.plane, hero.rect) else: enemy2_down_sound.play() if not (delay % destroy_speed): # 绘制销毁动画 screen.blit(hero.death_spirits[hero.spirits_index], hero.rect) hero.spirits_index = hero.spirits_index + 1 if hero.spirits_index == 3: print("Code Over") life_num -= 1 # 重新设置战机 hero.set_position() # 绘制飞机生命数量 if life_num: for i in range(life_num): life_left = width - 10 - (i + 1) * life_rect.width life_top = height - 10 - life_rect.height screen.blit(life_image, (life_left, life_top)) elif life_num == 0: # 读取历史最高分 highest_score = int() # 判断记录文件是否存在,不存在则创建 if not os.path.exists("score.txt"): #os.mknod("score.txt") highest_score = 0 else: # 文件存在着进行读取 with open("score.txt", "r") as f: highest_score = int(f.read()) f.close() # 若打破记录,则重新写入分数 if score > highest_score: with open("score.txt", "w+") as f: f.write(str(score)) f.close() # 绘制游戏结束背景图 screen.blit(game_over, (0, 0)) # 绘制最终得分 if score < highest_score: game_over_text = game_over_font.render( "%s" % str(score), True, WHITE) else: game_over_text = game_over_font.render( "%s" % str(score), True, WHITE) over_text_width = str(score).__len__() + 50 screen.blit(game_over_text, ((width - over_text_width) / 2, height / 2)) # 绘制历史记录 game_over_text = game_over_font.render( "%s" % "Highest Score: " + str(highest_score), True, WHITE) over_text_width = (str(highest_score).__len__() + 15) * 12 screen.blit(game_over_text, ((width - over_text_width) / 2, height / 2 + 60)) # 绘制重新开始按钮 screen.blit(game_restart, game_restart_rect) # 停止背景音乐 pygame.mixer.music.pause() # 停止音效 pygame.mixer.pause() else: # 绘制游戏停止标志图 screen.blit(game_stop, ((width - game_stop_rect.width) / 2, (height - game_stop_rect.height) / 2)) else: # 绘制背景图像 screen.blit(background, (0, 0)) # 绘制游戏名称 screen.blit(game_start, (0, 0)) # 绘制 loading 图像 game_loading_X = (width - game_loading_rect.width) / 2 game_loading_Y = (height - game_loading_rect.height) / 2 + 50 screen.blit(game_loadings[game_loadings_index], (game_loading_X, game_loading_Y)) # loding 下标变更 if not (delay % 8): game_loadings_index = (game_loadings_index + 1) % game_loadings_num # 绘制界面(双缓冲) pygame.display.flip() # 帧率设置 clock.tick(30) delay -= 1 if delay == 0: delay = 10