将地图统一为python内容
This commit is contained in:
parent
280d8c2a57
commit
7c50a29f9e
@ -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"}
|
||||
]
|
||||
}
|
||||
@ -1,8 +0,0 @@
|
||||
{
|
||||
"background_type": 7,
|
||||
"init_sun_value": 150,
|
||||
"shovel": 1,
|
||||
"spawn_zombies":"auto",
|
||||
"included_zombies":["Zombie"],
|
||||
"num_flags":1
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
@ -1,8 +0,0 @@
|
||||
{
|
||||
"background_type": 8,
|
||||
"init_sun_value": 50,
|
||||
"shovel": 1,
|
||||
"spawn_zombies":"auto",
|
||||
"included_zombies":["Zombie"],
|
||||
"num_flags":1
|
||||
}
|
||||
@ -1,8 +0,0 @@
|
||||
{
|
||||
"background_type": 0,
|
||||
"init_sun_value": 50,
|
||||
"shovel": 1,
|
||||
"spawn_zombies":"auto",
|
||||
"included_zombies":["Zombie"],
|
||||
"num_flags":2
|
||||
}
|
||||
@ -1,8 +0,0 @@
|
||||
{
|
||||
"background_type":0,
|
||||
"init_sun_value":50,
|
||||
"shovel":1,
|
||||
"spawn_zombies":"auto",
|
||||
"included_zombies":["Zombie", "ConeheadZombie", "PoleVaultingZombie"],
|
||||
"num_flags":3
|
||||
}
|
||||
@ -1,8 +0,0 @@
|
||||
{
|
||||
"background_type":1,
|
||||
"init_sun_value":50,
|
||||
"shovel":1,
|
||||
"spawn_zombies":"auto",
|
||||
"included_zombies":["Zombie", "ConeheadZombie", "ScreenDoorZombie"],
|
||||
"num_flags":2
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
@ -1,8 +0,0 @@
|
||||
{
|
||||
"background_type":2,
|
||||
"init_sun_value":50,
|
||||
"shovel":1,
|
||||
"spawn_zombies":"auto",
|
||||
"included_zombies":["Zombie", "ConeheadZombie", "BucketheadZombie"],
|
||||
"num_flags":2
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
BIN
resources/graphics/Screen/AwardScreen.jpg
Normal file
BIN
resources/graphics/Screen/AwardScreen.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 156 KiB |
BIN
resources/graphics/Screen/universalButton.png
Normal file
BIN
resources/graphics/Screen/universalButton.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.5 KiB |
BIN
resources/sound/cannotChooseWarning.ogg
Normal file
BIN
resources/sound/cannotChooseWarning.ogg
Normal file
Binary file not shown.
BIN
resources/sound/finalfanfare.ogg
Normal file
BIN
resources/sound/finalfanfare.ogg
Normal file
Binary file not shown.
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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"),
|
||||
)
|
||||
|
||||
# 记录本地存储文件初始值
|
||||
|
||||
@ -40,32 +40,30 @@ 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.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
|
||||
elif self.game_info[c.GAME_MODE] == c.MODE_LITTLEGAME:
|
||||
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
|
||||
self.done = True
|
||||
self.next = c.MAIN_MENU
|
||||
self.saveUserData()
|
||||
return
|
||||
self.done = True
|
||||
self.next = c.MAIN_MENU
|
||||
self.saveUserData()
|
||||
return
|
||||
# 是否有铲子的信息:无铲子时为0,有铲子时为1,故直接赋值即可
|
||||
self.hasShovel = self.map_data[c.SHOVEL]
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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():
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user