国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用 Python 實(shí)現(xiàn)植物大戰(zhàn)僵尸代碼!

這篇具有很好參考價(jià)值的文章主要介紹了用 Python 實(shí)現(xiàn)植物大戰(zhàn)僵尸代碼!。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

  • plant_frozen_time_list[0] 是太陽(yáng)花的冷卻時(shí)間。

植物卡片類


每個(gè)植物卡片是一個(gè)單獨(dú)的Card類,用來(lái)顯示這個(gè)植物。

  • checkMouseClick函數(shù):判斷鼠標(biāo)是否點(diǎn)擊到這個(gè)卡片;

  • canClick:判斷這個(gè)卡片是否能種植(有沒(méi)有足夠的點(diǎn)數(shù),是否還在冷卻時(shí)間內(nèi));

  • update 函數(shù):通過(guò)設(shè)置圖片的透明度來(lái)表示這個(gè)卡片是否能選擇。

卡片欄類


MenuBar類顯示圖3中的植物卡片欄:

  • self.sun_value:當(dāng)前采集的太陽(yáng)點(diǎn)數(shù);

  • self.card_list: 植物卡片的list;

  • setupCards函數(shù):遍歷初始化__init__函數(shù)中傳入這個(gè)關(guān)卡選好的植物卡片list,依次創(chuàng)建Card類,設(shè)置每個(gè)卡片的顯示位置;

  • checkCardClick函數(shù):檢查鼠標(biāo)是否點(diǎn)擊了卡片欄上的某個(gè)植物卡片,如果選擇了一個(gè)可種植的卡片,返回結(jié)果。

代碼:

import pygame as pg

from … import tool

from … import constants as c

PANEL_Y_START = 87

PANEL_X_START = 22

PANEL_Y_INTERNAL = 74

PANEL_X_INTERNAL = 53

CARD_LIST_NUM = 8

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]

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]

plant_sun_list = [50, 100, 175, 50, 150, 325, 200, 150, 0, 25, 50, 100, 125, 25, 25, 75]

plant_frozen_time_list = [7500, 7500, 7500, 30000, 50000, 7500, 7500, 7500, 7500, 30000,

30000, 7500, 50000, 7500, 7500, 50000]

all_card_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

def getSunValueImage(sun_value):

font = pg.font.SysFont(None, 22)

width = 32

msg_image = font.render(str(sun_value), True, c.NAVYBLUE, c.LIGHTYELLOW)

msg_rect = msg_image.get_rect()

msg_w = msg_rect.width

image = pg.Surface([width, 17])

x = width - msg_w

image.fill(c.LIGHTYELLOW)

image.blit(msg_image, (x, 0), (0, 0, msg_rect.w, msg_rect.h))

image.set_colorkey(c.BLACK)

return image

class Card():

def init(self, x, y, name_index, scale=0.78):

self.loadFrame(card_name_list[name_index], scale)

self.rect = self.orig_image.get_rect()

self.rect.x = x

self.rect.y = y

self.name_index = name_index

self.sun_cost = plant_sun_list[name_index]

self.frozen_time = plant_frozen_time_list[name_index]

self.frozen_timer = -self.frozen_time

self.refresh_timer = 0

self.select = True

def loadFrame(self, name, scale):

frame = tool.GFX[name]

rect = frame.get_rect()

width, height = rect.w, rect.h

self.orig_image = tool.get_image(frame, 0, 0, width, height, c.BLACK, scale)

self.image = self.orig_image

def checkMouseClick(self, mouse_pos):

x, y = mouse_pos

if(x >= self.rect.x and x <= self.rect.right and

y >= self.rect.y and y <= self.rect.bottom):

return True

return False

def canClick(self, sun_value, current_time):

if self.sun_cost <= sun_value and (current_time - self.frozen_timer) > self.frozen_time:

return True

return False

def canSelect(self):

return self.select

def setSelect(self, can_select):

self.select = can_select

if can_select:

self.image.set_alpha(255)

else:

self.image.set_alpha(128)

def setFrozenTime(self, current_time):

self.frozen_timer = current_time

def createShowImage(self, sun_value, current_time):

‘’'create a card image to show cool down status

or disable status when have not enough sun value’‘’

time = current_time - self.frozen_timer

if time < self.frozen_time: #cool down status

