Pygame坦克大戰(zhàn)游戲開發(fā)實(shí)戰(zhàn)詳解代碼
導(dǎo)語(yǔ)
哈嘍!哈嘍——我是木木子

今天來(lái)升級(jí)下之前寫的坦克大戰(zhàn)游戲嘛,哈哈哈 其實(shí)也不算是修改,就是稍微的調(diào)試一下!??
![]()
因?yàn)橹皩懙慕缑娑际怯⑽牡?,有的小伙伴兒英文一點(diǎn)兒都不會(huì)的可能看著別扭,今天來(lái)一款中
文版的給大家嘛!
俗話說(shuō)的好:“雨露均沾”。哈哈哈.jpg

小簡(jiǎn)介:
《坦克大戰(zhàn)》,1985年由日本開發(fā)商南夢(mèng)宮(Namco)開發(fā),是第一款可以雙打的紅白機(jī)游戲。
當(dāng)時(shí)使用的還是小霸王。
很多小朋友以學(xué)習(xí)的名義買了以后偷偷打的打游戲還被家長(zhǎng)發(fā)現(xiàn)了有 沒得!
《坦克大戰(zhàn)》紅白機(jī)原版共有35關(guān),每一關(guān)的地形和障礙都不同。圖為原版坦克大戰(zhàn)最后一關(guān),你
有沒有打通關(guān)過(guò)?(小聲bb,我這個(gè)游戲水平可能達(dá)不到?。?/p>

正文?
1)游戲規(guī)則:
游戲過(guò)程是這樣的,玩家操作坦克消滅電腦控制的坦克,并保護(hù)自己基地?;貓D標(biāo)是一只傲嬌的張著翅膀的老鷹。小時(shí)候自
己失手把飛鷹轟成燒雞的慘案經(jīng)常發(fā)生。

