将植物在选择菜单种的顺序改为与原版相同

This commit is contained in:
星外之神 2022-04-22 22:22:27 +08:00
parent bb9dbe3604
commit 9305a347d1
3 changed files with 132 additions and 113 deletions

View File

@ -4,93 +4,96 @@ import pygame as pg
from .. import tool from .. import tool
from .. import constants as c from .. import constants as c
PANEL_Y_START = 87 plantInfo = (#元组 (植物名称, 卡片名称, 阳光, 冷却时间)
PANEL_X_START = 22 (c.PEASHOOTER,
PANEL_Y_INTERNAL = 73 c.CARD_PEASHOOTER,
PANEL_X_INTERNAL = 53 100,
BAR_CARD_X_INTERNAL = 51 7500),
# 以后可以增加解锁功能 (c.SUNFLOWER,
CARD_MAX_NUM = 10 c.CARD_SUNFLOWER,
CARD_LIST_NUM = CARD_MAX_NUM 50,
7500),
(c.CHERRYBOMB,
c.CARD_CHERRYBOMB,
150,
50000),
(c.WALLNUT,
c.CARD_WALLNUT,
50,
30000),
(c.POTATOMINE,
c.CARD_POTATOMINE,
25,
30000),
(c.SNOWPEASHOOTER,
c.CARD_SNOWPEASHOOTER,
175,
7500),
(c.CHOMPER,
c.CARD_CHOMPER,
150,
7500),
(c.REPEATERPEA,
c.CARD_REPEATERPEA,
200,
7500),
(c.PUFFSHROOM,
c.CARD_PUFFSHROOM,
0,
7500),
(c.SUNSHROOM,
c.CARD_SUNSHROOM,
25,
7500),
(c.HYPNOSHROOM,
c.CARD_HYPNOSHROOM,
75,
30000),
(c.SCAREDYSHROOM,
c.CARD_SCAREDYSHROOM,
25,
7500),
(c.ICESHROOM,
c.CARD_ICESHROOM,
75,
50000),
(c.LILYPAD,
c.CARD_LILYPAD,
25,
7500),
(c.SQUASH,
c.CARD_SQUASH,
50,
30000),
(c.THREEPEASHOOTER,
c.CARD_THREEPEASHOOTER,
325,
7500),
(c.JALAPENO,
c.CARD_JALAPENO,
125,
30000),
(c.SPIKEWEED,
c.CARD_SPIKEWEED,
100,
7500),
(c.TORCHWOOD,
c.CARD_TORCHWOOD,
175,
7500),
# 应当保证这两个在一般模式下不可选的特殊植物恒在最后
(c.WALLNUTBOWLING,
c.CARD_WALLNUT,
0,
0),
(c.REDWALLNUTBOWLING,
c.CARD_REDWALLNUT,
0,
0),
)
''' # 指定了哪些卡可选
plantDict = {# 字典 植物名称:(卡片名称, 阳光, 冷却时间) cards_to_choose = range(len(plantInfo) - 2)
c.SUNFLOWER:(c.CARD_SUNFLOWER,
50,
7500),
c.PEASHOOTER:(c.CARD_PEASHOOTER,
100,
7500),
c.SNOWPEASHOOTER:(c.CARD_SNOWPEASHOOTER,
175,
7500),
c.WALLNUT:(c.CARD_WALLNUT,
50,
30000),
c.CHERRYBOMB:(c.CARD_CHERRYBOMB,
150,
50000),
c.THREEPEASHOOTER:(c.CARD_THREEPEASHOOTER,
325,
7500),
c.REPEATERPEA:(c.CARD_REPEATERPEA,
200,
7500),
c.CHOMPER:(c.CARD_CHOMPER,
150,
7500),
c.PUFFSHROOM:(c.CARD_PUFFSHROOM,
0,
7500),
c.POTATOMINE:(c.CARD_POTATOMINE,
25,
30000),
c.SQUASH:(c.CARD_SQUASH,
50,
30000),
c.SPIKEWEED:(c.CARD_SPIKEWEED,
100,
7500),
c.JALAPENO:(c.CARD_JALAPENO,
125,
30000),
c.SCAREDYSHROOM:(c.CARD_SCAREDYSHROOM,
25,
7500),
c.SUNSHROOM:(c.CARD_SUNSHROOM,
25,
7500),
c.ICESHROOM:(c.CARD_ICESHROOM,
75,
50000),
c.HYPNOSHROOM:(c.CARD_HYPNOSHROOM,
75,
30000),
c.WALLNUTBOWLING:(c.CARD_WALLNUT,
0,
0),
c.REDWALLNUTBOWLING:(c.CARD_REDWALLNUT,
0,
0),
c.LILYPAD:(c.CARD_LILYPAD,
25,
7500)}
'''
card_name_list = (c.CARD_SUNFLOWER, c.CARD_PEASHOOTER, c.CARD_SNOWPEASHOOTER, c.CARD_WALLNUT,
c.CARD_CHERRYBOMB, c.CARD_THREEPEASHOOTER, c.CARD_REPEATERPEA, c.CARD_CHOMPER,
c.CARD_PUFFSHROOM, c.CARD_POTATOMINE, c.CARD_SQUASH, c.CARD_SPIKEWEED,
c.CARD_JALAPENO, c.CARD_SCAREDYSHROOM, c.CARD_SUNSHROOM, c.CARD_ICESHROOM,
c.CARD_HYPNOSHROOM, c.CARD_LILYPAD, c.CARD_TORCHWOOD, c.CARD_WALLNUT, c.CARD_REDWALLNUT)
plant_name_list = (c.SUNFLOWER, c.PEASHOOTER, c.SNOWPEASHOOTER, c.WALLNUT,
c.CHERRYBOMB, c.THREEPEASHOOTER, c.REPEATERPEA, c.CHOMPER,
c.PUFFSHROOM, c.POTATOMINE, c.SQUASH, c.SPIKEWEED,
c.JALAPENO, c.SCAREDYSHROOM, c.SUNSHROOM, c.ICESHROOM,
c.HYPNOSHROOM, c.LILYPAD, c.TORCHWOOD, c.WALLNUTBOWLING, c.REDWALLNUTBOWLING)
plant_sun_list = (50, 100, 175, 50, 150, 325, 200, 150, 0, 25, 50, 100, 125, 25, 25, 75, 75, 25, 175,0, 0)
plant_frozen_time_list = (7500, 7500, 7500, 30000, 50000, 7500, 7500, 7500, 7500, 30000,
30000, 7500, 50000, 7500, 7500, 50000, 30000, 7500, 7500, 0, 0)
all_card_list = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)
def getSunValueImage(sun_value): def getSunValueImage(sun_value):
@ -114,22 +117,22 @@ def getCardPool(data):
card_pool = [] card_pool = []
for card in data: for card in data:
tmp = card['name'] tmp = card['name']
for i,name in enumerate(plant_name_list): for i,name in enumerate(plantInfo):
if name == tmp: if name[c.PLANT_NAME_INDEX] == tmp:
card_pool.append(i) card_pool.append(i)
break break
return card_pool return card_pool
class Card(): class Card():
def __init__(self, x, y, name_index, scale=0.5): def __init__(self, x, y, index, scale=0.5):
self.loadFrame(card_name_list[name_index], scale) self.loadFrame(plantInfo[index][c.CARD_INDEX], scale)
self.rect = self.orig_image.get_rect() self.rect = self.orig_image.get_rect()
self.rect.x = x self.rect.x = x
self.rect.y = y self.rect.y = y
self.name_index = name_index self.index = index
self.sun_cost = plant_sun_list[name_index] self.sun_cost = plantInfo[index][c.SUN_INDEX]
self.frozen_time = plant_frozen_time_list[name_index] self.frozen_time = plantInfo[index][c.FROZEN_INDEX]
self.frozen_timer = -self.frozen_time self.frozen_timer = -self.frozen_time
self.refresh_timer = 0 self.refresh_timer = 0
self.select = True self.select = True
@ -240,7 +243,7 @@ class MenuBar():
x = self.card_offset_x x = self.card_offset_x
y = 8 y = 8
for index in card_list: for index in card_list:
x += BAR_CARD_X_INTERNAL x += c.BAR_CARD_X_INTERNAL
self.card_list.append(Card(x, y, index)) self.card_list.append(Card(x, y, index))
def checkCardClick(self, mouse_pos): def checkCardClick(self, mouse_pos):
@ -248,7 +251,7 @@ class MenuBar():
for card in self.card_list: for card in self.card_list:
if card.checkMouseClick(mouse_pos): if card.checkMouseClick(mouse_pos):
if card.canClick(self.sun_value, self.current_time): if card.canClick(self.sun_value, self.current_time):
result = (plant_name_list[card.name_index], card) result = (plantInfo[card.index][c.PLANT_NAME_INDEX], card)
break break
return result return result
@ -267,7 +270,7 @@ class MenuBar():
def setCardFrozenTime(self, plant_name): def setCardFrozenTime(self, plant_name):
for card in self.card_list: for card in self.card_list:
if plant_name_list[card.name_index] == plant_name: if plantInfo[card.index][c.PLANT_NAME_INDEX] == plant_name:
card.setFrozenTime(self.current_time) card.setFrozenTime(self.current_time)
break break
@ -309,7 +312,7 @@ class Panel():
self.panel_image = self.loadFrame(c.PANEL_BACKGROUND) self.panel_image = self.loadFrame(c.PANEL_BACKGROUND)
self.panel_rect = self.panel_image.get_rect() self.panel_rect = self.panel_image.get_rect()
self.panel_rect.x = 0 self.panel_rect.x = 0
self.panel_rect.y = PANEL_Y_START self.panel_rect.y = c.PANEL_Y_START
self.value_image = getSunValueImage(sun_value) self.value_image = getSunValueImage(sun_value)
@ -324,29 +327,29 @@ class Panel():
def setupCards(self, card_list): def setupCards(self, card_list):
self.card_list = [] self.card_list = []
x = PANEL_X_START - PANEL_X_INTERNAL x = c.PANEL_X_START - c.PANEL_X_INTERNAL
y = PANEL_Y_START + 43 - PANEL_Y_INTERNAL y = c.PANEL_Y_START + 43 - c.PANEL_Y_INTERNAL
for i, index in enumerate(card_list): for i, index in enumerate(card_list):
if i % 8 == 0: if i % 8 == 0:
x = PANEL_X_START - PANEL_X_INTERNAL x = c.PANEL_X_START - c.PANEL_X_INTERNAL
y += PANEL_Y_INTERNAL y += c.PANEL_Y_INTERNAL
x += PANEL_X_INTERNAL x += c.PANEL_X_INTERNAL
self.card_list.append(Card(x, y, index, 0.5)) self.card_list.append(Card(x, y, index, 0.5))
def checkCardClick(self, mouse_pos): def checkCardClick(self, mouse_pos):
delete_card = None delete_card = None
for card in self.selected_cards: for card in self.selected_cards:
if delete_card: # when delete a card, move right cards to left if delete_card: # when delete a card, move right cards to left
card.rect.x -= BAR_CARD_X_INTERNAL card.rect.x -= c.BAR_CARD_X_INTERNAL
elif card.checkMouseClick(mouse_pos): elif card.checkMouseClick(mouse_pos):
self.deleteCard(card.name_index) self.deleteCard(card.index)
delete_card = card delete_card = card
if delete_card: if delete_card:
self.selected_cards.remove(delete_card) self.selected_cards.remove(delete_card)
self.selected_num -= 1 self.selected_num -= 1
if self.selected_num >= CARD_MAX_NUM: if self.selected_num >= c.BAR_CARD_X_INTERNAL:
return return
for card in self.card_list: for card in self.card_list:
@ -358,15 +361,15 @@ class Panel():
def addCard(self, card): def addCard(self, card):
card.setSelect(False) card.setSelect(False)
y = 8 y = 8
x = 77 + self.selected_num * BAR_CARD_X_INTERNAL x = 77 + self.selected_num * c.BAR_CARD_X_INTERNAL
self.selected_cards.append(Card(x, y, card.name_index)) self.selected_cards.append(Card(x, y, card.index))
self.selected_num += 1 self.selected_num += 1
def deleteCard(self, index): def deleteCard(self, index):
self.card_list[index].setSelect(True) self.card_list[index].setSelect(True)
def checkStartButtonClick(self, mouse_pos): def checkStartButtonClick(self, mouse_pos):
if self.selected_num < CARD_LIST_NUM: if self.selected_num < c.CARD_LIST_NUM:
return False return False
x, y = mouse_pos x, y = mouse_pos
@ -378,7 +381,7 @@ class Panel():
def getSelectedCards(self): def getSelectedCards(self):
card_index_list = [] card_index_list = []
for card in self.selected_cards: for card in self.selected_cards:
card_index_list.append(card.name_index) card_index_list.append(card.index)
return card_index_list return card_index_list
def draw(self, surface): def draw(self, surface):
@ -390,7 +393,7 @@ class Panel():
for card in self.selected_cards: for card in self.selected_cards:
card.draw(surface) card.draw(surface)
if self.selected_num >= CARD_LIST_NUM: if self.selected_num >= c.CARD_LIST_NUM:
surface.blit(self.button_image, self.button_rect) surface.blit(self.button_image, self.button_rect)
# 传送带模式 # 传送带模式
@ -473,8 +476,8 @@ class MoveBar():
y = 6 y = 6
index = random.randint(0, len(self.card_pool) - 1) index = random.randint(0, len(self.card_pool) - 1)
card_index = self.card_pool[index] card_index = self.card_pool[index]
card_name = card_name_list[card_index] + '_move' card_name = plantInfo[card_index][c.CARD_INDEX] + '_move'
plant_name = plant_name_list[card_index] plant_name = plantInfo[card_index][c.PLANT_NAME_INDEX]
self.card_list.append(MoveCard(x, y, card_name, plant_name)) self.card_list.append(MoveCard(x, y, card_name, plant_name))
return True return True