image = pg.Surface([self.rect.w, self.rect.h])

frozen_image = self.orig_image.copy()

frozen_image.set_alpha(128)

frozen_height = (self.frozen_time - time)/self.frozen_time * self.rect.h

image.blit(frozen_image, (0,0), (0, 0, self.rect.w, frozen_height))

image.blit(self.orig_image, (0,frozen_height),

(0, frozen_height, self.rect.w, self.rect.h - frozen_height))

elif self.sun_cost > sun_value: #disable status

image = self.orig_image.copy()

image.set_alpha(192)

else:

image = self.orig_image

return image

def update(self, sun_value, current_time):

if (current_time - self.refresh_timer) >= 250:

self.image = self.createShowImage(sun_value, current_time)

self.refresh_timer = current_time

def draw(self, surface):

surface.blit(self.image, self.rect)

class MenuBar():

def init(self, card_list, sun_value):

self.loadFrame(c.MENUBAR_BACKGROUND)

self.rect = self.image.get_rect()

self.rect.x = 10

self.rect.y = 0

self.sun_value = sun_value

self.card_offset_x = 32

self.setupCards(card_list)

def loadFrame(self, name):

frame = tool.GFX[name]

rect = frame.get_rect()

frame_rect = (rect.x, rect.y, rect.w, rect.h)

self.image = tool.get_image(tool.GFX[name], *frame_rect, c.WHITE, 1)

def update(self, current_time):

self.current_time = current_time

for card in self.card_list:

card.update(self.sun_value, self.current_time)

def createImage(self, x, y, num):

if num == 1:

return

img = self.image

rect = self.image.get_rect()

width = rect.w

height = rect.h

self.image = pg.Surface((width * num, height)).convert()

self.rect = self.image.get_rect()

self.rect.x = x

self.rect.y = y

for i in range(num):

x = i * width

self.image.blit(img, (x,0))

self.image.set_colorkey(c.BLACK)

def setupCards(self, card_list):

self.card_list = []

x = self.card_offset_x

y = 8

for index in card_list:

x += 55

self.card_list.append(Card(x, y, index))

def checkCardClick(self, mouse_pos):

result = None

for card in self.card_list:

if card.checkMouseClick(mouse_pos):

if card.canClick(self.sun_value, self.current_time):

result = (plant_name_list[card.name_index], card.sun_cost)

break

return result

def checkMenuBarClick(self, mouse_pos):

x, y = mouse_pos

if(x >= self.rect.x and x <= self.rect.right and

y >= self.rect.y and y <= self.rect.bottom):

return True

return False

def decreaseSunValue(self, value):

self.sun_value -= value

def increaseSunValue(self, value):

self.sun_value += value

def setCardFrozenTime(self, plant_name):

for card in self.card_list:

if plant_name_list[card.name_index] == plant_name:

card.setFrozenTime(self.current_time)

break

def drawSunValue(self):

self.value_image = getSunValueImage(self.sun_value)

self.value_rect = self.value_image.get_rect()

self.value_rect.x = 21

self.value_rect.y = self.rect.bottom - 21

self.image.blit(self.value_image, self.value_rect)

def draw(self, surface):

self.drawSunValue()

surface.blit(self.image, self.rect)

for card in self.card_list:

card.draw(surface)

class Panel():

def init(self, card_list, sun_value):

self.loadImages(sun_value)

self.selected_cards = []

self.selected_num = 0

self.setupCards(card_list)

def loadFrame(self, name):

frame = tool.GFX[name]

rect = frame.get_rect()

frame_rect = (rect.x, rect.y, rect.w, rect.h)

return tool.get_image(tool.GFX[name], *frame_rect, c.WHITE, 1)

def loadImages(self, sun_value):

self.menu_image = self.loadFrame(c.MENUBAR_BACKGROUND)

self.menu_rect = self.menu_image.get_rect()

self.menu_rect.x = 0

self.menu_rect.y = 0

self.panel_image = self.loadFrame(c.PANEL_BACKGROUND)

self.panel_rect = self.panel_image.get_rect()

self.panel_rect.x = 0

self.panel_rect.y = PANEL_Y_START

self.value_image = getSunValueImage(sun_value)

self.value_rect = self.value_image.get_rect()

self.value_rect.x = 21

self.value_rect.y = self.menu_rect.bottom - 21

