最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)五子棋聯(lián)機(jī)對(duì)戰(zhàn)小游戲

 更新時(shí)間:2021年12月03日 08:45:13   作者:楚_陽(yáng)  
本文主要介紹了通過(guò)Python實(shí)現(xiàn)簡(jiǎn)單的支持聯(lián)機(jī)對(duì)戰(zhàn)的游戲——支持局域網(wǎng)聯(lián)機(jī)對(duì)戰(zhàn)的五子棋小游戲。廢話不多說(shuō),快來(lái)跟隨小編一起學(xué)習(xí)吧

效果演示

開(kāi)發(fā)工具

Python版本: 3.6.4

相關(guān)模塊:

pygame模塊;

PyQt5模塊;

以及一些Python自帶的模塊。

環(huán)境搭建

安裝Python并添加到環(huán)境變量,pip安裝需要的相關(guān)模塊即可。

主要代碼

這里簡(jiǎn)單介紹下原理吧,代碼主要用PyQt5寫(xiě)的,pygame只用來(lái)播放一些音效。首先,設(shè)計(jì)并實(shí)現(xiàn)個(gè)游戲主界面:

代碼實(shí)現(xiàn)如下

'''游戲開(kāi)始界面'''
class gameStartUI(QWidget):
  def __init__(self, parent=None, **kwargs):
    super(gameStartUI, self).__init__(parent)
    self.setFixedSize(760, 650)
    self.setWindowTitle('五子棋-???: ilove-python')
    self.setWindowIcon(QIcon(cfg.ICON_FILEPATH))
    # 背景圖片
    palette = QPalette()
    palette.setBrush(self.backgroundRole(), QBrush(QPixmap(cfg.BACKGROUND_IMAGEPATHS.get('bg_start'))))
    self.setPalette(palette)
    # 按鈕
    # --人機(jī)對(duì)戰(zhàn)
    self.ai_button = PushButton(cfg.BUTTON_IMAGEPATHS.get('ai'), self)
    self.ai_button.move(250, 200)
    self.ai_button.show()
    self.ai_button.click_signal.connect(self.playWithAI)
    # --聯(lián)機(jī)對(duì)戰(zhàn)
    self.online_button = PushButton(cfg.BUTTON_IMAGEPATHS.get('online'), self)
    self.online_button.move(250, 350)
    self.online_button.show()
    self.online_button.click_signal.connect(self.playOnline)
  '''人機(jī)對(duì)戰(zhàn)'''
  def playWithAI(self):
    self.close()
    self.gaming_ui = playWithAIUI(cfg)
    self.gaming_ui.exit_signal.connect(lambda: sys.exit())
    self.gaming_ui.back_signal.connect(self.show)
    self.gaming_ui.show()
  '''聯(lián)機(jī)對(duì)戰(zhàn)'''
  def playOnline(self):
    self.close()
    self.gaming_ui = playOnlineUI(cfg, self)
    self.gaming_ui.show()

會(huì)pyqt5的應(yīng)該都可以寫(xiě)出這樣的界面,沒(méi)啥特別的,記得把人機(jī)對(duì)戰(zhàn)和聯(lián)機(jī)對(duì)戰(zhàn)兩個(gè)按鈕觸發(fā)后的信號(hào)分別綁定到人機(jī)對(duì)戰(zhàn)和聯(lián)機(jī)對(duì)戰(zhàn)的函數(shù)上就行。

效果大概是這樣的:

主要的代碼實(shí)現(xiàn)如下:

