自己用python写的五子棋 ,辛辛苦苦写的详细注释,等以后再回来看看自己的思路
用的函数式编程,面向对象不熟练,当时的想法是先通过函数式编程写出来,把思路整理一下,
理清楚过程事件了,再用面向对象重写,也算是再梳理一遍
用了第三方库pygame
有个问题,如果有大神知道,欢迎留言:
我想实现一个功能:
鼠标在移动的时候,如果鼠标位置靠近棋盘上某一个横竖线交叉点一定范围(上下左右各一半)的时候,能够在这个交叉点出现一个光标聚焦的标志(类似准星的玩意),移动到其他位置后,再在其他距离最近的横竖线交叉点出现
意思就是鼠标的光标无论停留在什么位置,我想要在最近的横竖线交叉点出现一个准星,表示棋子落子的位置,以防落子位置出现偏差落到其他位置 ,只能出现一个准星
我尝试用pygame.MOUSEMOTION事件,通过mouse.get_pos()得到光标的位置,然后再进行判断靠近哪一个交叉点,然后在这个交叉点画出一个准星,但是鼠标移动后会重新生成新的准信,我没办法删除之前的准星,导致一直在窗体上添加准星
我又尝试生成下一个准星时,重新绘制所有的pygame对象,但是由于MOUSEMOTION是鼠标移动事件,只要鼠标移动就会触发,会一直扫描,所以鼠标只要移动,就会生成准星,然后重绘所有的对象,导致不断执行,然后整个画面就一直一闪一闪的
求问:pygame能不能实现这个功能 ,怎么实现
我的初步想法是在while循环里的MOUSEMOTION事件里加一个延时
文章来源:https://www.toymoban.com/news/detail-422714.html
文章来源地址https://www.toymoban.com/news/detail-422714.html
# -*- coding: utf-8 -*-
# __/author__by:Kevin_X/__
import pygame
win_W = 900 # 窗口宽度
win_H = 700 # 窗口高度
# 游戏初始化
def gameinit():
global window
pygame.init()
window = pygame.display.set_mode((win_W,win_H))
pygame.display.set_caption('五子棋 BY:Kevin_X')
window.fill((255, 218, 185))
pygame.display.flip()
# 棋盘划线15*15
x=20 # 棋盘起点(20,20),四周留空20
while x <= 680:
pygame.draw.line(window,(0, 0, 0), (x, 20), (x, 680), 1)
pygame.draw.line(window,(0, 0, 0), (20, x), (680, x), 1)
x+=44
# 步长44,这个是棋格的大小,棋子大小为直径40的圆,这样棋子之间留2个像素的间隙,美观一点
# 状态显示区
def game_status(str_status):
# 传入一个参数,为字符串形式
到了这里,关于python 五子棋 pygame的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!