Bootstrap

黄金矿工-Python

首先做这个项目之前得清楚需要的材料和这个项目的结构,我自己感觉这个游戏项目的难点就在于钩子摆动的问题,它需要利用到三角函数来实现出来,我利用了pygame.transform.rotate()方法来实现钩字摇摆的问题,用sin和cos的方法来计算出钩字旋转的角度,对于目前的自己来说这就是最难的部分!这个项目我一共写了6个部分完成的,接下来就是代码部分!

项目管理代码

import mining
import pygame
from pygame.locals import *
import time


class A():
    def __init__(self):
        # pygame初始化  否则找不到字体文件
        pygame.init()


def main(screen):
    # 创建窗口
    # screen = pygame.display.set_mode((1400, 900))
    # 创建背景图片
    background = pygame.image.load("./material/dabeijing.png")
    # 创建玩家人物对象
    miner = mining.Miner(screen)
    # # 创建管理石头对象
    manage_kuang = mining.Manage_kuang(screen)
    # 创建钩子对象
    crash = mining.Hook(screen)

    music = mining.GameSound()

    music.playBackgroundMusic()

    while True:
        # 将背景贴到界面中
        screen.blit(background, (0, 0))
        # 调用人物的显示功能
        miner.display()
        # 调用钩子的显示功能
        crash.hook_display()
        # 调用钩子旋转功能
        crash.hook_rotate()
        # 钩子检测按键
        a = crash.control()
        if a:
            music.playHookSound()
        # 钩子移动功能
        crash.move()
        # 钩子越界检测
        crash.scope()
        crash.scope2()
        crash.scope3()
        # 检测钩子碰撞
        crash.pengzhuang(manage_kuang)
        # 将钩子和物体一起向回拉
        crash.move2()

        # 随机石头

        manage_kuang.random_fond()
        for fond1 in manage_kuang.fonds:
            fond1.display()
            # fond1.move()

        # 显示界面
        pygame.display.update()
        time.sleep(0.002)


def one():
    # 创建窗口
    screen = pygame.display.set_mode((1400, 900), 0, 32)
    # 创建背景图片
    background1 = pygame.image.load("9999.png")
    # background = pygame.image.load("./material/dabeijing.png")

    while True:
        screen.blit(background1, (0, 0))

        # a = input()
        # if a == "a":
        #     break

        for event in pygame.event.get():
            print(event.type)
            # print(pygame.K_SPACE)
            # 判断是否是点击了退出按钮
            if event.type == 12:
                print("exit")
                exit()  # 让整个程序结束,return让   函数结束,break让循环结束
            elif event.type == 3:
                print(3333333333333333)
                return screen

        pygame.display.update()

        # break


screen = one()
main(screen)

钩子碰撞

from math import sin, cos, pi
import pygame
from pygame.locals import *
import time


class Hook(pygame.sprite.Sprite):
    """钩子类"""

    def __init__(self, screen):
        pygame.sprite.Sprite.__init__(self)
        self.rawimage = pygame.image.load("./material/gouzi3.png")  # 原始图片
        self.image = self.rawimage  # 旋转后的图形,初始值就是原始图
        self.rect = self.rawimage.get_rect()  # 获取原始图形的矩形.
        # self.aaa = pygame.image.load("./material/钩子.png")  # 原始图片
        self.x = 1400
        self.y = 950
        self.screen = screen
        self.rect.topleft = [self.rect.x, self.rect.y]
        # 定义一个变量用来进行使
        self.a = True
        self.b = False
        self.c = False
        self.d = False
        self.num1 = False
        self.num2 = True
        self.hook_rotate_flag = True
        self.speed = 5
        # 转角
        self.corner = 0
        self.num = 2
        self.speed = []
        self.v = 10
        self.aaa = False
        # self.font = pygame.font.SysFont(" ", 40)  # 格式, 大小
        # 文本, 有没有抗锯齿, 颜色, 背景(可不写)
        # self.text_surface = self.font.render("***** ", True, (200, 255, 255))

    def hook_display(self):
        """显示功能"""
        self.screen.blit(self.image, self.rect)
        # self.screen.blit(self.aaa, (700, 0))

        # self.screen.blit(self.text_surface, (self.rect.x, self.rect.y))

    def hook_rotate(self):
        """旋转功能"""
        self.right_rotate()

    def detection(self):
        """检测按键功能"""
        # 获取事件,比如按键等
        for event in pygame.event.get():
            # 判断是否是点击了退出按钮
            if event.type == QUIT:
                print("exit")
                exit()  # 让整个程序结束,return让函数结束,break让循环结束

    def right_rotate(self):
        """旋转"""
        if self.a:
            if self.corner > -90:
                self.corner -= self.num
                self.image = pygame.transform.rotate(self.rawimage, self.corner)
                self.rect = self.image.get_rect()
                self.rect.x = self.x // 2 - self.rect.w // 2
                self.rect.y = self.y - 730 - self.rect.h // 2

                if self.corner == -90:
                    self.num = -2
                    self.corner = -88

                if self.corner >= 90:
                    self.num = 2
                    self.corner = 88

            self.rect.topleft = [self.rect.x, self.rect.y]
            self.speed = [-int(self.v * sin(self.corner * pi / 180)), -int(self.v * cos(self.corner * pi / 180))]

    def control(self):
        """检测键盘,调用对应的功能"""
        # 获取事件,比如按键等
        for event in pygame.event.get():
            
;