'''人機(jī)對(duì)戰(zhàn)'''
class playWithAIUI(QWidget):
    back_signal = pyqtSignal()
    exit_signal = pyqtSignal()
    send_back_signal = False
    def __init__(self, cfg, parent=None, **kwargs):
        super(playWithAIUI, self).__init__(parent)
        self.cfg = cfg
        self.setFixedSize(760, 650)
        self.setWindowTitle('五子棋-???: ilove-python')
        self.setWindowIcon(QIcon(cfg.ICON_FILEPATH))
        # 背景圖片
        palette = QPalette()
        palette.setBrush(self.backgroundRole(), QBrush(QPixmap(cfg.BACKGROUND_IMAGEPATHS.get('bg_game'))))
        self.setPalette(palette)
        # 按鈕
        self.home_button = PushButton(cfg.BUTTON_IMAGEPATHS.get('home'), self)
        self.home_button.click_signal.connect(self.goHome)
        self.home_button.move(680, 10)
        self.startgame_button = PushButton(cfg.BUTTON_IMAGEPATHS.get('startgame'), self)
        self.startgame_button.click_signal.connect(self.startgame)
        self.startgame_button.move(640, 240)
        self.regret_button = PushButton(cfg.BUTTON_IMAGEPATHS.get('regret'), self)
        self.regret_button.click_signal.connect(self.regret)
        self.regret_button.move(640, 310)
        self.givein_button = PushButton(cfg.BUTTON_IMAGEPATHS.get('givein'), self)
        self.givein_button.click_signal.connect(self.givein)
        self.givein_button.move(640, 380)
        # 落子標(biāo)志
        self.chessman_sign = QLabel(self)
        sign = QPixmap(cfg.CHESSMAN_IMAGEPATHS.get('sign'))
        self.chessman_sign.setPixmap(sign)
        self.chessman_sign.setFixedSize(sign.size())
        self.chessman_sign.show()
        self.chessman_sign.hide()
        # 棋盤(19*19矩陣)
        self.chessboard = [[None for i in range(19)] for _ in range(19)]
        # 歷史記錄(悔棋用)
        self.history_record = []
        # 是否在游戲中
        self.is_gaming = True
        # 勝利方
        self.winner = None
        self.winner_info_label = None
        # 顏色分配and目前輪到誰(shuí)落子
        self.player_color = 'white'
        self.ai_color = 'black'
        self.whoseround = self.player_color
        # 實(shí)例化ai
        self.ai_player = aiGobang(self.ai_color, self.player_color)
        # 落子聲音加載
        pygame.mixer.init()
        self.drop_sound = pygame.mixer.Sound(cfg.SOUNDS_PATHS.get('drop'))
    '''鼠標(biāo)左鍵點(diǎn)擊事件-玩家回合'''
    def mousePressEvent(self, event):
        if (event.buttons() != QtCore.Qt.LeftButton) or (self.winner is not None) or (self.whoseround != self.player_color) or (not self.is_gaming):
            return
        # 保證只在棋盤范圍內(nèi)響應(yīng)
        if event.x() >= 50 and event.x() <= 50 + 30 * 18 + 14 and event.y() >= 50 and event.y() <= 50 + 30 * 18 + 14:
            pos = Pixel2Chesspos(event)
            # 保證落子的地方本來(lái)沒(méi)有人落子
            if self.chessboard[pos[0]][pos[1]]:
                return
            # 實(shí)例化一個(gè)棋子并顯示
            c = Chessman(self.cfg.CHESSMAN_IMAGEPATHS.get(self.whoseround), self)
            c.move(event.pos())
            c.show()
            self.chessboard[pos[0]][pos[1]] = c
            # 落子聲音響起
            self.drop_sound.play()
            # 最后落子位置標(biāo)志對(duì)落子位置進(jìn)行跟隨
            self.chessman_sign.show()
            self.chessman_sign.move(c.pos())
            self.chessman_sign.raise_()
            # 記錄這次落子
            self.history_record.append([*pos, self.whoseround])
            # 是否勝利了
            self.winner = checkWin(self.chessboard)
            if self.winner:
                self.showGameEndInfo()
                return
            # 切換回合方(其實(shí)就是改顏色)
            self.nextRound()
    '''鼠標(biāo)左鍵釋放操作-調(diào)用電腦回合'''
    def mouseReleaseEvent(self, event):
        if (self.winner is not None) or (self.whoseround != self.ai_color) or (not self.is_gaming):
            return
        self.aiAct()
    '''電腦自動(dòng)下-AI回合'''
    def aiAct(self):
        if (self.winner is not None) or (self.whoseround == self.player_color) or (not self.is_gaming):
            return
        next_pos = self.ai_player.act(self.history_record)
        # 實(shí)例化一個(gè)棋子并顯示
        c = Chessman(self.cfg.CHESSMAN_IMAGEPATHS.get(self.whoseround), self)
        c.move(QPoint(*Chesspos2Pixel(next_pos)))
        c.show()
        self.chessboard[next_pos[0]][next_pos[1]] = c
        # 落子聲音響起
        self.drop_sound.play()
        # 最后落子位置標(biāo)志對(duì)落子位置進(jìn)行跟隨
        self.chessman_sign.show()
        self.chessman_sign.move(c.pos())
        self.chessman_sign.raise_()
        # 記錄這次落子
        self.history_record.append([*next_pos, self.whoseround])
        # 是否勝利了
        self.winner = checkWin(self.chessboard)
        if self.winner:
            self.showGameEndInfo()
            return
        # 切換回合方(其實(shí)就是改顏色)
        self.nextRound()
    '''改變落子方'''
    def nextRound(self):
        self.whoseround = self.player_color if self.whoseround == self.ai_color else self.ai_color
    '''顯示游戲結(jié)束結(jié)果'''
    def showGameEndInfo(self):
        self.is_gaming = False
        info_img = QPixmap(self.cfg.WIN_IMAGEPATHS.get(self.winner))
        self.winner_info_label = QLabel(self)
        self.winner_info_label.setPixmap(info_img)
        self.winner_info_label.resize(info_img.size())
        self.winner_info_label.move(50, 50)
        self.winner_info_label.show()
    '''認(rèn)輸'''
    def givein(self):
        if self.is_gaming and (self.winner is None) and (self.whoseround == self.player_color):
            self.winner = self.ai_color
            self.showGameEndInfo()
    '''悔棋-只有我方回合的時(shí)候可以悔棋'''
    def regret(self):
        if (self.winner is not None) or (len(self.history_record) == 0) or (not self.is_gaming) and (self.whoseround != self.player_color):
            return
        for _ in range(2):
            pre_round = self.history_record.pop(-1)
            self.chessboard[pre_round[0]][pre_round[1]].close()
            self.chessboard[pre_round[0]][pre_round[1]] = None
        self.chessman_sign.hide()
    '''開(kāi)始游戲-之前的對(duì)弈必須已經(jīng)結(jié)束才行'''
    def startgame(self):
        if self.is_gaming:
            return
        self.is_gaming = True
        self.whoseround = self.player_color
        for i, j in product(range(19), range(19)):
            if self.chessboard[i][j]:
                self.chessboard[i][j].close()
                self.chessboard[i][j] = None
        self.winner = None
        self.winner_info_label.close()
        self.winner_info_label = None
        self.history_record.clear()
        self.chessman_sign.hide()
    '''關(guān)閉窗口事件'''
    def closeEvent(self, event):
        if not self.send_back_signal:
            self.exit_signal.emit()
    '''返回游戲主頁(yè)面'''
    def goHome(self):
        self.send_back_signal = True
        self.close()
        self.back_signal.emit()

