#coding=gbk
import sys
import time
import pygame
from pygame.locals import *
import random
pygame.init()
# 使用pygame之前必须初始化
横LENGTH = 1000 # 主屏窗口长度,打横的
竖WIDTH = 680 # 主屏窗口宽度,打竖的
screen = pygame.display.set_mode((横LENGTH, 竖WIDTH)) # 设置主屏窗口
# 说明:set_mode()可以短时间显示主屏窗口
pygame.display.set_caption("图片移动优化测试") # 设置窗口标题
# 说明:若不设置窗口标题,则窗口标题默认为“pygame window”
class 人物类:
def __init__(self):
self.宽度=50
self.高度=50
self.img = pygame.image.load("游戏图片/李凯尔.png") # 加载本地图片,这里请自行导入本地图片路径
self.img=pygame.transform.scale(self.img,(self.宽度,self.高度)) #缩放
self.rect = self.img.get_rect() # 获取图片区域
self.rect.x = 500 # 设置显示位置
self.rect.y = 340 # 设置显示位置
self.stopleft = True # 图片移动开关
self.stopright=True
self.stopup=True
self.stopdown=True
self.边界判断=False
screen.blit(self.img, self.rect) # 传送
def 人物更新(self):
screen.blit(self.img, self.rect) # 传送
def 左移(self):
speed = 5 #后面and的部分是“补充”段,也就是外扩段
if [self.rect.x-speed,self.rect.y] not in 障碍1.边界:
if [self.rect.x-speed,self.rect.y+self.高度] not in 障碍1.边界:
if self.rect.x-speed>=0:
# 速度调成整数,这样可以和障碍物“贴合”
self.rect.left -= speed
def 右移(self):
speed = 5 # 后面and的部分是“补充”段,也就是外扩段
if [self.rect.x+speed+self.宽度,self.rect.y] not in 障碍1.边界:
if [self.rect.x+speed+self.宽度,self.rect.y+self.高度] not in 障碍1.边界:
if self.rect.x+speed+self.宽度<=横LENGTH:
# 速度调成整数,这样可以和障碍物“贴合”
self.rect.left += speed
def 上移(self):
speed = 5 # 后面and的部分是“补充”段,也就是外扩段
if [self.rect.x, self.rect.y-speed] not in 障碍1.边界:
if [self.rect.x+self.宽度,self.rect.y-speed] not in 障碍1.边界:
if self.rect.y-speed>=0:
# 速度调成整数,这样可以和障碍物“贴合”
self.rect.top-= speed
def 下移(self):
speed = 5 # 后面and的部分是“补充”段,也就是外扩段
if [self.rect.x, self.rect.y + speed+self.高度] not in 障碍1.边界:
if [self.rect.x+self.宽度,self.rect.y+speed+self.高度] not in 障碍1.边界:
if self.rect.y+speed+self.高度<=竖WIDTH:
# 速度调成整数,这样可以和障碍物“贴合”
self.rect.top += speed
class 障碍物:
def __init__(self,x,y):
self.x=x
self.y=y
self.长=100
self.宽=100
self.color=(0,210,120)
self.范围列表=[[self.x,self.y,self.长,self.宽]]
self.边界=[]
pygame.draw.rect(screen, self.color, pygame.Rect(self.x,self.y, self.长,self.宽))
for i in range(x,x+self.长+5,5): #间隔为5,因为左闭右开,所以最后加上5
for j in range(y,y+self.宽+5,5):
self.边界.append([i,j])
print(self.边界)
def 添加区域(self,x,y):
pygame.draw.rect(screen, self.color, pygame.Rect(x, y, self.长, self.宽))
self.范围列表.append([x,y,self.长,self.宽])
for i in range(x,x+self.长+5,5): #间隔为5
for j in range(y,y+self.宽+5,5):
self.边界.append([i,j])
# print(self.边界)
def 随机添加区域(self):
x=random.randint(0,横LENGTH)
y=random.randint(0,竖WIDTH)
x=x-x%5
y=y-y%5 #这样一定能生成5的倍数
print(x,y)
self.范围列表.append([x, y, self.长, self.宽])
for i in range(x, x + self.长 + 5,5): # 间隔为5
for j in range(y, y + self.宽 +5,5):
self.边界.append([i, j])
def 刷新(self):
for _ in self.范围列表:
pygame.draw.rect(screen,self.color,pygame.Rect(_[0],_[1],_[2],_[3]))
# print(人物1.rect)
人物1=人物类()
障碍1=障碍物(100,100)
# 障碍1.添加区域(280,100)
# 障碍1.添加区域(150,500)
障碍1.随机添加区域()
障碍1.随机添加区域()
障碍1.随机添加区域()
def GetEvent(): # 获取事件函数
for event in pygame.event.get(): # 循环获取事件并监听事件状态
if event.type == pygame.KEYDOWN: # 按下了按键
if event.key == pygame.K_LEFT: # 左
人物1.stopleft = False
elif event.key == pygame.K_RIGHT: # 右
人物1.stopright = False
elif event.key==pygame.K_UP:
人物1.stopup=False
elif event.key==pygame.K_DOWN:
人物1.stopdown=False
elif event.key==pygame.K_SPACE:
print(人物1.rect)
# print([人物1.rect.x, 人物1.rect.y + 5])
# print([人物1.rect.x+人物1.宽度,人物1.rect.y+5+人物1.高度])
# print([人物1.rect.x, 人物1.rect.y + 5] in 障碍1.边界)
# print([人物1.rect.x+人物1.宽度,人物1.rect.y+5+人物1.高度] in 障碍1.边界)
# print(障碍1.边界)
elif event.type == pygame.KEYUP: # 松开了按键
if event.key == pygame.K_LEFT :
人物1.stopleft = True
if event.key==pygame.K_RIGHT:
人物1.stopright=True
if event.key == pygame.K_UP :
人物1.stopup = True
if event.key==pygame.K_DOWN:
人物1.stopdown=True
elif event.type == pygame.QUIT: # 点击了关闭按钮
pygame.quit() # 卸载模块
sys.exit() # 退出程序
while True:
# 说明:while True循环可以使得主屏窗口得以保留
time.sleep(0.02) # 使得循环速度变慢,从而使得图片移动速度变慢
screen.fill((0, 0, 0)) # 填充
GetEvent() # 获取事件
if not 人物1.stopleft:
人物1.左移() # 图片移动
if not 人物1.stopright:
人物1.右移()
if not 人物1.stopup:
人物1.上移()
if not 人物1.stopdown:
人物1.下移()
人物1.人物更新()
障碍1.刷新()
pygame.display.update() # 更新
python pygame人物移动和障碍物(图片请自行导入本地图片)
本文详细介绍了如何使用Python的pygame库创建一个基本的游戏,涉及角色(人物)的移动、碰撞检测以及障碍物的添加和处理。通过键盘控制人物左右上下移动,同时处理与障碍物的边界碰撞。
摘要由CSDN通过智能技术生成