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()