整個(gè)邏輯是這樣的:

設(shè)計(jì)并實(shí)現(xiàn)游戲的基本界面之后,先默認(rèn)永遠(yuǎn)是玩家先手(白子),電腦后手(黑子)。然后,當(dāng)監(jiān)聽(tīng)到玩家鼠標(biāo)左鍵點(diǎn)擊到棋盤網(wǎng)格所在的范圍內(nèi)的時(shí)候,捕獲該位置,若該位置之前沒(méi)有人落子過(guò),則玩家成功落子,否則重新等待玩家鼠標(biāo)左鍵點(diǎn)擊事件。玩家成功落子后,判斷是否因?yàn)橥婕衣渥佣鴮?dǎo)致游戲結(jié)束(即棋盤上有5顆同色子相連了),若游戲結(jié)束,則顯示游戲結(jié)束界面,否則輪到AI落子。AI落子和玩家落子的邏輯類似,然后又輪到玩家落子,以此類推。

需要注意的是:為保證響應(yīng)的實(shí)時(shí)性,AI落子算法應(yīng)當(dāng)寫(xiě)到鼠標(biāo)左鍵點(diǎn)擊后釋放事件的響應(yīng)中(感興趣的小伙伴可以試試寫(xiě)到鼠標(biāo)點(diǎn)擊事件的響應(yīng)中,這樣會(huì)導(dǎo)致必須在AI計(jì)算結(jié)束并落子后,才能顯示玩家上一次的落子和AI此次的落子結(jié)果)。

開(kāi)始按鈕就是重置游戲,沒(méi)啥可說(shuō)的,這里為了避免有些人喜歡耍賴,我實(shí)現(xiàn)的時(shí)候代碼寫(xiě)的是必須完成當(dāng)前對(duì)弈才能重置游戲。

