python实现《五子棋》

这篇具有很好参考价值的文章主要介绍了python实现《五子棋》。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        今天突然心血来潮,想全程自己写一个小游戏(毕竟对于一个才接触python不到一个月的小白来说,还是比较为难,虽然不算是完全成功,因为棋盘大小和布局还是借鉴了其它博主的,但这都是小问题,重要是其它的都是自己写的嘛!!!(咦,这小编真能扯,还不上代码)) 。相信各位既然来到了这里,那一定对这规则了如指掌了的。那我就不多赘述了。

        先上图(有图有真相)

python五子棋代码,python,pygame,开发语言

 

        下面就由我来盖释盖释(解释解释)这破代码

         这个参数是为了记录当前的轮次(该谁来)

class Stats:
        def __init__(self):
                """管理游戏过程中的可变参数"""
                self.turn = 2  #当前轮次,1表示白棋,2表示黑棋

        游戏中的固定参数

class Setting:
        def __init__(self):
                self.screen_size = (670, 670)
                self.screen_color = (238, 154, 73)
                self.line_color = (0, 0, 0)
                self.chess = [(), (255, 255, 255), (0, 0, 0)] #1表示白色,2表示黑色

        使用sys中的exit()来结束游戏

        使用pygame中的画图工具来绘制

        1.pygame.draw.line(surface对象,颜色,起点坐标,终点坐标,线条大小) #坐标采用[x,y]表示。

        2.pygame.draw.cirle(surface对象,颜色,圆点坐标,半径大小,外边框大小=0)   #外边框大小缺省默认为0,表示绘制实心圆;大于0表示绘制空心圆,数值大小表示边框线条粗细;小于0则什么都不会绘制。

import sys

import pygame

from game_over import isover
from game_stats import Stats
from setting import Setting


