小恐龙
2026-09-27 15:01:40
发布于:上海
import pygame
import sys
import random
# 初始化 Pygame
pygame.init()
# 常量定义
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 400
GROUND_Y = 350
FPS = 60
# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GRAY = (100, 100, 100)
LIGHT_GRAY = (200, 200, 200)
DINO_COLOR = (53, 53, 53)
CACTUS_COLOR = (0, 128, 0)
BIRD_COLOR = (139, 69, 19)
class Dino:
def __init__(self):
self.width = 40
self.height = 40
self.x = 50
self.y = GROUND_Y - self.height
self.vel_y = 0
self.jump_power = -12
self.gravity = 0.6
self.is_jumping = False
self.is_ducking = False
self.original_height = 40
self.duck_height = 20
def jump(self):
if not self.is_jumping and not self.is_ducking:
self.vel_y = self.jump_power
self.is_jumping = True
def duck(self, is_ducking):
if not self.is_jumping:
self.is_ducking = is_ducking
if is_ducking:
self.height = self.duck_height
self.y = GROUND_Y - self.height
else:
self.height = self.original_height
self.y = GROUND_Y - self.height
def update(self):
# 重力逻辑
self.vel_y += self.gravity
self.y += self.vel_y
# 地面碰撞检测
if self.y >= GROUND_Y - self.height:
self.y = GROUND_Y - self.height
self.vel_y = 0
self.is_jumping = False
def draw(self, screen):
color = DINO_COLOR
pygame.draw.rect(screen, color, (self.x, self.y, self.width, self.height))
class Obstacle:
def __init__(self, speed):
self.type = random.choice(['cactus', 'bird'])
self.speed = speed
self.x = SCREEN_WIDTH
self.marked_for_deletion = False
if self.type == 'cactus':
self.width = 20
self.height = random.choice([30, 40, 50])
self.y = GROUND_Y - self.height
self.color = CACTUS_COLOR
else: # bird
self.width = 30
self.height = 20
# 鸟的高度随机:低空(需要跳)或高空(需要蹲或忽略)
self.y = random.choice([GROUND_Y - 30, GROUND_Y - 70])
self.color = BIRD_COLOR
def update(self):
self.x -= self.speed
if self.x + self.width < 0:
self.marked_for_deletion = True
def draw(self, screen):
pygame.draw.rect(screen, self.color, (self.x, self.y, self.width, self.height))
class Game:
def __init__(self):
self.screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Python Dino Cheat Mode - Invincible")
self.clock = pygame.time.Clock()
self.font = pygame.font.SysFont('arial', 24)
self.input_font = pygame.font.SysFont('arial', 18)
self.dino = Dino()
self.obstacles = []
self.score = 0
self.game_speed = 6
self.spawn_timer = 0
# 输入框相关
self.input_active = False
self.input_text = "6"
self.input_rect = pygame.Rect(10, 10, 100, 30)
# 作弊模式标志
self.invincible = True
def handle_input(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE or event.key == pygame.K_UP:
self.dino.jump()
if event.key == pygame.K_DOWN:
self.dino.duck(True)
# 处理全局快捷键 Ctrl+A 全选等可能在输入框中使用,这里简化处理
if self.input_active:
if event.key == pygame.K_RETURN:
self.input_active = False
try:
new_speed = int(self.input_text)
if new_speed > 0:
self.game_speed = new_speed
except ValueError:
pass
elif event.key == pygame.K_BACKSPACE:
self.input_text = self.input_text[:-1]
else:
# 只允许数字输入
if event.unicode.isdigit():
self.input_text += event.unicode
if event.type == pygame.KEYUP:
if event.key == pygame.K_DOWN:
self.dino.duck(False)
# 鼠标点击输入框
if event.type == pygame.MOUSEBUTTONDOWN:
if self.input_rect.collidepoint(event.pos):
self.input_active = True
else:
self.input_active = False
def spawn_obstacle(self):
self.spawn_timer += 1
# 根据速度动态调整生成频率,速度越快生成越频繁
spawn_threshold = max(20, 100 - self.game_speed * 2)
if self.spawn_timer > spawn_threshold:
if random.randint(0, 100) < 5: # 随机性
self.obstacles.append(Obstacle(self.game_speed))
self.spawn_timer = 0
def update(self):
self.dino.update()
# 更新障碍物
for obstacle in self.obstacles:
obstacle.speed = self.game_speed # 实时更新速度
obstacle.update()
# 移除屏幕外的障碍物
self.obstacles = [obs for obs in self.obstacles if not obs.marked_for_deletion]
self.spawn_obstacle()
# 分数增加
self.score += 0.1
# 作弊模式:无碰撞死亡逻辑
# 如果需要检测碰撞但不死亡,可以保留碰撞检测用于其他目的(如音效),这里直接省略
def draw_ui(self):
# 绘制输入框背景
color = LIGHT_GRAY if self.input_active else GRAY
pygame.draw.rect(self.screen, color, self.input_rect)
pygame.draw.rect(self.screen, BLACK, self.input_rect, 2)
# 绘制输入框文字
text_surface = self.input_font.render(f"Speed: {self.input_text}", True, BLACK)
self.screen.blit(text_surface, (self.input_rect.x + 5, self.input_rect.y + 5))
# 绘制分数
score_text = self.font.render(f"Score: {int(self.score)}", True, BLACK)
self.screen.blit(score_text, (SCREEN_WIDTH - 150, 10))
# 绘制无敌提示
cheat_text = self.font.render("CHEAT MODE: INVINCIBLE", True, (255, 0, 0))
self.screen.blit(cheat_text, (SCREEN_WIDTH // 2 - 100, 10))
def draw(self):
self.screen.fill(WHITE)
# 绘制地面线
pygame.draw.line(self.screen, BLACK, (0, GROUND_Y), (SCREEN_WIDTH, GROUND_Y), 2)
self.dino.draw(self.screen)
for obstacle in self.obstacles:
obstacle.draw(self.screen)
self.draw_ui()
pygame.display.flip()
def run(self):
while True:
self.handle_input()
self.update()
self.draw()
self.clock.tick(FPS)
if __name__ == "__main__":
game = Game()
game.run()
这里空空如也





















有帮助,赞一个