步骤1: 设置开发环境
首先需要安装必要的库:
pip install pygame
步骤2: 基础游戏框架
import pygame
import random
import math
#初始化pygame
pygame.init
#设置游戏窗口
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
screen = pygame.display.dispaly.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))
pygame.display.set_caption("第五人格原型")
#颜色定义
BLACK = (0,0,0)
WHITE = (255,255,255)
RED = (255,0,0)
GREEN = (0,255,0)
BLUE = (0,0,255)
#游戏时钟
clock = pygame.time.Clock()
FPS = 60
#游戏主循环
running = True
while running:
#处理事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
#更新游戏状态
#渲染
screen.fill(BLACK)
#更新显示
pygame.display.flip()
#控制帧率
clock.tick(FPS)
pygame.quit()
步骤3: 创建角色类
class Character:
def_init_(self,x,y,speed,color,radius,is_hunter=False):
self.x = x
self.y = y
self.speed = speed
self.color = color
self.radius = radius
self.is_hunter = is_hunter
self.direction = [0,0]
self.caught =False
def move(self):
# 简单移动逻辑
self.x += self.direction[0]*self.speed
self.y += self.direcyion[1]*self.speed
#边界检查
self.x = max(self.radius,min(self.x,SCREEN_WIDTH - self.radius))
self.y = max(self.radius,min(self.y,SCREEN_HEIGHT - self.radius))
def draw(self,screen):
pygame.draw.circle(screen,self.color,(int(self.x),int(self.y)),self.radius)
if self.is_hunter:
#猎人有一个额外的标记
pygame.draw.circle(screen,RED,(int(self.x),int(self.y)),self.radius//2,2)
def check_collision(self,other):
distance = math.sqart((self.x - other.x)**2 + (self.y - other.y)**2)
return distance < (self.radius + other.radius)
步骤4: 创建游戏对象和输入控制
#创建角色
survior = Character(100,100,3,GREEN,15)
hunter = Character(700,500,2.5,RED,20,True)
#在游戏主循环中添加以下代码:
#处理输入 - 幸存者移动
keys = pygame.key.get_pressed()
survivor.direction = [0,0]
if keys[pygame.K_LEFT]:
survivor.direction[0] = -1
if keys[pygame.K_RIGHT]:
survivor.direction[0] = 1
if keys[pygame.K_UP]:
survivor.direction[1] = -1
if keys[pygame.K_DOWN]:
survivor.direction[1] = 1
#猎人AI - 简单追踪
dx = survivor.x - hunter.x
dy = survivor.y - hunter.y
dist = math.sqrt(dx*dx + dy*dy)
if dist > 0:
hunter.direction = [dx/dist,dy/dist]
else:
hunter.direction = [0,0]
#更新角色
survivor.move()
hunter.move()
#检查碰撞
if hunter.check_collision(survivor):
survivor.caught = True
#渲染角色
survivor.draw(screen)
hunter.draw(screen)
#显示游戏状态
font = pygame.font.SysFont(None,36)
if survivor.caught:
text = font.render("你被抓住了!",True,WHITE)
screen.blit(text,SCREEN_WIDTH//2 - 100,
ScCREEN_HEIGHT//2))
步骤5: 添加密码机和逃脱机制
class ClpherMachine:
def_init_(self,x,y):
self.x = x
self.y = y
self.width = 40
self.height = 60
self.progress = 0
self.completed = False
def draw(self,screen):
#绘制密码机底座
pygame.draw.rect(screen,BLUE,(self.x,self.x,self.y,self.width,self.height),2)
#绘制进度条
if not self.completed:
pygame.draw.rect(screen,BLUE,(self.x,self.y - 10,self.width*(self.progress/100),5))
def interact(self,charactor):
#检查角色是否在密码机附近
if(abs(character.x - (self.x + self.width//2)<50
and
abs(character.y - (self.y + self.height//2))<50):
return True
return False
#创建密码机
machines = [
ClpherMachine(200,200),
ClpherMachine(600,200),
ClpherMachine(200,400),
ClpherMachine(600,400)
]
#在游戏主循环添加:
#密码机交互
if not survior.caught:
for machine in machines:
if not machine.completed and machine.interact(survivor) and keys[pygame.K_SPACE]:
machine.progress += 0.5
if machine.progress >= 100:
machine.completed = True
#绘制密码机
for machine in machines:
machine.draw(screen)
#检查胜利条件
completed_machines = sum(1 for m in machine if m.completed)
if completed_machnes >= 3 and not survior.caught:
text = font.render("逃脱成功!",True,GREEN)
screen.blit(text,(SCREEN_WIDTH//2 - 100,SCREEN_HEIGHT//2 - 50))
步骤6: 添加障碍物和视野限制
class Obstacle:
def_init_(self,x,y,width,height):
self.rect = pygame.Rect(x,y,width,height)
def draw(self,screen):
pygame.draw.rect(screen,WHITE,self.rect)
#创建障碍物
obstacles = [
Obstacle(300,100,50,200),
Obstacle(450,300,50,200),
Obstacle(100,400,200,50)
]
#在游戏主循环中添加:
#绘制障碍物
for obstale in obstacles:
obstale.draw(screen)
#简单的视野限制效果
if not survivor.caught and completed_machines < 3:
#创建一个半透明的黑色表面
fog = pygame.Surface((SCREEN_WIDTH,SCREEN_HEIGHT))
fog.fill(BLACK)
fog.set_alpha(200)
#在幸存者周围创建一个圆形视野
pygame.draw.circle(fog,(0,0,0),(int(survior.x),int(survivor.y)),150)
screen.blit(fog,(0,0))
将以上所有部分组合起来,就形成了一个简单的第五人格风格游戏原型。玩家控制幸存者躲避猎人,修理密码机,最终逃脱。
这个简单原型包含了第五人格的核心机制:
非对称对抗(1v1)
密码机修理机制
追逐和躲避
障碍物和视野限制
下面用python写第五人格详细代码:
import pygame
import random
import math
#初始化pygame
pygame.init()
#屏幕设置
WIDTH,HEIGHT = 800,600
screen = pygame.display.set_mode(WIDTH,HEIGHT))
pygame.display.set_caption("第五人格")
#颜色定义
WHITE = (255,255,255)
BLACK = (0,0,0)
RED = (255,0,0)
GREEN = (0,255,0)
BLUE = (0,0,255)
#玩家类
class Player:
def_init_(self,x,y,is_hunter=Fsalse):
self.x = x
self.y = y
self.speed = 3 if not is_hunter else 4
self.radius = 20
self.is_hunter = is_hunter
self.color = RED if is_hunter else GREEN
self.carrying = False # 是否携带密码机零件
def move(self,dx,dy):
self.x = max(self.radius,min(WIDTH - self.radius,self.x + dx*self.speed))
self.y = max(self.radius,min(HEIGHT - self.radius,self.y +
dy * self.speed))
def draw(self):
pygame.draw.circle(screen,self.color,(self.x,self.y),self.radius)
if self.cayying:
pygame.draw,circle(screen,BLUE,(self.x,self.y),10)
#密码机类
class ClpherMachine:
def_init_(self,x,y):
slef.x = x
self.y = y
self.radius = 30
self.progress = 0
self.completed = False
def draw(self):
color = WHITE if not self.completed else BLUE
pygame.draw.circle(screen,color,(self.x,self.y),self.radius)
if not self.completed:
# 绘制进度条
pygame.draw.arc(screen,GREEN,(self.x - 25,self.y - 25,50,50),0,2*math.pi*(self.progress/100),3)
#游戏对象初始化
player = Player(WIDTH//4,HEIGHT//2)
hunter = Player(3*WIDTH//4,HEIGHT//2,True)
machines = [CipherMachine(random.randint(50,WIDTH - 50),random.randint(50,HEIGHT - 50))for_in range(5)]
completed_machines = 0
game_over = False
win = False
#游戏主循环
clock = pygame.time.Clock()
running = True
while running:
#事件处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if not game_over:
#玩家移动
keys = pygame.key.get_pressed()
dx,dy = 0,0
if keys[pygame.K_a]:dx = -1
if keys[pygame.K_d]:dx = 1
if keys[pygame.K_w]:dy = -1
if keys[pygame.k_s]:dy = 1
player.move(dx,dy)
#猎人AI简单追踪
dx_h = 1 if hunter.x < palyer.x else - 1
dy_h = 1 if hunter.y < player.y else -1
hunter.move(dx_h * 0.7,dy_h * 0.7)
#检查与密码机的交互
for machine in machines:
if not machine.completed:
dist = math.sqart((player.x - machine)**2 + (player.y - machine.y)**2)
if dist < player.radius + machine.radius:
if not palyer.carrying:
palyer.carrying = True
else:
machine.progress += 1
if machine.progress >= 100:
machine.completed = True
completed_machines += 1
player.carrying = False
#检查胜利条件
if completed_machines >= 3:
game_over = True
win = True
#检查被抓
dist_to_hunter = math.sqrt((player.x - hunter.x)**2 + (player.y - hunter.y)**2)
if dist_to_hunter < player.radius + hunter.radius:
game_over = True
win = False
#绘制
screen.fill(BLACK)
#绘制密码机
for machine in machines:
machine.draw()
#绘制玩家和猎人
player.draw()
hunter.draw()
#显示进度
font = pygame.font.SysFont(Nnoe,36)
progress_text = font.render(f"已完成密码机:{
completed_machines}/3",True,WHITE)
screen.blit(progress_text,(10,10))
if game_over:
result_text = font.render("胜利!"if win else"被抓了!",True,WHITE)
screen.blit(result_text,(WIDTH//2 - 50,HEIGHT//2))
pygame.display.flip(60)
pygame.quit()
}
代码说明
这个简化版的第五人格游戏包含以下基本元素:
玩家角色:绿色圆圈表示,可使用WASD移动
猎人角色:红色圆圈表示,会自动追踪玩家
密码机:白色圆圈表示,玩家可以交互解码
游戏规则:
玩家需要解码3台密码机即可获胜
如果被猎人抓到则游戏失败
玩家可以携带密码机零件(蓝色小圆圈表示)
要运行此代码,需要先安装Pygame库:
pip install pygame