将地图统一为python内容

This commit is contained in:
星外之神 2022-07-29 11:17:52 +08:00
parent 280d8c2a57
commit 7c50a29f9e
25 changed files with 291 additions and 205 deletions

View File

@ -1,23 +0,0 @@
{
"background_type":2,
"init_sun_value":5000,
"shovel":1,
"spawn_zombies":"list",
"zombie_list":[
{"time":0, "map_y":5, "name":"Zomboni"},
{"time":1000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":2000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":3100, "map_y":4, "name":"ScreenDoorZombie"},
{"time":4500, "map_y":4, "name":"ScreenDoorZombie"},
{"time":5000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":6000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":7000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":8000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":0, "map_y":1, "name":"NewspaperZombie"},
{"time":0, "map_y":0, "name":"PoleVaultingZombie"},
{"time":6000, "map_y":0, "name":"FootballZombie"},
{"time":0, "map_y":3, "name":"ConeheadDuckyTubeZombie"},
{"time":0, "map_y":2, "name":"SnorkelZombie"},
{"time":90000, "map_y":2, "name":"ConeheadDuckyTubeZombie"}
]
}

View File

@ -1,8 +0,0 @@
{
"background_type": 7,
"init_sun_value": 150,
"shovel": 1,
"spawn_zombies":"auto",
"included_zombies":["Zombie"],
"num_flags":1
}

View File

@ -1,9 +0,0 @@
{
"background_type":3,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "BucketheadZombie", "FootballZombie"],
"inevitable_zombie_list":{"20":["BucketheadZombie"], "30":["FootballZombie"]},
"num_flags":4
}

View File

@ -1,8 +0,0 @@
{
"background_type": 8,
"init_sun_value": 50,
"shovel": 1,
"spawn_zombies":"auto",
"included_zombies":["Zombie"],
"num_flags":1
}

View File

@ -1,8 +0,0 @@
{
"background_type": 0,
"init_sun_value": 50,
"shovel": 1,
"spawn_zombies":"auto",
"included_zombies":["Zombie"],
"num_flags":2
}

View File

@ -1,8 +0,0 @@
{
"background_type":0,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "PoleVaultingZombie"],
"num_flags":3
}

View File

@ -1,8 +0,0 @@
{
"background_type":1,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "ScreenDoorZombie"],
"num_flags":2
}

View File

@ -1,10 +0,0 @@
{
"background_type":1,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "ScreenDoorZombie", "BucketheadZombie", "FootballZombie"],
"inevitable_zombie_list":{"20":["ScreenDoorZombie"], "30":["FootballZombie"]},
"num_flags":4,
"grade_graves":2
}

View File

@ -1,8 +0,0 @@
{
"background_type":2,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "BucketheadZombie"],
"num_flags":2
}

View File

@ -1,9 +0,0 @@
{
"background_type":2,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "BucketheadZombie", "SnorkelZombie"],
"inevitable_zombie_list":{"20":["BucketheadZombie"], "30":["SnorkelZombie"]},
"num_flags":3
}

View File

@ -1,9 +0,0 @@
{
"background_type":2,
"init_sun_value":50,
"shovel":1,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "Zomboni"],
"inevitable_zombie_list":{"30":["Zomboni"]},
"num_flags":3
}

View File

@ -1,12 +0,0 @@
{
"background_type":6,
"choosebar_type":2,
"shovel":0,
"spawn_zombies":"auto",
"included_zombies":["Zombie", "ConeheadZombie", "BucketheadZombie", "NewspaperZombie", "PoleVaultingZombie"],
"num_flags":3,
"inevitable_zombie_list":{"20":["BucketheadZombie"]},
"card_pool":{ "WallNutBowling":300,
"RedWallNutBowling":100
}
}

View File

@ -1,17 +0,0 @@
{
"background_type":0,
"choosebar_type":1,
"shovel":1,
"spawn_zombies":"auto",
"num_flags":3,
"included_zombies":["Zombie", "ConeheadZombie", "BucketheadZombie", "PoleVaultingZombie"],
"inevitable_zombie_list":{"20":["BucketheadZombie"]},
"card_pool":{ "Peashooter":200,
"SnowPea":200,
"WallNut":100,
"CherryBomb":100,
"RepeaterPea":200,
"Chomper":100,
"PotatoMine":100
}
}

