Использование мыши для перемещения нескольких отдельных изображений - PullRequest
0 голосов
/ 24 апреля 2019

Итак, я делаю шахматную игру для проекта.Я использую Pygame для создания игры.Мне еще предстоит реализовать настоящие шахматные правила и ИИ, и в настоящее время я пытаюсь дать возможность каждой фигуре двигаться с помощью мыши.Я создал шахматную доску и шахматные фигуры.В настоящее время я настроил форму движения мыши на одном из фрагментов / изображений, но он работает не очень хорошо.Я хочу иметь возможность перетаскивать изображения частей.Я хотел бы иметь возможность перетаскивать каждую шахматную фигуру, где бы она ни находилась, на шахматной доске, когда они занимают свои текущие позиции на доске.

Я до сих пор использовал mx и мой, чтобы активировать одну фигуру.двигаться через щелчки мыши, но это не очень хорошо работает.Я также не уверен в том, как можно разрешить каждой фигуре перемещаться с помощью перетаскивания мышью.

import pygame
from pygame.locals import *

def draw_board(the_board):

    pygame.init()
    pygame.display.set_caption('Chess World!')

    colours = [(255,100,10), (230,220,170)]    

    n = len(the_board)         

    square = 600 // 8    
    surfsize = 6 * square     


    surface = pygame.display.set_mode([1000, 600])
    white = (255,255,255)
    surface.fill(white)
    pygame.display.update()

    redpawn = pygame.image.load('redpawn.png')
    redbishop = pygame.image.load('redbishop.png')
    redrook = pygame.image.load('redrook.png')
    redknight = pygame.image.load('redknight.png')
    redking = pygame.image.load('redking.png')
    redqueen = pygame.image.load('redqueen.png')

    whitepawn = pygame.image.load('whitepawn.png')
    whitebishop = pygame.image.load('whitebishop.png')
    whiterook = pygame.image.load('whiterook.png')
    whiteknight = pygame.image.load('whiteknight.png')
    whiteking = pygame.image.load('whiteking.png')
    whitequeen = pygame.image.load('whitequeen.png')

    mx,my = pygame.mouse.get_pos()
    while True:


        instance = pygame.event.poll()
        if instance.type == pygame.QUIT:
            break;

        for row in range(n):           
            c_index = row % 2           
            for column in range(n):       
                the_square = (column*square, row*square, square, square)
                surface.fill(colours[c_index], the_square)                
                c_index = (c_index + 1) % 2         #colour index



        for event in pygame.event.get():
            if event.type == MOUSEBUTTONDOWN:
                mx,my = pygame.mouse.get_pos()


        surface.blit(redpawn,(mx-50,my-50))       #originally (10,80)
        surface.blit(redpawn,(85,80))
        surface.blit(redpawn,(160,80))
        surface.blit(redpawn,(235,80))
        surface.blit(redpawn,(310,80))
        surface.blit(redpawn,(385,80))
        surface.blit(redpawn,(460,80))
        surface.blit(redpawn,(535,80))
        surface.blit(redrook,(10,0))
        surface.blit(redknight,(85,0))
        surface.blit(redbishop,(160,0))
        surface.blit(redqueen,(235,0))
        surface.blit(redking,(310,0))
        surface.blit(redbishop,(385,0))
        surface.blit(redknight,(460,0))
        surface.blit(redrook,(535,0))


        surface.blit(whitepawn,(10,455))
        surface.blit(whitepawn,(85,455))
        surface.blit(whitepawn,(160,455))
        surface.blit(whitepawn,(235,455))
        surface.blit(whitepawn,(310,455))
        surface.blit(whitepawn,(385,455))
        surface.blit(whitepawn,(460,455))
        surface.blit(whitepawn,(535,455))
        surface.blit(whiterook,(10,525))
        surface.blit(whiteknight,(85,525))
        surface.blit(whitebishop,(160,525))
        surface.blit(whitequeen,(235,525))
        surface.blit(whiteking,(310,525))
        surface.blit(whitebishop,(385,525))
        surface.blit(whiteknight,(460,525))
        surface.blit(whiterook,(535,525))

        pygame.display.flip()

    pygame.quit()

if __name__ == "__main__":
    draw_board([6, 4, 2, 0, 5, 7, 1, 3])

Фактические результаты выполнения до некоторой степени встречаются, поскольку щелчок мыши может перемещать красную пешку, ноне очень хорошо, а также, если пешка перемещается с доски, она постоянно печатается в пространстве, если постоянно перемещается.Я ожидаю, что смогу переместить каждую шахматную фигуру через доску.В настоящее время я не обеспокоен ограничениями движений для каждой части.Я открыт для критики и внесения изменений в этот код.

...