self.button_image = self.loadFrame(c.START_BUTTON)

self.button_rect = self.button_image.get_rect()

self.button_rect.x = 155

self.button_rect.y = 547

def setupCards(self, card_list):

self.card_list = []

x = PANEL_X_START - PANEL_X_INTERNAL

y = PANEL_Y_START + 43 - PANEL_Y_INTERNAL

for i, index in enumerate(card_list):

if i % 8 == 0:

x = PANEL_X_START - PANEL_X_INTERNAL

y += PANEL_Y_INTERNAL

x += PANEL_X_INTERNAL

self.card_list.append(Card(x, y, index, 0.75))

def checkCardClick(self, mouse_pos):

delete_card = None

for card in self.selected_cards:

if delete_card: # when delete a card, move right cards to left

card.rect.x -= 55

elif card.checkMouseClick(mouse_pos):

self.deleteCard(card.name_index)

delete_card = card

if delete_card:

self.selected_cards.remove(delete_card)

self.selected_num -= 1

if self.selected_num == CARD_LIST_NUM:

return

for card in self.card_list:

if card.checkMouseClick(mouse_pos):

if card.canSelect():

self.addCard(card)

break

def addCard(self, card):

card.setSelect(False)

y = 8

x = 78 + self.selected_num * 55

self.selected_cards.append(Card(x, y, card.name_index))

self.selected_num += 1

def deleteCard(self, index):

self.card_list[index].setSelect(True)

def checkStartButtonClick(self, mouse_pos):

if self.selected_num < CARD_LIST_NUM:

return False

x, y = mouse_pos

if (x >= self.button_rect.x and x <= self.button_rect.right and

y >= self.button_rect.y and y <= self.button_rect.bottom):

return True

return False

def getSelectedCards(self):

card_index_list = []

for card in self.selected_cards:

card_index_list.append(card.name_index)

return card_index_list

def draw(self, surface):

self.menu_image.blit(self.value_image, self.value_rect)

surface.blit(self.menu_image, self.menu_rect)

surface.blit(self.panel_image, self.panel_rect)

for card in self.card_list:

card.draw(surface)

for card in self.selected_cards:

card.draw(surface)

if self.selected_num == CARD_LIST_NUM:

surface.blit(self.button_image, self.button_rect)

自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過(guò),也去過(guò)華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。

深知大多數(shù)Python工程師,想要提升技能,往往是自己摸索成長(zhǎng)或者是報(bào)班學(xué)習(xí),但對(duì)于培訓(xùn)機(jī)構(gòu)動(dòng)則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前!

因此收集整理了一份《2024年P(guān)ython開(kāi)發(fā)全套學(xué)習(xí)資料》,初衷也很簡(jiǎn)單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。

用 Python 實(shí)現(xiàn)植物大戰(zhàn)僵尸代碼!,程序員,python,pygame,開(kāi)發(fā)語(yǔ)言

用 Python 實(shí)現(xiàn)植物大戰(zhàn)僵尸代碼!,程序員,python,pygame,開(kāi)發(fā)語(yǔ)言

用 Python 實(shí)現(xiàn)植物大戰(zhàn)僵尸代碼!,程序員,python,pygame,開(kāi)發(fā)語(yǔ)言

用 Python 實(shí)現(xiàn)植物大戰(zhàn)僵尸代碼!,程序員,python,pygame,開(kāi)發(fā)語(yǔ)言

用 Python 實(shí)現(xiàn)植物大戰(zhàn)僵尸代碼!,程序員,python,pygame,開(kāi)發(fā)語(yǔ)言

用 Python 實(shí)現(xiàn)植物大戰(zhàn)僵尸代碼!,程序員,python,pygame,開(kāi)發(fā)語(yǔ)言

既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上前端開(kāi)發(fā)知識(shí)點(diǎn),真正體系化!

由于文件比較大,這里只是將部分目錄大綱截圖出來(lái),每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且后續(xù)會(huì)持續(xù)更新

如果你覺(jué)得這些內(nèi)容對(duì)你有幫助,可以掃碼獲?。。。。▊渥ython)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-856189.html

想要提升技能,往往是自己摸索成長(zhǎng)或者是報(bào)班學(xué)習(xí),但對(duì)于培訓(xùn)機(jī)構(gòu)動(dòng)則幾千的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前!**