雙打的時(shí)候,為了看誰(shuí)刷得分高,都爭(zhēng)著打坦克,大本營(yíng)的老鷹被烤熟了都不管。。
坦克大戰(zhàn)中的寶貝有戰(zhàn)車、星星、時(shí)鐘等,小編當(dāng)時(shí)最喜歡的是時(shí)鐘,敵不能動(dòng)我能動(dòng)的感覺妙極了。圖中的坦克圖標(biāo)吃了是
可以加一條命的,當(dāng)時(shí)為了搶寶貝都搶先把隊(duì)友的坦克打暈。。。
2)環(huán)境安裝
Python3、Pycharm、Pygame、以及自帶或自定義的模塊。
pip install +模塊名 或pip install -i https://pypi.douban.com/simple/ +模塊名
3)代碼演示??
![]()
(之前不是寫過(guò)的嘛,今天的話就是修改下的,這種小游戲代碼肯定都很多的,所以這里直接貼主程序了。
需要完整的打包好的代碼跟素材哪些的話 直接滴滴我即可或者看我主頁(yè)左側(cè)哪里有源碼基地的哈?。?/p>


主程序:
import pygame
from pygame.locals import *
import sys
import scene
import bullet
import food
import tanks
import home
# 開始界面顯示
def show_start_interface(screen, width, height):
tfont = pygame.font.Font('./font/simkai.ttf', width // 4)
cfont = pygame.font.Font('./font/simkai.ttf', width // 20)
title = tfont.render(u'坦克大戰(zhàn)', True, (255, 0, 0))
content1 = cfont.render(u'按1鍵進(jìn)入單人游戲', True, (0, 244, 222))
content2 = cfont.render(u'按2鍵進(jìn)入雙人人游戲', True, (0, 0, 255))
#顯示字體pygame.font.Font.render(text文本, antialias是否抗鋸齒, color顏色, background=None)
trect = title.get_rect()
# 默認(rèn)title左上角的坐標(biāo)是 (0, 0)
trect.midtop = (width / 2, height / 5)
crect1 = content1.get_rect()
crect1.midtop = (width / 2, height / 1.8)
crect2 = content2.get_rect()
crect2.midtop = (width / 2, height / 1.6)
screen.blit(title, trect)
screen.blit(content1, crect1)
screen.blit(content2, crect2)
# 在指定位置繪制指定文字對(duì)象
pygame.display.update()
# 更新界面
while True:
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_1:
return 1
if event.key == pygame.K_2:
return 2
# 結(jié)束界面顯示
def show_end_interface(screen, width, height, is_win):
bg_img = pygame.image.load("./images/others/background.png")
screen.blit(bg_img, (0, 0))
if is_win:
font = pygame.font.Font('./font/simkai.ttf', width // 10)
content = font.render(u'恭喜通關(guān)!', True, (255, 0, 0))
rect = content.get_rect()
rect.midtop = (width / 2, height / 2)
screen.blit(content, rect)
else:
fail_img = pygame.image.load("./images/others/gameover.png")
rect = fail_img.get_rect()
rect.midtop = (width / 2, height / 2)
screen.blit(fail_img, rect)
pygame.display.update()
while True:
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
# 關(guān)卡切換
def show_switch_stage(screen, width, height, stage):
bg_img = pygame.image.load("./images/others/background.png")
screen.blit(bg_img, (0, 0))
font = pygame.font.Font('./font/simkai.ttf', width // 10)
content = font.render(u'第%d關(guān)' % stage, True, (0, 255, 0))
rect = content.get_rect()
rect.midtop = (width / 2, height / 2)
screen.blit(content, rect)
pygame.display.update()
delay_event = pygame.constants.USEREVENT
pygame.time.set_timer(delay_event, 1000)
#定時(shí)器延時(shí)
while True:
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
if event.type == delay_event:
return
def main():
pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((630, 630))
pygame.display.set_caption('坦克大戰(zhàn)')
bg_img = pygame.image.load('./images/others/background.png')
# 加載音效
add_sound = pygame.mixer.Sound("./audios/add.wav")
add_sound.set_volume(1)
bang_sound = pygame.mixer.Sound("./audios/bang.wav")
bang_sound.set_volume(1)
blast_sound = pygame.mixer.Sound("./audios/blast.wav")
blast_sound.set_volume(1)
fire_sound = pygame.mixer.Sound("./audios/fire.wav")
fire_sound.set_volume(1)
Gunfire_sound = pygame.mixer.Sound("./audios/Gunfire.wav")
Gunfire_sound.set_volume(1)
hit_sound = pygame.mixer.Sound("./audios/hit.wav")
hit_sound.set_volume(1)
start_sound = pygame.mixer.Sound("./audios/start.wav")
start_sound.set_volume(1)
# 開始界面
num_player = show_start_interface(screen, 630, 630)
# 播放游戲開始的音樂(lè)
start_sound.play()
# 關(guān)卡
stage = 0
num_stage = 2
# 游戲是否結(jié)束
is_gameover = False
# 時(shí)鐘
clock = pygame.time.Clock()
# 主循環(huán)
while not is_gameover:
# 關(guān)卡
stage += 1
if stage > num_stage:
break
show_switch_stage(screen, 630, 630, stage)
# 該關(guān)卡坦克總數(shù)量
enemytanks_total = min(stage * 18, 80)
# 場(chǎng)上存在的敵方坦克總數(shù)量
enemytanks_now = 0
# 場(chǎng)上可以存在的敵方坦克總數(shù)量
enemytanks_now_max = min(max(stage * 2, 4), 8)
# 精靈組,獨(dú)立運(yùn)行的動(dòng)畫組
tanksGroup = pygame.sprite.Group()
mytanksGroup = pygame.sprite.Group()
enemytanksGroup = pygame.sprite.Group()
bulletsGroup = pygame.sprite.Group()
mybulletsGroup = pygame.sprite.Group()
enemybulletsGroup = pygame.sprite.Group()
myfoodsGroup = pygame.sprite.Group()
# 自定義事件
# -生成敵方坦克事件
genEnemyEvent = pygame.constants.USEREVENT
pygame.time.set_timer(genEnemyEvent, 100)
# -敵方坦克靜止恢復(fù)事件
recoverEnemyEvent = pygame.constants.USEREVENT
pygame.time.set_timer(recoverEnemyEvent, 8000)
# -我方坦克無(wú)敵恢復(fù)事件
noprotectMytankEvent = pygame.constants.USEREVENT
pygame.time.set_timer(noprotectMytankEvent, 8000)
# 關(guān)卡地圖
map_stage = scene.Map(stage)
# 我方坦克
tank_player1 = tanks.myTank(1)
tanksGroup.add(tank_player1)
mytanksGroup.add(tank_player1)
if num_player > 1:
tank_player2 = tanks.myTank(2)
tanksGroup.add(tank_player2)
mytanksGroup.add(tank_player2)
is_switch_tank = True
player1_moving = False
player2_moving = False
# 為了輪胎的動(dòng)畫效果
time = 0
# 敵方坦克
for i in range(0, 3):
if enemytanks_total > 0:
enemytank = tanks.enemyTank(i)
tanksGroup.add(enemytank)
enemytanksGroup.add(enemytank)
enemytanks_now += 1
enemytanks_total -= 1
# 大本營(yíng)
myhome = home.Home()
# 出場(chǎng)特效
appearance_img = pygame.image.load("./images/others/appear.png").convert_alpha()
appearances = []
appearances.append(appearance_img.subsurface((0, 0), (48, 48)))
appearances.append(appearance_img.subsurface((48, 0), (48, 48)))
appearances.append(appearance_img.subsurface((96, 0), (48, 48)))
# 關(guān)卡主循環(huán)
while True:
if is_gameover is True:
break
if enemytanks_total < 1 and enemytanks_now < 1:
is_gameover = False
break
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == genEnemyEvent:
if enemytanks_total > 0:
if enemytanks_now < enemytanks_now_max:
enemytank = tanks.enemyTank()
if not pygame.sprite.spritecollide(enemytank, tanksGroup, False, None):
tanksGroup.add(enemytank)
enemytanksGroup.add(enemytank)
enemytanks_now += 1
enemytanks_total -= 1
if event.type == recoverEnemyEvent:
for each in enemytanksGroup:
each.can_move = True
if event.type == noprotectMytankEvent:
for each in mytanksGroup:
mytanksGroup.protected = False
# 檢查用戶鍵盤操作
key_pressed = pygame.key.get_pressed()
# 玩家一
# WSAD -> 上下左右
# 空格鍵射擊
if key_pressed[pygame.K_w]:
tanksGroup.remove(tank_player1)
tank_player1.move_up(tanksGroup, map_stage.brickGroup, map_stage.ironGroup, myhome)
tanksGroup.add(tank_player1)
player1_moving = True
elif key_pressed[pygame.K_s]:
tanksGroup.remove(tank_player1)
tank_player1.move_down(tanksGroup, map_stage.brickGroup, map_stage.ironGroup, myhome)
tanksGroup.add(tank_player1)
player1_moving = True
elif key_pressed[pygame.K_a]:
tanksGroup.remove(tank_player1)
tank_player1.move_left(tanksGroup, map_stage.brickGroup, map_stage.ironGroup, myhome)
tanksGroup.add(tank_player1)
player1_moving = True
elif key_pressed[pygame.K_d]:
tanksGroup.remove(tank_player1)
tank_player1.move_right(tanksGroup, map_stage.brickGroup, map_stage.ironGroup, myhome)
tanksGroup.add(tank_player1)
player1_moving = True
elif key_pressed[pygame.K_SPACE]:
if not tank_player1.bullet.being:
fire_sound.play()
tank_player1.shoot()
# 玩家二
# ↑↓←→ -> 上下左右
# 小鍵盤0鍵射擊
if num_player > 1:
if key_pressed[pygame.K_UP]:
tanksGroup.remove(tank_player2)
tank_player2.move_up(tanksGroup, map_stage.brickGroup, map_stage.ironGroup, myhome)
tanksGroup.add(tank_player2)
player2_moving = True
elif key_pressed[pygame.K_DOWN]:
tanksGroup.remove(tank_player2)
tank_player2.move_down(tanksGroup, map_stage.brickGroup, map_stage.ironGroup, myhome)
tanksGroup.add(tank_player2)
player2_moving = True
elif key_pressed[pygame.K_LEFT]:
tanksGroup.remove(tank_player2)
tank_player2.move_left(tanksGroup, map_stage.brickGroup, map_stage.ironGroup, myhome)
tanksGroup.add(tank_player2)
player2_moving = True
elif key_pressed[pygame.K_RIGHT]:
tanksGroup.remove(tank_player2)
tank_player2.move_right(tanksGroup, map_stage.brickGroup, map_stage.ironGroup, myhome)
tanksGroup.add(tank_player2)
player2_moving = True
elif key_pressed[pygame.K_KP0]:
if not tank_player2.bullet.being:
fire_sound.play()
tank_player2.shoot()
# 背景
screen.blit(bg_img, (0, 0))
# 石頭墻
for each in map_stage.brickGroup:
screen.blit(each.brick, each.rect)
# 鋼墻
for each in map_stage.ironGroup:
screen.blit(each.iron, each.rect)
# 冰
for each in map_stage.iceGroup:
screen.blit(each.ice, each.rect)
# 河流
for each in map_stage.riverGroup:
screen.blit(each.river, each.rect)
# 樹
for each in map_stage.treeGroup:
screen.blit(each.tree, each.rect)
time += 1
if time == 5:
time = 0
is_switch_tank = not is_switch_tank
# 我方坦克
if tank_player1 in mytanksGroup:
if is_switch_tank and player1_moving:
screen.blit(tank_player1.tank_0, (tank_player1.rect.left, tank_player1.rect.top))
player1_moving = False
else:
screen.blit(tank_player1.tank_1, (tank_player1.rect.left, tank_player1.rect.top))
if tank_player1.protected:
screen.blit(tank_player1.protected_mask1, (tank_player1.rect.left, tank_player1.rect.top))
if num_player > 1:
if tank_player2 in mytanksGroup:
if is_switch_tank and player2_moving:
screen.blit(tank_player2.tank_0, (tank_player2.rect.left, tank_player2.rect.top))
player1_moving = False
else:
screen.blit(tank_player2.tank_1, (tank_player2.rect.left, tank_player2.rect.top))
if tank_player2.protected:
screen.blit(tank_player1.protected_mask1, (tank_player2.rect.left, tank_player2.rect.top))
# 敵方坦克
for each in enemytanksGroup:
# 出生特效
if each.born:
if each.times > 0:
each.times -= 1
if each.times <= 10:
screen.blit(appearances[2], (3 + each.x * 12 * 24, 3))
elif each.times <= 20:
screen.blit(appearances[1], (3 + each.x * 12 * 24, 3))
elif each.times <= 30:
screen.blit(appearances[0], (3 + each.x * 12 * 24, 3))
elif each.times <= 40:
screen.blit(appearances[2], (3 + each.x * 12 * 24, 3))
elif each.times <= 50:
screen.blit(appearances[1], (3 + each.x * 12 * 24, 3))
elif each.times <= 60:
screen.blit(appearances[0], (3 + each.x * 12 * 24, 3))
elif each.times <= 70:
screen.blit(appearances[2], (3 + each.x * 12 * 24, 3))
elif each.times <= 80:
screen.blit(appearances[1], (3 + each.x * 12 * 24, 3))
elif each.times <= 90:
screen.blit(appearances[0], (3 + each.x * 12 * 24, 3))
else:
each.born = False
else:
if is_switch_tank:
screen.blit(each.tank_0, (each.rect.left, each.rect.top))
else:
screen.blit(each.tank_1, (each.rect.left, each.rect.top))
if each.can_move:
tanksGroup.remove(each)
each.move(tanksGroup, map_stage.brickGroup, map_stage.ironGroup, myhome)
tanksGroup.add(each)
# 我方子彈
for tank_player in mytanksGroup:
if tank_player.bullet.being:
tank_player.bullet.move()
screen.blit(tank_player.bullet.bullet, tank_player.bullet.rect)
# 子彈碰撞敵方子彈
for each in enemybulletsGroup:
if each.being:
if pygame.sprite.collide_rect(tank_player.bullet, each):
tank_player.bullet.being = False
each.being = False
enemybulletsGroup.remove(each)
break
else:
enemybulletsGroup.remove(each)
# 子彈碰撞敵方坦克
for each in enemytanksGroup:
if each.being:
if pygame.sprite.collide_rect(tank_player.bullet, each):
if each.is_red == True:
myfood = food.Food()
myfood.generate()
myfoodsGroup.add(myfood)
each.is_red = False
each.blood -= 1
each.color -= 1
if each.blood < 0:
bang_sound.play()
each.being = False
enemytanksGroup.remove(each)
enemytanks_now -= 1
tanksGroup.remove(each)
else:
each.reload()
tank_player.bullet.being = False
break
else:
enemytanksGroup.remove(each)
tanksGroup.remove(each)
# 子彈碰撞石頭墻
if pygame.sprite.spritecollide(tank_player.bullet, map_stage.brickGroup, True, None):
tank_player.bullet.being = False
# 子彈碰鋼墻
if tank_player.bullet.stronger:
if pygame.sprite.spritecollide(tank_player.bullet, map_stage.ironGroup, True, None):
tank_player.bullet.being = False
else:
if pygame.sprite.spritecollide(tank_player.bullet, map_stage.ironGroup, False, None):
tank_player.bullet.being = False
# 子彈碰大本營(yíng)
if pygame.sprite.collide_rect(tank_player.bullet, myhome):
tank_player.bullet.being = False
myhome.set_dead()
is_gameover = True
# 敵方子彈
for each in enemytanksGroup:
if each.being:
if each.can_move and not each.bullet.being:
enemybulletsGroup.remove(each.bullet)
each.shoot()
enemybulletsGroup.add(each.bullet)
if not each.born:
if each.bullet.being:
each.bullet.move()
screen.blit(each.bullet.bullet, each.bullet.rect)
# 子彈碰撞我方坦克
for tank_player in mytanksGroup:
if pygame.sprite.collide_rect(each.bullet, tank_player):
if not tank_player.protected:
bang_sound.play()
tank_player.life -= 1
if tank_player.life < 0:
mytanksGroup.remove(tank_player)
tanksGroup.remove(tank_player)
if len(mytanksGroup) < 1:
is_gameover = True
else:
tank_player.reset()
each.bullet.being = False
enemybulletsGroup.remove(each.bullet)
break
# 子彈碰撞石頭墻
if pygame.sprite.spritecollide(each.bullet, map_stage.brickGroup, True, None):
each.bullet.being = False
enemybulletsGroup.remove(each.bullet)
# 子彈碰鋼墻
if each.bullet.stronger:
if pygame.sprite.spritecollide(each.bullet, map_stage.ironGroup, True, None):
each.bullet.being = False
else:
if pygame.sprite.spritecollide(each.bullet, map_stage.ironGroup, False, None):
each.bullet.being = False
# 子彈碰大本營(yíng)
if pygame.sprite.collide_rect(each.bullet, myhome):
each.bullet.being = False
myhome.set_dead()
is_gameover = True
else:
enemytanksGroup.remove(each)
tanksGroup.remove(each)
# 家
screen.blit(myhome.home, myhome.rect)
# 食物
for myfood in myfoodsGroup:
if myfood.being and myfood.time > 0:
screen.blit(myfood.food, myfood.rect)
myfood.time -= 1
for tank_player in mytanksGroup:
if pygame.sprite.collide_rect(tank_player, myfood):
# 消滅當(dāng)前所有敵人
if myfood.kind == 0:
for _ in enemytanksGroup:
bang_sound.play()
enemytanksGroup = pygame.sprite.Group()
enemytanks_total -= enemytanks_now
enemytanks_now = 0
# 敵人靜止
if myfood.kind == 1:
for each in enemytanksGroup:
each.can_move = False
# 子彈增強(qiáng)
if myfood.kind == 2:
add_sound.play()
tank_player.bullet.stronger = True
# 使得大本營(yíng)的墻變?yōu)殇摪?
if myfood.kind == 3:
map_stage.protect_home()
# 坦克獲得一段時(shí)間的保護(hù)罩
if myfood.kind == 4:
add_sound.play()
for tank_player in mytanksGroup:
tank_player.protected = True
# 坦克升級(jí)
if myfood.kind == 5:
add_sound.play()
tank_player.up_level()
# 坦克生命+1
if myfood.kind == 6:
add_sound.play()
tank_player.life += 1
myfood.being = False
myfoodsGroup.remove(myfood)
break
else:
myfood.being = False
myfoodsGroup.remove(myfood)
pygame.display.flip()
clock.tick(60)
if not is_gameover:
show_end_interface(screen, 630, 630, True)
else:
show_end_interface(screen, 630, 630, False)
if __name__ == '__main__':
main()![]()
4)效果展示
視頻展示效果——
視頻播放鏈接:https://live.csdn.net/v/embed/181068
【Pygame實(shí)戰(zhàn)】經(jīng)典的坦克大戰(zhàn)游戲,勾起童年無(wú)限回憶!
靜態(tài)截圖效果——
游戲界面:

?第一關(guān)單人游戲:

雙人第一關(guān)游戲:

總結(jié)
?好啦!中文版的坦克大戰(zhàn)都看的懂了哈,想咋玩兒咋玩兒。
?這是程序員的浪漫,這也是我們的浪漫。
到此這篇關(guān)于Pygame坦克大戰(zhàn)游戲開發(fā)實(shí)戰(zhàn)詳解代碼的文章就介紹到這了,更多相關(guān)Pygame 坦克大戰(zhàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)Web服務(wù)器FastAPI的步驟詳解
FastAPI?是一個(gè)用于構(gòu)建?API?的現(xiàn)代、快速(高性能)的?web?框架,使用?Python?3.6+?并基于標(biāo)準(zhǔn)的?Python類型提示,這篇文章主要介紹了Python實(shí)現(xiàn)Web服務(wù)器FastAPI的過(guò)程,需要的朋友可以參考下2022-06-06
Python OpenCV 圖像矯正的原理實(shí)現(xiàn)
這篇文章主要介紹了Python OpenCV 圖像矯正的原理實(shí)現(xiàn),檢測(cè)邊緣點(diǎn);以邊緣點(diǎn)作為輸入,采用Hough直線檢測(cè),檢測(cè)出最多點(diǎn)共線的四條直線,更多相關(guān)內(nèi)容需要的朋友可以參考一下2022-07-07
python 讀文件,然后轉(zhuǎn)化為矩陣的實(shí)例
下面小編就為大家分享一篇python 讀文件,然后轉(zhuǎn)化為矩陣的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04
Python算法應(yīng)用實(shí)戰(zhàn)之隊(duì)列詳解
隊(duì)列是一種先進(jìn)先出(First-In-First-Out,F(xiàn)IFO)的數(shù)據(jù)結(jié)構(gòu)。隊(duì)列被用在很多地方,比如提交操作系統(tǒng)執(zhí)行的一系列進(jìn)程、打印任務(wù)池等,一些仿真系統(tǒng)用隊(duì)列來(lái)模擬銀行或雜貨店里排隊(duì)的顧客。下面就介紹了Python中隊(duì)列的應(yīng)用實(shí)戰(zhàn),需要的可以參考。2017-02-02
Python開發(fā)實(shí)例分享bt種子爬蟲程序和種子解析
最近親眼看到快播被大批警察包圍,感覺到快播注定要關(guān)閉很多東西,很多宅男宅女們又要寂寞了,于是乎,瘋狂的研究DHT網(wǎng)絡(luò)技術(shù)2014-05-05
Python調(diào)用win10toast框架實(shí)現(xiàn)定時(shí)調(diào)起系統(tǒng)通知
win10toast是一個(gè)windows通知的出發(fā)框架,使用它可以輕松的調(diào)起系統(tǒng)通知。通過(guò)它可以很方便的做一個(gè)定時(shí)通知的功能應(yīng)用。本文將調(diào)用win10toast實(shí)現(xiàn)定時(shí)調(diào)起系統(tǒng)通知功能,需要的可以參考一下2022-01-01
python對(duì)數(shù)組進(jìn)行排序,并輸出排序后對(duì)應(yīng)的索引值方式
今天小編就為大家分享一篇python對(duì)數(shù)組進(jìn)行排序,并輸出排序后對(duì)應(yīng)的索引值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02