因?yàn)槭呛虯I下,所以悔棋按鈕直接悔兩步,從歷史記錄列表里pop最后兩次落子然后從棋盤對(duì)應(yīng)位置取下這兩次落子就OK了,并且保證只有我方回合可以悔棋以避免出現(xiàn)意料之外的邏輯出錯(cuò)。

認(rèn)輸按鈕也沒(méi)啥可說(shuō)的,就是認(rèn)輸然后提前結(jié)束游戲。

接下來(lái)我們來(lái)實(shí)現(xiàn)一下聯(lián)機(jī)對(duì)戰(zhàn),這里我們選擇使用TCP/IP協(xié)議進(jìn)行聯(lián)機(jī)通信從而實(shí)現(xiàn)聯(lián)機(jī)對(duì)戰(zhàn)。先啟動(dòng)游戲的一方作為服務(wù)器端:

通過(guò)新開(kāi)一個(gè)線程來(lái)實(shí)現(xiàn)監(jiān)聽(tīng):
threading.Thread(target=self.startListen).start()
'''開(kāi)始監(jiān)聽(tīng)客戶端的連接'''
def startListen(self):
    while True:
       self.setWindowTitle('五子棋-???: ilove-python ——> 服務(wù)器端啟動(dòng)成功, 等待客戶端連接中')
       self.tcp_socket, self.client_ipport = self.tcp_server.accept()
       self.setWindowTitle('五子棋-???: ilove-python ——> 客戶端已連接, 點(diǎn)擊開(kāi)始按鈕進(jìn)行游戲')

后啟動(dòng)方作為客戶端連接服務(wù)器端并發(fā)送客戶端玩家的基本信息:

self.tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.tcp_socket.connect(self.server_ipport)
data = {'type': 'nickname', 'data': self.nickname}
self.tcp_socket.sendall(packSocketData(data))
self.setWindowTitle('五子棋-???: ilove-python ——> 已經(jīng)成功連接服務(wù)器, 點(diǎn)擊開(kāi)始按鈕進(jìn)行游戲')

當(dāng)客戶端連接到服務(wù)器端時(shí),服務(wù)器端也發(fā)送服務(wù)器端的玩家基本信息給客戶端:

data = {'type': 'nickname', 'data': self.nickname}
self.tcp_socket.sendall(packSocketData(data))

然后客戶端和服務(wù)器端都利用新開(kāi)的線程來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)數(shù)據(jù)監(jiān)聽(tīng)接收:

'''接收客戶端數(shù)據(jù)'''
def receiveClientData(self):
    while True:
        data = receiveAndReadSocketData(self.tcp_socket)
        self.receive_signal.emit(data)
'''接收服務(wù)器端數(shù)據(jù)'''
def receiveServerData(self):
    while True:
        data = receiveAndReadSocketData(self.tcp_socket)
        self.receive_signal.emit(data)

并根據(jù)接收到的不同數(shù)據(jù)在主進(jìn)程中做成對(duì)應(yīng)的響應(yīng):

