美文网首页
day13-练习项目

day13-练习项目

作者: d4lx | 来源:发表于2018-09-06 16:54 被阅读0次

    1、pygame实例
    要求:点击屏幕,在点击的地方产生一个球,球可以自由的移动,撞到边界会弹回,撞到其他的球会吃掉。

    import pygame
    import yt_color
    from random import randint
    
    """
    第一步:搭建游戏窗口,
    第二步:点击屏幕
    第三步:让球动起来(需要用列表来保存所有的球,需要用字典来保存每个球的信息)
    """
    
    #全局变量
    WINDOW_WIDTH = 600
    WINDOW_HIGHT = 400
    
    key_ball_color = 'ball_color'
    key_ball_center = 'ball_center'
    key_ball_radius = 'ball_radius'
    key_ball_xspeed = 'ball_xspeed'
    key_ball_yspeed = 'ball_yspeed'
    key_ball_alive = 'ball_alive'
    
    
    all_balls = [] # 保存所有的球
    
    
    def ball_crash():
        """
        检测碰撞
        :看屏幕上的每个球是否和其他的球的圆心距<=半径和
    
        :return:
        """
        # 拿第一个球
        for ball in all_balls:
            # 拿第二个球
            for other in all_balls:
                # 是同一个球或者是已经消失的球都不需要再判断
                if ball == other or not ball[key_ball_alive] or not other[key_ball_alive]:
                    continue
                # 判断两次拿到的球
                x1,y1 = ball[key_ball_center]
                x2,y2 = other[key_ball_center]
                # 计算两个球的圆心距
                distance = ((x1-x2)**2 + (y1-y2)**2)**0.5
                if distance <= ball[key_ball_radius] + other[key_ball_radius]:
                    # 相撞后:
                    if randint(0,1):
                        ball[key_ball_radius] += int(other[key_ball_radius]*0.5)
                        other[key_ball_alive] = False
                    else:
                        other[key_ball_radius] += int(ball[key_ball_radius] * 0.5)
                        ball[key_ball_alive] = False
    
    
    
    
    
    def draw_all_ball(window):# 重新画所有的球
        window.fill(yt_color.white)
        for ball in all_balls:
            if ball[key_ball_alive]:
    
                pygame.draw.circle(window, ball[key_ball_color], ball[key_ball_center], ball[key_ball_radius])
    
            else:
                all_balls.remove(ball)
        pygame.display.update()
    
    
    def ball_move():
        """
        球动起来
        :return:
        """
        for ball in all_balls:
            # 获取新的原点
            ball_x,ball_y = ball[key_ball_center]
            new_x,new_y = ball_x + ball[key_ball_xspeed],ball_y + ball[key_ball_yspeed]
    
            # 做边界检测
            # x方向的边界
            if new_x < ball[key_ball_radius]:
                new_x = ball[key_ball_radius]
                ball[key_ball_xspeed] *= -1
            elif new_x > WINDOW_WIDTH:
                new_x = WINDOW_WIDTH - ball[key_ball_radius]
                ball[key_ball_xspeed] *= -1
            # y方向的边界
            if new_y < ball[key_ball_radius]:
                new_y = ball[key_ball_radius]
                ball[key_ball_yspeed] *= -1
            elif new_y > WINDOW_HIGHT:
                new_y = WINDOW_HIGHT - ball[key_ball_radius]
                ball[key_ball_yspeed] *= -1
    
    
            # 修改圆心坐标
            ball[key_ball_center] = new_x,new_y
    
    
    def creat_ball(window, pos):
        """
        在指定的位置产生一个随机颜色的球。
        :param window:
        :param pos:
        :return:
        """
        ball_color = yt_color.rand_color()
        ball_center = pos
        ball_radius = randint(10,30)
    
        ball = {key_ball_color:ball_color,
                key_ball_center:ball_center,
                key_ball_radius:ball_radius,
                key_ball_xspeed:randint(-5,5),
                key_ball_yspeed:randint(-5,5),
                key_ball_alive:True
                }
    
        all_balls.append(ball)
        pygame.draw.circle(window, ball_color, ball_center, ball_radius)
        pygame.display.update()
    
    
    def main_game():
        # 初始化游戏
        pygame.init()
        window = pygame.display.set_mode((WINDOW_WIDTH,WINDOW_HIGHT))
        window.fill(yt_color.white)
    
        # 进入游戏界面默认显示的内容和要执行的操作。
    
    
    
    
    
    
        pygame.display.flip()
        # 游戏循环
        while True:
            # 游戏循环执行的代码
            ball_move() # 修改球的位置
            pygame.time.delay(10)
            ball_crash() #检测求的碰撞
            draw_all_ball(window) # 重新画所有的球
    
    
            # 事件检测
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
                # 事件发生要执行的操作写在这个下面。。。
                # 1、鼠标按下
                elif event.type == pygame.MOUSEBUTTONDOWN:
                    creat_ball(window, event.pos)
    
    
    if __name__ == '__main__':
        main_game()
    

    2、学生信息管理系统
    1、main_page.py

    import file_manager
    import student_system
    # 全局变量
    file_name = 'user_info.json' # 保存所有用户的信息文件
    key_user_name = 'user_name'
    key_password = 'password'
    
    # =================注册=================
    """
    为了下次打开系统的时候能够正常登录,注册成功的信息需要保存。保存用户名和密码
    一个系统可以注册多个用户,可以用列表保存多个用户。通过字典来保存每个用户的用户名和密码
    [
        {'user_name':'用户名','password':'密码'}
    ]
    保存到userinfo.json中
    """
    
    def get_all_user():
        all_user = file_manager.read_json_file(file_name)
        if all_user:
            return all_user
        return []
    
    
    
    
    def regist():
    
        while True:
            # 输入用户名后
            user_name = input('请输入一个用户名(3-10位):')
            # 判断是否符合格式要求
            if not 3<=len(user_name)<=10:
                print('输入有误,请重新输入!')
                continue
            # 判断是否已经注册过
            all_user = file_manager.read_json_file(file_name)
            if not all_user:
                break
            for user in all_user:
                if user[key_user_name] == user_name:
                    print('用户名已被注册,请重新输入!')
                    continue
            break
        # 2、输入密码
        while True:
            password = input('请输入密码(6-16):')
            if not 6<=len(password)<=16:
                print('密码输入有误,请重新输入!')
                continue
            re_password = input('确认密码:')
            if password != re_password:
                print('和第一次输入的密码不一样,请重新输入!')
                continue
            break
    
    
        # 3、保存用户名和密码
        all_user = get_all_user()
        all_user.append({key_user_name:user_name,key_password:password})
        re = file_manager.write_json_file(file_name,all_user)
        if re:
            print('注册成功')
        else:
            print('注册失败')
    
    # =======================登录========================
    def login():
        user_name = input('请输入用户名:')
        password = input('请输入密码:')
        # 1、看输入的用户名是否已经注册过
        all_user = get_all_user()
        for user in all_user:
            if user[key_user_name] == user_name:
                if user[key_password] ==password:
                    print('登录成功!')
                    return user_name
                else:
                    print('密码错误,登录失败')
                    return None
        print('没有注册,登录失败')
        return None
    
    
    
    # ==========主页=====================
    def show_main_page():
        while True:
            print(file_manager.read_text_file('login.txt'))
            value = input('请选择(1-3):')
    
            # 退出
            if value == '3':
                break
            # 注册
            elif value == '2':
                regist()
            elif value == '1':
                user_name = login()
                if user_name:
                    student_system.user_name = user_name
                    student_system.main_page()
    
            else:
                print('输入有误,重新选择')
    
    if __name__ == '__main__':
        # 1、显示登录界面
        show_main_page()
    

    2、file_manager.py

    import json
    
    def write_json_file(file_name, content):
        """
        将内容写入json文件中
        :param file_name: 文件名
        :param content: 要写的内容
        :return: 写入成功
        """
        try:
            with open('./files/' + file_name, 'w', encoding='utf-8') as f:
                json.dump(content, f)
                return True
        except:
            return False
    
    
    
    def read_json_file(file_name):
        """
        读取json文件的内容
        :param file_name:文件名
        :return: 文件内容
        """
        try:
            with open('./files/' + file_name, encoding='utf-8') as f:
                return json.load(f)
        except:
    
            return None
    
    
    
    def read_text_file(file_name):
        """
        获取文本文件的内容
        :param file_name:文件名
        :return:
        """
        try:
            with open('./files/'+file_name, encoding='utf-8') as f:
                return f.read()
        except FileNotFoundError:
            print('文件名不存在')
            return None
    if __name__ == '__main__':
        pass
    
    

    3、student_manager.py

    import file_manager
    
    user_name = ''
    
    
    # ====================添加学生====================
    """
    一个账号应管理不同的学生 ----- 不同的用户对应不同的json文件
    json文件中的格式:
    {
        'name':'',
        'number':个数,
        'all_students':[
            {'name':,'age':,'tel':,'id':}
        ]
    }
    """
    key_number = 'number'
    key_all_student = 'all_students'
    key_name = 'name'
    key_age = 'age'
    key_tel = 'tel'
    key_id = 'id'
    
    def get_system_info():
        system_info = file_manager.read_json_file(user_name+'.json')
        if system_info:
            return system_info
        return {}
    def create_id():
        """产生学号"""
        system_info = get_system_info()
        number = system_info.get(key_number, 0)
        number += 1
        id = 'stu' + str(number).rjust(3,'0')
        # 更新系统中的数据
        return id,number
    
    def add_student():
        while True:
            # 1、输入信息
            name = input('姓名:')
            age = input('年龄:')
            tel = input('电话:')
            # 2、产生id
            id, number = create_id()
    
            # 3、创建学生
            stu = {key_name:name, key_age:age, key_tel: tel,key_id: id}
            #4、保存学生信息
            system_info = get_system_info()
            all_student = system_info.get(key_all_student, [])
            all_student.append(stu)
            # 5、保存到文件中
            system_info[key_all_student] = all_student
            system_info[key_number] = number
            re = file_manager.write_json_file(user_name+'.json',system_info)
            if re:
                print('添加成功')
            else:
                print('添加失败')
    
            print('1、继续添加')
            print('2、返回')
            value = input('请选择(1/2):')
            if value == '1':
                continue
            else:
                break
    
    
    
    
    # ==================主页==========================
    def main_page():
        while True:
            print(file_manager.read_text_file('system.txt'))
            value = input('请选择(1-5):')
            if value == '5':
                break
            elif value == '1':
                add_student()
    
            elif value == '2':
                print('查找学生')
            elif value == '3':
                print('删除学生')
            elif value == '4':
                print('修改学生')
    if __name__ == '__main__':
        main_page()
    

    相关文章

      网友评论

          本文标题:day13-练习项目

          本文链接:https://www.haomeiwen.com/subject/hkyzwftx.html