V0.5.2 commit

not done
This commit is contained in:
沈瑗杰 2021-09-08 23:38:34 +08:00
parent ec6b76197c
commit 515e476657
41 changed files with 589 additions and 53 deletions

View File

@ -32,6 +32,7 @@ if __name__ == '__main__':
print(hi)
try:
from Difficult_Rocket import main
from Difficult_Rocket import crash
game = main.Game()
game.start()
@ -39,13 +40,11 @@ if __name__ == '__main__':
print('the game has error , now outputting error message')
error = traceback.format_exc()
print(error)
from Difficult_Rocket import crash
from Difficult_Rocket.api import thread
crash_thread = threading.Thread(target=crash.create_crash_report, args=(error,), name='Crash report thread')
crash_thread = thread.Threads(target=crash.create_crash_report, args=(error,), name='Crash report thread')
crash_thread.start()
crash_thread.join()
print(crash_thread.__str__())
else:
for thread in threading.enumerate():
if thread == threading.main_thread(): continue
print(thread.__str__())
crash.record_thread = False
print(crash.all_thread)

View File

@ -1,7 +1,16 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
# import folders
# import in this folder

View File

@ -1,8 +1,17 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
import threading

View File

@ -1,3 +1,9 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
@ -5,6 +11,8 @@ github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
from .api import *
__all__ = [

View File

@ -1,3 +1,9 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
@ -6,6 +12,7 @@ gitee: @shenjackyuanjie
"""
class Error(Exception):
"""基础 Exception"""
pass

View File

@ -1,3 +1,9 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
@ -5,6 +11,7 @@ github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
from .Exp import TexturesError, LanguageError
from .delivery import Delivery
from .new_thread import new_thread

View File

@ -1,9 +1,18 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
class Delivery:
def __init__(self):
# bool

View File

@ -3,6 +3,7 @@ import inspect
import threading
import time
from typing import Optional, Callable
from Difficult_Rocket.api import thread
"""
This part of code come from MCDReforged(https://github.com/Fallen_Breath/MCDReforged)
@ -21,9 +22,9 @@ def new_thread(thread_name: Optional[str or Callable] = None):
def wrapper(func):
@functools.wraps(func) # to preserve the origin function information
def wrap(*args, **kwargs):
thread = threading.Thread(target=func, args=args, kwargs=kwargs, name=thread_name)
thread.setDaemon(False)
thread.start()
thread_ = thread.Threads(target=func, args=args, kwargs=kwargs, name=thread_name)
thread_.setDaemon(False)
thread_.start()
return thread
# bring the signature of the func to the wrap function

View File

@ -0,0 +1,23 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
import threading
from Difficult_Rocket import crash
class Threads(threading.Thread):
def run(self) -> None:
if crash.record_thread:
crash.all_thread[self.name] = self
super(Threads, self).run()

View File

@ -1,9 +1,17 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
import configparser
import decimal
import logging

View File

@ -1,3 +1,9 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com

View File

@ -1,7 +1,16 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
import configparser
import logging
import os
@ -12,11 +21,10 @@ if __name__ == '__main__': # been start will not run this
sys.path.append('/bin/libs')
sys.path.append('/bin')
from Difficult_Rocket.libs import pyglet
from Difficult_Rocket.libs.pyglet.window import key, mouse
from Difficult_Rocket.api import Exp, tools, config
from drag_sprite import DragSprite
from api.new_thread import new_thread
import pyglet
from pyglet.window import key, mouse
from Difficult_Rocket.drag_sprite import DragSprite
from Difficult_Rocket.api import Exp, tools, config, new_thread
class Client:
@ -90,17 +98,16 @@ class ClientWindow(pyglet.window.Window):
self.label_batch = pyglet.graphics.Batch()
# frame
self.frame = pyglet.gui.Frame(self)
self.logger.info(self.lang['setup.done'])
# setup
self.setup()
self.info_label = pyglet.text.Label(x=10, y=self.height - 10,
anchor_x='left', anchor_y='top',
batch=self.label_batch)
self.fps_display = pyglet.window.FPSDisplay(self)
pyglet.clock.schedule_interval(self.update, self.SPF)
self.times.append(time.time())
self.times.append(self.times[1] - self.times[0])
self.logger.debug(self.times[2])
self.logger.info(self.lang['setup.done'])
@new_thread('client_load_environment')
def load_environment(self) -> None:
@ -157,7 +164,6 @@ class ClientWindow(pyglet.window.Window):
def draw_batch(self):
self.part_batch.draw()
self.label_batch.draw()
self.fps_display.draw()
"""
keyboard and mouse input

View File

@ -1,8 +1,17 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
import decimal
import logging
# import re

View File

@ -1,3 +1,9 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
@ -5,6 +11,7 @@ github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
import os
import threading
import time
@ -26,22 +33,8 @@ Thread_message = """## Thread info
System_message = """## System info
"""
def thread_crash_check() -> None:
"""
Need to run in a new thread
will raise error when any thread raise error
maybe will create a crash report
"""
all_thread = {}
thread_local = threading.local()
for thread in threading.enumerate():
if thread not in all_thread:
all_thread[thread.name] = thread
for any_thread in all_thread:
if not all_thread[any_thread].is_alive():
pass
# if all_thread[any_thread].exitcode
all_thread = {threading.main_thread().name: threading.main_thread()}
record_thread = True
def crash_info_handler(info: str = None) -> str:
@ -71,7 +64,7 @@ def create_crash_report(info: str = None) -> None:
crash_file.write(Head_message) # 开头信息
crash_file.write(crash_info)
crash_file.write(Thread_message)
for thread in threading.enumerate():
for thread in all_thread:
crash_file.write(markdown_line_handler(thread.name, code=True))
crash_file.write(markdown_line_handler(f'Ident: {thread.ident}', level=2))
crash_file.write(markdown_line_handler(f'Daemon: {thread.isDaemon()}', level=2))

View File

@ -1,8 +1,17 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
import logging
import os
import sys
@ -14,7 +23,7 @@ if __name__ == '__main__': # been start will not run this
sys.path.append('/bin')
from Difficult_Rocket import client, server
from Difficult_Rocket.libs import pyglet
from libs import pyglet
from Difficult_Rocket.api import tools

View File

@ -1,7 +1,17 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
import logging
import os
import sys

View File

@ -1,12 +1,18 @@
# -------------------------------
# Difficult Rocket
# Copyright © 2021 by shenjackyuanjie
# All rights reserved
# -------------------------------
"""
writen by shenjackyuanjie
mail: 3695888@qq.com
mail: 3695888@qq.com
github: @shenjackyuanjie
gitee: @shenjackyuanjie
"""
try:
from bin import tools
except (ModuleNotFoundError, ImportError, ImportWarning):
import tools
from Difficult_Rocket.api import tools
import os
import PIL.Image

352
tests/openGL_test.py Normal file
View File

@ -0,0 +1,352 @@
from pyglet.gl import *
from pyglet.gl.gl import *
from pyglet.gl.glu import *
import numpy as np
IS_PERSPECTIVE = True # 透视投影
VIEW = np.array([-0.8, 0.8, -0.8, 0.8, 1.0, 20.0]) # 视景体的left/right/bottom/top/near/far六个面
SCALE_K = np.array([1.0, 1.0, 1.0]) # 模型缩放比例
EYE = np.array([0.0, 0.0, 2.0]) # 眼睛的位置默认z轴的正方向
LOOK_AT = np.array([0.0, 0.0, 0.0]) # 瞄准方向的参考点(默认在坐标原点)
EYE_UP = np.array([0.0, 1.0, 0.0]) # 定义对观察者而言的上方默认y轴的正方向
WIN_W, WIN_H = 640, 480 # 保存窗口宽度和高度的变量
LEFT_IS_DOWNED = False # 鼠标左键被按下
MOUSE_X, MOUSE_Y = 0, 0 # 考察鼠标位移量时保存的起始位置
def getposture():
global EYE, LOOK_AT
dist = np.sqrt(np.power((EYE-LOOK_AT), 2).sum())
if dist > 0:
phi = np.arcsin((EYE[1]-LOOK_AT[1])/dist)
theta = np.arcsin((EYE[0]-LOOK_AT[0])/(dist*np.cos(phi)))
else:
phi = 0.0
theta = 0.0
return dist, phi, theta
DIST, PHI, THETA = getposture() # 眼睛与观察目标之间的距离、仰角、方位角
def init():
glClearColor(0.0, 0.0, 0.0, 1.0) # 设置画布背景色。注意这里必须是4个参数
glEnable(GL_DEPTH_TEST) # 开启深度测试,实现遮挡关系
glDepthFunc(GL_LEQUAL) # 设置深度测试函数GL_LEQUAL只是选项之一
def draw():
global IS_PERSPECTIVE, VIEW
global EYE, LOOK_AT, EYE_UP
global SCALE_K
global WIN_W, WIN_H
# 清除屏幕及深度缓存
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
# 设置投影(透视投影)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
if WIN_W > WIN_H:
if IS_PERSPECTIVE:
glFrustum(VIEW[0]*WIN_W/WIN_H, VIEW[1]*WIN_W/WIN_H, VIEW[2], VIEW[3], VIEW[4], VIEW[5])
else:
glOrtho(VIEW[0]*WIN_W/WIN_H, VIEW[1]*WIN_W/WIN_H, VIEW[2], VIEW[3], VIEW[4], VIEW[5])
else:
if IS_PERSPECTIVE:
glFrustum(VIEW[0], VIEW[1], VIEW[2]*WIN_H/WIN_W, VIEW[3]*WIN_H/WIN_W, VIEW[4], VIEW[5])
else:
glOrtho(VIEW[0], VIEW[1], VIEW[2]*WIN_H/WIN_W, VIEW[3]*WIN_H/WIN_W, VIEW[4], VIEW[5])
# 设置模型视图
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
# 几何变换
glScaled(SCALE_K[0], SCALE_K[1], SCALE_K[2])
# 设置视点
gluLookAt(
EYE[0], EYE[1], EYE[2],
LOOK_AT[0], LOOK_AT[1], LOOK_AT[2],
EYE_UP[0], EYE_UP[1], EYE_UP[2]
)
# 设置视口
glViewport(0, 0, WIN_W, WIN_H)
# ---------------------------------------------------------------
glBegin(GL_LINES) # 开始绘制线段(世界坐标系)
# 以红色绘制x轴
glColor4f(1.0, 0.0, 0.0, 1.0) # 设置当前颜色为红色不透明
glVertex3f(-0.8, 0.0, 0.0) # 设置x轴顶点x轴负方向
glVertex3f(0.8, 0.0, 0.0) # 设置x轴顶点x轴正方向
# 以绿色绘制y轴
glColor4f(0.0, 1.0, 0.0, 1.0) # 设置当前颜色为绿色不透明
glVertex3f(0.0, -0.8, 0.0) # 设置y轴顶点y轴负方向
glVertex3f(0.0, 0.8, 0.0) # 设置y轴顶点y轴正方向
# 以蓝色绘制z轴
glColor4f(0.0, 0.0, 1.0, 1.0) # 设置当前颜色为蓝色不透明
glVertex3f(0.0, 0.0, -0.8) # 设置z轴顶点z轴负方向
glVertex3f(0.0, 0.0, 0.8) # 设置z轴顶点z轴正方向
glEnd() # 结束绘制线段
# ---------------------------------------------------------------
glBegin(GL_TRIANGLES) # 开始绘制三角形z轴负半区
glColor4f(1.0, 0.0, 0.0, 1.0) # 设置当前颜色为红色不透明
glVertex3f(-0.5, -0.366, -0.5) # 设置三角形顶点
glColor4f(0.0, 1.0, 0.0, 1.0) # 设置当前颜色为绿色不透明
glVertex3f(0.5, -0.366, -0.5) # 设置三角形顶点
glColor4f(0.0, 0.0, 1.0, 1.0) # 设置当前颜色为蓝色不透明
glVertex3f(0.0, 0.5, -0.5) # 设置三角形顶点
glEnd() # 结束绘制三角形
# ---------------------------------------------------------------
glBegin(GL_TRIANGLES) # 开始绘制三角形z轴正半区
glColor4f(1.0, 0.0, 0.0, 1.0) # 设置当前颜色为红色不透明
glVertex3f(-0.5, 0.5, 0.5) # 设置三角形顶点
glColor4f(0.0, 1.0, 0.0, 1.0) # 设置当前颜色为绿色不透明
glVertex3f(0.5, 0.5, 0.5) # 设置三角形顶点
glColor4f(0.0, 0.0, 1.0, 1.0) # 设置当前颜色为蓝色不透明
glVertex3f(0.0, -0.366, 0.5) # 设置三角形顶点
glEnd() # 结束绘制三角形
# ---------------------------------------------------------------
# glutSwapBuffers() # 切换缓冲区,以显示绘制内容
def reshape(width, height):
global WIN_W, WIN_H
WIN_W, WIN_H = width, height
glutPostRedisplay()
def mouseclick(button, state, x, y):
global SCALE_K
global LEFT_IS_DOWNED
global MOUSE_X, MOUSE_Y
MOUSE_X, MOUSE_Y = x, y
if button == GLUT_LEFT_BUTTON:
LEFT_IS_DOWNED = state==GLUT_DOWN
elif button == 3:
SCALE_K *= 1.05
glutPostRedisplay()
elif button == 4:
SCALE_K *= 0.95
glutPostRedisplay()
def mousemotion(x, y):
global LEFT_IS_DOWNED
global EYE, EYE_UP
global MOUSE_X, MOUSE_Y
global DIST, PHI, THETA
global WIN_W, WIN_H
if LEFT_IS_DOWNED:
dx = MOUSE_X - x
dy = y - MOUSE_Y
MOUSE_X, MOUSE_Y = x, y
PHI += 2*np.pi*dy/WIN_H
PHI %= 2*np.pi
THETA += 2*np.pi*dx/WIN_W
THETA %= 2*np.pi
r = DIST*np.cos(PHI)
EYE[1] = DIST*np.sin(PHI)
EYE[0] = r*np.sin(THETA)
EYE[2] = r*np.cos(THETA)
if 0.5*np.pi < PHI < 1.5*np.pi:
EYE_UP[1] = -1.0
else:
EYE_UP[1] = 1.0
glutPostRedisplay()
def keydown(key, x, y):
global DIST, PHI, THETA
global EYE, LOOK_AT, EYE_UP
global IS_PERSPECTIVE, VIEW
if key in [b'x', b'X', b'y', b'Y', b'z', b'Z']:
if key == b'x': # 瞄准参考点 x 减小
LOOK_AT[0] -= 0.01
elif key == b'X': # 瞄准参考 x 增大
LOOK_AT[0] += 0.01
elif key == b'y': # 瞄准参考点 y 减小
LOOK_AT[1] -= 0.01
elif key == b'Y': # 瞄准参考点 y 增大
LOOK_AT[1] += 0.01
elif key == b'z': # 瞄准参考点 z 减小
LOOK_AT[2] -= 0.01
elif key == b'Z': # 瞄准参考点 z 增大
LOOK_AT[2] += 0.01
DIST, PHI, THETA = getposture()
glutPostRedisplay()
elif key == b'\r': # 回车键,视点前进
EYE = LOOK_AT + (EYE - LOOK_AT) * 0.9
DIST, PHI, THETA = getposture()
glutPostRedisplay()
elif key == b'\x08': # 退格键,视点后退
EYE = LOOK_AT + (EYE - LOOK_AT) * 1.1
DIST, PHI, THETA = getposture()
glutPostRedisplay()
elif key == b' ': # 空格键,切换投影模式
IS_PERSPECTIVE = not IS_PERSPECTIVE
glutPostRedisplay()
if __name__ == "__main__":
glutInit()
displayMode = GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH
glutInitDisplayMode(displayMode)
glutInitWindowSize(WIN_W, WIN_H)
glutInitWindowPosition(300, 200)
glutCreateWindow('Quidam Of OpenGL')
init() # 初始化画布
glutDisplayFunc(draw) # 注册回调函数draw()
glutReshapeFunc(reshape) # 注册响应窗口改变的函数reshape()
glutMouseFunc(mouseclick) # 注册响应鼠标点击的函数mouseclick()
glutMotionFunc(mousemotion) # 注册响应鼠标拖拽的函数mousemotion()
glutKeyboardFunc(keydown) # 注册键盘输入的函数keydown()
glutMainLoop() # 进入glut主循环

View File

@ -1,5 +0,0 @@
import re
ipv4 = re.compile('[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}')
print(re.match(ipv4, '1.2.3.2'))

70
tests/奇怪的东西.py Normal file
View File

@ -0,0 +1,70 @@
from math import sin, cos, sqrt
import pyglet
from pyglet.gl import *
def vec(*args):
return (GLfloat * len(args))(*args)
class GameEventHandler(object): # 这里用GameEventHandler把事件包装了一下
rx, ry = 0, 0
track = []
def on_draw(self):
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
# glLoadIdentity()
position = (sin(integral_drift[0] / 2) / sqrt(integral_drift[0]),
cos(integral_drift[1] / 2) / sqrt(integral_drift[1]))
self.track.append(position)
glColor3f(1, 1, 1)
glBegin(GL_LINE_STRIP)
for v in self.track:
glVertex3f(v[0], v[1], 0)
glEnd()
@staticmethod
def on_resize(width, height):
return pyglet.event.EVENT_HANDLED
def scene_init():
# One-time GL setup
glClearColor(0, 0, 0, 1)
glEnable(GL_DEPTH_TEST)
glEnable(GL_CULL_FACE)
glEnable(GL_BLEND) # 启用混合功能,将图形颜色同周围颜色相混合
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glEnable(GL_POLYGON_SMOOTH) # 多边形抗锯齿
# glHint(GL_POLYGON_SMOOTH, GL_NICEST)
glEnable(GL_LINE_SMOOTH) # 线抗锯齿
# glHint(GL_LINE_SMOOTH_HINT, GL_NICEST)
glEnable(GL_POINT_SMOOTH) # 点抗锯齿
# glHint(GL_POINT_SMOOTH, GL_NICEST)
pass
def update(dt):
delta_x = 5 * dt
delta_y = 5 * dt
delta_z = 5 * dt
integral_drift[0] += delta_x
integral_drift[1] += delta_y
integral_drift[2] += delta_z
pass
window = pyglet.window.Window(resizable=True)
scene_init()
integral_drift = [0.1, 0.1, 0.1] # 位移的总和
game_event = GameEventHandler()
window.push_handlers(game_event.on_draw)
pyglet.app.event_loop.clock.schedule(update) # 单位时间触发update
pyglet.app.run()