'''響應(yīng)接收到的數(shù)據(jù)'''
def responseForReceiveData(self, data):
    if data['type'] == 'action' and data['detail'] == 'exit':
        QMessageBox.information(self, '提示', '您的對(duì)手已退出游戲, 游戲?qū)⒆詣?dòng)返回主界面')
        self.goHome()
    elif data['type'] == 'action' and data['detail'] == 'startgame':
        self.opponent_player_color, self.player_color = data['data']
        self.whoseround = 'white'
        self.whoseround2nickname_dict = {self.player_color: self.nickname, self.opponent_player_color: self.opponent_nickname}
        res = QMessageBox.information(self, '提示', '對(duì)方請(qǐng)求(重新)開(kāi)始游戲, 您為%s, 您是否同意?' % {'white': '白子', 'black': '黑子'}.get(self.player_color), QMessageBox.Yes | QMessageBox.No)
        if res == QMessageBox.Yes:
            data = {'type': 'reply', 'detail': 'startgame', 'data': True}
            self.tcp_socket.sendall(packSocketData(data))
            self.is_gaming = True
            self.setWindowTitle('五子棋-???: ilove-python ——> %s走棋' % self.whoseround2nickname_dict.get(self.whoseround))
            for i, j in product(range(19), range(19)):
                if self.chessboard[i][j]:
                    self.chessboard[i][j].close()
                    self.chessboard[i][j] = None
            self.history_record.clear()
            self.winner = None
            if self.winner_info_label:
                self.winner_info_label.close()
            self.winner_info_label = None
            self.chessman_sign.hide()
        else:
            data = {'type': 'reply', 'detail': 'startgame', 'data': False}
            self.tcp_socket.sendall(packSocketData(data))
    elif data['type'] == 'action' and data['detail'] == 'drop':
        pos = data['data']
        # 實(shí)例化一個(gè)棋子并顯示
        c = Chessman(self.cfg.CHESSMAN_IMAGEPATHS.get(self.whoseround), self)
        c.move(QPoint(*Chesspos2Pixel(pos)))
        c.show()
        self.chessboard[pos[0]][pos[1]] = c
        # 落子聲音響起
        self.drop_sound.play()
        # 最后落子位置標(biāo)志對(duì)落子位置進(jìn)行跟隨
        self.chessman_sign.show()
        self.chessman_sign.move(c.pos())
        self.chessman_sign.raise_()
        # 記錄這次落子
        self.history_record.append([*pos, self.whoseround])
        # 是否勝利了
        self.winner = checkWin(self.chessboard)
        if self.winner:
            self.showGameEndInfo()
            return
        # 切換回合方(其實(shí)就是改顏色)
        self.nextRound()
    elif data['type'] == 'action' and data['detail'] == 'givein':
        self.winner = self.player_color
        self.showGameEndInfo()
    elif data['type'] == 'action' and data['detail'] == 'urge':
        self.urge_sound.play()
    elif data['type'] == 'action' and data['detail'] == 'regret':
        res = QMessageBox.information(self, '提示', '對(duì)方請(qǐng)求悔棋, 您是否同意?', QMessageBox.Yes | QMessageBox.No)
        if res == QMessageBox.Yes:
            pre_round = self.history_record.pop(-1)
            self.chessboard[pre_round[0]][pre_round[1]].close()
            self.chessboard[pre_round[0]][pre_round[1]] = None
            self.chessman_sign.hide()
            self.nextRound()
            data = {'type': 'reply', 'detail': 'regret', 'data': True}
            self.tcp_socket.sendall(packSocketData(data))
        else:
            data = {'type': 'reply', 'detail': 'regret', 'data': False}
            self.tcp_socket.sendall(packSocketData(data))
    elif data['type'] == 'reply' and data['detail'] == 'startgame':
        if data['data']:
            self.is_gaming = True
            self.setWindowTitle('五子棋-???: ilove-python ——> %s走棋' % self.whoseround2nickname_dict.get(self.whoseround))
            for i, j in product(range(19), range(19)):
                if self.chessboard[i][j]:
                    self.chessboard[i][j].close()
                    self.chessboard[i][j] = None
            self.history_record.clear()
            self.winner = None
            if self.winner_info_label:
                self.winner_info_label.close()
            self.winner_info_label = None
            self.chessman_sign.hide()
            QMessageBox.information(self, '提示', '對(duì)方同意開(kāi)始游戲請(qǐng)求, 您為%s, 執(zhí)白者先行.' % {'white': '白子', 'black': '黑子'}.get(self.player_color))
        else:
            QMessageBox.information(self, '提示', '對(duì)方拒絕了您開(kāi)始游戲的請(qǐng)求.')
    elif data['type'] == 'reply' and data['detail'] == 'regret':
        if data['data']:
            pre_round = self.history_record.pop(-1)
            self.chessboard[pre_round[0]][pre_round[1]].close()
            self.chessboard[pre_round[0]][pre_round[1]] = None
            self.nextRound()
            QMessageBox.information(self, '提示', '對(duì)方同意了您的悔棋請(qǐng)求.')
        else:
            QMessageBox.information(self, '提示', '對(duì)方拒絕了您的悔棋請(qǐng)求.')
    elif data['type'] == 'nickname':
        self.opponent_nickname = data['data']

修改的地方

必須點(diǎn)擊開(kāi)始按鈕,并經(jīng)過(guò)對(duì)方同意之后,才能正式開(kāi)始對(duì)弈,悔棋按鈕只有在對(duì)方回合才能按,對(duì)方同意悔棋后需要記得把落子方切換回自己。然后加了一個(gè)催促按鈕,同樣必須在對(duì)方回合才能按。以上就是全部代碼修改的全部地方了。?

