class AuraDefender(Defender): """ Aura defender class who provides buffs. """ last_created_time = 0 HP = 150 ATTACK_POWER = 12 DEFEND_POWER = 1 reach_model = [(-1, -1), (-1, 0), (-1, 1), (-1, 2), (0, 0), (0, -1), (0, 1), (0, 2), (1, -1), (1, 0), (1, 1), (1, 2)] SPEED = 0 ATTACK_SPEED = 1.0 filename = path('res/character/gongtoub0.png') def __init__(self, controller, position, direction): self.controller = controller super().__init__(controller, position, direction) self.type = 'AuraDefender' self.attack_power = self.ATTACK_POWER self.attack_time = 1 self.defend_power = self.DEFEND_POWER self.hp = self.HP self.cost = 20 self.cool_down_time = 60 self.init_image(self.filename, 75, 75, 1) AuraDefender.last_created_time = time.time() def update(self): for defender in Defender.defenders: if CharacterModel.reachable(self, defender, self.reach_model): self.activate_special(defender) super().update() @staticmethod def activate_special(character): character.attack_power = 1.2 * character.ATTACK_POWER character.defend_power = 1.2 * character.DEFEND_POWER def die(self): for defender in Defender.defenders: if CharacterModel.reachable(self, defender, self.reach_model): self.deactivate_special(defender) super().die() @staticmethod def deactivate_special(character): character.attack_power = character.ATTACK_POWER character.defend_power = character.DEFEND_POWER
def dataLoad(i): level = path("res/levelData/level" + str(i) + ".txt") fileP = open(level, mode='r') columnAndRow = [] #加载地图的行和列 blockData = [] #加载地图中的方块信息 directionData = [] #加载地图中的方向信息 t = fileP.readline(4) t = t.strip('\n') #print(t) columnAndRow.append(int(t)) #行,6行 t = fileP.readline(4) t = t.strip('\n') #print(t) columnAndRow.append(int(t)) #列,10列 while (1): a = fileP.read(1) if a == "*": break if a == "\n" or a == "\r": continue blockData.append(int(a)) s = "" l = [] while (1): a = fileP.read(1) if a == "*": s = "" break if a == " " or a == ",": if s != "": l.append(int(s)) s = "" continue if a == "\n" or a == "\r": if s != "": l.append(int(s)) if len(l) == 3: directionData.append(l) l = [] s = "" continue s += a fileP.close() levelData = (columnAndRow, blockData, directionData) return levelData
class ScientistAttacker(Attacker): """ Scientist attacker class. """ last_created_time = 0 SPECIAL_INTERVAL = 10 # seconds HP = 180 ATTACK_POWER = 30 DEFEND_POWER = 0 reach_model = [(0, 0), (0, 1), (0, 2)] special_reach_model = [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8), (0, 9)] SPEED = 1.0 ATTACK_SPEED = 1.0 filename = path('res/mapnum/Mapnum1_0.png') def __init__(self, controller, position, direction): self.controller = controller super().__init__(controller, position, direction) self.type = 'ScientistAttacker' self.attack_power = self.ATTACK_POWER self.attack_time = 1 self.defend_power = self.DEFEND_POWER self.hp = self.HP self.speed = self.SPEED / 5 self.cost = 25 self.cool_down_time = 50 self.created_time = time.time() self.init_image(self.filename, 75, 75, 1) BombDefender.last_created_time = time.time() self.last_special_time = 0 def update(self): if time.time() - self.last_special_time >= self.SPECIAL_INTERVAL: count = 0 for defender in Defender.defenders: if self.reachable(self, defender, self.special_reach_model): defender.die() count += 1 self.attack_power *= 1.5 * count + 1 self.speed *= 2 * count + 1 self.attack_power = min(self.attack_power, 10 * self.ATTACK_POWER) self.speed = min(self.speed, 10 * self.SPEED) self.reach_model = [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4)] self.last_special_time = time.time()
class PharmacistDefender(Defender): """ Pharmacist defender class. """ last_created_time = 0 SPECIAL_INTERVAL = 15 HP = 100 ATTACK_POWER = 10 DEFEND_POWER = 2 reach_model = [(-1, -1), (-1, 0), (-1, 1), (0, 0), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)] SPEED = 0 ATTACK_SPEED = 1.0 filename = path('res//character/yaojishib0.png') def __init__(self, controller, position, direction): self.controller = controller super().__init__(controller, position, direction) self.type = 'PharmacistDefender' self.attack_power = self.ATTACK_POWER self.attack_time = 1 self.defend_power = self.DEFEND_POWER self.hp = self.HP self.cost = 25 self.cool_down_time = 80 self.last_special_time = time.time() self.init_image(self.filename, 75, 75, 1) PharmacistDefender.last_created_time = time.time() def update(self): if time.time() - self.last_special_time >= self.SPECIAL_INTERVAL: for defender in Defender.defenders: if CharacterModel.reachable(self, defender, self.reach_model) and defender.active: self.special(defender) super().update() def attacked(self, loss, attacker): super().attacked(loss, attacker) def special(self, character): if character.hp <= 0: character.hp = character.HP self.last_special_time = time.time()
class BombDefender(Defender): """ Bomb defender class. """ last_created_time = 0 SPECIAL_INTERVAL = 1.5 # seconds HP = 200 ATTACK_POWER = 0 DEFEND_POWER = 0 reach_model = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 0), (0, 1), (1, -1), (1, 0), (1, 1)] SPEED = 0 ATTACK_SPEED = 0.5 filename = path('res/mapnum/Mapnum1_0.png') def __init__(self, controller, position, direction): self.controller = controller super().__init__(controller, position, direction) self.type = 'BombDefender' self.attack_power = self.ATTACK_POWER self.attack_time = 0.025 self.defend_power = self.DEFEND_POWER self.hp = self.HP self.cost = 28 self.cool_down_time = 120 self.created_time = time.time() self.init_image(self.filename, 75, 75, 1) BombDefender.last_created_time = time.time() def update(self): if time.time() - self.created_time >= self.SPECIAL_INTERVAL: self.die() super().update() def die(self): for attacker in Attacker.attackers: if CharacterModel.reachable(self, attacker, self.reach_model): self.special(attacker) super().die() def special(self, character): character.attacked(self.hp, self)
class BombAttacker(Attacker): """ Bomb attacker class. """ last_created_time = 0 HP = 210 ATTACK_POWER = 20 SPECIAL_ATTACK_POWER = 380 DEFEND_POWER = 0 SPEED = 1.0 ATTACK_SPEED = 1.0 reach_model = [(0, 0)] special_reach_model = [(-1, 0), (0, -1), (0, 0), (0, 1), (1, 0)] filename = path('res/mapnum/Mapnum1_0.png') def __init__(self, controller, position, direction): self.controller = controller super().__init__(controller, position, direction) self.type = 'BombAttacker' self.attack_power = self.ATTACK_POWER self.attack_time = 0.025 self.defend_power = self.DEFEND_POWER self.hp = self.HP self.speed = 0.2 self.cost = 28 self.cool_down_time = 90 self.init_image(self.filename, 75, 75, 1) BombAttacker.last_created_time = time.time() def special(self, character): character.attacked(self.SPECIAL_ATTACK_POWER, self) def die(self): # Exert special attack to its 4-neighbors for defender in Defender.defenders: if CharacterModel.reachable(self, defender, self.special_reach_model): self.special(defender) super().die()
class PharmacistAttacker(Attacker): """ Pharmacist attacker class. """ last_created_time = 0 SPECIAL_INTERVAL = 8 HP = 150 ATTACK_POWER = 15 DEFEND_POWER = 2 reach_model = [(0, 1), (0, 0), (0, -1), (1, 0),(-1, 0), (1, 1),(1, -1),(-1, 1),(-1,-1)] SPEED = 1.0 ATTACK_SPEED = 1.0 filename = path('res/character/yaojishir0.png') def __init__(self, controller, position, direction): self.controller = controller super().__init__(controller, position, direction) self.type = 'PharmacistAttacker' self.attack_power = self.ATTACK_POWER self.attack_time = 1 self.defend_power = self.DEFEND_POWER self.hp = self.HP self.speed = 0.2 self.cost = 25 self.cool_down_time = 80 self.last_special_time = time.time() self.init_image(self.filename, 75, 75, 1) PharmacistAttacker.last_created_time = time.time() def attacked(self, loss, attacker): if time.time() - self.last_special_time >= self.SPECIAL_INTERVAL: # Kill attacker self.special(attacker) self.last_special_time = time.time() super().attacked(loss, attacker) def special(self, character): character.die()
class ScientistDefender(Defender): """ Scientist defender class. """ last_created_time = 0 SPECIAL_INTERVAL = 60 # seconds HP = 150 ATTACK_POWER = 15 DEFEND_POWER = 0 reach_model = [(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (-1, 0), (-1, 1), (-1, 2), (1, 0), (1, 1), (1, 2)] special_reach_model = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)] SPEED = 0 ATTACK_SPEED = 0.5 filename = path('res/mapnum/Mapnum1_0.png') def __init__(self, controller, position, direction): self.controller = controller super().__init__(controller, position, direction) self.type = 'ScientistDefender' self.attack_power = self.ATTACK_POWER self.attack_time = 2 self.defend_power = self.DEFEND_POWER self.hp = self.HP self.cost = 25 self.cool_down_time = 50 self.created_time = time.time() self.init_image(self.filename, 75, 75, 1) BombDefender.last_created_time = time.time() self.last_special_time = time.time() def update(self): if time.time() - self.last_special_time >= self.SPECIAL_INTERVAL: for defender in Defender.defenders: if self.reachable(self, defender, self.special_reach_model): self.hp += defender.hp * 2 self.attack_power += defender.attack_power * 2 defender.die() self.last_special_time = time.time()
class BullyAttacker(Attacker): """ Bully attacker class. """ last_created_time = 0 HP = 125 ATTACK_POWER = 20 DEFEND_POWER = 0 reach_model = [(0, 0), (0, -1), (0, 1), (1, 0), (-1, 0)] SPEED = 2.0 ATTACK_SPEED = 0.8 filename = path('res/mapnum/Mapnum1_0.png') special_targets = set() def __init__(self, controller, position, direction): self.controller = controller super().__init__(controller, position, direction) self.type = 'ScientistDefender' self.attack_power = self.ATTACK_POWER self.attack_time = 1.25 self.defend_power = self.DEFEND_POWER self.hp = self.HP self.cost = 19 self.cool_down_time = 18 self.speed = 0.4 self.created_time = time.time() self.init_image(self.filename, 75, 75, 1) BombDefender.last_created_time = time.time() self.last_special_time = 0 def update(self): for defender in Defender.defenders: if self.reachable(self, defender, self.reach_model): BullyDefender.special_targets.add((defender, time.time())) for defender, apply_time in BullyDefender.special_targets: if defender in Defender.defenders and time.time() - apply_time <= 3: defender.hp -= 15 / 90 # 90 frames in 3 secs
class IdiotAttacker(Attacker): """ Idiot attacker class. """ last_created_time = 0 HP = 150 ATTACK_POWER = 8 DEFEND_POWER = 0 reach_model = [(0, -2), (0, -1), (0, 0), (0, -1), (0, -2)] SPEED = 0.5 ATTACK_SPEED = 0.8 filename = path('res/mapnum/Mapnum1_0.png') special_targets = set() def __init__(self, controller, position, direction): self.controller = controller super().__init__(controller, position, direction) self.type = 'ScientistDefender' self.attack_power = self.ATTACK_POWER self.attack_time = 1.25 self.defend_power = self.DEFEND_POWER self.hp = self.HP self.speed = 0.1 self.cost = 22 self.cool_down_time = 25 self.created_time = time.time() self.init_image(self.filename, 75, 75, 1) BombDefender.last_created_time = time.time() self.last_special_time = 0 def update(self): for attacker in Attacker.attackers: if attacker is self: continue if self.reachable(self, attacker, self.reach_model): attacker.attacked(self.attack_power, self)
def combatScene(map, selectedRoleList, toolsList, screen): #战斗界面时整体的背景图,大小为750×500 bgImageFile = path('image/combatSceneBg.jpg') bgImage_init = pygame.image.load(bgImageFile).convert() bgImage = pygame.transform.scale(bgImage_init, (750, 500)) screen.blit(bgImage, (0, 0)) #定义一些帮助确定位置的坐标,以地图的位置为参考 mapLeft = 50 mapTop = 20 mapButtom = 420 mapRight = 700 setMapUI(map, mapLeft, mapTop, 50) mapAreaDraw(map, screen) roleInfoAreaDraw(0, mapTop, mapLeft, 200) costAreaDraw(0, mapButtom, mapLeft, 500) cardAreaDraw(mapLeft, mapButtom, mapRight, 500, selectedRoleList) toolAreaDraw(mapRight, mapTop, 750, mapButtom, toolsList)
def settings(screen, clock, isBgmOn): # isBgmOn是一个bool量用来告诉函数是否播放背景音乐 # isFullscreen则以bool量形式告诉函数当前是否是全屏的 # 需要在这里设置一下背景音乐 size = (width, height) = (1280, 720) bgmFlag = isBgmOn breakflag = 0 background = pygame.image.load(path("res/bg/bg_main.png")).convert() #背景图 title = pygame.image.load(path("res/pic/settingTitle.png")).convert_alpha() #标题 titlePos = (340, 20) backButton = pygame.image.load(path("res/button/back.png")).convert_alpha() backPos = (0, 0) homeButton = pygame.image.load(path("res/button/home.png")).convert_alpha() homePos = (150, 0) fullscreenButton = pygame.image.load(path("res/button/fullscreen.png")).convert_alpha() # 全屏 fullscreenPos = (420, 250) bgmButton = pygame.image.load(path("res/button/bgm.png")).convert_alpha() # 背景音乐 bgmPos = (420, 350) onButton = pygame.image.load(path("res/button/on.png")).convert_alpha() offButton = pygame.image.load(path("res/button/off.png")).convert_alpha() fullscreenOnPos0 = (660, 250) fullscreenOnPos1 = (660, 245) fullscreenOffPos0 = (727, 250) fullscreenOffPos1 = (727, 245) bgmOnPos0 = (660, 350) bgmOnPos1 = (660, 345) bgmOffPos0 = (727, 350) bgmOffPos1 = (727, 345) fullscreenOnPos = fullscreenOnPos0 fullscreenOffPos = fullscreenOffPos0 bgmOnPos = bgmOnPos0 bgmOffPos = bgmOffPos0 while True: for event in pygame.event.get(): x, y = pygame.mouse.get_pos() # 浮动效果 if x > fullscreenOnPos0[0] and x < fullscreenOnPos0[0] + onButton.get_width() \ and y > fullscreenOnPos0[1] and y < fullscreenOnPos0[1] + onButton.get_height(): fullscreenOnPos = fullscreenOnPos1 else: fullscreenOnPos = fullscreenOnPos0 if x > fullscreenOffPos0[0] and x < fullscreenOffPos0[0] + offButton.get_width() \ and y > fullscreenOffPos0[1] and y < fullscreenOffPos0[1] + offButton.get_height(): fullscreenOffPos = fullscreenOffPos1 else: fullscreenOffPos = fullscreenOffPos0 if x > bgmOnPos0[0] and x < bgmOnPos0[0] + onButton.get_width() \ and y > bgmOnPos0[1] and y < bgmOnPos0[1] + onButton.get_height(): bgmOnPos = bgmOnPos1 else: bgmOnPos = bgmOnPos0 if x > bgmOffPos0[0] and x < bgmOffPos0[0] + offButton.get_width() \ and y > bgmOffPos0[1] and y < bgmOffPos0[1] + offButton.get_height(): bgmOffPos = bgmOffPos1 else: bgmOffPos = bgmOffPos0 if event.type == pygame.QUIT: sys.exit() breakflag = 1 if event.type == MOUSEBUTTONDOWN: if x > backPos[0] and x < backPos[0] + backButton.get_width() \ and y > backPos[1] and y < backPos[1] + backButton.get_height(): breakflag = 1 # here to come back if x > homePos[0] and x < homePos[0] + homeButton.get_width() \ and y > homePos[1] and y < homePos[1] + homeButton.get_height(): breakflag = 1 # here to come back home # touch logic if x > fullscreenOnPos0[0] and x < fullscreenOnPos0[0] + onButton.get_width() \ and y > fullscreenOnPos0[1] and y < fullscreenOnPos0[1] + onButton.get_height(): # here to set fullscreen on screen = pygame.display.set_mode(size, FULLSCREEN) if x > fullscreenOffPos0[0] and x < fullscreenOffPos0[0] + offButton.get_width() \ and y > fullscreenOffPos0[1] and y < fullscreenOffPos0[1] + offButton.get_height(): # here to set fullscreen off screen = pygame.display.set_mode(size, 0) if x > bgmOnPos0[0] and x < bgmOnPos0[0] + onButton.get_width() \ and y > bgmOnPos0[1] and y < bgmOnPos0[1] + onButton.get_height(): # here to turn on bgm # 这里要加上对应的逻辑 if bgmFlag: bgmFlag = False # closeBgm() if x > bgmOffPos0[0] and x < bgmOffPos0[0] + offButton.get_width() \ and y > bgmOffPos0[1] and y < bgmOffPos0[1] + offButton.get_height(): # here to turn off bgm #需要加上对应逻辑 if not bgmFlag: bgmFlag = True # closeBgm() screen.blit(background, (0, 0)) screen.blit(title, titlePos) screen.blit(backButton, backPos) screen.blit(homeButton, homePos) screen.blit(fullscreenButton, fullscreenPos) screen.blit(bgmButton, bgmPos) screen.blit(onButton, fullscreenOnPos) screen.blit(offButton, fullscreenOffPos) screen.blit(onButton, bgmOnPos) screen.blit(offButton, bgmOffPos) # 更新画面 pygame.display.update() # 帧率 clock.tick(40) if breakflag == 1: return (screen, bgmFlag)
def selectCharacters(screen, clock, modeID, mapID): background = (255, 255, 255) breakflag = 0 infoflag = 0 # playBgm(1) # 编队 CharID = [] #存储选中的角色编号,传入到战斗界面 totalNum = 9 #可选中角色总数 chooseNum = 0 #选中的角色数量 characterFlamePos = [] #人物框的位置 characterPic0 = [] #未上锁的人物图片 characterPic = [] #当前人物栏的人物状态图 loadpathNotLocked = [] #未上锁人物图路径 loadpathLocked = [] #上锁人物图路径 charInfoList = [] # 人物信息 charactersInTeam = [1, 1, 1, 1, 1, 1, 1, 1, 1] #人物状态,是否编入队伍,是为0,否为1 modeIntroAddress = path("res/pic/modeintro" + str(modeID) + ".png") # 图片及位置 if modeID == 1 or modeID == 3: background = pygame.image.load( path("res/bg/bg_character_att.png")).convert() stringc = "r" else: background = pygame.image.load( path("res/bg/bg_character_def.png")).convert() stringc = "b" backButton = pygame.image.load(path("res/button/back.png")).convert_alpha() backPos = (0, 0) homeButton = pygame.image.load(path("res/button/home.png")).convert_alpha() homePos = (150, 0) startButton = pygame.image.load( path("res/button/sure.png")).convert_alpha() startPos = (1080, 653) characterTitle = pygame.image.load( path("res/pic/chartitle.png")).convert_alpha() characterTitlePos = (340, 0) modeIntro = pygame.image.load(modeIntroAddress).convert_alpha() modeIntroPos = (980, 0) # 人物框 characterFlame = pygame.image.load( path("res/character/charflame.png")).convert_alpha() # 编队框 teamFlame = pygame.image.load( path("res/character/teamflame.png")).convert_alpha() teamFlamePos = (255, 520) characterInfoPos = (0, 100) # 人物框加载路径 if modeID == 2: side = 'b' # single defend elif modeID == 1: side = 'r' # single attack loadpathNotLocked.append(path("res/character/pingmin{}.png".format(side))) loadpathNotLocked.append(path("res/character/gongtou{}.png".format(side))) loadpathNotLocked.append(path("res/character/gansidui{}.png".format(side))) loadpathNotLocked.append(path("res/character/pangdun{}.png".format(side))) loadpathNotLocked.append(path("res/character/yaojishi{}.png".format(side))) loadpathNotLocked.append(path("res/character/bomb{}.png".format(side))) loadpathNotLocked.append(path( "res/character/scientist{}.png".format(side))) loadpathNotLocked.append(path("res/character/bully{}.png".format(side))) loadpathNotLocked.append(path("res/character/fully{}.png".format(side))) loadpathLocked.append(path("res/character/pingmin{}s.png".format(side))) loadpathLocked.append(path("res/character/gongtou{}s.png".format(side))) loadpathLocked.append(path("res/character/gansidui{}s.png".format(side))) loadpathLocked.append(path("res/character/pangdun{}s.png".format(side))) loadpathLocked.append(path("res/character/yaojishi{}s.png".format(side))) loadpathLocked.append(path("res/character/bomb{}s.png".format(side))) loadpathLocked.append(path("res/character/scientist{}s.png".format(side))) loadpathLocked.append(path("res/character/bully{}s.png".format(side))) loadpathLocked.append(path("res/character/fully{}s.png".format(side))) charInfoList.append( pygame.image.load(path( "res/charinfo/pingmin{}.png".format(side))).convert_alpha()) charInfoList.append( pygame.image.load(path( "res/charinfo/gongtou{}.png".format(side))).convert_alpha()) charInfoList.append( pygame.image.load(path( "res/charinfo/gansidui{}.png".format(side))).convert_alpha()) charInfoList.append( pygame.image.load(path( "res/charinfo/pangdun{}.png".format(side))).convert_alpha()) charInfoList.append( pygame.image.load(path( "res/charinfo/yaojishi{}.png".format(side))).convert_alpha()) charInfoList.append( pygame.image.load(path( "res/charinfo/bomb{}.png".format(side))).convert_alpha()) charInfoList.append( pygame.image.load(path( "res/charinfo/scientist{}.png".format(side))).convert_alpha()) charInfoList.append( pygame.image.load(path( "res/charinfo/bully{}.png".format(side))).convert_alpha()) charInfoList.append( pygame.image.load(path( "res/charinfo/fully{}.png".format(side))).convert_alpha()) for i in range(0, totalNum): characterPic0.append( pygame.image.load(loadpathNotLocked[i]).convert_alpha()) characterPic.append( pygame.image.load(loadpathNotLocked[i]).convert_alpha()) characterFlamePos.append((255 + i * 100, 250)) while True: x, y = pygame.mouse.get_pos() # 根据鼠标悬停显示对应的角色信息 # 不悬停则不显示 infoflag = 0 for i in range(0, totalNum): if x > characterFlamePos[i][0] and x < characterFlamePos[i][0] + characterFlame.get_width() \ and y > characterFlamePos[i][1] and y < characterFlamePos[i][1] + characterFlame.get_height(): Charinfo = charInfoList[i] infoflag = 1 for i in range(0, chooseNum): if x > 255 + 100 * i and x < 255 + 100 * i + characterFlame.get_width() \ and y > 520 and y < 520 + characterFlame.get_height(): Charinfo = charInfoList[CharID[i]] infoflag = 1 for event in pygame.event.get(): x, y = pygame.mouse.get_pos() if event.type == pygame.QUIT: sys.exit() breakflag = 1 if event.type == MOUSEBUTTONDOWN: if x > backPos[0] and x < backPos[0] + backButton.get_width() \ and y > backPos[1] and y < backPos[1] + backButton.get_height(): from src.selectMap import selectMap selectMap(screen, clock, modeID) breakflag = 1 # here to come back if x > homePos[0] and x < homePos[0] + homeButton.get_width() \ and y > homePos[1] and y < homePos[1] + homeButton.get_height(): from src.initialMenu import initialMenu initialMenu(screen, clock) breakflag = 1 # here to come back home if x > startPos[0] and x < startPos[0] + startButton.get_width() \ and y > startPos[1] and y < startPos[1] + startButton.get_height(): from src.fighting import startFight startFight(screen, clock, modeID, mapID, CharID) breakflag = 1 # here to start the game for i in range(0, totalNum): if x > characterFlamePos[i][0] and x < characterFlamePos[i][0] + characterFlame.get_width() \ and y > characterFlamePos[i][1] and y < characterFlamePos[i][1] + characterFlame.get_height(): charactersInTeam[i] = -charactersInTeam[i] # Charinfo = charInfoList[i] # infoflag = 1 if charactersInTeam[i] == 1: characterPic[i] = pygame.image.load( loadpathNotLocked[i]).convert_alpha() CharID.remove(i) chooseNum = chooseNum - 1 else: if chooseNum <= 7: characterPic[i] = pygame.image.load( loadpathLocked[i]).convert_alpha() CharID.append(i) chooseNum = chooseNum + 1 else: charactersInTeam[i] = 1 for i in range(0, chooseNum): if x > 255 + 100 * i and x < 255 + 100 * i + characterFlame.get_width() \ and y > 520 and y < 520 + characterFlame.get_height(): charactersInTeam[ CharID[i]] = -charactersInTeam[CharID[i]] # Charinfo = pygame.image.load(path("res/charinfo/Charinfo.png")).convert_alpha() if charactersInTeam[CharID[i]] == 1: characterPic[CharID[i]] = pygame.image.load( loadpathNotLocked[CharID[i]]).convert_alpha() del CharID[i] chooseNum = chooseNum - 1 # 填充背景和内容 screen.blit(background, (0, 0)) screen.blit(backButton, backPos) screen.blit(homeButton, homePos) if chooseNum > 0: screen.blit(startButton, startPos) screen.blit(characterTitle, characterTitlePos) screen.blit(modeIntro, modeIntroPos) screen.blit(teamFlame, teamFlamePos) if infoflag == 1: screen.blit(Charinfo, characterInfoPos) for i in range(0, totalNum): screen.blit(characterFlame, characterFlamePos[i]) screen.blit(characterPic[i], characterFlamePos[i]) for i in range(0, chooseNum): screen.blit(characterPic0[CharID[i]], (255 + 100 * i, 520)) # 更新画面 pygame.display.update() # 帧率 clock.tick(40) if breakflag == 1: break
def endFight(screen, clock, modeID, flag_mapinfo, isWin, attackers, defenders, mapload, defendersID, attackersID, attackerPicOld, attackerDetectPicOld, attackerAttackPicOld): resultPad = pygame.image.load(path("res/battle/fightResultPad.png")).convert_alpha() if isWin: title = pygame.image.load(path("res/battle/victory.png")).convert_alpha() # winBgm() else: title = pygame.image.load(path("res/battle/lose.png")).convert_alpha() # loseBgm() tryAgainButton = pygame.image.load(path("res/battle/tryAgain.png")).convert_alpha() returnHomeButton = pygame.image.load(path("res/battle/backToMenu.png")).convert_alpha() padPos = (240, 60) titlePos = (440, 80) tryAgainButtonPos0 = (540, 430) tryAgainButtonPos1 = (540, 425) returnHomeButtonPos0 = (540, 510) returnHomeButtonPos1 = (540, 505) tryAgainButtonPos = tryAgainButtonPos0 returnHomeButtonPos = returnHomeButtonPos0 breakflag = 0 AmbulanceEquipment.count = 1 ListEquipment.count = 1 CanonEquipment.count = 1 IndifferentEquipment.count = 1 DopingEquipment.count = 1 SignalEquipment.count = 1 while True: for event in pygame.event.get(): x, y = pygame.mouse.get_pos() if x > tryAgainButtonPos0[0] and x < tryAgainButtonPos0[0] + tryAgainButton.get_width() \ and y > tryAgainButtonPos0[1] and y < tryAgainButtonPos0[1] + tryAgainButton.get_height(): tryAgainButtonPos = tryAgainButtonPos1 else: tryAgainButtonPos = tryAgainButtonPos0 if x > returnHomeButtonPos0[0] and x < returnHomeButtonPos0[0] + returnHomeButton.get_width() \ and y > returnHomeButtonPos0[1] and y < returnHomeButtonPos0[1] + returnHomeButton.get_height(): returnHomeButtonPos = returnHomeButtonPos1 else: returnHomeButtonPos = returnHomeButtonPos0 if event.type == pygame.QUIT: sys.exit() breakflag = 1 if event.type == MOUSEBUTTONDOWN: if x > tryAgainButtonPos0[0] and x < tryAgainButtonPos0[0] + tryAgainButton.get_width() \ and y > tryAgainButtonPos0[1] and y < tryAgainButtonPos0[1] + tryAgainButton.get_height(): from src.selectCharacters import selectCharacters for defender in defenders: k = defenders.index(defender) mapload.maps[mapload.positionToBlock([defender.position[0], defender.position[1]])[1]][mapload.positionToBlock([defender.position[0], defender.position[1]])[0]].isPlantOn = False defenders.remove(defender) defender.die() del defendersID[k] for attacker in attackers: k = attackers.index(attacker) attackers.remove(attacker) attacker.die() del attackerPicOld[k] del attackerDetectPicOld[k] del attackerAttackPicOld[k] del attackersID[k] for defender in Defender.defenders: defender.die() for attacker in Attacker.attackers: attacker.die() selectCharacters(screen, clock, modeID, flag_mapinfo) breakflag = 1 # here to start the game function if x > returnHomeButtonPos0[0] and x < returnHomeButtonPos0[0] + returnHomeButton.get_width() \ and y > returnHomeButtonPos0[1] and y < returnHomeButtonPos0[1] + returnHomeButton.get_height(): from src.initialMenu import initialMenu for defender in defenders: k = defenders.index(defender) mapload.maps[mapload.positionToBlock([defender.position[0], defender.position[1]])[1]][mapload.positionToBlock([defender.position[0], defender.position[1]])[0]].isPlantOn = False defenders.remove(defender) defender.die() del defendersID[k] for attacker in attackers: k = attackers.index(attacker) attackers.remove(attacker) attacker.die() del attackerPicOld[k] del attackerDetectPicOld[k] del attackerAttackPicOld[k] del attackersID[k] for defender in Defender.defenders: defender.die() for attacker in Attacker.attackers: attacker.die() initialMenu(screen, clock) # here to get back to home # 填充背景和内容 screen.blit(resultPad, padPos) screen.blit(title, titlePos) screen.blit(tryAgainButton, tryAgainButtonPos) screen.blit(returnHomeButton, returnHomeButtonPos) # 更新画面 pygame.display.update() # 帧率 clock.tick(40) if breakflag == 1: break
def cardAreaDraw(x1, y1, x2, y2, selectedRolesList): cardBgFile = path('image/cardBg.jpg') cardBg_init = pygame.image.load(cardBgFile).convert() cardBg = pygame.transform.scale(cardBg_init, (x2 - x1, y2 - y1)) screen.blit(cardBg, (x1, y1))
#mapDisplay(map_test,screen) #角色准备 attackers = [] deffenders = [] for i in range(3): attackers.append( AuraAttacker(controller, [(9 + 0.5) * map_test.blockSize + map_test.xBegin, (1 + 0.5) * map_test.blockSize + map_test.yBegin], 0)) deffenders.append( CivilianDefender(controller, [(i + 1 + 0.5) * map_test.blockSize + map_test.xBegin, (1 + 0.5) * map_test.blockSize + map_test.yBegin], 0)) attackerFile = path("image/CvilianAttacker.jpg") deffenderFile = path("image/CivilianDeffender.jpg") attackerImage = pygame.image.load(attackerFile).convert() deffenderImage = pygame.image.load(deffenderFile).convert() attackerImage = pygame.transform.scale(attackerImage, (50, 50)) deffenderImage = pygame.transform.scale(deffenderImage, (50, 50)) #计时准备 COUNT = pygame.USEREVENT + 1 pygame.time.set_timer(COUNT, 33) #每0.001秒发一次 counts = 0 while True: for event in pygame.event.get(): if event.type == QUIT: # 接收到退出事件后退出程序
import sys app = QApplication(sys.argv) from src import tracking_data, project, debug debug.restore_io() files = QFileDialog.getOpenFileNames(None, "Select files to merge", "", "CSV files (*.csv);;All files (*.*)") if len(files) < 2: print "You need to select at least 2 files" sys.exit(2) first_file = path(files[0]) data_dir = first_file.dirname() data = [tracking_data.TrackingData(None, False, path(f)) for f in files] whole = data[0] def nb_points(d): return max([max(d.data[img].keys()) for img in d.data if d.data[img]]) + 1 print "Nb of point in first image: %d" % nb_points(whole) print "Nb of cells in first image: %d" % len(whole.cells) for d in data[1:]:
QCoreApplication.setOrganizationDomain("barbierdereuille.net") #QSettings.setDefaultFormat(QSettings.IniFormat) import sys app = QApplication(sys.argv) from src import tracking_data, project, debug debug.restore_io() files = QFileDialog.getOpenFileNames(None, "Select files to merge", "", "CSV files (*.csv);;All files (*.*)") if len(files) < 2: print "You need to select at least 2 files" sys.exit(2) first_file = path(files[0]) data_dir = first_file.dirname() data = [ tracking_data.TrackingData(None, False, path(f)) for f in files ] whole = data[0] def nb_points(d): return max([max(d.data[img].keys()) for img in d.data if d.data[img]])+1 print "Nb of point in first image: %d" % nb_points(whole) print "Nb of cells in first image: %d" % len(whole.cells) for d in data[1:]: print "Nb of point in next image: %d" % nb_points(d) print "Nb of cells in next image: %d" % len(d.cells)
def initialMenu(screen, clock): background = (255, 255, 255) breakflag = 0 # playBgm(0) # 图片及位置 background = pygame.image.load(path("res/bg/bg_main.png")).convert() #背景图 title = pygame.image.load(path("res/pic/title.png")).convert_alpha() #标题 titlePos = (340, 100) startButton = pygame.image.load( path("res/button/start.png")).convert_alpha() #开始游戏 startPos0 = (540, 345) startPos1 = (540, 340) handbookButton = pygame.image.load( path("res/button/handbook.png")).convert_alpha() #图鉴 handbookPos0 = (400, 445) handbookPos1 = (400, 440) helpButton = pygame.image.load( path("res/button/help.png")).convert_alpha() #帮助文档 helpPos0 = (400, 545) helpPos1 = (400, 540) settingButton = pygame.image.load( path("res/button/setting.png")).convert_alpha() #设置 settingPos0 = (680, 445) settingPos1 = (680, 440) quitButton = pygame.image.load( path("res/button/quit.png")).convert_alpha() #退出游戏 quitPos0 = (680, 545) quitPos1 = (680, 540) startPos = startPos0 handbookPos = handbookPos0 helpPos = helpPos0 settingPos = settingPos0 quitPos = quitPos0 while True: for event in pygame.event.get(): x, y = pygame.mouse.get_pos() # 按键位置移动 if x > startPos0[0] and x < startPos0[0] + startButton.get_width() \ and y > startPos0[1] and y < startPos0[1] + startButton.get_height(): startPos = startPos1 else: startPos = startPos0 if x > handbookPos0[0] and x < handbookPos0[0] + handbookButton.get_width() \ and y > handbookPos0[1] and y < handbookPos0[1] + handbookButton.get_height(): handbookPos = handbookPos1 else: handbookPos = handbookPos0 if x > helpPos0[0] and x < helpPos0[0] + helpButton.get_width() \ and y > helpPos0[1] and y < helpPos0[1] + helpButton.get_height(): helpPos = helpPos1 else: helpPos = helpPos0 if x > settingPos0[0] and x < settingPos0[0] + settingButton.get_width() \ and y > settingPos0[1] and y < settingPos0[1] + settingButton.get_height(): settingPos = settingPos1 else: settingPos = settingPos0 if x > quitPos0[0] and x < quitPos0[0] + quitButton.get_width() \ and y > quitPos0[1] and y < quitPos0[1] + quitButton.get_height(): quitPos = quitPos1 else: quitPos = quitPos0 # 退出游戏 if event.type == pygame.QUIT: sys.exit() breakflag = 1 if event.type == MOUSEBUTTONDOWN: if x > startPos0[0] and x < startPos0[0] + startButton.get_width() \ and y > startPos0[1] and y < startPos0[1] + startButton.get_height(): selectMode(screen, clock) breakflag = 1 # here to start the game function if x > handbookPos0[0] and x < handbookPos0[0] + handbookButton.get_width() \ and y > handbookPos0[1] and y < handbookPos0[1] + handbookButton.get_height(): from src.handbook import handbook handbook(screen, clock) # here to the handbook function if x > helpPos0[0] and x < helpPos0[0] + helpButton.get_width() \ and y > helpPos0[1] and y < helpPos0[1] + helpButton.get_height(): from src.help import help help(screen, clock) # here to start the help function if x > settingPos0[0] and x < settingPos0[0] + settingButton.get_width() \ and y > settingPos0[1] and y < settingPos0[1] + settingButton.get_height(): from src.settings import settings screen, isBgmOn = settings(screen, clock, False) settings(screen, clock, True) # here to the setting function elif x > quitPos0[0] and x < quitPos0[0] + quitButton.get_width() \ and y > quitPos0[1] and y < quitPos0[1] + quitButton.get_height(): # print('game ended!') sys.exit() # 填充背景和内容 screen.blit(background, (0, 0)) screen.blit(title, titlePos) screen.blit(startButton, startPos) screen.blit(handbookButton, handbookPos) screen.blit(helpButton, helpPos) screen.blit(settingButton, settingPos) screen.blit(quitButton, quitPos) # 说明文字 # screen.blit(font.render("用上下左右键来控制", True, (166, 100, 30)), (300, 50)) # 更新画面 pygame.display.update() # 帧率 clock.tick(40) if breakflag == 1: break
def bgmPath(bgm): return path("res/bgm/"+ bgm +"bgm.mp3")
def voyager1_original(ephem): earth = ephem.get_body('EARTH') jupiter = ephem.get_body('JUPITER') saturn = ephem.get_body('SATURN') sun = ephem.get_body('SUN') def convert(dateObj): return sp.str2et(dateObj.strftime("%Y %b %d %H:%M:%S").lower()) voyst = lambda t: sp.spkezr('VOYAGER 1', convert(t), 'J2000', 'LT+S', 'SOLAR SYSTEM BARYCENTER')[0] #earth to jupiter D = 10 tfE = datetime(1977, 9, 6, 14, 54) t0J = datetime(1979, 1, 16, 13, 54) tfJ = datetime(1979, 4, 22, 11, 7) t0S = datetime(1980, 10, 3, 1, 32) tfS = datetime(1980, 12, 24, 4, 35) timesE2J = [] trajE2J = [] for i in range(D): tE2J = (t0J - tfE) * i / D + tfE state = voyst(tE2J) timesE2J.append(tE2J) trajE2J.append(trajectory(sun, tE2J, state, tE2J + (t0J - tfE) / D)) #swingby at jupiter trajByJ = trajectory(jupiter, t0J, voyst(t0J) - jupiter.state(t0J), tfJ) #jupiter to saturn timesJ2S = [] trajJ2S = [] for i in range(D): tJ2S = (t0S - tfJ) * i / D + tfJ state = voyst(tJ2S) timesJ2S.append(tJ2S) trajJ2S.append(trajectory(sun, tJ2S, state, tJ2S + (t0S - tfJ) / D)) #swingby at saturn trajByS = trajectory(saturn, t0S, voyst(t0S) - saturn.state(t0S), tfS) #after saturn after = timedelta(days=1500) trajAftS = trajectory(sun, tfS, voyst(tfS), tfS + after) entranceTimes = [] entranceTimes.extend(timesE2J) entranceTimes.append(t0J) entranceTimes.extend(timesJ2S) entranceTimes.append(t0S) entranceTimes.append(tfS) trajs = [] trajs.extend(trajE2J) trajs.append(trajByJ) trajs.extend(trajJ2S) trajs.append(trajByS) trajs.append(trajAftS) voyager = path(launchTime=tfE, deltaV='Original', duration=tfS - tfE + after, entranceTimes=entranceTimes, trajectories=trajs) return voyager
import sys sys.path.insert(0, ".") from src import path map = [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 0, 0, 1, 1, 1, 1], [1, 1, 1, 1, 0, 0, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], ] p = path.path((10,10)) p.set_map(map) for t in xrange(1000): q=p.get_path((0,0),0,(9,9)) for y in range(len(map)): for x in range(len(map[0])): if not map[x][y]: print "#", elif (x,y) in q: print "X", else: print " ", print
def voyager1_recreated(ephem): earth = ephem.get_body('EARTH') jupiter = ephem.get_body('JUPITER') saturn = ephem.get_body('SATURN') sun = ephem.get_body('SUN') def convert(dateObj): return sp.str2et(dateObj.strftime("%Y %b %d %H:%M:%S").lower()) voyst = lambda t: sp.spkezr('VOYAGER 1', convert(t), 'J2000', 'LT+S', 'SOLAR SYSTEM BARYCENTER')[0] #earth to jupiter D = 10 tfE = datetime(1977, 9, 6, 14, 54) t0J = datetime(1979, 1, 16, 13, 54) tfJ = datetime(1979, 4, 22, 11, 7) t0S = datetime(1980, 10, 3, 1, 32) tfS = datetime(1980, 12, 24, 4, 35) timesE2J = [] trajE2J = [] for i in range(D): tE2J = (t0J - tfE) * i / D + tfE state = voyst(tE2J) timesE2J.append(tE2J) trajE2J.append(trajectory(sun, tE2J, state, tE2J + (t0J - tfE) / D)) #swingby at jupiter st0J = voyst(t0J) - jupiter.state(t0J) stfJ = voyst(tfJ) - jupiter.state(tfJ) GMJ = jupiter.const('GM', 1)[0] def dVJ(th1, th2): enpt = entrance(Rsoi['JUPITER'], st0J[3:], th1, th2) exst = swingby(Rsoi['JUPITER'], np.concatenate((enpt, st0J[3:])), GMJ) return np.linalg.norm(stfJ[3:] - exst[3:]) th1J, th2J = decaying_descent(dVJ, [[-np.pi, np.pi], [-np.pi, np.pi]], [0.2, 0.2], [np.pi / 20, 0], None, iters=5, decay_factor=5) enptJ = entrance(Rsoi['JUPITER'], st0J[3:], th1J, th2J) sIntoJ = np.concatenate((enptJ, st0J[3:])) trajByJ = trajectory(jupiter, t0J, sIntoJ, tfJ) #jupiter to saturn timesJ2S = [] trajJ2S = [] for i in range(D): tJ2S = (t0S - tfJ) * i / D + tfJ state = voyst(tJ2S) timesJ2S.append(tJ2S) trajJ2S.append(trajectory(sun, tJ2S, state, tJ2S + (t0S - tfJ) / D)) #swingby at saturn st0S = voyst(t0S) - saturn.state(t0S) stfS = voyst(tfS) - saturn.state(tfS) GMS = saturn.const('GM', 1)[0] def dVS(th1, th2): enpt = entrance(Rsoi['SATURN'], st0S[3:], th1, th2) exst = swingby(Rsoi['SATURN'], np.concatenate((enpt, st0S[3:])), GMS) return np.linalg.norm(stfS[3:] - exst[3:]) th1S, th2S = decaying_descent(dVS, [[-np.pi, np.pi], [-np.pi, np.pi]], [0.2, 0.2], [np.pi / 20, 0], None, iters=5, decay_factor=5) enptS = entrance(Rsoi['SATURN'], st0S[3:], th1S, th2S) sIntoS = np.concatenate((enptS, st0S[3:])) trajByS = trajectory(saturn, t0S, sIntoS, tfS) #after saturn after = timedelta(days=1500) trajAftS = trajectory(sun, tfS, voyst(tfS), tfS + after) entranceTimes = [] entranceTimes.extend(timesE2J) entranceTimes.append(t0J) entranceTimes.extend(timesJ2S) entranceTimes.append(t0S) entranceTimes.append(tfS) trajs = [] trajs.extend(trajE2J) trajs.append(trajByJ) trajs.extend(trajJ2S) trajs.append(trajByS) trajs.append(trajAftS) voyager = path(launchTime=tfE, deltaV='Recreated', duration=tfS - tfE + after, entranceTimes=entranceTimes, trajectories=trajs) return voyager
def handbook(screen, clock): breakflag = 0 showSurvivorOrZombie = 0 # 0 for survivor and 1 for zombie charID = 0 # from 0 to totalNum-1 totalNum = 7 #可选中角色总数 characterPicb = [] # 存储人类的列表 characterPicr = [] # 存储僵尸图片的列表 characterStoryb = [] characterStoryr = [] characterInfob = [] characterInfor = [] background = pygame.image.load(path("res/bg/bg_main.png")).convert() #背景图 title = pygame.image.load(path("res/pic/handbookTitle.png")).convert_alpha() #标题 titlePos = (340, 20) backButton = pygame.image.load(path("res/button/back.png")).convert_alpha() backPos = (0, 0) homeButton = pygame.image.load(path("res/button/home.png")).convert_alpha() homePos = (150, 0) survivorButton = pygame.image.load(path("res/button/survivor.png")).convert_alpha() #生存者 survivorPos0 = (0, 245) survivorPos1 = (0, 240) zombieButton = pygame.image.load(path("res/button/zombie.png")).convert_alpha() #感染者 zombiePos0 = (200, 245) zombiePos1 = (200, 240) leftButton = pygame.image.load(path("res/button/left.png")).convert_alpha() #左箭头 leftPos0 = (55, 415) leftPos1 = (55, 410) rightButton = pygame.image.load(path("res/button/right.png")).convert_alpha() #右箭头 rightPos0 = (275, 415) rightPos1 = (275, 410) charbg = pygame.image.load(path("res/character/charflame.png")).convert_alpha() charbgPos = (150, 350) charPos = charbgPos storyPos = (440, 250) infoPos = (1020, 100) side = 'b' characterPicb.append(pygame.image.load(path("res/character/pingmin{}.png").format(side))) characterPicb.append(pygame.image.load(path("res/character/gongtou{}.png").format(side))) characterPicb.append(pygame.image.load(path("res/character/gansidui{}.png").format(side))) characterPicb.append(pygame.image.load(path("res/character/pangdun{}.png").format(side))) characterPicb.append(pygame.image.load(path("res/character/yaojishi{}.png").format(side))) characterPicb.append(pygame.image.load(path("res/character/bomb{}.png").format(side))) characterPicb.append(pygame.image.load(path("res/character/scientist{}.png").format(side))) side = 'r' characterPicr.append(pygame.image.load(path("res/character/pingmin{}.png").format(side))) characterPicr.append(pygame.image.load(path("res/character/gongtou{}.png").format(side))) characterPicr.append(pygame.image.load(path("res/character/gansidui{}.png").format(side))) characterPicr.append(pygame.image.load(path("res/character/pangdun{}.png").format(side))) characterPicr.append(pygame.image.load(path("res/character/yaojishi{}.png").format(side))) characterPicr.append(pygame.image.load(path("res/character/bomb{}.png").format(side))) characterPicr.append(pygame.image.load(path("res/character/scientist{}.png").format(side))) side = 'b' characterStoryb.append(pygame.image.load(path("res/characterStory/pingmin{}.png").format(side))) characterStoryb.append(pygame.image.load(path("res/characterStory/gongtou{}.png").format(side))) characterStoryb.append(pygame.image.load(path("res/characterStory/gansidui{}.png").format(side))) characterStoryb.append(pygame.image.load(path("res/characterStory/pangdun{}.png").format(side))) characterStoryb.append(pygame.image.load(path("res/characterStory/yaojishi{}.png").format(side))) characterStoryb.append(pygame.image.load(path("res/characterStory/bomb{}.png").format(side))) characterStoryb.append(pygame.image.load(path("res/characterStory/scientist{}.png").format(side))) side = 'r' characterStoryr.append(pygame.image.load(path("res/characterStory/pingmin{}.png").format(side))) characterStoryr.append(pygame.image.load(path("res/characterStory/gongtou{}.png").format(side))) characterStoryr.append(pygame.image.load(path("res/characterStory/gansidui{}.png").format(side))) characterStoryr.append(pygame.image.load(path("res/characterStory/pangdun{}.png").format(side))) characterStoryr.append(pygame.image.load(path("res/characterStory/yaojishi{}.png").format(side))) characterStoryr.append(pygame.image.load(path("res/characterStory/bomb{}.png").format(side))) characterStoryr.append(pygame.image.load(path("res/characterStory/scientist{}.png").format(side))) side = 'b' characterInfob.append(pygame.image.load(path("res/charinfo/pingmin{}.png").format(side))) characterInfob.append(pygame.image.load(path("res/charinfo/gongtou{}.png").format(side))) characterInfob.append(pygame.image.load(path("res/charinfo/gansidui{}.png").format(side))) characterInfob.append(pygame.image.load(path("res/charinfo/pangdun{}.png").format(side))) characterInfob.append(pygame.image.load(path("res/charinfo/yaojishi{}.png").format(side))) characterInfob.append(pygame.image.load(path("res/charinfo/bomb{}.png").format(side))) characterInfob.append(pygame.image.load(path("res/charinfo/scientist{}.png").format(side))) side = 'r' characterInfor.append(pygame.image.load(path("res/charinfo/pingmin{}.png").format(side))) characterInfor.append(pygame.image.load(path("res/charinfo/gongtou{}.png").format(side))) characterInfor.append(pygame.image.load(path("res/charinfo/gansidui{}.png").format(side))) characterInfor.append(pygame.image.load(path("res/charinfo/pangdun{}.png").format(side))) characterInfor.append(pygame.image.load(path("res/charinfo/yaojishi{}.png").format(side))) characterInfor.append(pygame.image.load(path("res/charinfo/bomb{}.png").format(side))) characterInfor.append(pygame.image.load(path("res/charinfo/scientist{}.png").format(side))) while True: for event in pygame.event.get(): x, y = pygame.mouse.get_pos() # 浮动效果 if x > survivorPos0[0] and x < survivorPos0[0] + survivorButton.get_width() \ and y > survivorPos0[1] and y < survivorPos0[1] + survivorButton.get_height(): survivorPos = survivorPos1 else: survivorPos = survivorPos0 if x > zombiePos0[0] and x < zombiePos0[0] + zombieButton.get_width() \ and y > zombiePos0[1] and y < zombiePos0[1] + zombieButton.get_height(): zombiePos = zombiePos1 else: zombiePos = zombiePos0 if x > leftPos0[0] and x < leftPos0[0] + leftButton.get_width() \ and y > leftPos0[1] and y < leftPos0[1] + leftButton.get_height(): leftPos = leftPos1 else: leftPos = leftPos0 if x > rightPos0[0] and x < rightPos0[0] + rightButton.get_width() \ and y > rightPos0[1] and y < rightPos0[1] + rightButton.get_height(): rightPos = rightPos1 else: rightPos = rightPos0 if event.type == pygame.QUIT: sys.exit() breakflag = 1 if event.type == MOUSEBUTTONDOWN: if x > backPos[0] and x < backPos[0] + backButton.get_width() \ and y > backPos[1] and y < backPos[1] + backButton.get_height(): breakflag = 1 # here to come back if x > homePos[0] and x < homePos[0] + homeButton.get_width() \ and y > homePos[1] and y < homePos[1] + homeButton.get_height(): breakflag = 1 # here to come back home # touch logic if x > survivorPos0[0] and x < survivorPos0[0] + survivorButton.get_width() \ and y > survivorPos0[1] and y < survivorPos0[1] + survivorButton.get_height(): showSurvivorOrZombie = 0 if x > zombiePos0[0] and x < zombiePos0[0] + zombieButton.get_width() \ and y > zombiePos0[1] and y < zombiePos0[1] + zombieButton.get_height(): showSurvivorOrZombie = 1 if x > leftPos0[0] and x < leftPos0[0] + leftButton.get_width() \ and y > leftPos0[1] and y < leftPos0[1] + leftButton.get_height(): charID = charID - 1 if charID < 0: charID = charID + totalNum if x > rightPos0[0] and x < rightPos0[0] + rightButton.get_width() \ and y > rightPos0[1] and y < rightPos0[1] + rightButton.get_height(): charID = charID + 1 if charID == totalNum: charID = 0 # 更新显示内容 if showSurvivorOrZombie == 0: CharList = characterPicb StoryList = characterStoryb InfoList = characterInfob else: CharList = characterPicr StoryList = characterStoryr InfoList = characterInfor charPic = CharList[charID] storyPic = StoryList[charID] infoPic = InfoList[charID] # 填充背景和内容 screen.blit(background, (0, 0)) screen.blit(title, titlePos) screen.blit(charbg, charbgPos) screen.blit(backButton, backPos) screen.blit(homeButton, homePos) screen.blit(survivorButton, survivorPos) screen.blit(zombieButton, zombiePos) screen.blit(leftButton, leftPos) screen.blit(rightButton, rightPos) screen.blit(charPic, charPos) screen.blit(storyPic, storyPos) screen.blit(infoPic, infoPos) # 更新画面 pygame.display.update() # 帧率 clock.tick(40) if breakflag == 1: break
def voyager2_recreated(ephem): earth = ephem.get_body('EARTH') jupiter = ephem.get_body('JUPITER') saturn = ephem.get_body('SATURN') uranus = ephem.get_body('URANUS') neptune = ephem.get_body('NEPTUNE') sun = ephem.get_body('SUN') def convert(dateObj): return sp.str2et(dateObj.strftime("%Y %b %d %H:%M:%S").lower()) voyst2 = lambda t: sp.spkezr('VOYAGER 2', convert(t), 'J2000', 'LT+S', 'SOLAR SYSTEM BARYCENTER')[0] D = 10 tfE = datetime(1977, 8, 21, 16, 40) t0J = datetime(1979, 5, 6, 15, 33) tfJ = datetime(1979, 9, 12, 22, 19) t0S = datetime(1981, 6, 29, 17, 20) tfS = datetime(1981, 10, 22, 18, 26) t0U = datetime(1985, 12, 15, 5, 6) tfU = datetime(1986, 3, 6, 13, 52) t0N = datetime(1989, 6, 26, 12, 6) tfN = datetime(1989, 10, 24, 7, 6) timesE2J = [] trajE2J = [] for i in range(D): tE2J = (t0J - tfE) * i / D + tfE state = voyst2(tE2J) timesE2J.append(tE2J) trajE2J.append(trajectory(sun, tE2J, state, tE2J + (t0J - tfE) / D)) #swingby at jupiter st0J = voyst2(t0J) - jupiter.state(t0J) stfJ = voyst2(tfJ) - jupiter.state(tfJ) GMJ = jupiter.const('GM', 1)[0] def dVJ(th1, th2): enpt = entrance(Rsoi['JUPITER'], st0J[3:], th1, th2) exst = swingby(Rsoi['JUPITER'], np.concatenate((enpt, st0J[3:])), GMJ) return np.linalg.norm(stfJ[3:] - exst[3:]) th1J, th2J = decaying_descent(dVJ, [[-np.pi, np.pi], [-np.pi, np.pi]], [0.2, 0.2], [np.pi / 20, 0], None, iters=5, decay_factor=5) enptJ = entrance(Rsoi['JUPITER'], st0J[3:], th1J, th2J) sIntoJ = np.concatenate((enptJ, st0J[3:])) trajByJ = trajectory(jupiter, t0J, sIntoJ, tfJ) #jupiter to saturn timesJ2S = [] trajJ2S = [] for i in range(D): tJ2S = (t0S - tfJ) * i / D + tfJ state = voyst2(tJ2S) timesJ2S.append(tJ2S) trajJ2S.append(trajectory(sun, tJ2S, state, tJ2S + (t0S - tfJ) / D)) #swingby at saturn st0S = voyst2(t0S) - saturn.state(t0S) stfS = voyst2(tfS) - saturn.state(tfS) GMS = saturn.const('GM', 1)[0] def dVS(th1, th2): enpt = entrance(Rsoi['SATURN'], st0S[3:], th1, th2) exst = swingby(Rsoi['SATURN'], np.concatenate((enpt, st0S[3:])), GMS) return np.linalg.norm(stfS[3:] - exst[3:]) th1S, th2S = decaying_descent(dVS, [[-np.pi, np.pi], [-np.pi, np.pi]], [0.2, 0.2], [np.pi / 20, 0], None, iters=5, decay_factor=5) enptS = entrance(Rsoi['SATURN'], st0S[3:], th1S, th2S) sIntoS = np.concatenate((enptS, st0S[3:])) trajByS = trajectory(saturn, t0S, sIntoS, tfS) #saturn to uranus timesS2U = [] trajS2U = [] for i in range(D): tS2U = (t0U - tfS) * i / D + tfS state = voyst2(tS2U) timesS2U.append(tS2U) trajS2U.append(trajectory(sun, tS2U, state, tS2U + (t0U - tfS) / D)) #swingby at uranus st0U = voyst2(t0U) - uranus.state(t0U) stfU = voyst2(tfU) - uranus.state(tfU) GMU = uranus.const('GM', 1)[0] def dVU(th1, th2): enpt = entrance(Rsoi['URANUS'], st0U[3:], th1, th2) exst = swingby(Rsoi['URANUS'], np.concatenate((enpt, st0U[3:])), GMU) return np.linalg.norm(stfU[3:] - exst[3:]) th1U, th2U = decaying_descent(dVU, [[-np.pi, np.pi], [-np.pi, np.pi]], [0.2, 0.2], [np.pi / 20, 0], None, iters=5, decay_factor=5) enptU = entrance(Rsoi['URANUS'], st0U[3:], th1U, th2U) sIntoU = np.concatenate((enptU, st0U[3:])) trajByU = trajectory(uranus, t0U, sIntoU, tfU) #uranus to neptune timesU2N = [] trajU2N = [] for i in range(D): tU2N = (t0N - tfU) * i / D + tfU state = voyst2(tU2N) timesU2N.append(tU2N) trajU2N.append(trajectory(sun, tU2N, state, tU2N + (t0N - tfU) / D)) #swingby at neptune st0N = voyst2(t0N) - neptune.state(t0N) stfN = voyst2(tfN) - neptune.state(tfN) GMN = neptune.const('GM', 1)[0] def dVN(th1, th2): enpt = entrance(Rsoi['NEPTUNE'], st0N[3:], th1, th2) exst = swingby(Rsoi['NEPTUNE'], np.concatenate((enpt, st0N[3:])), GMN) return np.linalg.norm(stfN[3:] - exst[3:]) th1N, th2N = decaying_descent(dVN, [[-np.pi, np.pi], [-np.pi, np.pi]], [0.2, 0.2], [np.pi / 20, 0], None, iters=5, decay_factor=5) enptN = entrance(Rsoi['NEPTUNE'], st0N[3:], th1N, th2N) sIntoN = np.concatenate((enptN, st0N[3:])) trajByN = trajectory(neptune, t0N, sIntoN, tfN) #after neptune after = timedelta(days=1500) trajAftN = trajectory(sun, tfN, voyst2(tfN), tfN + after) entranceTimes = [] entranceTimes.extend(timesE2J) entranceTimes.append(t0J) entranceTimes.extend(timesJ2S) entranceTimes.append(t0S) entranceTimes.extend(timesS2U) entranceTimes.append(t0U) entranceTimes.extend(timesU2N) entranceTimes.append(t0N) entranceTimes.append(tfN) trajs = [] trajs.extend(trajE2J) trajs.append(trajByJ) trajs.extend(trajJ2S) trajs.append(trajByS) trajs.extend(trajS2U) trajs.append(trajByU) trajs.extend(trajU2N) trajs.append(trajByN) trajs.append(trajAftN) voyager = path(launchTime=tfE, deltaV='Recreated', duration=tfN - tfE + after, entranceTimes=entranceTimes, trajectories=trajs) return voyager
def costAreaDraw(x1, y1, x2, y2): costFrameFile = path('image/costFrameBg.jpg') costFrame_init = pygame.image.load(costFrameFile).convert() costFrameImage = pygame.transform.scale(costFrame_init, (x2 - x1, y2 - y1)) screen.blit(costFrameImage, (x1, y1))
def voyager2_original(ephem): earth = ephem.get_body('EARTH') jupiter = ephem.get_body('JUPITER') saturn = ephem.get_body('SATURN') uranus = ephem.get_body('URANUS') neptune = ephem.get_body('NEPTUNE') sun = ephem.get_body('SUN') def convert(dateObj): return sp.str2et(dateObj.strftime("%Y %b %d %H:%M:%S").lower()) voyst2 = lambda t: sp.spkezr('VOYAGER 2', convert(t), 'J2000', 'LT+S', 'SOLAR SYSTEM BARYCENTER')[0] D = 10 tfE = datetime(1977, 8, 21, 16, 40) t0J = datetime(1979, 5, 6, 15, 33) tfJ = datetime(1979, 9, 12, 22, 19) t0S = datetime(1981, 6, 29, 17, 20) tfS = datetime(1981, 10, 22, 18, 26) t0U = datetime(1985, 12, 15, 5, 6) tfU = datetime(1986, 3, 6, 13, 52) t0N = datetime(1989, 6, 26, 12, 6) tfN = datetime(1989, 10, 24, 7, 6) timesE2J = [] trajE2J = [] for i in range(D): tE2J = (t0J - tfE) * i / D + tfE state = voyst2(tE2J) timesE2J.append(tE2J) trajE2J.append(trajectory(sun, tE2J, state, tE2J + (t0J - tfE) / D)) #swingby at jupiter trajByJ = trajectory(jupiter, t0J, voyst2(t0J) - jupiter.state(t0J), tfJ) #jupiter to saturn timesJ2S = [] trajJ2S = [] for i in range(D): tJ2S = (t0S - tfJ) * i / D + tfJ state = voyst2(tJ2S) timesJ2S.append(tJ2S) trajJ2S.append(trajectory(sun, tJ2S, state, tJ2S + (t0S - tfJ) / D)) #swingby at saturn trajByS = trajectory(saturn, t0S, voyst2(t0S) - saturn.state(t0S), tfS) #saturn to uranus timesS2U = [] trajS2U = [] for i in range(D): tS2U = (t0U - tfS) * i / D + tfS state = voyst2(tS2U) timesS2U.append(tS2U) trajS2U.append(trajectory(sun, tS2U, state, tS2U + (t0U - tfS) / D)) #swingby at uranus trajByU = trajectory(uranus, t0U, voyst2(t0U) - uranus.state(t0U), tfU) #uranus to neptune timesU2N = [] trajU2N = [] for i in range(D): tU2N = (t0N - tfU) * i / D + tfU state = voyst2(tU2N) timesU2N.append(tU2N) trajU2N.append(trajectory(sun, tU2N, state, tU2N + (t0N - tfU) / D)) #swingby at neptune trajByN = trajectory(neptune, t0N, voyst2(t0N) - neptune.state(t0N), tfN) #after neptune after = timedelta(days=1500) trajAftN = trajectory(sun, tfN, voyst2(tfN), tfN + after) entranceTimes = [] entranceTimes.extend(timesE2J) entranceTimes.append(t0J) entranceTimes.extend(timesJ2S) entranceTimes.append(t0S) entranceTimes.extend(timesS2U) entranceTimes.append(t0U) entranceTimes.extend(timesU2N) entranceTimes.append(t0N) entranceTimes.append(tfN) trajs = [] trajs.extend(trajE2J) trajs.append(trajByJ) trajs.extend(trajJ2S) trajs.append(trajByS) trajs.extend(trajS2U) trajs.append(trajByU) trajs.extend(trajU2N) trajs.append(trajByN) trajs.append(trajAftN) voyager = path(launchTime=tfE, deltaV='Original', duration=tfN - tfE + after, entranceTimes=entranceTimes, trajectories=trajs) return voyager
def toolAreaDraw(x1, y1, x2, y2, toolsList): toolBgFile = path('image/toolBg.jpg') toolBg_init = pygame.image.load(toolBgFile).convert() toolBg = pygame.transform.scale(toolBg_init, (x2 - x1, y2 - y1)) screen.blit(toolBg, (x1, y1))
def mapDisplayInitial(map, screen): #图像的名称转换,包含6种不同的状态 homeImageFile = path("res/mapblock/home.png") bornPointImageFile = path("res/mapblock/born.png") zeroImageFile = path("res/mapblock/4.jpg") oneImageFile = path("res/mapblock/1.jpg") twoImageFile = path("res/mapblock/3.jpg") threeImageFile = path("res/mapblock/2.jpg") sixImageFile = path("res/mapblock/6.png") arrowImageFile = [ path("res/mapblock/arrow0.png"), path("res/mapblock/arrow1.png"), path("res/mapblock/arrow2.png"), path("res/mapblock/arrow3.png") ] #加载并转换图像 homeImage_init = pygame.image.load(homeImageFile).convert_alpha() bornPointImage_init = pygame.image.load(bornPointImageFile).convert_alpha() zeroImage_init = pygame.image.load(zeroImageFile).convert() oneImage_init = pygame.image.load(oneImageFile).convert() twoImage_init = pygame.image.load(twoImageFile).convert() threeImage_init = pygame.image.load(threeImageFile).convert() sixImage_init = pygame.image.load(sixImageFile).convert() arrowImage_init = [] for image in arrowImageFile: arrowImage_init.append(pygame.image.load(image).convert_alpha()) #backGround = pygame.image.load(backGroundFile).convert() #地图中用于填充格子的图像的大小 imageSize = map.blockSize #图像放缩,若图像大小给定,则此部分可以省去 homeImage = pygame.transform.scale(homeImage_init, (imageSize, imageSize)) bornPointImage = pygame.transform.scale(bornPointImage_init, (imageSize, imageSize)) zeroImage = pygame.transform.scale(zeroImage_init, (imageSize, imageSize)) oneImage = pygame.transform.scale(oneImage_init, (imageSize, imageSize)) twoImage = pygame.transform.scale(twoImage_init, (imageSize, imageSize)) threeImage = pygame.transform.scale(threeImage_init, (imageSize, imageSize)) sixImage = pygame.transform.scale(sixImage_init, (imageSize, imageSize)) arrowImage = [] for image_init in arrowImage_init: arrowImage.append( pygame.transform.scale(image_init, (imageSize, imageSize))) #backGround = pygame.transform.scale(backGround,(750,500)) mapImage = (homeImage, bornPointImage, zeroImage, oneImage, twoImage, threeImage, sixImage, arrowImage) return mapImage