Still have some bugs, I will fix it next time.