View File

@ -1,20 +0,0 @@
{
"background_type":1,
"choosebar_type":1,
"shovel":1,
"spawn_zombies":"auto",
"num_flags":3,
"included_zombies":["Zombie", "ConeheadZombie",
"BucketheadZombie", "NewspaperZombie",
"FootballZombie", "ScreenDoorZombie"],
"inevitable_zombie_list":{"30":["FootballZombie"]},
"card_pool":{ "PuffShroom":100,
"ScaredyShroom":100,
"IceShroom":100,
"HypnoShroom":100,
"DoomShroom":100,
"GraveBuster":100,
"FumeShroom":200
},
"grade_graves":3
}

View File

@ -1,20 +0,0 @@
{
"background_type":2,
"choosebar_type":1,
"shovel":1,
"spawn_zombies":"auto",
"num_flags":4,
"included_zombies":["Zombie", "ConeheadZombie",
"BucketheadZombie", "SnorkelZombie",
"Zomboni"],
"inevitable_zombie_list":{"30":["BucketheadZombie"]},
"card_pool":{ "LilyPad":300,
"TorchWood":100,
"TallNut":100,
"TangleKlep":100,
"Spikeweed":100,
"Squash":100,
"Jalapeno":50,
"Threepeater":400
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Binary file not shown.

View File

@ -1,6 +1,7 @@
import random
from .. import constants as c
# 记录植物种植情况的地图管理工具
class Map():
def __init__(self, background_type):
self.background_type = background_type
@ -163,3 +164,252 @@ class Map():
if self.isValid(map_x, map_y) and self.isAvailable(map_x, map_y, plantName):
pos = self.getMapGridPos(map_x, map_y)
return pos
# 保存具体关卡地图信息常数
# 冒险模式地图
LEVEL_MAP_DATA = (
# 第0关测试模式地图
{
c.BACKGROUND_TYPE: 2,
c.INIT_SUN_NAME: 5000,
c.SHOVEL: 1,
c.SPAWN_ZOMBIES: c.SPAWN_ZOMBIES_LIST,
c.ZOMBIE_LIST:[
{"time":0, "map_y":5, "name":"Zomboni"},
{"time":1000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":2000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":3100, "map_y":4, "name":"ScreenDoorZombie"},
{"time":4500, "map_y":4, "name":"ScreenDoorZombie"},
{"time":5000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":6000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":7000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":8000, "map_y":4, "name":"ScreenDoorZombie"},
{"time":0, "map_y":1, "name":"NewspaperZombie"},
{"time":0, "map_y":0, "name":"PoleVaultingZombie"},
{"time":6000, "map_y":0, "name":"FootballZombie"},
{"time":0, "map_y":3, "name":"ConeheadDuckyTubeZombie"},
{"time":0, "map_y":2, "name":"SnorkelZombie"},
{"time":90000, "map_y":2, "name":"ConeheadDuckyTubeZombie"}
]
},
# 第1关单行草皮
{
c.BACKGROUND_TYPE: 7,
c.INIT_SUN_NAME: 150,
c.SHOVEL: 1,
c.SPAWN_ZOMBIES:c.SPAWN_ZOMBIES_AUTO,
c.INCLUDED_ZOMBIES:(c.NORMAL_ZOMBIE,),
c.NUM_FLAGS:1
},
# 第2关三行草皮
{
c.BACKGROUND_TYPE: 8,
c.INIT_SUN_NAME: 150,
c.SHOVEL: 1,
c.SPAWN_ZOMBIES:c.SPAWN_ZOMBIES_AUTO,
c.INCLUDED_ZOMBIES:(c.NORMAL_ZOMBIE,),
c.NUM_FLAGS:1
},
# 第3关
{
c.BACKGROUND_TYPE: 0,
c.INIT_SUN_NAME: 50,
c.SHOVEL: 1,
c.SPAWN_ZOMBIES:c.SPAWN_ZOMBIES_AUTO,
c.INCLUDED_ZOMBIES:(c.NORMAL_ZOMBIE,),
c.NUM_FLAGS:2
},
# 第4关
{
c.BACKGROUND_TYPE: 0,
c.INIT_SUN_NAME: 50,
c.SHOVEL: 1,
c.SPAWN_ZOMBIES:c.SPAWN_ZOMBIES_AUTO,
c.INCLUDED_ZOMBIES: (c.NORMAL_ZOMBIE, c.CONEHEAD_ZOMBIE, c.POLE_VAULTING_ZOMBIE),
c.NUM_FLAGS:2
},
# 第5关 目前白天最后一关
{
c.BACKGROUND_TYPE: 0,
c.INIT_SUN_NAME: 50,
c.SHOVEL: 1,
c.SPAWN_ZOMBIES:c.SPAWN_ZOMBIES_AUTO,
c.INCLUDED_ZOMBIES: (c.NORMAL_ZOMBIE, c.CONEHEAD_ZOMBIE, c.POLE_VAULTING_ZOMBIE, c.BUCKETHEAD_ZOMBIE),
c.NUM_FLAGS:3
},
# 第6关 目前夜晚第一关
{
c.BACKGROUND_TYPE: 1,
c.INIT_SUN_NAME: 50,
c.SHOVEL: 1,
c.SPAWN_ZOMBIES:c.SPAWN_ZOMBIES_AUTO,
c.INCLUDED_ZOMBIES: ( c.NORMAL_ZOMBIE,
c.NEWSPAPER_ZOMBIE),
c.NUM_FLAGS:2
},
# 第7关
{
c.BACKGROUND_TYPE: 1,
c.INIT_SUN_NAME: 50,
c.SHOVEL: 1,
c.SPAWN_ZOMBIES:c.SPAWN_ZOMBIES_AUTO,
c.INCLUDED_ZOMBIES: ( c.NORMAL_ZOMBIE,
c.SCREEN_DOOR_ZOMBIE,),
c.NUM_FLAGS: 2,
c.GRADE_GRAVES: 2,
},
# 第8关 目前为夜晚最后一关
{
c.BACKGROUND_TYPE: 1,
c.INIT_SUN_NAME: 50,
c.SHOVEL: 1,
c.SPAWN_ZOMBIES:c.SPAWN_ZOMBIES_AUTO,
c.INCLUDED_ZOMBIES: ( c.NORMAL_ZOMBIE, c.NEWSPAPER_ZOMBIE,
c.CONEHEAD_ZOMBIE, c.BUCKETHEAD_ZOMBIE,
c.SCREEN_DOOR_ZOMBIE, c.FOOTBALL_ZOMBIE),
c.INEVITABLE_ZOMBIE_DICT: { # 这里改用python实现了以后键不再用字符串改用数字
# 仍然要注意字典值是元组
10: (c.NEWSPAPER_ZOMBIE,),
20: (c.SCREEN_DOOR_ZOMBIE,),
30: (c.FOOTBALL_ZOMBIE,),
},
c.NUM_FLAGS: 3,
c.GRADE_GRAVES: 3,
},
# 第9关 目前为泳池模式第一关
{
c.BACKGROUND_TYPE: 2,
c.INIT_SUN_NAME: 50,
c.SHOVEL: 1,
c.SPAWN_ZOMBIES:c.SPAWN_ZOMBIES_AUTO,
c.INCLUDED_ZOMBIES: ( c.NORMAL_ZOMBIE, c.BUCKETHEAD_ZOMBIE,
c.CONEHEAD_ZOMBIE,),
c.NUM_FLAGS:2
},
# 第10关
{
c.BACKGROUND_TYPE: 2,
c.INIT_SUN_NAME: 50,
c.SHOVEL: 1,
c.SPAWN_ZOMBIES:c.SPAWN_ZOMBIES_AUTO,
c.INCLUDED_ZOMBIES: ( c.NORMAL_ZOMBIE, c.BUCKETHEAD_ZOMBIE,
c.CONEHEAD_ZOMBIE, c.SNORKELZOMBIE),
c.INEVITABLE_ZOMBIE_DICT: {30: (c.SNORKELZOMBIE,)},
c.NUM_FLAGS:3
},
# 第11关
{
c.BACKGROUND_TYPE: 2,
c.INIT_SUN_NAME: 50,
c.SHOVEL: 1,
c.SPAWN_ZOMBIES:c.SPAWN_ZOMBIES_AUTO,
c.INCLUDED_ZOMBIES: (c.NORMAL_ZOMBIE, c.ZOMBONI),
c.INEVITABLE_ZOMBIE_DICT: {30: (c.ZOMBONI,)},
c.NUM_FLAGS:3
},
# 第12关 目前为泳池最后一关
{
c.BACKGROUND_TYPE: 2,
c.INIT_SUN_NAME: 50,
c.SHOVEL: 1,
c.SPAWN_ZOMBIES:c.SPAWN_ZOMBIES_AUTO,
c.INCLUDED_ZOMBIES: ( c.NORMAL_ZOMBIE, c.ZOMBONI,
c.BUCKETHEAD_ZOMBIE,
c.CONEHEAD_ZOMBIE, c.SNORKELZOMBIE),
c.INEVITABLE_ZOMBIE_DICT: {40: (c.ZOMBONI,)},
c.NUM_FLAGS:4
},
# 第13关 目前为浓雾第一关 尚未完善
{
c.BACKGROUND_TYPE: 2,
c.INIT_SUN_NAME: 50,
c.SHOVEL: 1,
c.SPAWN_ZOMBIES:c.SPAWN_ZOMBIES_AUTO,
c.INCLUDED_ZOMBIES: ( c.NORMAL_ZOMBIE, c.NEWSPAPER_ZOMBIE,
c.ZOMBONI, c.FOOTBALL_ZOMBIE,
c.CONEHEAD_ZOMBIE, c.BUCKETHEAD_HEALTH),
c.NUM_FLAGS:4
},
)
# 玩玩小游戏地图
LITTLE_GAME_MAP_DATA = (
# 第0关 测试 目前空缺
{},
# 第1关 坚果保龄球
{
c.BACKGROUND_TYPE: 6,
c.CHOOSEBAR_TYPE: c.CHOOSEBAR_BOWLING,
c.SHOVEL: 0,
c.SPAWN_ZOMBIES:c.SPAWN_ZOMBIES_AUTO,
c.INCLUDED_ZOMBIES: ( c.NORMAL_ZOMBIE, c.CONEHEAD_ZOMBIE,
c.POLE_VAULTING_ZOMBIE, c.BUCKETHEAD_ZOMBIE,
c.NEWSPAPER_ZOMBIE),
c.NUM_FLAGS:3,
c.CARD_POOL: { c.WALLNUTBOWLING: 300,
c.REDWALLNUTBOWLING: 100,}
},
# 第2关 白天 大决战
{
c.BACKGROUND_TYPE: 0,
c.CHOOSEBAR_TYPE: c.CHOOSEBAR_MOVE,
c.SHOVEL: 1,
c.SPAWN_ZOMBIES:c.SPAWN_ZOMBIES_AUTO,
c.INCLUDED_ZOMBIES: ( c.NORMAL_ZOMBIE, c.CONEHEAD_ZOMBIE,
c.POLE_VAULTING_ZOMBIE, c.BUCKETHEAD_ZOMBIE,),
c.NUM_FLAGS:3,
c.CARD_POOL: { c.PEASHOOTER: 200,
c.SNOWPEASHOOTER: 100,
c.WALLNUT: 100,
c.CHERRYBOMB: 100,
c.REPEATERPEA: 200,
c.CHOMPER: 100,
c.POTATOMINE: 100,}
},
# 第3关 夜晚 大决战
{
c.BACKGROUND_TYPE: 1,
c.CHOOSEBAR_TYPE: c.CHOOSEBAR_MOVE,
c.SHOVEL: 1,
c.SPAWN_ZOMBIES:c.SPAWN_ZOMBIES_AUTO,
c.INCLUDED_ZOMBIES: ( c.NORMAL_ZOMBIE, c.CONEHEAD_ZOMBIE,
c.FOOTBALL_ZOMBIE, c.BUCKETHEAD_ZOMBIE,
c.NEWSPAPER_ZOMBIE, c.SCREEN_DOOR_ZOMBIE),
c.NUM_FLAGS:3,
c.CARD_POOL: { c.PUFFSHROOM: 100,
c.SCAREDYSHROOM: 100,
c.ICESHROOM: 100,
c.HYPNOSHROOM: 100,
c.DOOMSHROOM: 100,
c.GRAVEBUSTER: 100,
c.FUMESHROOM: 200},
c.GRADE_GRAVES:3
},
# 第4关 泳池 大决战
{
c.BACKGROUND_TYPE: 2,
c.CHOOSEBAR_TYPE: c.CHOOSEBAR_MOVE,
c.SHOVEL: 1,
c.SPAWN_ZOMBIES:c.SPAWN_ZOMBIES_AUTO,
c.INCLUDED_ZOMBIES: ( c.NORMAL_ZOMBIE, c.CONEHEAD_ZOMBIE,
c.SNORKELZOMBIE, c.BUCKETHEAD_ZOMBIE,
c.ZOMBONI,),
c.NUM_FLAGS:4,
c.CARD_POOL: { c.LILYPAD: 300,
c.TORCHWOOD: 100,
c.TALLNUT: 100,
c.TANGLEKLEP: 100,
c.SPIKEWEED: 100,
c.SQUASH: 100,
c.JALAPENO: 50,
c.THREEPEASHOOTER: 400,}
},
)
# 总关卡数
TOTAL_LEVEL = len(LEVEL_MAP_DATA)
TOTAL_LITTLE_GAME = len(LITTLE_GAME_MAP_DATA)

View File

@ -165,6 +165,9 @@ class MenuBar():
if card.checkMouseClick(mouse_pos):
if card.canClick(self.sun_value, self.current_time):
result = (c.PLANT_CARD_INFO[card.index][c.PLANT_NAME_INDEX], card)
else:
# 播放无法使用该卡片的警告音
c.SOUND_CANNOT_CHOOSE_WARNING.play()
break
return result

View File

@ -118,6 +118,7 @@ MAIN_MENU_IMAGE = 'MainMenu'
OPTION_ADVENTURE = 'Adventure'
GAME_LOSE_IMAGE = 'GameLose'
GAME_VICTORY_IMAGE = 'GameVictory'
AWARD_SCREEN_IMAGE = 'AwardScreen'
# 地图相关内容
BACKGROUND_NAME = 'Background'
@ -206,7 +207,7 @@ MAP_POOL_FRONT_X = SCREEN_WIDTH - 15
CHOOSEBAR_TYPE = 'choosebar_type'
CHOOSEBAR_STATIC = 0
CHOOSEBAR_MOVE = 1
CHOSSEBAR_BOWLING = 2
CHOOSEBAR_BOWLING = 2
MENUBAR_BACKGROUND = 'ChooserBackground'
MOVEBAR_BACKGROUND = 'MoveBackground'
PANEL_BACKGROUND = 'PanelBackground'
@ -649,6 +650,7 @@ SOUNDS = ( # 程序交互等
SOUND_LOSE := _getSound("lose.ogg"),
SOUND_WIN := _getSound("win.ogg"),
SOUND_SCREAM := _getSound("scream.ogg"),
SOUND_CANNOT_CHOOSE_WARNING := _getSound("cannotChooseWarning.ogg"),
)
# 记录本地存储文件初始值

View File

@ -40,25 +40,23 @@ class Level(tool.State):
f.write(dataToSave)
def loadMap(self):
if self.game_info[c.GAME_MODE] == c.MODE_LITTLEGAME:
map_file = f'littleGame_{self.game_info[c.LITTLEGAME_NUM]}.json'
# 设置标题
pg.display.set_caption(f"pypvz: 玩玩小游戏 第{self.game_info[c.LITTLEGAME_NUM]}")
elif self.game_info[c.GAME_MODE] == c.MODE_ADVENTURE:
map_file = f'level_{self.game_info[c.LEVEL_NUM]}.json'
# 设置标题
pg.display.set_caption(f"pypvz: 冒险模式 第{self.game_info[c.LEVEL_NUM]}")
file_path = os.path.join(c.PATH_MAP_DIR, map_file)
# 最后一关之后应该结束了
try:
with open(file_path) as f:
self.map_data = json.load(f)
except FileNotFoundError:
# 冒险模式
if self.game_info[c.GAME_MODE] == c.MODE_ADVENTURE:
if self.game_info[c.LEVEL_NUM] < map.TOTAL_LEVEL:
self.map_data = map.LEVEL_MAP_DATA[self.game_info[c.LEVEL_NUM]]
else:
print("成功通关冒险模式!")
self.game_info[c.LEVEL_NUM] = 1
self.game_info[c.LEVEL_COMPLETIONS] += 1
self.done = True
self.next = c.MAIN_MENU
self.saveUserData()
return
# 小游戏模式
elif self.game_info[c.GAME_MODE] == c.MODE_LITTLEGAME:
if self.game_info[c.LITTLEGAME_NUM] < map.TOTAL_LITTLE_GAME:
self.map_data = map.LITTLE_GAME_MAP_DATA[self.game_info[c.LITTLEGAME_NUM]]
else:
print("成功通关玩玩小游戏!")
self.game_info[c.LITTLEGAME_NUM] = 1
self.game_info[c.LITTLEGAME_COMPLETIONS] += 1
@ -73,7 +71,7 @@ class Level(tool.State):
# 缺省音乐为进入的音乐,方便发现错误
self.bgm = 'intro.opus'
if c.CHOOSEBAR_TYPE in self.map_data: # 指定了choosebar_type的传送带关
if self.map_data[c.CHOOSEBAR_TYPE] == c.CHOSSEBAR_BOWLING: # 坚果保龄球
if self.map_data[c.CHOOSEBAR_TYPE] == c.CHOOSEBAR_BOWLING: # 坚果保龄球
self.bgm = 'bowling.opus'
elif self.map_data[c.CHOOSEBAR_TYPE] == c.CHOOSEBAR_MOVE: # 传送带
self.bgm = 'battle.opus'
@ -147,7 +145,7 @@ class Level(tool.State):
if (self.bar_type != c.CHOOSEBAR_STATIC):
volume += 2
if inevitableZombieDict and (str(wave) in inevitableZombieDict):
if inevitableZombieDict and (wave in inevitableZombieDict):
for newZombie in inevitableZombieDict[str(wave)]:
zombieList.append(newZombie)
volume -= c.CREATE_ZOMBIE_DICT[newZombie][0]
@ -368,7 +366,7 @@ class Level(tool.State):
else:
card_pool = menubar.getCardPool(self.map_data[c.CARD_POOL])
self.initPlay(card_pool)
if self.bar_type == c.CHOSSEBAR_BOWLING:
if self.bar_type == c.CHOOSEBAR_BOWLING:
self.initBowlingMap()
self.setupLittleMenu()
@ -969,7 +967,7 @@ class Level(tool.State):
else:
self.menubar.deleateCard(self.select_plant)
if self.bar_type != c.CHOSSEBAR_BOWLING: # 坚果保龄球关卡无需考虑格子被占用的情况
if self.bar_type != c.CHOOSEBAR_BOWLING: # 坚果保龄球关卡无需考虑格子被占用的情况
self.map.addMapPlant(map_x, map_y, self.plant_name, sleep=mushroomSleep)
self.removeMouseImage()
@ -1263,7 +1261,7 @@ class Level(tool.State):
c.SOUND_PLANT.play()
# 整理地图信息
if self.bar_type != c.CHOSSEBAR_BOWLING:
if self.bar_type != c.CHOOSEBAR_BOWLING:
self.map.removeMapPlant(map_x, map_y, targetPlant.name)
# 将睡眠植物移除后更新睡眠状态
if targetPlant.state == c.SLEEP:

View File

@ -74,3 +74,11 @@ class GameLoseScreen(Screen):
# 播放失败音效
c.SOUND_LOSE.play()
c.SOUND_SCREAM.play()
class AwardScreen(Screen):
def __init__(self):
Screen.__init__()
def getImageName(self):
return c.AWARD_SCREEN_IMAGE

View File

@ -17,7 +17,8 @@ class State():
# 当从其他状态进入这个状态时,需要进行的初始化操作
@abstractmethod
def startup(self, current_time, persist):
'''abstract method'''
# abstract method
pass
# 当从这个状态退出时,需要进行的清除操作
def cleanup(self):
self.done = False
@ -25,7 +26,8 @@ class State():
# 在这个状态运行时进行的更新操作
@abstractmethod
def update(self, surface, keys, current_time):
'''abstract method'''
# abstract method
pass
# control this game. do event loops
class Control():