# 大鱼吃小鱼 import pygame import random from pygame.locals import * from pygame.math import * from sys import exit pygame.init() # 初始化 pygame.mixer.init() # 图片资源导入 music_botton=pygame.image.load(r'D:\pycharm\PycharmProjects\大鱼吃小鱼\.venv\image\music.png') # 图片-音乐 background = pygame.image.load(r'D:\pycharm\PycharmProjects\大鱼吃小鱼\.venv\image\background.png') # 图片-背景 img_fish = pygame.image.load(r"D:\pycharm\PycharmProjects\大鱼吃小鱼\.venv\image\thefish.png") # 图片-玩家操控的鱼 img_small = pygame.image.load(r"D:\pycharm\PycharmProjects\大鱼吃小鱼\.venv\image\small.png") # 图片-小鱼 img_middle1 = pygame.image.load(r"D:\pycharm\PycharmProjects\大鱼吃小鱼\.venv\image\middle1.png") # 图片-中鱼1 img_middle2 = pygame.image.load(r"D:\pycharm\PycharmProjects\大鱼吃小鱼\.venv\image\middle2.png") # 图片-中鱼2 img_big1 = pygame.image.load(r"D:\pycharm\PycharmProjects\大鱼吃小鱼\.venv\image\big1.png") # 图片-大鱼1 img_big2 = pygame.image.load(r"D:\pycharm\PycharmProjects\大鱼吃小鱼\.venv\image\big2.png") # 图片-大鱼2 img_shark = pygame.image.load(r"D:\pycharm\PycharmProjects\大鱼吃小鱼\.venv\image\shark.png") # 图片-鲨鱼 # 图片资源处理 new_fish = pygame.transform.rotozoom(img_fish,0,0.2) # 图片旋转180°,并缩放为原来的0.2倍 new_small1 = pygame.transform.rotozoom(img_small,0,0.18) # 图片旋转180°,缩放为原来的0.18倍。并生成水平翻转的图片2 new_small2 = pygame.transform.rotozoom(img_small,0,0.18) new_middle12 = pygame.transform.rotozoom(img_middle1,0,0.35) # 图片旋转180°,缩放为原来的0.35倍。并生成水平翻转的图片2 new_middle11 = pygame.transform.flip(new_middle12,1,0) new_middle22 = pygame.transform.rotozoom(img_middle2,0,0.35) new_middle21 = pygame.transform.flip(new_middle22,1,0) new_big12 = pygame.transform.rotozoom(img_big1,0,0.6) new_big11 = pygame.transform.flip(new_big12,1,0) new_big22 = pygame.transform.rotozoom(img_big2,0,0.6) new_big21 = pygame.transform.flip(new_big22,1,0) new_shark1 = pygame.transform.rotozoom(img_shark,0,1.2) new_shark2 = pygame.transform.flip(new_shark1,1,0) pygame.mixer.music.load(r'D:\网易云\昙轩 - 海の形.mp3') # 加载为背景音乐 pygame.mixer.music.play(-1,0.0) # 播放背景音乐 size = width, height = 1419,640 screen = pygame.display.set_mode(size ) # 设置屏幕 pygame.display.set_caption("大鱼吃小鱼") # 设置标题 clock = pygame.time.Clock() # 设置时钟 sp = Vector2(480,240) # 小鱼坐标为二维向量sp speed = 2.0 # 速度为两个单位 mouse_xy = (480,240) distanse = Vector2(0,0) fish_dir = Vector2(-1,0) time_i=0 fish_list=[] #四维数组:x,y,方向,品种 npc_fish=[] score = 0 x1,y1=1379,0 is_music_playing = False # 定义背景音乐的状态,默认是打开 while True: clock.tick_busy_loop(60) time_i=time_i+1 screen.blit(background, (0, 0)) # 背景图片 screen.blit(music_botton, (x1,y1)) # 音乐开关图片 if time_i%100 == 0: ram_num1=random.randint(0,1) # 左右随机数 ram_num2=random.randint(1,20) # 品种随机数:smal-12,midle-5,big-2,shark-1 if ram_num1 == 1: npc_fish.append("left") else: npc_fish.append("right") if ram_num2 == 1: npc_fish.append("shark") elif ram_num2 >= 2 | ram_num2 <= 3: npc_fish.append("big1") elif ram_num2 >= 4 | ram_num2 <= 5: npc_fish.append("big2") elif ram_num2 >= 6 | ram_num2 <= 8: npc_fish.append("middle1") elif ram_num2 >= 9 | ram_num2 <= 11 : npc_fish.append("middle2") else: npc_fish.append("small") if npc_fish[0]=="left": npc_fish.append(0) else: npc_fish.append(1000) npc_fish.append(random.randint(0,380)) fish_list.append(npc_fish) print(npc_fish) npc_fish=[] for fish in fish_list: if fish[1] == "small": if fish[0] == "left": screen.blit(new_small1,(fish[2],fish[3])) else: screen.blit(new_small2,(fish[2],fish[3])) if fish[1] == "middle1": if fish[0] == "left": screen.blit(new_middle11,(fish[2],fish[3])) else: screen.blit(new_middle12,(fish[2],fish[3])) if fish[1] == "middle2": if fish[0] == "left": screen.blit(new_middle21,(fish[2],fish[3])) else: screen.blit(new_middle22,(fish[2],fish[3])) if fish[1] == "big1": if fish[0] == "left": screen.blit(new_big11,(fish[2],fish[3])) else: screen.blit(new_big12,(fish[2],fish[3])) if fish[1] == "big2": if fish[0] == "left": screen.blit(new_big21,(fish[2],fish[3])) else: screen.blit(new_big22,(fish[2],fish[3])) if fish[1] == "shark": if fish[0] == "left": screen.blit(new_shark1,(fish[2],fish[3])) else: screen.blit(new_shark2,(fish[2],fish[3])) if fish[0] == "left": fish[2] = fish[2] + 1 if fish[2] == 1000: fish_list.remove(fish) else: fish[2] = fish[2] - 1 if fish[2] == -200: fish_list.remove(fish) distanse = mouse_xy - sp dis_len=distanse.length() if dis_len < speed: mouse_xy=sp elif dis_len != 0: distanse.normalize_ip() distanse=distanse*speed sp+=distanse for fish in fish_list: fish_pos=Vector2(fish[2],fish[3]) distanse2 = sp - fish_pos if distanse2.length() <= 100: img_fish = pygame.transform.rotozoom(img_fish,0,1.1) fish_list.remove(fish) score += 2 font = pygame.font.Font(r'D:\pycharm\PycharmProjects\大鱼吃小鱼\.venv\image\ziti.ttf', 50) score_text = font.render("分数:" + str(score), 1, (255, 255, 255)) # 创建文本列表 screen.blit(score_text, (10, 10)) # 在屏幕左上角显示分数 if score > 30: # 判断游戏是否达到分数 game_over = True else: game_over = False if game_over: font = pygame.font.Font(r'D:\pycharm\PycharmProjects\大鱼吃小鱼\.venv\image\ziti.ttf', 36) text = font.render("游戏结束了,你的分数是:" + str(score), 1, (255, 255, 255)) text_rect = text.get_rect(center=(width // 2, height // 2 - 100)) screen.blit(text, text_rect) font = pygame.font.Font(r'D:\pycharm\PycharmProjects\大鱼吃小鱼\.venv\image\ziti.ttf', 36) quit_button = font.render("结束游戏", 1, (255, 255, 255)) quit_button_rect = quit_button.get_rect(center=(width // 2, height // 2)) pygame.draw.rect(screen, (0, 255, 0), quit_button_rect, 2) screen.blit(quit_button, quit_button_rect) for event in pygame.event.get(): if event.type == QUIT: pygame.quit() exit() if event.type == MOUSEBUTTONDOWN: mouse_pos = pygame.mouse.get_pos() # 获取鼠标位置 if 630 <= mouse_pos[0] <= 780 and 300 <= mouse_pos[1] <= 340: pygame.quit() xit() pygame.display.flip() for event in pygame.event.get(): if event.type == MOUSEBUTTONDOWN: # 鼠标按下事件 mouse_xy=Vector2(event.pos) # 将玩家控制的小鱼移动到鼠标点击的坐标 distanse = mouse_xy - sp angle = distanse.angle_to(fish_dir) new_fish = pygame.transform.rotozoom(img_fish,angle,0.2) if event.type == MOUSEBUTTONDOWN and width - 50 <= mouse_xy[0] <= width and 10 <= mouse_xy[1] <= 60: if not is_music_playing: # 如果未播放音乐则打开 pygame.mixer.music.play(-1, 0.0) is_music_playing = True else: # 如果已经播放了音乐则关闭 pygame.mixer.music.stop() is_music_playing = False if event.type == pygame.QUIT: pygame.mixer.music.stop() # 停止播放背景音乐 exit() screen.blit(new_fish, sp) pygame.display.update() # 刷新显示界面