HIT暑假python作业三《超级画板》

HIT暑假python作业三《超级画板》

  • 作业上交版代码
  • 编译版

程序运行效果**(运行时确保同目录下有文件夹img,里面有pen,eraser,plus,minus四个png图象,如果没有可以使用下文的编译版就不需要这四个图象)**
HIT暑假python作业三《超级画板》_第1张图片

作业上交版代码

# -*- coding: utf-8 -*-
import pygame
#pyinstaller -F -p F:\pythoncode\venv\lib\site-packages homework3.py
colors = [(255,0,255),(0,0,255),(0,255,255),(0,255,0),(255,255,0),(255,0,0),(192,192,192),(128,128,128),
          (128,0,128),(0,0,128),(0,128,128),(0,128,0),(128,128,0),(128,0,0),(0,0,0),(0,192,128),(255,255,255)]
def windowsupdate():
    # screen.fill((100,100,100))
    penimg = pygame.image.load('./img/pen.png')
    eraserimg = pygame.image.load('./img/eraser.png')
    plusimg = pygame.image.load('./img/plus.png')
    minusimg = pygame.image.load('./img/minus.png')
    screen.blit(penimg,penarea)
    screen.blit(eraserimg,eraserarea)
    screen.blit(plusimg,plusarea)
    screen.blit(minusimg,minusarea)
    pygame.draw.rect(screen,(0,0,0),previewimg,width=1)
    pygame.draw.circle(screen,colors[nowcolor],(imgx+30,imgy+165),thickness/2)
    for i in range(0,16):
        pygame.draw.rect(screen,colors[i],colorareas[i])
        # screen.blit(pygame.Surface.fill(color = colors[i],rect = colorareas[i]),colorareas[i])
    pygame.display.update()#flip函数将重新绘制整个屏幕对应的窗口,update函数仅仅重新绘制窗口中有变化的区域。

print(pygame.version)
pygame.init()
pygame.display.set_caption('超级画板')
screen = pygame.display.set_mode(size = (640,480))
screen.fill((255, 255, 255))
imgx = 10
imgy = 10
penarea = pygame.Rect(imgx,imgy,32,32)
eraserarea = pygame.Rect(imgx,imgy+50,32,32)
plusarea = pygame.Rect(imgx,imgy+100,32,32)
minusarea = pygame.Rect(imgx+35,imgy+100,32,32)
previewimg = pygame.Rect(imgx,imgy+135,60,60)
colorareas = []
for i in range(0,8):
    colorareas.append(pygame.Rect(imgx,imgy+200+30*i,30,30))
for i in range(0,8):
    colorareas.append(pygame.Rect(imgx+30,imgy+200+15+30*i,30,30))
pencolor = 14#初始参数colors[14]为黑色
nowcolor = 14
thickness = 4
windowsupdate()#窗口更新
# pygame.draw.line(screen,colors[1],(100,100),(200,200),3)
# pygame.display.update()
while True:
    event = pygame.event.wait()
    # print(event)
    if event.type == 1025:#如果鼠标有点击
        x = event.__dict__['pos'][0]
        y = event.__dict__['pos'][1]
        if penarea.collidepoint(x,y) == 1:
            nowcolor = pencolor
        elif eraserarea.collidepoint(x,y) == 1:
            nowcolor = 16
        elif plusarea.collidepoint(x,y) == 1:
            if thickness<=48:
                thickness += 2
        elif minusarea.collidepoint(x,y) == 1:
            if thickness >= 4:
                thickness -= 2
                pygame.draw.circle(screen, colors[16], (imgx + 30, imgy + 165), thickness / 2 + 1)
        else:
            for i in range(0,16):
                if colorareas[i].collidepoint(x,y):
                    pencolor = i
                    nowcolor = i
                    break
    elif event.type == 1024:#鼠标在移动状态
        if event.__dict__['buttons'][0] == 1:#鼠标在左键点击状态
            fromxy = (event.__dict__['pos'][0]-event.__dict__['rel'][0],event.__dict__['pos'][1]-event.__dict__['rel'][1])
            pygame.draw.line(screen, colors[nowcolor], fromxy, event.__dict__['pos'], thickness)
    elif event.type ==769:#按下了键盘
        if event.__dict__['key'] == 27:#按下了esc
            screen.fill(colors[16])#全部变为白色
    elif event.type ==256:#按下了退出
        break
    windowsupdate()