class my_chess:
        """管理五子棋的类"""

        def __init__(self):
                pygame.init()  # 获取对显示系统的访问

                # 记录棋子位置的数组,用于判断当前文字是否可下和判断五子连心
                self.chess_color = []
                self.chess = []
                self.chess_position = [[0 for _ in range(15)] for _ in range(15)]

                self.setting = Setting()  # 游戏参数设置
                self.stats = Stats()

                self.screen = pygame.display.set_mode(self.setting.screen_size)
                pygame.display.set_caption("我的五子棋")

        def run_game(self):
                while True:
                        self.update_screen()

                        # 将之前的棋子绘制出来
                        for i in range(len(self.chess_color)):
                                pygame.draw.circle(self.screen, self.chess_color[i], self.chess[i], 22)

                        self.event_check()

                        # pygame.display.flip()  # 让最近绘制的屏幕可见
                        pygame.display.update()

        def update_screen(self):
                """刷新屏幕显示"""

                self.screen.fill(self.setting.screen_color)  # 先填充背景色

                """绘制棋盘"""
                for i in range(27, 670, 44):
                        if i == 27 or i == 670 - 27:
                                # 边界线条画大一点
                                # 横线
                                pygame.draw.line(self.screen, self.setting.line_color, [i, 27], [i, 670 - 27], 4)
                                # 竖线
                                pygame.draw.line(self.screen, self.setting.line_color, [27, i], [670 - 27, i], 4)
                        else:
                                pygame.draw.line(self.screen, self.setting.line_color, [i, 27], [i, 670 - 27], 2)
                                pygame.draw.line(self.screen, self.setting.line_color, [27, i], [670 - 27, i], 2)

                # 中心小黑点绘制
                pygame.draw.circle(self.screen, self.setting.line_color, [27 + 44 * 7, 27 + 44 * 7], 7)

        def event_check(self):
                """对游戏发生的事件进行处理"""
                for event in pygame.event.get():
                        if event.type == pygame.QUIT:
                                sys.exit()
                        elif event.type == pygame.MOUSEBUTTONDOWN:
                                a, b = pygame.mouse.get_pos()
                                x, y = self.get_mouse(a, b)
                                if x == 0 or not self.isOk([x, y]):
                                        pass
                                else:
                                        self.chess_color.append(self.setting.chess[self.stats.turn])
                                        self.chess.append([x, y])
                                        if isover(self.chess_position, [x // 44, y // 44]):
                                                print('结束')
                                                sys.exit()
                                        self.chess_position[x // 44][y // 44] = self.stats.turn

                                        if self.stats.turn == 1:
                                                self.stats.turn += 1
                                        else:
                                                self.stats.turn -= 1

        def isOk(self, nums):
                """检测当前位置是否可以下棋子"""
                if nums in self.chess:
                        return False
                return True

        def get_mouse(self, a, b):
                for i in range(27, 670, 44):
                        for j in range(27, 670, 44):
                                left = i - 11
                                right = i + 11
                                up = j - 11
                                down = j + 11
                                if a >= left and a <= right and b >= up and b <= down:
                                        return i, j

                return 0, 0




if __name__ == '__main__':
        game = my_chess()
        game.run_game()

        判断这步棋子下了之后是否出现了五子相连的情况,这破代码太长了,当然也可以使用一个列表存储偏移量一个,再使用for循环内嵌一个while循环来减少代码量(我就不再淦它了)文章来源地址https://www.toymoban.com/news/detail-519318.html

from game_stats import Stats

stats = Stats()


def isover(chess_position, nums):
        cur = stats.turn
        left, right = 0, 0
        x = nums[0]
        y = nums[1]

        # 检测行
        for i in range(x - 1, -1, -1):
                if chess_position[i][y] == cur:
                        left += 1
                else:
                        break
        for i in range(x + 1, 15, 1):
                if chess_position[i][y] == cur:
                        right += 1
                else:
                        break
        if left + right >= 4:
                return True

        # 检测列
        left, right = 0, 0
        for i in range(y - 1, -1, -1):
                if chess_position[x][i] == cur:
                        left += 1
                else:
                        break
        for i in range(y + 1, 15, 1):
                if chess_position[x][i] == cur:
                        right += 1
                else:
                        break
        if left + right >= 4:
                return True

        # 检测左对角线
        left, right = 0, 0
        i, j = x - 1, y - 1
        while i >= 0 and j >= 0:
                if chess_position[i][j] == cur:
                        left += 1
                        i -= 1
                        j -= 1
                else:
                        break
        i, j = x + 1, y + 1
        while i < 15 and j < 15:
                if chess_position[i][j] == cur:
                        right += 1
                        i += 1
                        j += 1
                else:
                        break
        if left + right >= 4:
                return True

        # 检测右对角线
        left, right = 0, 0
        i, j = x - 1, y + 1
        while i >= 0 and j < 15:
                if chess_position[i][j] == cur:
                        left += 1
                        i -= 1
                        j += 1
                else:
                        break
        i, j = x + 1, y - 1
        while i < 15 and j >= 0:
                if chess_position[i][j] == cur:
                        right += 1
                        i += 1
                        j -= 1
                else:
                        break
        if left + right >= 4:
                return True

        return False

到了这里,关于python实现《五子棋》的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python五子棋代码最简单的,python五子棋代码能复制

    本篇文章给大家谈谈python五子棋代码红方蓝方,以及python五子棋代码最简单的,希望对各位有所帮助,不要忘了收藏本站喔。 开端 画棋盘 首先肯定是要画出棋盘来,用  pygame  画出一个 19 × 19 或 15 × 15 的棋盘并不是什么难事,这在之前的文章中已经多次用到,就不赘述了

    2024年03月13日
    浏览(34)
  • python五子棋代码最简单的,python五子棋代码手机版

    大家好,本文将围绕python五子棋代码最简单的展开说明,python五子棋代码手机版是一个很多人都想弄明白的事情,想搞清楚python五子棋代码画棋盘需要先了解以下几个事情。 【实例简介】 【实例截图】 【核心代码】 \\\"\\\"\\\"五子棋之人机对战\\\"\\\"\\\" import sys import random import pygame from

    2024年01月19日
    浏览(30)
  • Pygame 五子棋编程

    编程说明:  pygame编程五子棋程序。 设计流程 :新建棋盘,落子画圆,校验五子相连,赢家信息显示,自动重启下一局,程序打包成exe。 关键点 :     新建棋盘:考虑线的间隔,需提前计算好。     落子画圆:考虑黑白交替,已落子坐标位不可重复落子。     校验五子

    2024年02月08日
    浏览(37)
  • python五子棋(附代码)

    基于pygame实现五子棋 掌握核心算法,怎么判断是否连成五个以及落子位置的模糊判断 1.只需要判断最后一个棋子周围4个方向(上下,左右,左上右下,右下左上)这些方向棋子的颜色是否和最后一个落子颜色连续一致!(详情看代码) 2.落子位置的模糊判断对下棋的体验感

    2024年02月04日
    浏览(25)
  • Python实现五子棋

    我认为这个五子棋核心还是在于二维数组,将实际当中鼠标点击的物理位置转换到棋盘中的逻辑地址,之后便用数组的方法进行操作,例如检测是否获胜,电脑下棋策略等。 是否可落子 是否有输赢 每次标记最新下棋的位置即可 电脑下棋 策略:主要根据一个网上的经验评分

    2024年02月06日
    浏览(32)
  • 五子棋(Python实现)

    2024年02月11日
    浏览(29)
  • python实现《五子棋》

            今天突然心血来潮,想全程自己写一个小游戏(毕竟对于一个才接触python不到一个月的小白来说,还是比较为难,虽然不算是完全成功,因为棋盘大小和布局还是借鉴了其它博主的,但这都是小问题,重要是其它的都是自己写的嘛!!!(咦,这小编真能扯,还不上

    2024年02月12日
    浏览(21)
  • python实现简单五子棋

     规则 :用鼠标下子,黑子白子交替下子 核心 :1、使用turtle库画棋盘            2、turtle库中的onscreenclick()函数,实现鼠标点击 详细步骤: 用turtle()库fd()函数实现画直线,tracer(0)消除动画效果 定义一个二维数组,也就是列表来对应棋盘上的落子情况,没有子为0,黑子为

    2024年02月05日
    浏览(19)
  • C语言实现五子棋小游戏(内附源码)

    游戏中有人机,双人两种模式。五子棋作为一个平面游戏,很明显用二维数组来写最合适不过。为了让代码看起来更有条理,我们用三个.c文件,分别是:text.c 用来测试我们的游戏;game.c 游戏功能的实现;is_win.c 判断输赢的版块。另外,还有一个game.h 文件来放我们的函数声

    2024年02月09日
    浏览(31)
  • Java实现五子棋小游戏(附思路讲解,全部代码,游戏截图)

    本文章是如何实现一个单机版双人五子棋小游戏,通过Swing技术进行可视操作. 个人简介: 🤦‍♂️个人主页:码云不秃头. 😜本人是一名大三学生,马上就要变成考研狗啦,通过一学期对Java学习,经过老师的教学,实现单机版的双人五子棋小游戏,大家互相学习,也同时为了完成我的实

    2024年02月07日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包