如何解决我如何跟踪用户在棋盘上的点击?
我正在使用Python 3.7.4。我将Pycharm 2020社区用作我的IDE。我正在使用Pygame 1.9.6作为游戏解释器。
我想知道如何跟踪棋盘上的玩家。我以为它应该在我的main()运行操作中出现,但是在哪里呢? 因此,在棋board上是一个8x8的棋盘,所以有64个正方形。就像说他们一次单击正方形以选择上面有一块的正方形,然后如果正方形为空,则单击另一个正方形将其移动到另一个正方形。我的国际象棋棋盘上的空白方块是:“ 01”。就像我需要某种方式来达到板子的尺寸一样,像是行还是列? 我有板子的尺寸。
WIDTH = HEIGHT = 512 # 400 is another option
DIMENSION = 8 # dimensions of a chess board are 8x8
SQ_SIZE = HEIGHT // DIMENSION
MAX_FPS = 15 # for animations later on
IMAGES = {}
def main():
p.init()
screen = p.display.set_mode((WIDTH,HEIGHT))
clock = p.time.Clock()
screen.fill(p.Color("white"))
gs = ChessEngine.GameState()
loadImages() # only do this once,before the while loop
running = True
while running:
for e in p.event.get():
if e.type == p.QUIT:
running = False
drawGameState(screen,gs)
clock.tick(MAX_FPS)
p.display.flip()
我之前从未做过鼠标单击操作,所以我想知道我该怎么做?
解决方法
可以通过//
(底数划分)运算符来计算单击字段的索引。获取MOUSEBUTTONDOWN
事件(请参见pygame.event
),然后将鼠标位置坐标除以SQ_SIZE
:
def main():
# [...]
while running:
for e in p.event.get():
if e.type == p.QUIT:
running = False
if e.type == p.MOUSEBUTTONDOWN:
mousePos = e.pos
column,row = mousePos[0] // SQ_SIZE,mousePos[1] // SQ_SIZE
columnName,rowName = chr(ord('a') + column),str(row+1)
print("clicked at " + columnName + rowName)
,
您可以获取鼠标坐标并将其除以SQ_SIZE
,但是使用下限分隔(mousex // SQ_Size),使用两个分隔符号会终止小数点,并且您将剩下板。例如,如果您单击(230,213),您可能会...
if pygame.mouse.get_pressed()[0]: # Is the left mouse button down
mousex,mousey = pygame.mouse.get_pos() # (230,213)
col = mousex // SQ_SIZE # 230 // 64 = 3
row = mousey // SQ_SIZE # 213 // 64 = 3
pieceSelected = chessBoard[row][col]
这将使您获得用户点击的作品。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。