[Bug fix] Course high score record

- Fix a logical bug that the course's high score will not update if the user does not complete the whole course challenge.
This commit is contained in:
Lost-MSth
2023-12-07 18:00:23 +08:00
parent de1d46f96e
commit de701b4d1b

View File

@@ -160,13 +160,17 @@ class UserCourse(Course):
super().__init__(c) super().__init__(c)
self.user = user self.user = user
self.is_completed: bool = False # self.is_completed: bool = False
self.high_score: int = None self.high_score: int = None
self.best_clear_type: int = None self.best_clear_type: int = None
@property
def is_completed(self) -> bool:
return self.best_clear_type != 0
def to_dict(self) -> dict: def to_dict(self) -> dict:
r = super().to_dict() r = super().to_dict()
if self.is_completed is None: if self.best_clear_type is None:
self.select_user_course() self.select_user_course()
r.update({ r.update({
'is_completed': self.is_completed, 'is_completed': self.is_completed,
@@ -182,22 +186,16 @@ class UserCourse(Course):
(self.user.user_id, self.course_id)) (self.user.user_id, self.course_id))
x = self.c.fetchone() x = self.c.fetchone()
if x is None: if x is None:
self.is_completed = False
self.high_score = 0 self.high_score = 0
self.best_clear_type = 0 self.best_clear_type = 0
else: else:
self.is_completed = True
self.high_score = x[2] self.high_score = x[2]
self.best_clear_type = x[3] self.best_clear_type = x[3]
def insert_user_course(self) -> None: def insert_or_update_user_course(self) -> None:
self.c.execute('''insert into user_course values (?,?,?,?)''', self.c.execute('''insert or replace into user_course values (?,?,?,?)''',
(self.user.user_id, self.course_id, self.high_score, self.best_clear_type)) (self.user.user_id, self.course_id, self.high_score, self.best_clear_type))
def update_user_course(self) -> None:
self.c.execute('''update user_course set high_score = ?, best_clear_type = ? where user_id = ? and course_id = ?''',
(self.high_score, self.best_clear_type, self.user.user_id, self.course_id))
class UserCourseList: class UserCourseList:
''' '''
@@ -262,40 +260,42 @@ class CoursePlay(UserCourse):
def update(self) -> None: def update(self) -> None:
'''课题模式更新''' '''课题模式更新'''
self.select_user_course()
self.score += self.user_play.score
flag = False
if self.score > self.high_score:
self.high_score = self.score
flag = True
if self.user_play.health < 0: if self.user_play.health < 0:
# 你挂了 # 你挂了
self.user_play.course_play_state = 5 self.user_play.course_play_state = 5
self.score = 0 self.score = 0
self.clear_type = 0 self.clear_type = 0
self.user_play.update_play_state_for_course() self.user_play.update_play_state_for_course()
if flag:
self.insert_or_update_user_course()
return None return None
self.user_play.course_play_state += 1 self.user_play.course_play_state += 1
self.score += self.user_play.score
from .score import Score from .score import Score
if Score.get_song_state(self.clear_type) > Score.get_song_state(self.user_play.clear_type): if Score.get_song_state(self.clear_type) > Score.get_song_state(self.user_play.clear_type):
self.clear_type = self.user_play.clear_type self.clear_type = self.user_play.clear_type
self.user_play.update_play_state_for_course() self.user_play.update_play_state_for_course()
if self.user_play.course_play_state == 4: if self.user_play.course_play_state == 4:
self.user.select_user_about_stamina()
self.select_course_item()
for i in self.items:
i.user_claim_item(self.user)
self.select_user_course()
if not self.is_completed: if not self.is_completed:
self.high_score = self.score self.user.select_user_about_stamina()
self.best_clear_type = self.clear_type self.select_course_item()
self.is_completed = True for i in self.items:
self.insert_user_course() i.user_claim_item(self.user)
return None
flag = False
if self.score > self.high_score:
self.high_score = self.score
flag = True
if Score.get_song_state(self.clear_type) > Score.get_song_state(self.best_clear_type): if Score.get_song_state(self.clear_type) > Score.get_song_state(self.best_clear_type):
self.best_clear_type = self.clear_type self.best_clear_type = self.clear_type
flag = True flag = True
if flag:
self.update_user_course() if flag:
self.insert_or_update_user_course()