编译版

该编译版本隐藏了cmd窗口(编译命令见第7行,记得把安装pyinstaller 模块,并且把-p后面的路径改为自己的库的路径)

# -*- coding: utf-8 -*-
# @Time : 2021/7/22 10:19
# @Author : hzh
# @File : homework3.py
# @Software : PyCharm
import pygame
#pyinstaller -F -w -p F:\pythoncode\venv\lib\site-packages homework3.py
imgwb = [b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x1c\x00\x00\x00\x1c\x08\x04\x00\x00\x00\xd8\x04\x17\x1f\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\x00\x00\x00 cHRM\x00\x00z&\x00\x00\x80\x84\x00\x00\xfa\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x00\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x07tIME\x07\xe2\x04\x13\x0f"8\xa4\x98\xf7\x1b\x00\x00\x03FIDAT8\xcb\x85\xd2]h\xd6U\x1c\x07\xf0\xcf\xf9?\x8f\xcbi(f\x98>\x86\xa2\xcefh\x14{\xd2\x14-\xac\x90$\x12$+\xd2 \xb2\xf0-k\t\xbd[)\xbad"dS\xf3e\xbe\xd4Ea7\xdd\x98$\xad\xd42\xcb\x8cz\x86f\x92d\x1a\x96:E\xd3\xd1\xb4\xbd?\xa7\x8bY\xb8\x9a\xebw\xf7\xbb\xf8\x9c\xef\xef\xfc\xce\t:\xad\x12\xd2\xe1\x0e\xcf\x1b\xa9\x97\xf3\x0eZg\xab\x0b9\xa4:cY\xa1 \xcc\xb5\xd20G|+\xba\xd9d78\x90\xf9\xbd\x9ftgL\x81g,\xf2\xabR\x9f\xc6\xda\xd0\xc3\xadf{P\xc6\x8c\xf0S\xaaS\xf6\xac\x85\x8ezLU\xfc\xb3:_S\x9f9b\x9b\xb4\xa9\xfa\xaa\xba\x02,\x11\xbb\x84R\x0bt\xf3\x8b\xee\n\xc3\x99L}FN\xa6\xc97\x8aL\xf2s\xaac\xa6K2\xd7b\xdd\\t\xad\xf1\x1e2\xda\x89x\xac_\xac\x96iR\xeba\x99\xd0aZ:yZ\x99\xf3\x96\xfb\xca \x0b\xfca\xb8F\xf3Z7\'1\xd0\xcb\'\x06\'\x1d\r\x99\x94*s\xdc4o:c\x8aU&\x98\xae\xc1\xf2\xd4\xc4 \x8a\x17\xd4\xb8&\xd5\xe1\x90e~3\xc7\x17\x8a\x94\xdb\xabRC\xf2c\xb9\x8c\xcdT\xee\xb4\xa7\xec2X\xb9\xbd\xd6h\xca\xcbj\xeb\n\xd6\xe8*\xad\xc4u^\x8d\x1b\x93\x98\xbe\xb4\xc9$\xcc\xb0T\xab\xf9qG\x18d\xb9\x9dVk\xcdK\xb8\xd451V\xa1:/\xc6\r\xa15\'PB\x12\x1e\xb7L/M\x8e8\xe2j\x1f\xa9\xd0\x92\x97Pd\x99\x1d\xd6k6\xde\xbbzz9V\x86\x96\x1cR\xb7H\x84{\xacVh\xbf\xaf\xa5\x94(\x96w\xc8\xc9@\x91%\xf6X\xab\xd98\x95\xfaXdu\x1b#\x9d\x88\x05a\xb6BO\xda\x92\xafK\xba\x1a\xaa\xd4T\x03<\xea\x9cev[\x11\xf2\xf16\x95\x06\x9a\xef-\x97\x18!K\xb1\x9d\xf6\xc7)\xea\xab\xdb\xbe\xc0Ua\x8er\xfb\x9c\xf5\xb1J-qd\xd8d\xb0W\xac\xd5\x94\xfb\xe7\xf1\x12\x8c\x96\xb1=\xd4\xe7A5\x8dq\xad\xf7\x8cv\xc2\x86\xd0\x12G\x85M\x06Y\xd8\x9e\x91\xb4\x06c\xd4;\xd0vF\x1b\r\x8d\xdeV\xa7_\xcc\xc7\x91a\xa3\xa1\x16\xc7\x15\xed\x19\xa9\xfe\xbd=\xa7\xaf\xebe\xc2\x89LmF\r2bm\xb8\xcb\x80pT\x85\xa1\x16X\x19\x9a\xdb3\x12#\xdc\xa8\xcaR]\xadt;YD\xb1\xdei\x83U\x1ab\xa1U\xffN\x83\xb4q\xba\xa9\xb2\xb3fg\xbfI^r\xc2Q\x08\xbd\rQ\xa0\xa7%*4\xff\x97\x91\xb8\xdfE9\xfaj\xde\xea;\x93\xc9\x8a!\xdcg\x84\x06e\xde\xe8\x98\x916\xcc\xbex(\xa8\x96e\x97G\x94\xb83\x19\xe5n\xad\xcab\x07w\xfb\xbbB\xb6\xd6)\x0f8\xa6\xd8M\xee5\x01=\xd5\xd9\xe7\x1d\x9b5^\x89\x91\xf6\xbe\'|\xe0\x9c\xe1\xbakt\xd8A{\xe4\xfc\x10/PM\'\xf05L\xd3\xdfa\x1f\xda\xed`<\x1bZr\xfe\xbf\xfe\x02\x8c{?\x93\xc3\x9b\x9a;\x00\x00\x00%tEXtdate:create\x002018-04-19T15:34:56+08:00\x8e"6\x1f\x00\x00\x00%tEXtdate:modify\x002018-04-19T15:34:56+08:00\xff\x7f\x8e\xa3\x00\x00\x00NtEXtsoftware\x00ImageMagick 6.9.1-10 Q16 x86_64 2018-04-19 http://www.imagemagick.orgC0\xb2\x82\x00\x00\x00\x18tEXtThumb::Document::Pages\x001\xa7\xff\xbb/\x00\x00\x00\x18tEXtThumb::Image::Height\x00200}\xd7\x15i\x00\x00\x00\x17tEXtThumb::Image::Width\x00200\xee&E4\x00\x00\x00\x19tEXtThumb::Mimetype\x00image/png?\xb2VN\x00\x00\x00\x17tEXtThumb::MTime\x001524123296\x15\xe4\x85\xf1\x00\x00\x00\x0ftEXtThumb::Size\x000BB\x94\xa2>\xec\x00\x00\x00CtEXtThumb::URI\x00file:///workspace/tmp/mogr2_7_3625d214da73e4_2583_106[0]\xe2^.\x06\x00\x00\x00\x00IEND\xaeB`\x82',b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00 \x00\x00\x00 \x08\x04\x00\x00\x00\xd9s\xb2\x7f\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\x00\x00\x00 cHRM\x00\x00z&\x00\x00\x80\x84\x00\x00\xfa\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x00\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x07tIME\x07\xe2\x04\x18\t\x18\x02\x94\xb1\x0bc\x00\x00\x02\nIDATH\xc7\xd5\xd5?k\x13a\x1c\xc0\xf1\xef/OHk\x82Z\xc5\xe4\x8a4\xe2b\x03^HU\xbaY7\x8b\xa8\xe8\xa0\x83\xa3\x8bCqIF\xc1\x17\xa0\xe0j\xf4\rdp\xd3(.\xb6`E\xe9\x92\xa2\x15b\x95N\xd6\x80\xe0%\xf8\x9fj\x95\xf6q\xb8^\xd2\xcb\xe5\xc9\x1dB\x87>\xe3\xdd}\xbe\xec\x00\x00\x00DtEXtThumb::URI\x00file:///workspace/tmp/mogr2_7_36298c18aac8b7_4a489_37d[0]y\xd5\xe8\x89\x00\x00\x00\x00IEND\xaeB`\x82',b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00 \x00\x00\x00 \x08\x04\x00\x00\x00\xd9s\xb2\x7f\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\x00\x00\x00 cHRM\x00\x00z&\x00\x00\x80\x84\x00\x00\xfa\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x00\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x07tIME\x07\xe2\x04\x13\n!\x1e[s\xe3\xce\x00\x00\x01#IDATH\xc7\xed\x95\xb1N\xc30\x10\x86?\'!\x89\n\x08\x86V\xea\xca\xd0\x01\x89\xb5b\xe4]\xfa\x18\x88\x15\x06\x06\x1e\x80\x89\x91\r\x95\x95\'\xe0\x1dh\xa7J\xd0\x05\x01\xaah($fp\xa0\xbePWI\xdb\x81\xa1\xbf\x17\xffw\xce\xef\xf3\xdd9\x86%\xa1\xe6xB\xbc|\x9e2q-\x0b\x9c\x02\x87\x9c\xb0\x8d\x06\x14O\x1c\xd3\xab\x16Y\xc4\r\xda\x1a\xa7\xae\x85\x9e\xc3\xbe\xc5\x9e\xe0-\xfcj\x02\xea\x0fW\xd5\x04Jc-0m$OHe\xf8\x85\xac+|\xb4e\xd3dh\xe3\x00h\xd3\xa1a\x0c9B\x8e\xd8\xb1\xf8\x80{\xe1W\xf4\xb8\xfc\xe9\xceM\xeeD\xd7\x95\x1d\xd7l\x98\x1c\xc44\x16:~\x93\xe0?Ta%\x02\x1f\xbc.\xf4\xed\x0b\xa9\xe9\x83\x11g\x8c\xa8\x8b2\x05\xecS\xb3\xf83\x0f\x852\xf69g2\xbd\xb61\xa1\xe5\xd6\xd4\xb9\xe5\xc0\xb2t\xe9\xf0%\xf6O\xcco.\xf8\xa5\x89pG\xa4\x82\x7f\xf2V\x10Xe\x12\xd7\x02\xb3\xa1\x97\x15\x183\x14|0\xbb\x88\xee\xa7\xed\x9d\x0b"v\xf3h\x1e\xb9rE0\xefq\xad\x11\x03\x8a\x8c1I\xf9CU\xc47\x98\xdeZ\xdb>:\\\x8c\x00\x00\x00%tEXtdate:create\x002018-04-19T10:33:30+08:00\xd4n\xa2\xc8\x00\x00\x00%tEXtdate:modify\x002018-04-19T10:33:30+08:00\xa53\x1at\x00\x00\x00NtEXtsoftware\x00ImageMagick 6.9.1-10 Q16 x86_64 2018-03-22 http://www.imagemagick.org\xc1\xfe\xac\x16\x00\x00\x00\x18tEXtThumb::Document::Pages\x001\xa7\xff\xbb/\x00\x00\x00\x18tEXtThumb::Image::Height\x00200}\xd7\x15i\x00\x00\x00\x17tEXtThumb::Image::Width\x00200\xee&E4\x00\x00\x00\x19tEXtThumb::Mimetype\x00image/png?\xb2VN\x00\x00\x00\x17tEXtThumb::MTime\x001524105210k\xf5\xa6p\x00\x00\x00\x0ftEXtThumb::Size\x000BB\x94\xa2>\xec\x00\x00\x00DtEXtThumb::URI\x00file:///workspace/tmp/mogr2_9_3625a7f8902eb9_18af65_50[0]\xa9\xc7\xb4\xbd\x00\x00\x00\x00IEND\xaeB`\x82',b"\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00 \x00\x00\x00 \x08\x04\x00\x00\x00\xd9s\xb2\x7f\x00\x00\x00\x04gAMA\x00\x00\xb1\x8f\x0b\xfca\x05\x00\x00\x00 cHRM\x00\x00z&\x00\x00\x80\x84\x00\x00\xfa\x00\x00\x00\x80\xe8\x00\x00u0\x00\x00\xea`\x00\x00:\x98\x00\x00\x17p\x9c\xbaQ<\x00\x00\x00\x02bKGD\x00\xff\x87\x8f\xcc\xbf\x00\x00\x00\x07tIME\x07\xe2\x04\x13\n(0VgUH\x00\x00\x00\x89IDATH\xc7\xed\xd01\x0e\x01Q\x14\x85\xe1\xef\xbdL\xc3\x06\x94j2\xb1\x13{\xb0\t\x0bPZ\x8c\x1d`\r$S\x8a\x1dHhHH\\\x95\xa8\xdf\xe8&\xf3\xf7\xff9\xf7\\zz:A\xa2\x96\xc4\xc0P*\xf0\xc2==B\xa3\x82\xf7$\xad\x8dEQ\xf19\x96NTS\x89\x85y\xf1\xed3\x07+r\x16\xc9\xa8\xd5\xfc\x11\xe4\xef'\xda\x92\xdb\xab\xbf\x80\xf0l\xe5\xbe 7\xb0u-\xd6/vP\x11l\xd2M]\x18p\x8c\xfd\xbf\xf3{z\xba\xc4\x07\x8ei\x1c\x14u\xa2^\xe0\x00\x00\x00%tEXtdate:create\x002018-04-19T10:40:48+08:00/HK6\x00\x00\x00%tEXtdate:modify\x002018-04-19T10:40:48+08:00^\x15\xf3\x8a\x00\x00\x00NtEXtsoftware\x00ImageMagick 6.9.1-10 Q16 x86_64 2018-03-22 http://www.imagemagick.org\xc1\xfe\xac\x16\x00\x00\x00\x18tEXtThumb::Document::Pages\x001\xa7\xff\xbb/\x00\x00\x00\x18tEXtThumb::Image::Height\x00200}\xd7\x15i\x00\x00\x00\x17tEXtThumb::Image::Width\x00200\xee&E4\x00\x00\x00\x19tEXtThumb::Mimetype\x00image/png?\xb2VN\x00\x00\x00\x17tEXtThumb::MTime\x001524105648\x1fPr\xdb\x00\x00\x00\x0ftEXtThumb::Size\x000BB\x94\xa2>\xec\x00\x00\x00DtEXtThumb::URI\x00file:///workspace/tmp/mogr2_9_3625a8fda14a93_271e0_229[0]\xcc\xa7\x8c2\x00\x00\x00\x00IEND\xaeB`\x82"]
colors = [(255,0,255),(0,0,255),(0,255,255),(0,255,0),(255,255,0),(255,0,0),(192,192,192),(128,128,128),
          (128,0,128),(0,0,128),(0,128,128),(0,128,0),(128,128,0),(128,0,0),(0,0,0),(0,192,128),(255,255,255)]
def windowsupdate():
    # screen.fill((100,100,100))
    # penimg = pygame.image.load('./img/pen.png')
    # eraserimg = pygame.image.load('./img/eraser.png')
    # plusimg = pygame.image.load('./img/plus.png')
    # minusimg = pygame.image.load('./img/minus.png')
    penimg = pygame.image.load('pen.png')
    eraserimg = pygame.image.load('eraser.png')
    plusimg = pygame.image.load('plus.png')
    minusimg = pygame.image.load('minus.png')
    screen.blit(penimg,penarea)
    screen.blit(eraserimg,eraserarea)
    screen.blit(plusimg,plusarea)
    screen.blit(minusimg,minusarea)
    pygame.draw.rect(screen,(0,0,0),previewimg,width=1)
    pygame.draw.circle(screen,colors[nowcolor],(imgx+30,imgy+165),thickness/2)
    for i in range(0,16):
        pygame.draw.rect(screen,colors[i],colorareas[i])
        # screen.blit(pygame.Surface.fill(color = colors[i],rect = colorareas[i]),colorareas[i])
    pygame.display.update()#flip函数将重新绘制整个屏幕对应的窗口,update函数仅仅重新绘制窗口中有变化的区域。

print(pygame.version)
pygame.init()
pygame.display.set_caption('超级画板')
screen = pygame.display.set_mode(size = (640,480))
screen.fill((255, 255, 255))
imgx = 10
imgy = 10
penarea = pygame.Rect(imgx,imgy,32,32)
eraserarea = pygame.Rect(imgx,imgy+50,32,32)
plusarea = pygame.Rect(imgx,imgy+100,32,32)
minusarea = pygame.Rect(imgx+35,imgy+100,32,32)
previewimg = pygame.Rect(imgx,imgy+135,60,60)
colorareas = []
for i in range(0,8):
    colorareas.append(pygame.Rect(imgx,imgy+200+30*i,30,30))
for i in range(0,8):
    colorareas.append(pygame.Rect(imgx+30,imgy+200+15+30*i,30,30))
pencolor = 14#初始参数colors[14]为黑色
nowcolor = 14
thickness = 4

with open('pen.png', mode='wb') as f:
    f.write(imgwb[0])
with open('eraser.png', mode='wb') as f:
    f.write(imgwb[1])
with open('plus.png', mode='wb') as f:
    f.write(imgwb[2])
with open('minus.png', mode='wb') as f:
    f.write(imgwb[3])
windowsupdate()#窗口更新
# pygame.draw.line(screen,colors[1],(100,100),(200,200),3)
# pygame.display.update()
while True:
    event = pygame.event.wait()
    # print(event)
    if event.type == 1025:#如果鼠标有点击
        x = event.__dict__['pos'][0]
        y = event.__dict__['pos'][1]
        if penarea.collidepoint(x,y) == 1:
            nowcolor = pencolor
        elif eraserarea.collidepoint(x,y) == 1:
            nowcolor = 16
        elif plusarea.collidepoint(x,y) == 1:
            if thickness<=48:
                thickness += 2
        elif minusarea.collidepoint(x,y) == 1:
            if thickness >= 4:
                thickness -= 2
                pygame.draw.circle(screen, colors[16], (imgx + 30, imgy + 165), thickness / 2 + 1)
        else:
            for i in range(0,16):
                if colorareas[i].collidepoint(x,y):
                    pencolor = i
                    nowcolor = i
                    break
    elif event.type == 1024:#鼠标在移动状态
        if event.__dict__['buttons'][0] == 1:#鼠标在左键点击状态
            fromxy = (event.__dict__['pos'][0]-event.__dict__['rel'][0],event.__dict__['pos'][1]-event.__dict__['rel'][1])
            pygame.draw.line(screen, colors[nowcolor], fromxy, event.__dict__['pos'], thickness)
    elif event.type ==769:#按下了键盘
        if event.__dict__['key'] == 27:#按下了esc
            screen.fill(colors[16])#全部变为白色
    elif event.type ==256:#按下了退出
        break
    windowsupdate()

你可能感兴趣的:(python,python)