添加了新的功能

python pygame 打地鼠 python打地鼠代码_ide


大家在测试代码的时候注意下图片在你电脑中的实际地址,你需要修改下,我的地址是

‘spiders/back_img.png’ ,请注意你的实际情况,图片地址代码在第99行

self.back_image = pygame.image.load(‘spiders/back_img.png’)

'''打地鼠游戏v1.3'''
'''
1.在表盘下面显示当前时间
2.给表盘添加图片背景
'''
# 导包导库导模块
import pygame, sys
from pygame import *
from math import sin, cos, radians
from datetime import datetime

# 游戏初始化
pygame.init()
# 常量
SCREENWIDTH = 800
SCREENHEIGHT = 800
SCREENSIZE = (SCREENWIDTH, SCREENHEIGHT)
CAPTION = '浣熊打地鼠v1.3'
# 颜色
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
LIGHT_BLUE = (0, 125, 255)


# 创建主逻辑类
class MainGame(object):
    '创建主逻辑类,包括窗口,游戏开始与结束的方法和事件的获取与相应'
    # 创建主窗口
    window = pygame.display.set_mode(SCREENSIZE)
    # 设置标题
    pygame.display.set_caption(CAPTION)

    def __init__(self):
        '初始成员变量'
        pass

    def response_event(self):
        '提供事件获取与响应的方法'
        # 获取事件列表
        for event in pygame.event.get():
            # 窗口右上角退出方法
            if event.type == QUIT:
                self.end_game()
            # 获取键盘按键
            keys = pygame.key.get_pressed()
            # 按ESC键退出游戏
            if keys[K_ESCAPE]:
                self.end_game()

    def start_game(self):
        '''游戏主循环'''
        while True:
            # 用黑色刷新窗口(暂时这样做)
            mainGame.window.fill(BLACK)
            # 获取处理事件
            self.response_event()
            # 加载钟表外观
            clock.display()
            # 保持窗口刷新
            pygame.display.update()

    def end_game(self):
        '''游戏结束的方法'''
        pygame.quit()
        sys.exit()


# 创建倒计时钟表类
class Clock(object):
    '创建钟表类,包括表针的移动和显示时间等方法'
    # 创建电子表字体
    clockFont = pygame.font.Font(None, 40)

    def __init__(self):
        # 钟表圆心的位置
        self.clock_x = 100
        self.clock_y = 100
        self.pos = (self.clock_x, self.clock_y)
        # 钟表的半径
        self.radius = 80
        # 钟表的轮廓宽度
        self.circle_width = 10
        # 创建起始终止坐标
        self.start_x = 0
        self.start_y = 0
        self.end_x = 0
        self.end_y = 0
        # 刻度的宽度
        self.line_width = 5
        # 刻度坐标位置列表
        self.pos_list = []
        # 在初始化时计算列表中的坐标
        self.calculate_pos()
        # 秒针,分针和时针的长度
        self.second_len = 50
        self.minute_len = 45
        self.hour_len = 30
        # 背景图片
        self.back_image = pygame.image.load('spiders/back_img.png')

    def calculate_pos(self):
        '''刻度的分布'''
        # 设置起始角度
        degree = 0
        # 设置内圆半径
        in_radius = 60
        # 设置外圆半径
        out_radius = 70
        # 计算12次,得到每个起始和中止点的坐标
        for i in range(12):
            self.start_x = self.clock_x + in_radius * cos(radians(degree))
            self.start_y = self.clock_x + in_radius * sin(radians(degree))
            self.end_x = self.clock_x + out_radius * cos(radians(degree))
            self.end_y = self.clock_x + out_radius * sin(radians(degree))
            degree += 30
            # 获得坐标列表
            self.pos_list.append([(self.start_x, self.start_y), (self.end_x, self.end_y)])
        # 返回值是坐标列表
        return self.pos_list

    def calculate_hand_pos(self, degree, hand_len):
        '计算表针的末位置'
        hand_x = self.clock_x + hand_len * cos(radians(degree))
        hand_y = self.clock_y + hand_len * sin(radians(degree))
        hand_pos = (hand_x, hand_y)
        return hand_pos

    def set_time(self):
        '设置电子表的时间'
        h = datetime.today().time().hour
        m = datetime.today().time().minute
        s = datetime.today().time().second
        time = '{chapter1:02.0f}:{chapter2:02.0f}:{chapter3:02.0f}'.format(
            chapter1=h,
            chapter2=m,
            chapter3=s)
        return time

    def display(self):
        '''展示表盘的方法'''
        # 贴上背景图
        mainGame.window.blit(self.back_image, (25, 25))
        # 绘制表盘
        pygame.draw.circle(mainGame.window, LIGHT_BLUE, self.pos, self.radius, self.circle_width)
        # 绘制表盘上的刻度
        for pos in self.pos_list:
            pygame.draw.line(mainGame.window, LIGHT_BLUE, pos[0], pos[1], self.line_width)
        # 绘制表的轴
        pygame.draw.circle(mainGame.window, LIGHT_BLUE, self.pos, 5)
        # 计算秒针末位置
        second_degree = 6 * datetime.today().time().second - 90
        second_pos = self.calculate_hand_pos(second_degree, self.second_len)
        # 计算分针末位置
        minute_degree = 6 * datetime.today().time().minute - 90
        minute_pos = self.calculate_hand_pos(minute_degree, self.minute_len)
        # 计算时针末位置
        hour_degree = 30 * datetime.today().time().hour - 90 + minute_degree / 12
        hour_pos = self.calculate_hand_pos(hour_degree, self.hour_len)
        # 绘制秒针,分针和时针
        pygame.draw.line(mainGame.window, LIGHT_BLUE, self.pos, second_pos, self.line_width)
        pygame.draw.line(mainGame.window, LIGHT_BLUE, self.pos, minute_pos, self.line_width)
        pygame.draw.line(mainGame.window, LIGHT_BLUE, self.pos, hour_pos, self.line_width)
        # 创建电子表的图片
        time = self.set_time()
        elec_clock_image = Clock.clockFont.render(time, True, LIGHT_BLUE)
        mainGame.window.blit(elec_clock_image, (40, 200))


if __name__ == "__main__":
    # 创建主逻辑的实例
    mainGame = MainGame()
    # 创建钟表的实例对象
    clock = Clock()
    # 开始游戏
    mainGame.start_game()

python pygame 打地鼠 python打地鼠代码_ci_02