pygame过河搭桥画笔小游戏

pygame过河搭桥画笔小游戏

pygame pen game
pygame pen game

pygame pen game

用pygame制作的创意画笔小游戏。
以下是部分代码预览:

"""pygame过河搭桥画笔小游戏,这是pygame多关卡创意画笔类小游戏,这个程序增加Pen类,当鼠标按下移动时,画一条线给小球搭桥.
   画的时间长短有限制,每关画的次数限制为3次,
   并且按左键画绿色,按右键画黑色。
   操作方法:按左右方向箭头操作小球,碰到红色死亡。
   下一个版本是增加各种道具,藏在红色之中,通过画黑线可以进入等等。
"""
__author__ = "李兴球"
__date__ = "2019年1月"
import math
import pygame
from glob import glob
from pygame.locals import *

def insert_point(a,b,step):
    """在两点之间线性插入坐标点,a:起点坐标,b:终点坐标,step:步长"""
    points = []
    x1,y1 = a       # 起点
    x2,y2 = b       # 终点
    dy = y2 - y1
    dx = x2 - x1
    angle = math.atan2(dy,dx)
    distance = int(math.sqrt(dx*dx+dy*dy))
    pass

class Pen():
    def __init__(self,ball):
        self.ball = ball                     # 笔可以访问球,以便访问球的属性方法等。
        self.screen = ball.screen 
        self.color = GREEN                   # 初始颜色为绿色
        self.thickness = 30                  # 笔触大小,实际上是画圆时的半径
        self.draw_times  = [ 3 for i in range(len(self.ball.backgrounds))] # 每关画的次数为3
        
    def alt_color(self,color):         
        self.color = color
        
    def paint(self,previous_point,mouse_pos,):
        """在ball.background上画圆点"""  
        
        pass          
            
           
class Ball:
    def __init__(self,radius,color,position,screen,backgrounds):
        self.radius = radius
        self.screen = screen
        self.backgrounds = backgrounds                     # 所有的关卡对象
        self.level = 0                                     # 开始关卡
        self.background = self.backgrounds[self.level]     # 当前背景(关卡)
        self.level_amounts = len(backgrounds)              # 关卡数量
        self.screen_width = self.screen.get_width()        # 屏幕宽度 
        self.screen_height = self.screen.get_height()      # 屏幕高度
        self.image = pygame.Surface((radius*2,radius*2))   # 新建正方形面对象
        self.image.set_colorkey(BLACK)                     # 不渲染颜色为黑色
        pass
     
    def keypressed_check(self):
        keys = pygame.key.get_pressed()# 得到按键布尔值表
        
        if keys[K_DOWN] and not self.bumped_green:
            self.dy += 1
        if keys[K_LEFT] and  self.bumped_green:
            self.dx = -2
            self.dy = -2       
            
        if keys[K_RIGHT] and  self.bumped_green:
            self.dx = 2
            self.dy = -2
             
    def update(self):
        self.rect.move_ip(self.dx,self.dy)
        self.mission_check()                 # 过关检测
        self.get_outer_ring_point_list()
        self.check_bumped_pixel()            # 像素检测
      
        
                    
    def get_outer_ring_point_list(self):
        """得到圆形边缘坐标点,用于像素检测"""
        xo,yo = self.rect.center 
        self.outer_ring_points = []
        pass
            
    def draw(self):
        self.screen.blit(self.image,self.rect)

if __name__ == "__main__":

    RED = (255,0,0,255)
    GREEN = (0,255,0,255)
    BLUE = (0,0,255,255)
    BLACK = (0,0,0,255)    
    MAGENTA  = (255,0,255,255)
    
    game_title = "过河搭桥_作者:李兴球_www.scratch8.net"
    width,height = 800,600
    
    pygame.init()
    screen = pygame.display.set_mode((width,height))
    pygame.display.set_caption(game_title)
    backgrounds = [pygame.image.load(image) for image in glob("backgrounds/*.png")]

    start_position =  (50,height//2-250)
    ball = Ball(10,MAGENTA,start_position,screen,backgrounds)
    clock = pygame.time.Clock()
    running = True
    
    start_draw = 0                            # 鼠标左键按下标志
    pen = Pen(ball)                           # 新建画笔
    while running:
        if start_draw > 0: start_draw -= 1
        for event  in pygame.event.get():
            if event.type ==  QUIT:
                running = False
                pass
        clock.tick(30)
    pygame.quit()
    
    

 

如需要下载完整源代码及素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

李兴球

李兴球的博客是Python创意编程原创博客