''' 游戏介绍: 按空格键进行游戏,可以二段跳,游戏失败后按空格键重新开始 ''' import pygame, sys import random import tkinter as tk from tkinter import messagebox from PIL import Image, ImageTk '''def check_login(username, password): # 这里只是简单地检查用户名和密码是否为预设值 # 实际应用中,您可能需要连接数据库或其他服务进行验证 if username == "周凯" and password == "12345678": return True else: return False def login(): username = entry_username.get() password = entry_password.get() if check_login(username, password): messagebox.showinfo("登录成功", "欢迎, " + username + "!") start_game() else: messagebox.showerror("登录失败", "用户名或密码错误") def start_game(): # 这里是游戏的代码 # 例如,一个简单的猜数字游戏 messagebox.showinfo("游戏开始", "现在游戏开始了!")''' width = 1200 # 设置窗口宽度为1200 height = 508 # 设置窗口高度为508 size = width, height # 创建一个元组,表示窗口的尺寸 score = None # 设置分数 myFont = myFont1 = None # 设置字体 surObject = None # 设置障碍物图片变量 surGameOver = None # 设置游戏结束图片变量 bg = None # 设置背景对象 role = None # 设置设置人物对象 object = None # 设置障碍物对象 objectList = [] # 设置障碍物对象列表 clock = None # 设置时钟对象 gameState = None # 设置游戏状态(0,1)表示(游戏中,游戏结束) """ 定义游戏角色类 """ class Role: def __init__(self, surface=None, y=None): # 人物类的构造函数,初始化人物对象的属性 self.surface = surface self.y = y self.w = (surface.get_width()) / 12 self.h = surface.get_height() / 2 self.currentFrame = -1 self.state = 0 # 0代表跑步状态,1代表跳跃状态,2代表连续跳跃 self.g = 1 # 重力加速度 self.vy = 0 # y轴速度 self.vy_start = -20 # 起跳开始速度 def getRect(self): # 返回人物对象的矩形区域 return (0, self.y + 12, self.w, self.h) """ 定义障碍物类 """ class Object: def __init__(self, surface, x=0, y=0): # 障碍物类的构造函数,初始化障碍物对象的属性 self.surface = surface self.x = x self.y = y self.w = surface.get_width() self.h = surface.get_height() self.currentFrame = random.randint(0, 6) self.w = 100 self.h = 100 def getRect(self): # 返回障碍物对象的矩形区域 return (self.x, self.y, self.w, self.h) def collision(self, rect1, rect2): # 判断两个矩形区域是否发生碰撞 if (rect2[0] >= rect1[2] - 20) or (rect1[0] + 40 >= rect2[2]) or (rect1[1] + rect1[3] < rect2[1] + 20) or ( rect2[1] + rect2[3] < rect1[1] + 20): return False return True """ 定义背景类 """ class Bg: def __init__(self, surface): # 背景类的构造函数,初始化背景对象的属性 self.surface = surface self.dx = -10 self.w = surface.get_width() self.rect = surface.get_rect() """ 初始化游戏函数,包括加载图片、创建对象等操作 """ def initGame(): global bg, role, clock, gameState, surObject, surGameOver, score, myFont, myFont1, objectList # 分数初始化 score = 0 # 初始化 objectList = [] # 加载字体 myFont = pygame.font.Font("./freesansbold.ttf", 32) myFont1 = pygame.font.Font("./freesansbold.ttf", 64) # 创建时钟对象 (可以控制游戏循环频率) clock = pygame.time.Clock() # 初始化游戏状态 gameState = 0 # 游戏背景 surBg = pygame.image.load("image/bg.bmp").convert_alpha() bg = Bg(surBg) # 结束画面 surGameOver = pygame.image.load("image/gameover.bmp").convert_alpha() # 人物图片 surRole = pygame.image.load("image/role.png").convert_alpha() role = Role(surRole, 508 - 85) # 障碍物图片 surObject = pygame.image.load("image/object.png").convert_alpha() # 生成障碍物的函数 def addObject(): global surObject, object, objectList, object rate = 2 # 是否生成障碍物 if not random.randint(0, 300) < rate: return y = random.choice([height - 100, height - 200, height - 300, height - 400]) object = Object(surObject, width + 40, y) objectList.append(object) """ 更新游戏逻辑函数,包括处理键盘事件、移动角色和障碍物等操作 """ def updateLogic(): global gameState, score # 键盘事件处理 for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.KEYDOWN: # 空格键跳跃 if gameState == 0: if event.key == pygame.K_SPACE: if role.state == 0: role.state = 1 role.vy = role.vy_start elif role.state == 1: role.state = 2 role.vy = role.vy_start elif gameState == 1: if event.key == pygame.K_SPACE: # 重新开始游戏 initGame() if gameState == 0: # 背景的移动 bg.dx += 10 if bg.dx == 1200: bg.dx = 0 # 人物的移动 if role.state == 0: role.currentFrame += 1 if role.currentFrame == 12: role.currentFrame = 0 else: role.y += role.vy role.vy += role.g if role.y >= 508 - 85: role.y = 508 - 85 role.state = 0 # 障碍物的移动 addObject() for object in objectList: object.x -= 10 # 障碍物移动 # 障碍物超出屏幕,移除障碍物 if object.x + object.w <= 0: objectList.remove(object) score += 10 # 避开障碍物,加10分 print("移除了一个目标") # 碰撞检测 if object.collision(role.getRect(), object.getRect()): if (object.currentFrame == 6): objectList.remove(object) score += 100 # 吃金币加100分 print(score) print("吃了一个金币") else: gameState = 1 # 游戏失败 print("发生了碰撞!") """ 更新游戏视图函数,贴图背景、角色和障碍物等 """ def updateView(screen): screen.blit(bg.surface, [-bg.dx, 0]) screen.blit(bg.surface, [1200 - bg.dx, 0]) # 分数的贴图 textSur = myFont.render("score:%d" % score, True, (128, 128, 128)) screen.blit(textSur, (500, 20)) del textSur # 人物的贴图 screen.blit(role.surface, [0, role.y], [int(role.currentFrame) * role.w, 0, role.w, role.h]) # 障碍物的贴图 for object in objectList: screen.blit(object.surface, [object.x, object.y], [int(object.currentFrame) * object.w, 0, object.w, object.h]) """ 定义游戏运行结束页面的函数 """ def judgeState(screen): global gameState if gameState == 0: updateView(screen) return elif gameState == 1: screen.blit(surGameOver, [0, 0]) textSur = myFont1.render("GameOver Score:%d" % score, True, (255, 0, 0)) screen.blit(textSur, (width / 2 - 350, height / 2 + 150)) """ 定义主运行函数 """ def main(): pygame.init() screen = pygame.display.set_mode(size) pygame.display.set_caption('周凯') initGame() screen.blit(bg.surface, [0, 0]) while True: # 设置时钟频率 clock.tick(60) judgeState(screen) updateLogic() pygame.display.flip() # 运行主运行函数 main() ''''# 创建登录窗口 window_login = tk.Tk() window_login.title("登录") window_login.geometry("400x300") # 设置窗口大小 # 加载背景图片 background_image = Image.open("image/1.jpeg") # 替换为您的图片路径 background_image = background_image.resize((400, 300), Image.Resampling.LANCZOS) background_image = ImageTk.PhotoImage(background_image) # 创建一个画布来显示背景图片 canvas = tk.Canvas(window_login, width=400, height=300) canvas.pack(fill="both", expand=True) canvas.create_image(0, 0, image=background_image, anchor="nw") # 创建一个框架来容纳登录表单 frame_login = tk.Frame(window_login, bg="#ffffff") # 设置框架背景为半透明 frame_login.place(relx=0.5, rely=0.5, anchor="center") label_username = tk.Label(frame_login, text="用户名:", bg="#ffffff") label_username.grid(row=0, column=0, sticky="e", padx=5, pady=5) entry_username = tk.Entry(frame_login) entry_username.grid(row=0, column=1, padx=5, pady=5) label_password = tk.Label(frame_login, text="密码:", bg="#ffffff") label_password.grid(row=1, column=0, sticky="e", padx=5, pady=5) entry_password = tk.Entry(frame_login, show="*") entry_password.grid(row=1, column=1, padx=5, pady=5) button_login = tk.Button(frame_login, text="登录", command=login, bg="#4CAF50", fg="white") button_login.grid(row=2, column=0, columnspan=2, padx=5, pady=10) window_login.mainloop()'''