View File

@ -122,6 +122,22 @@ PANEL_BACKGROUND = 'PanelBackground'
START_BUTTON = 'StartButton' START_BUTTON = 'StartButton'
CARD_POOL = 'card_pool' CARD_POOL = 'card_pool'
# 关于植物栏的像素设置
PANEL_Y_START = 87
PANEL_X_START = 22
PANEL_Y_INTERNAL = 73
PANEL_X_INTERNAL = 53
BAR_CARD_X_INTERNAL = 51
# 这里以后可以增加解锁功能
CARD_MAX_NUM = 10
CARD_LIST_NUM = CARD_MAX_NUM
# 所选植物信息索引
PLANT_NAME_INDEX = 0
CARD_INDEX = 1
SUN_INDEX = 2
FROZEN_INDEX = 3
MOVEBAR_CARD_FRESH_TIME = 6000 MOVEBAR_CARD_FRESH_TIME = 6000
CARD_MOVE_TIME = 60 CARD_MOVE_TIME = 60

View File

@ -164,7 +164,7 @@ class Level(tool.State):
def initChoose(self): def initChoose(self):
self.state = c.CHOOSE self.state = c.CHOOSE
self.panel = menubar.Panel(menubar.all_card_list, self.map_data[c.INIT_SUN_NAME]) self.panel = menubar.Panel(menubar.cards_to_choose, self.map_data[c.INIT_SUN_NAME])
def choose(self, mouse_pos, mouse_click): def choose(self, mouse_pos, mouse_click):
if mouse_pos and mouse_click[0]: if mouse_pos and mouse_click[0]: