This commit is contained in:
wcb_dell 2020-11-25 23:48:58 +08:00
parent 83d72e6f46
commit 9ed9404c26
11 changed files with 92 additions and 18 deletions

View File

@ -1,6 +1,7 @@
{ {
"background_type":0, "background_type":0,
"init_sun_value":500, "init_sun_value":500,
"shovel":1,
"zombie_list":[ "zombie_list":[
{"time":1000, "map_y":2, "name":"Zombie"} {"time":1000, "map_y":2, "name":"Zombie"}
] ]

View File

@ -1,6 +1,7 @@
{ {
"background_type":0, "background_type":0,
"init_sun_value":5000, "init_sun_value":5000,
"shovel":1,
"zombie_list":[ "zombie_list":[
{"time":20000, "map_y":0, "name":"Zombie"}, {"time":20000, "map_y":0, "name":"Zombie"},
{"time":40000, "map_y":2, "name":"FlagZombie"}, {"time":40000, "map_y":2, "name":"FlagZombie"},

View File

@ -1,6 +1,7 @@
{ {
"background_type":0, "background_type":0,
"init_sun_value":50, "init_sun_value":50,
"shovel":1,
"zombie_list":[ "zombie_list":[
{"time":20000, "map_y":0, "name":"Zombie"}, {"time":20000, "map_y":0, "name":"Zombie"},
{"time":40000, "map_y":2, "name":"FlagZombie"}, {"time":40000, "map_y":2, "name":"FlagZombie"},

View File

@ -1,6 +1,7 @@
{ {
"background_type":1, "background_type":1,
"init_sun_value":50, "init_sun_value":50,
"shovel":1,
"zombie_list":[ "zombie_list":[
{"time":20000, "map_y":0, "name":"Zombie"}, {"time":20000, "map_y":0, "name":"Zombie"},
{"time":40000, "map_y":2, "name":"ConeheadZombie"}, {"time":40000, "map_y":2, "name":"ConeheadZombie"},

View File

@ -1,6 +1,7 @@
{ {
"background_type":0, "background_type":0,
"choosebar_type":1, "choosebar_type":1,
"shovel":1,
"card_pool":[ "card_pool":[
{"name":"Peashooter"}, {"name":"Peashooter"},
{"name":"SnowPea"}, {"name":"SnowPea"},

View File

@ -1,6 +1,7 @@
{ {
"background_type":4, "background_type":4,
"choosebar_type":2, "choosebar_type":2,
"shovel":0,
"card_pool":[ "card_pool":[
{"name":"WallNutBowling"}, {"name":"WallNutBowling"},
{"name":"RedWallNutBowling"} {"name":"RedWallNutBowling"}

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

View File

@ -380,7 +380,7 @@ class MoveBar():
def __init__(self, card_pool): def __init__(self, card_pool):
self.loadFrame(c.MOVEBAR_BACKGROUND) self.loadFrame(c.MOVEBAR_BACKGROUND)
self.rect = self.image.get_rect() self.rect = self.image.get_rect()
self.rect.x = 90 self.rect.x = 20
self.rect.y = 0 self.rect.y = 0
self.card_start_x = self.rect.x + 8 self.card_start_x = self.rect.x + 8

View File

@ -34,6 +34,7 @@ BIG_MENU = 'bigMenu'
RETURN_BUTTON = 'returnButton' RETURN_BUTTON = 'returnButton'
RESTART_BUTTON = 'restartButton' RESTART_BUTTON = 'restartButton'
MAINMENU_BUTTON = 'mainMenuButton' MAINMENU_BUTTON = 'mainMenuButton'
LITTLEGAME_BUTTON = 'littleGameButton'
# 小铲子 # 小铲子
SHOVEL = 'shovel' SHOVEL = 'shovel'
SHOVEL_BOX = 'shovelBox' SHOVEL_BOX = 'shovelBox'

View File

@ -24,7 +24,10 @@ class Level(tool.State):
self.initState() self.initState()
def loadMap(self): def loadMap(self):
map_file = 'level_' + str(self.game_info[c.LEVEL_NUM]) + '.json' if c.LITTLEGAME_BUTTON in self.game_info:
map_file = 'littleGame_' + str(self.game_info[c.LEVEL_NUM]) + '.json'
else:
map_file = 'level_' + str(self.game_info[c.LEVEL_NUM]) + '.json'
file_path = os.path.join('resources', 'data', 'map', map_file) file_path = os.path.join('resources', 'data', 'map', map_file)
# 最后一关之后应该结束了 # 最后一关之后应该结束了
try: try:
@ -36,6 +39,11 @@ class Level(tool.State):
self.done = True self.done = True
self.next = c.MAIN_MENU self.next = c.MAIN_MENU
return return
if self.map_data[c.SHOVEL] == 0:
self.hasShovel = False
else:
self.hasShovel = True
def setupBackground(self): def setupBackground(self):
img_index = self.map_data[c.BACKGROUND_TYPE] img_index = self.map_data[c.BACKGROUND_TYPE]
@ -128,7 +136,7 @@ class Level(tool.State):
# 是否拖住植物或者铲子 # 是否拖住植物或者铲子
self.drag_plant = False self.drag_plant = False
self.drag_plant = False self.drag_shovel = False
self.hint_image = None self.hint_image = None
self.hint_plant = False self.hint_plant = False
@ -143,17 +151,18 @@ class Level(tool.State):
self.setupZombies() self.setupZombies()
self.setupCars() self.setupCars()
# 小游戏才有CHOOSEBAR_TYPE小游戏没有铲子 # 地图有铲子才添加铲子
if c.CHOOSEBAR_TYPE not in self.map_data: if self.hasShovel:
# 导入小铲子 # 导入小铲子
frame_rect = [0, 0, 71, 67] frame_rect = [0, 0, 71, 67]
self.shovel = tool.get_image_menu(tool.GFX[c.SHOVEL], *frame_rect, c.BLACK, 1.1) self.shovel = tool.get_image_menu(tool.GFX[c.SHOVEL], *frame_rect, c.BLACK, 1.1)
self.shovel_rect = self.shovel.get_rect() self.shovel_rect = self.shovel.get_rect()
frame_rect = [0, 0, 77, 75] frame_rect = [0, 0, 77, 75]
self.shovel_positon = (550, 2)
self.shovel_box = tool.get_image_menu(tool.GFX[c.SHOVEL_BOX], *frame_rect, c.BLACK, 1.1) self.shovel_box = tool.get_image_menu(tool.GFX[c.SHOVEL_BOX], *frame_rect, c.BLACK, 1.1)
self.shovel_box_rect = self.shovel_box.get_rect() self.shovel_box_rect = self.shovel_box.get_rect()
self.shovel_rect.x = self.shovel_box_rect.x = 550 self.shovel_rect.x = self.shovel_box_rect.x = self.shovel_positon[0]
self.shovel_rect.y = self.shovel_box_rect.y = 2 self.shovel_rect.y = self.shovel_box_rect.y = self.shovel_positon[1]
self.setupLittleMenu() self.setupLittleMenu()
@ -222,11 +231,22 @@ class Level(tool.State):
return True return True
return False return False
# 检查小铲子有没有被点击 # 用小铲子移除植物
def shovelRemovePlant(self, mouse_pos):
x, y = mouse_pos
map_x, map_y = self.map.getMapIndex(x, y)
for i in self.plant_groups[map_y]:
if(x >= i.rect.x and x <= i.rect.right and
y >= i.rect.y and y <= i.rect.bottom):
i.kill()
return
# 检查小铲子的位置有没有被点击
# 方便放回去
def checkShovelClick(self, mouse_pos): def checkShovelClick(self, mouse_pos):
x, y = mouse_pos x, y = mouse_pos
if(x >= self.mainMenu_button_rect.x and x <= self.mainMenu_button_rect.right and if(x >= self.shovel_box_rect.x and x <= self.shovel_box_rect.right and
y >= self.mainMenu_button_rect.y and y <= self.mainMenu_button_rect.bottom): y >= self.shovel_box_rect.y and y <= self.shovel_box_rect.bottom):
return True return True
return False return False
@ -272,8 +292,17 @@ class Level(tool.State):
# 暂停 显示菜单 # 暂停 显示菜单
self.showLittleMenu = True self.showLittleMenu = True
elif self.checkShovelClick(mouse_pos): elif self.checkShovelClick(mouse_pos):
self.drag_shovel = True self.drag_shovel = not self.drag_shovel
if self.drag_shovel:
# 小铲子要隐藏鼠标
pg.mouse.set_visible(False)
else:
self.removeMouseImagePlus()
elif self.drag_shovel:
# 移出这地方的植物
self.shovelRemovePlant(mouse_pos)
# 拖动植物或者铲子
if not self.drag_plant and mouse_pos and mouse_click[0]: if not self.drag_plant and mouse_pos and mouse_click[0]:
result = self.menubar.checkCardClick(mouse_pos) result = self.menubar.checkCardClick(mouse_pos)
if result: if result:
@ -288,6 +317,9 @@ class Level(tool.State):
self.addPlant() self.addPlant()
elif mouse_pos is None: elif mouse_pos is None:
self.setupHintImage() self.setupHintImage()
elif self.drag_shovel:
if mouse_click[1]:
self.removeMouseImagePlus()
if self.produce_sun: if self.produce_sun:
@ -296,7 +328,9 @@ class Level(tool.State):
map_x, map_y = self.map.getRandomMapIndex() map_x, map_y = self.map.getRandomMapIndex()
x, y = self.map.getMapGridPos(map_x, map_y) x, y = self.map.getMapGridPos(map_x, map_y)
self.sun_group.add(plant.Sun(x, 0, x, y)) self.sun_group.add(plant.Sun(x, 0, x, y))
if not self.drag_plant and mouse_pos and mouse_click[0]:
# 检查有没有捡到阳光
if not self.drag_plant and not self.drag_shovel and mouse_pos and mouse_click[0]:
for sun in self.sun_group: for sun in self.sun_group:
if sun.checkCollision(mouse_pos[0], mouse_pos[1]): if sun.checkCollision(mouse_pos[0], mouse_pos[1]):
self.menubar.increaseSunValue(sun.sun_value) self.menubar.increaseSunValue(sun.sun_value)
@ -331,6 +365,7 @@ class Level(tool.State):
x, y = pg.mouse.get_pos() x, y = pg.mouse.get_pos()
return self.map.showPlant(x, y) return self.map.showPlant(x, y)
# 种植物
def addPlant(self): def addPlant(self):
pos = self.canSeedPlant() pos = self.canSeedPlant()
if pos is None: if pos is None:
@ -444,6 +479,13 @@ class Level(tool.State):
self.hint_image = None self.hint_image = None
self.hint_plant = False self.hint_plant = False
# 移除小铲子
def removeMouseImagePlus(self):
pg.mouse.set_visible(True)
self.drag_shovel = False
self.shovel_rect.x = self.shovel_positon[0]
self.shovel_rect.y = self.shovel_positon[1]
def checkBulletCollisions(self): def checkBulletCollisions(self):
collided_func = pg.sprite.collide_circle_ratio(0.7) collided_func = pg.sprite.collide_circle_ratio(0.7)
for i in range(self.map_y_len): for i in range(self.map_y_len):
@ -651,6 +693,12 @@ class Level(tool.State):
self.mouse_rect.centery = y self.mouse_rect.centery = y
surface.blit(self.mouse_image, self.mouse_rect) surface.blit(self.mouse_image, self.mouse_rect)
def drawMouseShowPlus(self, surface):
x, y = pg.mouse.get_pos()
self.shovel_rect.centerx = x
self.shovel_rect.centery = y
surface.blit(self.shovel, self.shovel_rect)
def drawZombieFreezeTrap(self, i, surface): def drawZombieFreezeTrap(self, i, surface):
for zombie in self.zombie_groups[i]: for zombie in self.zombie_groups[i]:
zombie.drawFreezeTrap(surface) zombie.drawFreezeTrap(surface)
@ -661,9 +709,10 @@ class Level(tool.State):
if self.state == c.CHOOSE: if self.state == c.CHOOSE:
self.panel.draw(surface) self.panel.draw(surface)
elif self.state == c.PLAY: elif self.state == c.PLAY:
# 画铲子 if self.hasShovel:
surface.blit(self.shovel_box, self.shovel_box_rect) # 画铲子
surface.blit(self.shovel, self.shovel_rect) surface.blit(self.shovel_box, self.shovel_box_rect)
surface.blit(self.shovel, self.shovel_rect)
# 画小菜单 # 画小菜单
surface.blit(self.little_menu, self.little_menu_rect) surface.blit(self.little_menu, self.little_menu_rect)
@ -682,7 +731,7 @@ class Level(tool.State):
if self.drag_plant: if self.drag_plant:
self.drawMouseShow(surface) self.drawMouseShow(surface)
if self.drag_shovel: if self.hasShovel and self.drag_shovel:
self.drawMouseShowPlus(surface) self.drawMouseShowPlus(surface)
if self.showLittleMenu: if self.showLittleMenu:

View File

@ -46,6 +46,13 @@ class Menu(tool.State):
self.exit_rect.x = 690 self.exit_rect.x = 690
self.exit_rect.y = 400 self.exit_rect.y = 400
# 小游戏
frame_rect = [0, 0, 317, 139]
self.option_littleGame = tool.get_image_menu(tool.GFX[c.LITTLEGAME_BUTTON], *frame_rect, c.BLACK, 0.9)
self.option_littleGame_rect = self.option_littleGame.get_rect()
self.option_littleGame_rect.x = 425
self.option_littleGame_rect.y = 200
self.option_start = 0 self.option_start = 0
self.option_timer = 0 self.option_timer = 0
self.option_clicked = False self.option_clicked = False
@ -66,6 +73,15 @@ class Menu(tool.State):
self.done = True self.done = True
self.next = c.EXIT self.next = c.EXIT
# 检查有没有按到小游戏
def checkLittleGameClick(self, mouse_pos):
x, y = mouse_pos
if(x >= self.option_littleGame_rect.x and x <= self.option_littleGame_rect.right and
y >= self.option_littleGame_rect.y and y <= self.option_littleGame_rect.bottom):
self.done = True
# 确实小游戏还是用的level
self.persist[c.LITTLEGAME_BUTTON] = True
def update(self, surface, current_time, mouse_pos, mouse_click): def update(self, surface, current_time, mouse_pos, mouse_click):
self.current_time = self.game_info[c.CURRENT_TIME] = current_time self.current_time = self.game_info[c.CURRENT_TIME] = current_time
@ -74,6 +90,7 @@ class Menu(tool.State):
if mouse_pos: if mouse_pos:
self.checkOptionClick(mouse_pos) self.checkOptionClick(mouse_pos)
self.checkExitClick(mouse_pos) self.checkExitClick(mouse_pos)
self.checkLittleGameClick(mouse_pos)
else: else:
# 点到后播放动画 # 点到后播放动画
if(self.current_time - self.option_timer) > 200: if(self.current_time - self.option_timer) > 200:
@ -89,3 +106,4 @@ class Menu(tool.State):
surface.blit(self.bg_image, self.bg_rect) surface.blit(self.bg_image, self.bg_rect)
surface.blit(self.option_image, self.option_rect) surface.blit(self.option_image, self.option_rect)
surface.blit(self.option_exit, self.exit_rect) surface.blit(self.option_exit, self.exit_rect)
surface.blit(self.option_littleGame, self.option_littleGame_rect)