以下是部分代码预览:
"""鼠闯迷宫闯关小游戏.一只老鼠在一个巨大的迷宫中,它要出去才不致于被饿死,用鼠标牵引它移动即可。
碰撞使用的是mask,老鼠是相对于迷宫的移动(迷宫在动)"""
__author__ = "李兴球"
__date__ = "2018年12月左右"
import os,math,sys
import pygame
from pygame.locals import *
class Maze(pygame.sprite.Sprite):
def __init__(self,image,scale,screen):
pygame.sprite.Sprite.__init__(self)
self.screen = screen
pass
def update(self,dx,dy):
"""迷宫朝相反的dx和dy移动"""
self.rect.move_ip(dx*0.05,dy*0.05)
def draw(self):
self.screen.blit(self.image,self.rect)
class Mouse(pygame.sprite.Sprite):
def __init__(self,image,position,screen,maze=None):
pygame.sprite.Sprite.__init__(self)
self.position = position # 原始坐标
self.screen = screen
self.maze = maze # 引用当前的迷宫对象
pass
def distance(self,mousexy):
"""到鼠标指针的距离"""
dy = mousexy[1] - self.rect.centery
dx = mousexy[0] - self.rect.centerx
return math.sqrt(dx * dx + dy * dy)
def update(self,mousexy,logic):
"""根据方向角度更新图像"""
if self.distance(mousexy) > 50 :
self.image = pygame.transform.rotate(self.raw_image,self.angle).convert_alpha()
self.image.set_colorkey((0,0,0))
self.mask = pygame.mask.from_surface(self.image) # 设定掩膜属性,以后用于和迷宫mask的碰撞检测
pass
def bump_check(self):
"""对碰黑墙和碰绿门进行碰撞检测,实际上是对maze进行通过mask的碰撞检测,返回point坐标。
,再侦测像素值就知道是碰到门还是碰到绿色"""
level_end = False
point = pygame.sprite.collide_mask(self.maze,self)
pass
def draw(self):
self.screen.blit(self.image,self.rect)
def display_shell(screensize,shell_image,begin_button_images):
width,height = screensize
index = 0
button_image = begin_button_images[index]
button_rect = button_image.get_rect()
button_width = button_rect.width
button_height = button_rect.height
button_rect.center = (width//2,100+height//2)
clock = pygame.time.Clock()
running = True
continue_game = True
while running:
for event in pygame.event.get():
if event.type == QUIT:
running = False
pass
pygame.display.update()
clock.tick(30)
return continue_game
def display_end(end_image):
clock = pygame.time.Clock()
running = True
while running:
for event in pygame.event.get():
if event.type == QUIT:
running = False
break
mousekeys = pygame.mouse.get_pressed()
if mousekeys[0] : running = False
screen.blit(end_image,(0,0))
pygame.display.update()
clock.tick(30)
if __name__ == "__main__":
pass
下载完整源代码与素材,请
需要浏览更多吗?
成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

