How to create MS Paint clone with Python and pygame

后端 未结 4 1381
花落未央
花落未央 2020-12-13 15:50

As I see it, there are two ways to handle mouse events to draw a picture.

The first is to detect when the mouse moves and draw a line to where the mouse is, shown he

4条回答
  •  我在风中等你
    2020-12-13 16:18

    For the first problem, you need have a background, even if its just a color. I had the same problem with a replica pong game i made. Here is an example of a replica paint program I made, left click to draw, right click to erase, click on the color image to choose a color, and up button to clear screen:

    import os
    os.environ['SDL_VIDEO_CENTERED'] = '1'
    from pygamehelper import *
    from pygame import *
    from pygame.locals import *
    from vec2d import *
    from math import e, pi, cos, sin, sqrt
    from random import uniform
    
    class Starter(PygameHelper):
        def __init__(self):
            self.w, self.h = 800, 600
            PygameHelper.__init__(self, size=(self.w, self.h), fill=((255,255,255)))
    
            self.img= pygame.image.load("colors.png")
            self.screen.blit(self.img, (0,0))
    
            self.drawcolor= (0,0,0)
            self.x= 0
    
        def update(self):
            pass
    
        def keyUp(self, key):
            if key==K_UP:
                self.screen.fill((255,255,255))
                self.screen.blit(self.img, (0,0))
    
    
    
    
        def mouseUp(self, button, pos):
            pass
    
        def mouseMotion(self, buttons, pos, rel):
            if pos[1]>=172: 
                if buttons[0]==1:
                    #pygame.draw.circle(self.screen, (0,0,0), pos, 5)
                    pygame.draw.line(self.screen, self.drawcolor, pos, (pos[0]-rel[0], pos[1]-rel[1]),5)                
                if buttons[2]==1:
                    pygame.draw.circle(self.screen, (255,255,255), pos, 30)
                if buttons[1]==1:
                    #RAINBOW MODE
                    color= self.screen.get_at((self.x, 0))
                    pygame.draw.line(self.screen, color, pos, (pos[0]-rel[0], pos[1]-rel[1]), 5)
    
                    self.x+= 1
                    if self.x>172: self.x=0
    
            else:
                if pos[0]<172:
                    if buttons[0]==1:
                        self.drawcolor= self.screen.get_at(pos)
                        pygame.draw.circle(self.screen, self.drawcolor, (250, 100), 30)
    
        def draw(self):
            pass
            #self.screen.fill((255,255,255))
            #pygame.draw.circle(self.screen, (0,0,0), (50,100), 20)
    
    s = Starter()
    s.mainLoop(40)
    

提交回复
热议问题