一、初始版本
import sys,pygame
# 常数
size = width,height=800,600 # 窗体大小
init_speed = 1 # 初始速度
speed = [init_speed,init_speed] # 实际速度(横坐标速度和纵坐标速度)
black = 0,0,0
white = 255,255,255
fps = 200
# 游戏设置
pygame.init()
screen = pygame.display.set_mode(size)
pygame.display.set_caption('神偷魅影')
# 对象创建
image = pygame.image.load("thief.jpg") #图片对象
imageRect = image.get_rect() #获得正切矩形对象,具有左右顶底四个属性,具有移动等方法
fclock = pygame.time.Clock() #时钟对象用于设置fps
while True:
for event in pygame.event.get(): #退出事件
if event.type==pygame.QUIT:
sys.exit()
elif event.type==pygame.KEYDOWN: #键盘操作,←↓→↑改变方向
if event.key==pygame.K_LEFT:
speed[0] = -init_speed
if event.key==pygame.K_RIGHT:
speed[0] = init_speed
if event.key==pygame.K_DOWN:
speed[1] = init_speed
if event.key==pygame.K_UP:
speed[1] = -init_speed
imageRect=imageRect.move(speed[0],speed[1]) #正切矩形对象运动
# 碰壁反弹
if imageRect.left < 0 or imageRect.right > width:
speed[0] =- speed[0]
if imageRect.top < 0 or imageRect.bottom > height:
speed[1] =- speed[1]
screen.fill(white) #每一帧结束后都把屏幕重新刷白
screen.blit(image,imageRect) #将一个图像绘制在另一个图像上,使图片对象和正切矩形对象一起运动
fclock.tick(fps) #设置fps
pygame.display.update() #刷新屏幕
二、函数封装
import sys,pygame
# 常数
size = width,height=800,600 # 窗体大小
init_speed = 1 # 初始速度
speed = [init_speed,init_speed] # 实际速度(横坐标速度和纵坐标速度)
black = 0,0,0
white = 255,255,255
fps = 200
# 游戏设置
pygame.init()
screen = pygame.display.set_mode(size)
pygame.display.set_caption('神偷魅影')
# 对象创建
image = pygame.image.load("thief.jpg") #图片对象
imageRect = image.get_rect() #获得正切矩形对象,具有左右顶底四个属性,具有移动等方法
fclock = pygame.time.Clock() #时钟对象用于设置fps
# 移动控制,←↓→↑改变方向
def moveControl():
if event.key==pygame.K_LEFT:
speed[0] = -init_speed
if event.key==pygame.K_RIGHT:
speed[0] = init_speed
if event.key==pygame.K_DOWN:
speed[1] = init_speed
if event.key==pygame.K_UP:
speed[1] = -init_speed
# 碰壁反弹
def crashWall():
if imageRect.left < 0 or imageRect.right > width:
speed[0] =- speed[0]
if imageRect.top < 0 or imageRect.bottom > height:
speed[1] =- speed[1]
# 移动
def move():
global imageRect #在函数内部可以访问全局变量的值,但不可修改,如要修改需先声明
imageRect = imageRect.move(speed[0],speed[1]) #正切矩形对象运动
screen.blit(image,imageRect) #将一个图像绘制在另一个图像上,使图片对象和正切矩形对象一起运动
while True:
for event in pygame.event.get(): #退出事件
if event.type==pygame.QUIT:
sys.exit()
elif event.type==pygame.KEYDOWN: #键盘事件
moveControl()
screen.fill(white) #每一帧结束后都把屏幕重新刷白
crashWall()
move()
fclock.tick(fps) #设置fps
pygame.display.update() #刷新屏幕
三、类的创建
import sys,pygame
# 常数
size = width,height=800,600 # 窗体大小
black = 0,0,0
white = 255,255,255
fps = 200
# 游戏设置
pygame.init()
screen = pygame.display.set_mode(size)
pygame.display.set_caption('神偷魅影')
fclock = pygame.time.Clock() #时钟对象用于设置fps
# 人类、属性是移动速度,方法是会移动,并且还会撞墙
class man():
# 初始属性
def __init__(self):
self.init_speed = 1 # 初始速度
self.speed = [self.init_speed,self.init_speed] # 实际速度(横坐标速度和纵坐标速度)
# 人类实际上是从图片类进化而来
self.image = pygame.image.load("thief.jpg") #图片对象
self.imageRect = self.image.get_rect() #获得正切矩形对象,具有左右顶底四个属性,具有移动等方法
# 移动控制,←↓→↑改变方向
def moveControl(self):
if event.key==pygame.K_LEFT:
self.speed[0] = -self.init_speed
if event.key==pygame.K_RIGHT:
self.speed[0] = self.init_speed
if event.key==pygame.K_DOWN:
self.speed[1] = self.init_speed
if event.key==pygame.K_UP:
self.speed[1] = -self.init_speed
# 碰壁反弹
def crashWall(self):
if self.imageRect.left < 0 or self.imageRect.right > width:
self.speed[0] =- self.speed[0]
if self.imageRect.top < 0 or self.imageRect.bottom > height:
self.speed[1] =- self.speed[1]
# 移动
def move(self):
self.imageRect = self.imageRect.move(self.speed[0],self.speed[1]) #正切矩形对象运动
screen.blit(self.image, self.imageRect) #将一个图像绘制在另一个图像上,使图片对象和正切矩形对象一起运动
# 类的实例化,先实例化一个小偷
theif = man()
while True:
for event in pygame.event.get(): #退出事件
if event.type==pygame.QUIT:
sys.exit()
elif event.type==pygame.KEYDOWN: #键盘事件
theif.moveControl()
screen.fill(white) #每一帧结束后都把屏幕重新刷白
theif.crashWall()
theif.move()
fclock.tick(fps) #设置fps
pygame.display.update() #刷新屏幕
四、多个对象
from email.mime import image
import sys,pygame
# 常数
size = width,height=800,600 # 窗体大小
black = 0,0,0
white = 255,255,255
fps = 200
# 游戏设置
pygame.init()
screen = pygame.display.set_mode(size)
pygame.display.set_caption('神偷魅影')
fclock = pygame.time.Clock() #时钟对象用于设置fps
# 人类、属性是移动速度,方法是会移动,并且还会撞墙
class man():
# 初始属性
def __init__(self,init_speed,image_url,init_position):
self.init_speed = init_speed # 初始速度
self.speed = [self.init_speed,self.init_speed] # 实际速度(横坐标速度和纵坐标速度)
# 人类实际上是从图片类进化而来
self.image = pygame.image.load(image_url) #图片对象
self.imageRect = self.image.get_rect() #获得正切矩形对象,具有左右顶底四个属性,具有移动等方法
self.imageRect.left = init_position[0] #初始位置(横坐标)
self.imageRect.top = init_position[1] #初始位置(纵坐标)
# 移动控制,←↓→↑改变方向
def moveControl(self):
if event.key==pygame.K_LEFT:
self.speed[0] = -self.init_speed
if event.key==pygame.K_RIGHT:
self.speed[0] = self.init_speed
if event.key==pygame.K_DOWN:
self.speed[1] = self.init_speed
if event.key==pygame.K_UP:
self.speed[1] = -self.init_speed
# 碰壁反弹
def crashWall(self):
if self.imageRect.left < 0 or self.imageRect.right > width:
self.speed[0] =- self.speed[0]
if self.imageRect.top < 0 or self.imageRect.bottom > height:
self.speed[1] =- self.speed[1]
# 移动
def move(self):
self.imageRect = self.imageRect.move(self.speed[0],self.speed[1]) #正切矩形对象运动
screen.blit(self.image, self.imageRect) #将一个图像绘制在另一个图像上,使图片对象和正切矩形对象一起运动
# 类的实例化,这次实例两个对象
theif = man(1,"thief.jpg",[10,10])
police = man(1.2,"police.jpg",[600,400])
while True:
for event in pygame.event.get(): #退出事件
if event.type==pygame.QUIT:
sys.exit()
elif event.type==pygame.KEYDOWN: #键盘事件
theif.moveControl()
police.moveControl()
screen.fill(white) #每一帧结束后都把屏幕重新刷白
theif.crashWall()
theif.move()
police.crashWall()
police.move()
fclock.tick(fps) #设置fps
pygame.display.update() #刷新屏幕
五、分别控制
from email.mime import image
import sys,pygame
# 常数
size = width,height=800,600 # 窗体大小
black = 0,0,0
white = 255,255,255
fps = 200
# 游戏设置
pygame.init()
screen = pygame.display.set_mode(size)
pygame.display.set_caption('神偷魅影')
fclock = pygame.time.Clock() #时钟对象用于设置fps
# 人类、属性是移动速度,方法是会移动,并且还会撞墙
class man():
# 初始属性
def __init__(self,init_speed,image_url,init_position):
self.init_speed = init_speed # 初始速度
self.speed = [self.init_speed,self.init_speed] # 实际速度(横坐标速度和纵坐标速度)
# 人类实际上是从图片类进化而来
self.image = pygame.image.load(image_url) #图片对象
self.imageRect = self.image.get_rect() #获得正切矩形对象,具有左右顶底四个属性,具有移动等方法
self.imageRect.left = init_position[0] #初始位置(横坐标)
self.imageRect.top = init_position[1] #初始位置(纵坐标)
# 移动控制,←↓→↑改变方向
def moveControl(self,Key):
if event.key == Key[0]:
self.speed[0] = -self.init_speed
if event.key == Key[1]:
self.speed[0] = self.init_speed
if event.key == Key[2]:
self.speed[1] = self.init_speed
if event.key == Key[3]:
self.speed[1] = -self.init_speed
# 碰壁反弹
def crashWall(self):
if self.imageRect.left < 0 or self.imageRect.right > width:
self.speed[0] =- self.speed[0]
if self.imageRect.top < 0 or self.imageRect.bottom > height:
self.speed[1] =- self.speed[1]
# 移动
def move(self):
self.imageRect = self.imageRect.move(self.speed[0],self.speed[1]) #正切矩形对象运动
screen.blit(self.image, self.imageRect) #将一个图像绘制在另一个图像上,使图片对象和正切矩形对象一起运动
# 类的实例化,这次实例两个对象
theif = man(1,"thief.jpg",[10,10])
police = man(1.2,"police.jpg",[600,400])
while True:
for event in pygame.event.get(): #退出事件
if event.type==pygame.QUIT:
sys.exit()
elif event.type==pygame.KEYDOWN: #键盘事件
theif.moveControl([pygame.K_LEFT,pygame.K_RIGHT,pygame.K_DOWN,pygame.K_UP])
police.moveControl([pygame.K_a,pygame.K_d,pygame.K_s,pygame.K_w])
screen.fill(white) #每一帧结束后都把屏幕重新刷白
theif.crashWall()
theif.move()
police.crashWall()
police.move()
fclock.tick(fps) #设置fps
pygame.display.update() #刷新屏幕
六、碰撞检测
from email.mime import image
import sys,pygame
# 常数
size = width,height=800,600 # 窗体大小
black = 0,0,0
white = 255,255,255
fps = 200
start = True
# 游戏设置
pygame.init()
screen = pygame.display.set_mode(size)
pygame.display.set_caption('神偷魅影')
fclock = pygame.time.Clock() #时钟对象用于设置fps
# 人类、属性是移动速度,方法是会移动,并且还会撞墙
class man():
# 初始属性
def __init__(self,init_speed,image_url,init_position):
self.init_speed = init_speed # 初始速度
self.speed = [self.init_speed,self.init_speed] # 实际速度(横坐标速度和纵坐标速度)
# 人类实际上是从图片类进化而来
self.image = pygame.image.load(image_url) #图片对象
self.imageRect = self.image.get_rect() #获得正切矩形对象,具有左右顶底四个属性,具有移动等方法
self.imageRect.left = init_position[0] #初始位置(横坐标)
self.imageRect.top = init_position[1] #初始位置(纵坐标)
# 移动控制,←↓→↑改变方向
def moveControl(self,Key):
if event.key == Key[0]:
self.speed[0] = -self.init_speed
if event.key == Key[1]:
self.speed[0] = self.init_speed
if event.key == Key[2]:
self.speed[1] = self.init_speed
if event.key == Key[3]:
self.speed[1] = -self.init_speed
# 碰壁反弹
def crashWall(self):
if self.imageRect.left < 0 or self.imageRect.right > width:
self.speed[0] =- self.speed[0]
if self.imageRect.top < 0 or self.imageRect.bottom > height:
self.speed[1] =- self.speed[1]
# 移动
def move(self):
self.imageRect = self.imageRect.move(self.speed[0],self.speed[1]) #正切矩形对象运动
screen.blit(self.image, self.imageRect) #将一个图像绘制在另一个图像上,使图片对象和正切矩形对象一起运动
# 碰撞检测
def crashMan():
if((abs(theif.imageRect.left - police.imageRect.left) < theif.imageRect.right-theif.imageRect.left)
and (abs(theif.imageRect.top - police.imageRect.top) < theif.imageRect.bottom-theif.imageRect.top)):
gameOver()
# 游戏结束,停止运行
def gameOver():
global start
start = False
# 类的实例化,这次实例两个对象
theif = man(1,"thief.jpg",[10,10])
police = man(1.2,"police.jpg",[600,400])
while True:
for event in pygame.event.get(): #退出事件
if event.type==pygame.QUIT:
sys.exit()
elif event.type==pygame.KEYDOWN: #键盘事件
theif.moveControl([pygame.K_LEFT,pygame.K_RIGHT,pygame.K_DOWN,pygame.K_UP])
police.moveControl([pygame.K_a,pygame.K_d,pygame.K_s,pygame.K_w])
if start:
screen.fill(white) #每一帧结束后都把屏幕重新刷白
theif.crashWall()
theif.move()
police.crashWall()
police.move()
crashMan()
fclock.tick(fps) #设置fps
pygame.display.update() #刷新屏幕
技能你们自己加吧,发挥你们想象力吧,现在这篇项目已经很长了,我就不继续往下写了,先告辞了😎