Created
July 30, 2014 13:26
-
-
Save anonymous/7335a642359c296c1172 to your computer and use it in GitHub Desktop.
graphic_sorting.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from scene import * | |
import random | |
import time | |
import datetime | |
import thread | |
TIMING_DELAY=0.0001 #SECONDS | |
class MyScene (Scene): | |
def setup(self): | |
self.list, self.colors = self.generate_random_list() | |
self.choice_made = False | |
self.num_comparisons = 0 | |
self.num_swaps = 0 | |
s = datetime.datetime.now() | |
self.elapsed_time = s - s | |
self.done_sorting = False | |
self.compare_index = 0 | |
def draw(self): | |
background(0, 0, 0) | |
self.draw_title() | |
self.draw_list() | |
self.draw_buttons() | |
self.draw_comparisons() | |
self.draw_compare_index() | |
self.draw_swaps() | |
self.draw_time() | |
def touch_ended(self, touch): | |
if not self.choice_made: | |
if touch.location in self.sel_sort_button: | |
self.choice_made = True | |
thread.start_new_thread(self.selection_sort_list, ()) | |
if touch.location in self.bub_sort_button: | |
self.choice_made = True | |
thread.start_new_thread(self.bubble_sort_list, ()) | |
return | |
if self.done_sorting: | |
if touch.location in self.shuffle_button: | |
self.list, self.colors = self.generate_random_list() | |
self.choice_made = False | |
self.done_sorting = False | |
def draw_title(self): | |
text, size = render_text('Sorting Comparator', font_size=35) | |
image(text, self.size.w*0.5-size.w*0.5, self.size.h-50) | |
def draw_list(self): | |
region = self.size.w - 100 | |
offset = 50 | |
for index in range(len(self.list)): | |
fill(self.colors[index][0], self.colors[index][1], self.colors[index][2]) | |
x = region / len(self.list) * index + offset | |
y = 400 | |
w = region / len(self.list) - 1 | |
h = self.list[index] * 5 | |
rect(x, y, w, h) | |
def draw_compare_index(self): | |
region = self.size.w - 100 | |
diameter = region/len(self.list) | |
x = 50 + diameter * self.compare_index | |
fill(1.0, 1.0, 1.0) | |
ellipse(x, 399-diameter, diameter-1, diameter-1) | |
def draw_comparisons(self): | |
msg = "Comparisons: %d" % self.num_comparisons | |
text, size = render_text(msg, font_size=20) | |
image(text, 50, 350) | |
def draw_swaps(self): | |
msg = "Swaps: %d" % self.num_swaps | |
text, size = render_text(msg, font_size=20) | |
image(text, self.size.w*0.5-size.w*0.5, 350) | |
def draw_time(self): | |
msg = "Seconds elapsed: %d" % self.elapsed_time.seconds | |
text, size = render_text(msg, font_size=20) | |
image(text, self.size.w-size.w-50, 350) | |
def generate_random_list(self): | |
n = datetime.datetime.now() | |
self.elapsed_time = n-n | |
self.num_comparisons = 0 | |
self.num_swaps = 0 | |
self.compare_index = 0 | |
lst = [x+1 for x in range(100)] | |
random.shuffle(lst) | |
colors = [Color(random.random(), random.random(), random.random()) for x in range(100)] | |
return lst, colors | |
def bubble_sort_list(self): | |
self.num_comparisons = 0 | |
self.start_time = datetime.datetime.now() | |
for y in xrange(len(self.list)-1, 0, -1): | |
for x in xrange(y): | |
self.compare_index = x | |
self.num_comparisons += 1 | |
if self.list[x] < self.list[x+1]: | |
done = False | |
self.num_swaps += 1 | |
self.list[x], self.list[x+1] = self.list[x+1], self.list[x] | |
self.colors[x], self.colors[x+1] = self.colors[x+1], self.colors[x] | |
time.sleep(TIMING_DELAY) | |
self.elapsed_time = datetime.datetime.now() - self.start_time | |
self.done_sorting = True | |
def selection_sort_list(self): | |
self.num_comparisons = 0 | |
self.start_time = datetime.datetime.now() | |
for x in xrange(len(self.list)): | |
biggest = x | |
for y in xrange(x, len(self.list)): | |
self.compare_index = y | |
self.num_comparisons += 1 | |
if self.list[y] > self.list[biggest]: | |
biggest = y | |
time.sleep(TIMING_DELAY) | |
self.list[x], self.list[biggest] = self.list[biggest], self.list[x] | |
self.colors[x], self.colors[biggest] = self.colors[biggest], self.colors[x] | |
self.num_swaps += 1 | |
self.elapsed_time = datetime.datetime.now() - self.start_time | |
self.done_sorting = True | |
def draw_buttons(self): | |
if self.done_sorting: | |
text, size = render_text('Shuffle List', font_size=25) | |
image(text, self.size.w*0.5-size.w*0.5, 185) | |
self.shuffle_button = Rect(self.size.w*0.5-size.w*0.5, 185, size.w, size.h) | |
if self.choice_made: | |
return | |
text, size = render_text('Press here for Selection Sort', font_size=25) | |
image(text, self.size.w*0.5-size.w*0.5, 225) | |
self.sel_sort_button = Rect(self.size.w*0.5-size.w*0.5, 225, size.w, size.h) | |
text, size = render_text('Press here for Bubble Sort', font_size=25) | |
image(text, self.size.w*0.5-size.w*0.5, 150) | |
self.bub_sort_button = Rect(self.size.w*0.5-size.w*0.5, 150, size.w, size.h) | |
run(MyScene(), orientation=PORTRAIT) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment