Python五子棋小游戏源代码,支持人机对战和局域网对战两模式,程序运行截图:

核心程序代码
WuZi.py

'''
Function:五子棋小游戏-支持人机和局域网对战
Author:Charles
微信公众号:Python代码大全
'''
import sys
import cfg
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from modules.misc.Buttons import *
from modules.ai.playWithAI import *
from modules.online.playOnline import *'''游戏开始界面'''
class gameStartUI(QWidget):def __init__(self, parent=None, **kwargs):super(gameStartUI, self).__init__(parent)self.setFixedSize(760, 650)self.setWindowTitle('五子棋-微信公众号: Python代码大全')self.setWindowIcon(QIcon(cfg.ICON_FILEPATH))# 背景图片palette = QPalette()palette.setBrush(self.backgroundRole(), QBrush(QPixmap(cfg.BACKGROUND_IMAGEPATHS.get('bg_start'))))self.setPalette(palette)# 按钮# --人机对战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)# --联机对战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)'''人机对战'''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()'''联机对战'''def playOnline(self):self.close()self.gaming_ui = playOnlineUI(cfg, self)self.gaming_ui.show()'''run'''
if __name__ == '__main__':app = QApplication(sys.argv)handle = gameStartUI()font = QFont()font.setPointSize(12)handle.setFont(font)handle.show()sys.exit(app.exec_())

cfg.py

'''config file'''
import os# 图标路径
ICON_FILEPATH = os.path.join(os.getcwd(), 'resources/images/icon/icon.ico')
# 背景图片路径
BACKGROUND_IMAGEPATHS = {'bg_game': os.path.join(os.getcwd(), 'resources/images/bg/bg_game.png'),'bg_start': os.path.join(os.getcwd(), 'resources/images/bg/bg_start.png')}
# 按钮图片路径
BUTTON_IMAGEPATHS = {'online': [os.path.join(os.getcwd(), 'resources/images/buttons/online_0.png'),os.path.join(os.getcwd(), 'resources/images/buttons/online_1.png'),os.path.join(os.getcwd(), 'resources/images/buttons/online_2.png')],'ai': [os.path.join(os.getcwd(), 'resources/images/buttons/ai_0.png'),os.path.join(os.getcwd(), 'resources/images/buttons/ai_1.png'),os.path.join(os.getcwd(), 'resources/images/buttons/ai_2.png')],'home': [os.path.join(os.getcwd(), 'resources/images/buttons/home_0.png'),os.path.join(os.getcwd(), 'resources/images/buttons/home_1.png'),os.path.join(os.getcwd(), 'resources/images/buttons/home_2.png')],'givein': [os.path.join(os.getcwd(), 'resources/images/buttons/givein_0.png'),os.path.join(os.getcwd(), 'resources/images/buttons/givein_1.png'),os.path.join(os.getcwd(), 'resources/images/buttons/givein_2.png')],'regret': [os.path.join(os.getcwd(), 'resources/images/buttons/regret_0.png'),os.path.join(os.getcwd(), 'resources/images/buttons/regret_1.png'),os.path.join(os.getcwd(), 'resources/images/buttons/regret_2.png')],'startgame': [os.path.join(os.getcwd(), 'resources/images/buttons/startgame_0.png'),os.path.join(os.getcwd(), 'resources/images/buttons/startgame_1.png'),os.path.join(os.getcwd(), 'resources/images/buttons/startgame_2.png')],'urge': [os.path.join(os.getcwd(), 'resources/images/buttons/urge_0.png'),os.path.join(os.getcwd(), 'resources/images/buttons/urge_1.png'),os.path.join(os.getcwd(), 'resources/images/buttons/urge_2.png')]}
# 显示胜利图片路径
WIN_IMAGEPATHS = {'black': os.path.join(os.getcwd(), 'resources/images/win/black_win.png'),'white': os.path.join(os.getcwd(), 'resources/images/win/white_win.png'),'draw': os.path.join(os.getcwd(), 'resources/images/win/draw.png')}
# 棋子图片路径
CHESSMAN_IMAGEPATHS = {'black': os.path.join(os.getcwd(), 'resources/images/chessman/black.png'),'white': os.path.join(os.getcwd(), 'resources/images/chessman/white.png'),'sign': os.path.join(os.getcwd(), 'resources/images/chessman/sign.png'),}
# 音效
SOUNDS_PATHS = {'drop': os.path.join(os.getcwd(), 'resources/audios/drop.wav'),'urge': os.path.join(os.getcwd(), 'resources/audios/urge.wav')}
# 端口号(联机对战时使用)
PORT = 3333

PlayWithAI.py

'''
Function:定义人机对战
Author:Charles
微信公众号:Python代码大全
'''
import pygame
from PyQt5 import QtCore
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from itertools import product
from modules.misc.utils import *
from modules.misc.Buttons import *
from modules.misc.Chessman import *
from modules.ai.aiGobang import aiGobang'''人机对战'''
class playWithAIUI(QWidget):back_signal = pyqtSignal()exit_signal = pyqtSignal()send_back_signal = Falsedef __init__(self, cfg, parent=None, **kwargs):super(playWithAIUI, self).__init__(parent)self.cfg = cfgself.setFixedSize(760, 650)self.setWindowTitle('五子棋-微信公众号: Charles的皮卡丘')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)# 落子标志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 = Noneself.winner_info_label = None# 颜色分配and目前轮到谁落子self.player_color = 'white'self.ai_color = 'black'self.whoseround = self.player_color# 实例化aiself.ai_player = aiGobang(self.ai_color, self.player_color)# 落子声音加载pygame.mixer.init()self.drop_sound = pygame.mixer.Sound(cfg.SOUNDS_PATHS.get('drop'))'''鼠标左键点击事件-玩家回合'''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# 保证只在棋盘范围内响应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)# 保证落子的地方本来没有人落子if self.chessboard[pos[0]][pos[1]]:return# 实例化一个棋子并显示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()# 最后落子位置标志对落子位置进行跟随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# 切换回合方(其实就是改颜色)self.nextRound()'''鼠标左键释放操作-调用电脑回合'''def mouseReleaseEvent(self, event):if (self.winner is not None) or (self.whoseround != self.ai_color) or (not self.is_gaming):returnself.aiAct()'''电脑自动下-AI回合'''def aiAct(self):if (self.winner is not None) or (self.whoseround == self.player_color) or (not self.is_gaming):returnnext_pos = self.ai_player.act(self.history_record)# 实例化一个棋子并显示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()# 最后落子位置标志对落子位置进行跟随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# 切换回合方(其实就是改颜色)self.nextRound()'''改变落子方'''def nextRound(self):self.whoseround = self.player_color if self.whoseround == self.ai_color else self.ai_color'''显示游戏结束结果'''def showGameEndInfo(self):self.is_gaming = Falseinfo_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()'''认输'''def givein(self):if self.is_gaming and (self.winner is None) and (self.whoseround == self.player_color):self.winner = self.ai_colorself.showGameEndInfo()'''悔棋-只有我方回合的时候可以悔棋'''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):returnfor _ 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]] = Noneself.chessman_sign.hide()'''开始游戏-之前的对弈必须已经结束才行'''def startgame(self):if self.is_gaming:returnself.is_gaming = Trueself.whoseround = self.player_colorfor i, j in product(range(19), range(19)):if self.chessboard[i][j]:self.chessboard[i][j].close()self.chessboard[i][j] = Noneself.winner = Noneself.winner_info_label.close()self.winner_info_label = Noneself.history_record.clear()self.chessman_sign.hide()'''关闭窗口事件'''def closeEvent(self, event):if not self.send_back_signal:self.exit_signal.emit()'''返回游戏主页面'''def goHome(self):self.send_back_signal = Trueself.close()self.back_signal.emit()

完整程序代码下载:Python五子棋小游戏源代码,支持人机对战和局域网对战两模式
更多Python源代码,请关注公众号:Python代码大全

Python五子棋小游戏源代码,支持人机对战和局域网对战两模式相关推荐

  1. Python跳跳兔小游戏源代码,兔年必玩小游戏,兔年大吉

    Python跳跳兔小游戏源代码,兔年必玩小游戏,兔年大吉,小兔子跳跳,按空格键向上跳跃,按键盘方向键进行左右移动,以避开飞弹,以防被炸,还可以捡到火箭道具哦. 完整程序下载地址:Python跳跳兔小游 ...

  2. [Python教程入门教程]Python五子棋小游戏实例分享

    本文实例为大家分享了Python实现五子棋小游戏的具体代码,供大家参考,具体内容如下 使用的库 pygame.pyautogui 流程简述 1.画棋盘 设置网格间隔40px ,留白 80 px ,与网 ...

  3. Python地雷战小游戏源代码

    Python版地道战小游戏源代码,游戏中寻找所需要的五种合成地雷的原材料,并躲避敌人的抓捕,雷可以炸死敌方.程序运行截图: 主要程序代码: tunnel_war_game.py import pyga ...

  4. python五子棋小游戏程序源码

    wx供重浩:创享日记 对话框发送:python五子棋 免费获取完整源码源文件+配置教程文件+可执行文件等 在PyCharm中运行<五子棋(控制台版)>即可进入如图1所示的系统主界面. 具体 ...

  5. python外星人入侵小游戏

    python外星人入侵小游戏 python外星人入侵小游戏 项目结构如图所示: (1)alien.py中的代码: (2)alien_invasion.py中的代码: (3)bullet.py中的代码: ...

  6. Android Studio实现五子棋小游戏

    项目目录 一.项目概述 二.开发环境 三.详细设计 1.布局设计 2.验证码 3.AI人机 4.背景音乐 四.运行演示 五.项目总结 六.源码获取 一.项目概述 五子棋是一种两人对弈的策略型棋类游戏, ...

  7. Python版基于pygame的玛丽快跑小游戏源代码,玛丽冒险小游戏代码,支持双人模式

    基于pygame的玛丽快跑小游戏源代码,玛丽冒险小游戏代码,支持双人模式 按空格进入单人模式,按't'进入双人模式,双人模式下玛丽1采用空格键上跳,玛丽2采用方向上键上跳. 完整代码下载地址:Pyth ...

  8. python经典小游戏五子棋,适合python编程的小游戏

    python入门可以做的小游戏 1.Python入门拼图小游戏简单介绍:将图像分为m×n个矩形块,并将图像右下角的矩形块替换为空白块后,将这些矩形块随机摆放成原图像的形状. 2.Python入门推箱子 ...

  9. python五子棋代码_python实现五子棋小游戏

    本文实例为大家分享了python实现五子棋小游戏的具体代码,供大家参考,具体内容如下 暑假学了十几天python,然后用pygame模块写了一个五子棋的小游戏,代码跟有缘人分享一下. import n ...

最新文章

  1. android9多了什么功能,Android 9.0 都增加了什么功能?
  2. mysql natural join用法_MySQL NATURAL JOIN
  3. 无人驾驶(pid算法)
  4. [论文笔记]R-NET: MACHINE READING COMPREHENSION WITH SELF-MATCHING NETWORKS
  5. node.js(三)MongoDB数据库搭建
  6. Hibernate框架(一)——总体介绍
  7. java博客二级菜单的实现
  8. Oracle P6 -SQLServer数据库乱码案例分享
  9. linux 存储映射lun 给_Linux挂载iscsi存储
  10. SPSS——秩和检验
  11. oracle onlinelog 11G,从alert日志看Oracle 11g Datagurad日志传输(下)
  12. 女人健身操必知的健康常识
  13. 计算机网络篇- 网络层
  14. Date对象之获取和设置月份getMonthsetMonth
  15. 砺鹰教育之四川财经职业学院讲座——我为什么选择创业?
  16. Excel PivotTable 使用心得手顺分享(五)
  17. 打地鼠java代码流程图_51单片机 普中51 打地鼠游戏 仿真 程序 流程图
  18. 158 Linux中断基础概念
  19. 转:微信、米聊用户数量猛增 短信业务受冲击
  20. There is no getter for property named xxx in xxx

热门文章

  1. 【Cocos2d-x】模仿热血传奇开门动画
  2. 数据交易思享会 | 美创科技分享《数据交易准入安全》
  3. 【ZED】从零开始使用ZED相机(五):Opencv+Python实现相机标定(双目)
  4. Visual Studio 2019 设置透明背景图(傻瓜式教学)
  5. 手机测量长度怎么测量?这种方法不能不了解
  6. LINUX学习------Linux自动化运维——Docker容器
  7. 从 SVN 到极狐GitLab的迁移指南
  8. 【MySQL进阶篇】学习笔记
  9. MySql Error 1146 Tabel doen't exist
  10. 派对屋3000效果器怎样调试_如何调试ktv效果器