-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
127 lines (113 loc) · 4.97 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import sys
sys.path.append('../')
from sort import bubbleSort, mergeSort, quickSort
from createList import randomList
from canvas import Canvas
from menu import Menu
from button import Button
# import threading
from thread import thread_with_trace
import pygame
import time
grey = (125, 125, 125)
white = (255, 255, 255)
black = (0, 0, 0)
purple= (0x5b, 0x34, 0x9e)
class Screen():
def __init__(self):
pygame.init()
self.sortingThread = None
self.win = pygame.display.set_mode((840, 540))
self.list = randomList(100, 500)
self.canvas = Canvas(20, 20, 500, 500, pygame, self.win, white, purple,self.list)
self.menu = Menu(540, 0, 540, 300, pygame, self.win, grey)
self.gameOver = False
self.speed = 5
self.sleepTime = [0.01]
self.sortingAlg = 'Bubble Sort'
self.buttons = [
Button(pygame, self.win, x=690, y=540 - 40, height=60, width=150, text='Shuffle', onPressed=self.shuffleList),
Button(pygame, self.win, x=690, y=540 - 120, height=60, width=150, text='Start', onPressed=self.startStopFunc),
Button(pygame, self.win, x=690, y= 540 - 480, height=30, width=75, text='Speed', color=grey),
Button(pygame, self.win, x=690, y= 540 - 430, height=30, width=40, text=str(self.speed), color=grey),
Button(pygame, self.win, x=630, y= 540 - 430, height=30, width=40, text='-', color=white, onPressed=self.decreaseSpeed),
Button(pygame, self.win, x=750, y= 540 - 430, height=30, width=40, text='+', color=white, onPressed=self.increaseSpeed),
Button(pygame, self.win, x=690, y= 540 - 380, height=30, width=75, text='Algorithm', color=grey),
Button(pygame, self.win, x=690, y= 540 - 330, height=30, width=40, text=self.sortingAlg, color=grey),
Button(pygame, self.win, x=600, y= 540 - 330, height=30, width=40, text='<', color=white, onPressed=self.nextAlg),
Button(pygame, self.win, x=780, y= 540 - 330, height=30, width=40, text='>', color=white, onPressed=self.nextAlg),
]
# self.shuffleButton = Button(pygame, self.win, x=690, y=540 - 120, height=60, width=150, text='Shuffle', onPressed=self.shuffleList)
# self.startStopButton = Button(pygame, self.win, x=690, y=540 - 200, height=60, width=150, text='Start', onPressed=self.startStopFunc)
self.sorting = False
def run(self):
try:
while(not self.gameOver):
## Handle Time
time.sleep(1/30)
self.handleEvents()
self.draw()
except Exception as e:
print('Erro: ' + str(e))
if(self.sortingThread != None):
self.sortingThread.kill()
def draw(self):
self.win.fill((255,255,255))
self.canvas.draw()
self.menu.draw()
for button in self.buttons:
button.draw()
pygame.display.update()
pass
def handleEvents(self):
for event in pygame.event.get():
if(event.type == pygame.QUIT):
self.gameOver = True
if(event.type == pygame.MOUSEBUTTONDOWN):
for button in self.buttons:
button.click(event.dict['pos'][0], event.dict['pos'][1])
def startStopFunc(self):
if(self.sorting):
self.buttons[1].setText('Start')
self.sortingThread.kill()
self.sorting = False
else:
self.buttons[1].setText('Stop')
self.sortingThread = thread_with_trace(target=self.sortList, args=(self.list,))
self.sorting = True
self.sortingThread.start()
def shuffleList(self):
if(not self.sorting):
shuffledList = randomList(len(self.list), 500)
for i in range(len(self.list)):
self.list[i] = shuffledList[i]
def sortList(self, myList):
if(self.sortingAlg == 'Bubble Sort'):
bubbleSort(myList, delay=self.sleepTime)
elif(self.sortingAlg == 'Merge Sort'):
mergeSort(myList, delay=self.sleepTime)
elif(self.sortingAlg == 'Quick Sort'):
quickSort(myList, delay=self.sleepTime)
self.buttons[1].setText('Start')
self.sorting = False
def increaseSpeed(self):
if(self.speed < 10):
self.speed += 1
self.sleepTime[0] -= (1/100)*0.19
self.buttons[3].setText(str(self.speed))
def decreaseSpeed(self):
if(self.speed > 1):
self.speed -= 1
self.sleepTime[0] += (1/100)*0.2
self.buttons[3].setText(str(self.speed))
def nextAlg(self):
if(self.sortingAlg == 'Bubble Sort'):
self.sortingAlg = 'Merge Sort'
elif(self.sortingAlg == 'Merge Sort'):
self.sortingAlg = 'Quick Sort'
elif(self.sortingAlg == 'Quick Sort'):
self.sortingAlg = 'Bubble Sort'
self.buttons[7].setText(self.sortingAlg)
if __name__ == "__main__":
screen = Screen()
screen.run()