首页 > 分享 > Pygame基础教程(二)

Pygame基础教程(二)

写在前面的话:


本系列教程仅有一些在本机调试通过的代码(如代码中发现bug,恳请包涵)。除代码中出现的一些主要注释外,不会出现太多其他文字解释,但是,文章中会给出主要模块的官方文档地址。再次:该系列文章的目的主要是抛砖,看‘玉’的同志们请移步官方文档。希望同志们,多多尝试,共同进步,谢谢!!!
 

Pygame完成绘画板小项目

import math

import pygame,sys

from pygame.locals import *

SCREEN_WIDTH = 400

SCREEN_HEIGHT = 400

WHITE = (255,255,255)

GREEN = (0,255,0)

BLUE = (0,0,128)

class Pen():

def __init__(self,screen):

self.color = None

self.size = None

self.last_pos = None

self.statue = False

self.screen = screen

def setPenColor(self,color):

self.color = color

def setPenSize(self,size):

self.size = size

def getPenColor(self):

return self.color

def setPenStatue(self,value):

self.statue= value

def getPenStatue(self):

return self.statue

def getPenSize(self):

return self.size

def start_draw(self,pos):

self.last_pos = pos

def end_draw(self):

self.last_pos = None

def draw(self,pos):

for point in self.get_points(pos):

pygame.draw.rect(self.screen, self.color, (point[0], point[1], self.size, self.size))

self.last_pos = pos

def get_points(self,pos):

points = [(self.last_pos[0], self.last_pos[1])]

len_x = pos[0] - self.last_pos[0]

len_y = pos[1] - self.last_pos[1]

length = math.sqrt(len_x ** 2 + len_y ** 2)

step_x = len_x / length

step_y = len_y / length

for i in range(int(length)):

points.append(

(points[-1][0] + step_x, points[-1][1] + step_y))

points = map(lambda x: (int(0.5 + x[0]), int(0.5 + x[1])), points)

return set(points)

class Menu:

def __init__(self,screen , pen):

self.screen = screen

self.pen = pen

self.size = 5

self.color = [127, 127, 127]

self.ADD = pygame.image.load('big.png')

self.DE = pygame.image.load('small.png')

def create_scales(self):

self.red_scale_surface = pygame.surface.Surface((300, 33))

self.green_scale_surface = pygame.surface.Surface((300, 33))

self.blue_scale_surface = pygame.surface.Surface((300, 33))

for x in range(300):

c = int((x / 300.) * 255.)

red = (c, 0, 0)

green = (0, c, 0)

blue = (0, 0, c)

line_rect = Rect(x, 0, 1, 33)

pygame.draw.rect(self.red_scale_surface, red, line_rect)

pygame.draw.rect(self.green_scale_surface, green, line_rect)

pygame.draw.rect(self.blue_scale_surface, blue, line_rect)

self.red_rect = pygame.Rect(0,0,300,33)

self.green_rect = pygame.Rect(0,33,300,33)

self.blue_rect = pygame.Rect(0,66,300,33)

self.Add_rect = pygame.Rect(300,20,32,32)

self.De_rect = pygame.Rect(350,20,32,32)

def drawMenu(self):

self.create_scales()

self.screen.blit(self.red_scale_surface,(0,0))

self.screen.blit(self.green_scale_surface,(0,33))

self.screen.blit(self.blue_scale_surface,(0,66))

self.screen.blit(self.ADD,(300,20))

self.screen.blit(self.DE,(350,20))

for component in range(3):

pos = (int((self.color[component] / 255.) * 300), component * 33 + 15)

pygame.draw.circle(self.screen, (255, 255, 255), pos, 10)

def click_on(self,pos):

x,y = pos[0],pos[1]

if self.red_rect.collidepoint(pos):

self.color[0] = int(x / 300 * 255.)

elif self.green_rect.collidepoint(pos):

self.color[1] = int(x / 300 * 255.)

elif self.blue_rect.collidepoint(pos):

self.color[2] = int(x / 300 * 255.)

elif self.Add_rect.collidepoint(pos):

self.size += 2

elif self.De_rect.collidepoint(pos):

self.size -= 2

self.setPen()

def setPen(self):

if self.size > 32:

self.size = 32

elif self.size < 5:

self.size = 5

self.pen.setPenColor(self.color)

self.pen.setPenSize(self.size)

class paniter:

def __init__(self):

pygame.init()

self.screen = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))

self.pen = Pen(self.screen)

self.pen.setPenColor(BLUE)

self.pen.setPenSize(5)

self.pen.setPenStatue(False)

self.menu = Menu(self.screen,self.pen)

self.clock = pygame.time.Clock()

pygame.display.set_caption("绘画板")

def run(self):

self.screen.fill(WHITE)

pygame.draw.line(self.screen, GREEN, (0, 100), (400, 100), 2)

while True:

for event in pygame.event.get():

if event.type == QUIT:

pygame.quit()

sys.exit()

elif event.type == KEYDOWN:

if event.key == K_ESCAPE:

self.screen.fill(WHITE)

pygame.draw.line(self.screen, GREEN, (0, 100), (400, 100), 2)

elif event.type == MOUSEBUTTONDOWN :

pos = event.pos

if pos[1] > 100:

self.pen.setPenStatue(True)

self.pen.start_draw(event.pos)

else:

self.menu.click_on(pos)

elif self.pen.getPenStatue() and event.type == MOUSEBUTTONUP:

self.pen.setPenStatue(False)

self.pen.end_draw()

elif self.pen.getPenStatue() and event.type == MOUSEMOTION:

self.pen.draw(event.pos)

self.menu.drawMenu()

pygame.display.update()

self.clock.tick(30)

def main():

app = paniter()

app.run()

main()

注意:颜色,update(), fill(), blit()函数,以及刷帧率

使用的主要pygame模块

按钮图片:

相关知识

【原创】pygame学习笔记(2)
郁金香插花技巧基础教程
插花艺术基础教程
初学者必备的实用插花基础教程知识
【图】丝网花插花基础教程 丝网花绿绒蒿的制作步骤
手绘植物绘画的简单基础教程
水彩画基础教程:花草、蔬果、动物、静物、风景手绘技法
中国画基础教程——写意花鸟鱼虫【全本
Android 移动应用基础教程(Android Studio)(第2版)学习笔记及源码
花艺配色美学:色彩搭配基础教程

网址: Pygame基础教程(二) https://m.huajiangbk.com/newsview1178758.html

所属分类:花卉
上一篇: Systemd 入门教程:命令篇
下一篇: fastapi教程——进阶(一)