因此收集整理了一份《2024年P(guān)ython開(kāi)發(fā)全套學(xué)習(xí)資料》,初衷也很簡(jiǎn)單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。

[外鏈圖片轉(zhuǎn)存中…(img-LzGslljM-1713243264559)]

[外鏈圖片轉(zhuǎn)存中…(img-uChCZgBs-1713243264559)]

[外鏈圖片轉(zhuǎn)存中…(img-Argto2Du-1713243264560)]

[外鏈圖片轉(zhuǎn)存中…(img-j3511xSO-1713243264560)]

用 Python 實(shí)現(xiàn)植物大戰(zhàn)僵尸代碼!,程序員,python,pygame,開(kāi)發(fā)語(yǔ)言

用 Python 實(shí)現(xiàn)植物大戰(zhàn)僵尸代碼!,程序員,python,pygame,開(kāi)發(fā)語(yǔ)言

既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上前端開(kāi)發(fā)知識(shí)點(diǎn),真正體系化!

由于文件比較大,這里只是將部分目錄大綱截圖出來(lái),每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且后續(xù)會(huì)持續(xù)更新

如果你覺(jué)得這些內(nèi)容對(duì)你有幫助,可以掃碼獲取?。。。▊渥ython)

用 Python 實(shí)現(xiàn)植物大戰(zhàn)僵尸代碼!,程序員,python,pygame,開(kāi)發(fā)語(yǔ)言