以上就是Python實(shí)現(xiàn)五子棋聯(lián)機(jī)對(duì)戰(zhàn)小游戲的詳細(xì)內(nèi)容,更多關(guān)于Python 五子棋聯(lián)機(jī)對(duì)戰(zhàn)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python 中的異步與同步深度解析(實(shí)踐記錄)

    Python 中的異步與同步深度解析(實(shí)踐記錄)

    在Python編程世界里,異步和同步的概念是理解程序執(zhí)行流程和性能優(yōu)化的關(guān)鍵,這篇文章將帶你深入了解它們的差異,以及阻塞和非阻塞的特性,同時(shí)通過(guò)實(shí)際代碼示例來(lái)加深理解,感興趣的朋友一起看看吧
    2025-03-03
  • Pycharm報(bào)錯(cuò)Environment?location?directory?is?not?empty問(wèn)題及解決

    Pycharm報(bào)錯(cuò)Environment?location?directory?is?not?empty問(wèn)題及

    這篇文章主要介紹了Pycharm報(bào)錯(cuò)Environment?location?directory?is?not?empty問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • Python報(bào)錯(cuò)error: subprocess-exited-with-error解決辦法

    Python報(bào)錯(cuò)error: subprocess-exited-with-error解決辦法

    在Python開(kāi)發(fā)中,遇到subprocess-exited-with-error通常是由依賴缺失、權(quán)限問(wèn)題、環(huán)境配置錯(cuò)誤或兼容性問(wèn)題導(dǎo)致,修復(fù)方法包括安裝依賴、使用虛擬環(huán)境、提升權(quán)限、檢查路徑和命令,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10
  • Python版中國(guó)省市經(jīng)緯度

    Python版中國(guó)省市經(jīng)緯度

    這篇文章主要介紹了Python版中國(guó)省市經(jīng)緯度,需要的朋友可以參考下
    2020-02-02
  • 解決python2 繪圖title,xlabel,ylabel出現(xiàn)中文亂碼的問(wèn)題

    解決python2 繪圖title,xlabel,ylabel出現(xiàn)中文亂碼的問(wèn)題

    今天小編就為大家分享一篇解決python2 繪圖title,xlabel,ylabel出現(xiàn)中文亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • 詳解Python中下劃線的5種含義

    詳解Python中下劃線的5種含義

    本文介紹了Python中單下劃線和雙下劃線的各種含義和命名約定,名稱修飾的工作原理,以及它如何影響你自己的Python類,感興趣的可以了解一下
    2021-07-07
  • python實(shí)現(xiàn)撲克牌交互式界面發(fā)牌程序

    python實(shí)現(xiàn)撲克牌交互式界面發(fā)牌程序

    這篇文章主要介紹了python實(shí)現(xiàn)撲克牌交互式界面發(fā)牌程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • Python下應(yīng)用opencv 實(shí)現(xiàn)人臉檢測(cè)功能

    Python下應(yīng)用opencv 實(shí)現(xiàn)人臉檢測(cè)功能

    OpenCV是如今最流行的計(jì)算機(jī)視覺(jué)庫(kù),今天我們通過(guò)本文給大家分享Python下應(yīng)用opencv 實(shí)現(xiàn)人臉檢測(cè)功能,感興趣的朋友跟隨小編一起看看吧
    2019-10-10
  • 使用python處理題庫(kù)表格并轉(zhuǎn)化為word形式的實(shí)現(xiàn)

    使用python處理題庫(kù)表格并轉(zhuǎn)化為word形式的實(shí)現(xiàn)

    這篇文章主要介紹了使用python處理題庫(kù)表格并轉(zhuǎn)化為word形式的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python中的單行、多行、中文注釋方法

    Python中的單行、多行、中文注釋方法

    今天小編就為大家分享一篇Python中的單行、多行、中文注釋方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07

最新評(píng)論

广宁县| 巢湖市| 旌德县| 镇江市| 大新县| 额尔古纳市| 应用必备| 佛冈县| 巧家县| 扶风县| 疏附县| 张掖市| 元阳县| 荔波县| 昭觉县| 重庆市| 沧源| 卫辉市| 崇义县| 昔阳县| 伊宁县| 云阳县| 偃师市| 鄂伦春自治旗| 宁化县| 新安县| 太仆寺旗| 阳泉市| 清镇市| 武夷山市| 广水市| 同江市| 平乡县| 双江| 乡城县| 南通市| 卓尼县| 广西| 青海省| 北碚区| 体育|