到了這里,關(guān)于用 Python 實(shí)現(xiàn)植物大戰(zhàn)僵尸代碼!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 植物大戰(zhàn)僵尸Python版,附帶源碼注解

    植物大戰(zhàn)僵尸Python版,附帶源碼注解

    目錄 一、實(shí)現(xiàn)功能 二、安裝環(huán)境要求 三、如何開(kāi)始游戲 四、怎么玩 五、演示 六、部分源碼注釋 6.1main.py 6.2map.py 6.3Menubar.py 七、自定義 7.1plant.json 7.2zombie.json 實(shí)施植物:向日葵、豌豆射手、壁桃、雪豆射手、櫻桃炸彈、三豌豆射手、大口蘑菇,海扁蘑菇,土豆,尖刺草,驚

    2024年04月10日
    瀏覽(19)
  • Python制作植物大戰(zhàn)僵尸,趕快來(lái)試試吧

    Python制作植物大戰(zhàn)僵尸,趕快來(lái)試試吧

    哈嘍,大家下午好,我是小圓 想問(wèn)有誰(shuí)不知道植物大戰(zhàn)僵尸這個(gè)游戲啊,我從小就在玩 大學(xué)上課的時(shí)候,老師在上面講課,我偷摸著在下面玩游戲,一邊打僵尸,一邊養(yǎng)植物,還是感覺(jué)挺意思的 ok,今天我們來(lái)用python制作植物大戰(zhàn)僵尸里面的冒險(xiǎn)模式吧 相關(guān)準(zhǔn)備 ?? 在開(kāi)始

    2024年02月11日
    瀏覽(23)
  • C語(yǔ)言實(shí)現(xiàn)植物大戰(zhàn)僵尸(完整版)

    C語(yǔ)言實(shí)現(xiàn)植物大戰(zhàn)僵尸(完整版)

    實(shí)現(xiàn)這個(gè)游戲需要Easy_X 這個(gè)在我前面一篇C++之番外篇愛(ài)心代碼有程序教你怎么下載,大家可自行查看 然后就是 需要植物大戰(zhàn)僵尸的素材和音樂(lè),需要的可以私信 首先是main.cpp 接著是tools.cpp文件 然后是vector2.cpp 最后頭文件tools.h vector2.h 這里給大家演示一下畫(huà)面 ? ?

    2024年02月05日
    瀏覽(16)
  • 用Python制作小游戲之‘植物大戰(zhàn)僵尸’(一)

    1.引入需要的模塊 2.配置圖片地址及頁(yè)面寬高等 3.創(chuàng)建地圖類 4.植物類 5.增加射擊方法 7.豌豆子彈 8.僵尸類 9.以及主程序部分 10.啟動(dòng)程序 完整代碼在下一篇文章中

    2024年02月12日
    瀏覽(20)
  • C語(yǔ)言、c++實(shí)現(xiàn)超好玩植物大戰(zhàn)僵尸(完整版附源碼)

    C語(yǔ)言、c++實(shí)現(xiàn)超好玩植物大戰(zhàn)僵尸(完整版附源碼)

    實(shí)現(xiàn)這個(gè)游戲需要Easy_X 效果圖

    2024年03月24日
    瀏覽(36)
  • 植物大戰(zhàn)僵尸植物表(二)

    植物大戰(zhàn)僵尸植物表(二)

    此文章為“植物大戰(zhàn)僵尸”專欄中的第007刊(2023年9月第六刊)。 提示: 1.用于無(wú)名版; 2.用于1代; 3.pvz指植物大戰(zhàn)僵尸(Plants VS Zonbies)。 土豆雷 窩瓜 火炬樹(shù)樁 火爆辣椒 楊桃 咖啡豆 大蒜 櫻桃炸彈 水草 暗影月光花

    2024年02月10日
    瀏覽(16)
  • 植物大戰(zhàn)僵尸各種僵尸攻略

    此文章為“植物大戰(zhàn)僵尸”專欄中的009刊(2023年9月第八刊),歡迎訂閱。版權(quán)所有。 注意: 1.本博客適用于pvz無(wú)名版; 2.pvz指植物大戰(zhàn)僵尸(Plants VS Zonbies); 3.本文以耗費(fèi)低做標(biāo)準(zhǔn),方法不唯一; 4.本期講述較弱的僵尸。 1.路障舞王 路障舞王死后會(huì)有伴舞僵尸,打起來(lái)很輕

    2024年02月09日
    瀏覽(22)
  • 針對(duì)“掃雷“和“植物大戰(zhàn)僵尸“游戲,分析,掃描,陽(yáng)光值,植物,金幣,僵尸的分析逆向

    針對(duì)“掃雷“和“植物大戰(zhàn)僵尸“游戲,分析,掃描,陽(yáng)光值,植物,金幣,僵尸的分析逆向

    《軟件逆向分析》 2022年9月 [一、實(shí)驗(yàn)工具介紹 3](#一實(shí)驗(yàn)工具介紹) [二、針對(duì)\\\"掃雷\\\"游戲 3](#二針對(duì)掃雷游戲) [2.1分析\\\"初級(jí)\\\"、\\\"中級(jí)\\\"和\\\"高級(jí)\\\"的棋盤內(nèi)存地址范圍 3](#分析初級(jí)中級(jí)和高級(jí)的棋盤內(nèi)存地址范圍) [2.2找出\\\"雷數(shù)\\\"、\\\"笑臉\\\"和\\\"計(jì)時(shí)器\\\"的內(nèi)存地址 9](#找出雷數(shù)笑臉和計(jì)時(shí)

    2024年02月07日
    瀏覽(53)
  • 【植物大戰(zhàn)僵尸融合機(jī)器學(xué)習(xí)】+源碼

    【植物大戰(zhàn)僵尸融合機(jī)器學(xué)習(xí)】+源碼

    今天給大家推薦一個(gè)Gtihub開(kāi)源項(xiàng)目:PythonPlantsVsZombies,翻譯成中就是植物大戰(zhàn)僵尸。 《植物大戰(zhàn)僵尸》是一款極富策略性的小游戲。可怕的僵尸即將入侵,每種僵尸都有不同的特點(diǎn),例如鐵桶僵尸擁有極強(qiáng)的抗擊打能力,礦工僵尸可以挖地道繞過(guò)種植在土壤表面的植物等。玩

    2024年04月17日
    瀏覽(47)
  • Java版【植物大戰(zhàn)僵尸+源碼】

    Java版【植物大戰(zhàn)僵尸+源碼】

    今天給大家推薦一個(gè)Gtihub開(kāi)源項(xiàng)目:PythonPlantsVsZombies,翻譯成中就是植物大戰(zhàn)僵尸。 《植物大戰(zhàn)僵尸》是一款極富策略性的小游戲??膳碌慕┦磳⑷肭郑糠N僵尸都有不同的特點(diǎn),例如鐵桶僵尸擁有極強(qiáng)的抗擊打能力,礦工僵尸可以挖地道繞過(guò)種植在土壤表面的植物等。玩

    2024年04月12日
    瀏覽(18)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包