-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathThird.py
More file actions
323 lines (288 loc) · 12.8 KB
/
Third.py
File metadata and controls
323 lines (288 loc) · 12.8 KB
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
# Fill me in!
# It seems that the 'global' keyword doesn't work, so I'm using Dicts as workarounds
app.setMaxShapeCount(10000000000000) # Set max shape count
app.background = None #initialize app.background for later
#Text messages, need a linebreak every 39 or so characters
Text01 = """Good day,
This is an edited, improved, and
enhanced version of the text display
from the last creative assignment.
Changes include:
- Added numbers
- Added many more symbols
- Reduced pixel usage
- Created reusable pixels
- Added an option to change colours
- Added an option to change messages
- Changed the lowercase 'y' slightly
- Improved spacing of letters
Hold down mouse for dark mode!
Press the circle for the next text
Press the square to change text colour
"""
Text02 = """"Kerning is better than ever!
Letter consistency is still pretty
bad though...
"""
Text03 = """
"Omae wa mou shindeiru"
"N-Nani?!"
|\ _,,,---,,_
ZZZzz /,`.--'`' -. ";-;;,__
|,4- ) )-,_. ,\ ( `'-'
'---''(_/--' `-'\_)
Art by Felix Lee
Me: "You are the ; to my code <3"
Her: "I code in python"
"""
Text04 = """Go and collect some
leaves and sticks and arrange
them into your favourite colour.
Blue, Red, Gree-
Green is not a creative colour!
"""
Text05 = """Sphinx of Black Quartz; Judge My Vow!
The quick brown fox jumps over the lazy dog
Cwm fjord bank glyphs vext quiz
"""
Text06 = """A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m
n o p q r s t u v w x y z
1 2 3 4 5 6 7 8 9 0
! ? . , ( ) [ ] { } ; : - ' "
/ | \\ ` _ < > + = """
# Create Mapping for Each Character
letterMap = {
'A':"0110\n1001\n1001\n1001\n1111\n1001\n1001\n0000\n0000",
'a':"0000\n0000\n0110\n0001\n0111\n1001\n0111\n0000\n0000",
'B':"1110\n1001\n1001\n1110\n1001\n1001\n1110\n0000\n0000",
'b':"1000\n1000\n1000\n1110\n1001\n1001\n1110\n0000\n0000",
'C':"0110\n1001\n1000\n1000\n1000\n1001\n0110\n0000\n0000",
'c':"0000\n0000\n0110\n1001\n1000\n1001\n0110\n0000\n0000",
'D':"1110\n1001\n1001\n1001\n1001\n1001\n1110\n0000\n0000",
'd':"0001\n0001\n0001\n0111\n1001\n1001\n0111\n0000\n0000",
'E':"1111\n1000\n1000\n1111\n1000\n1000\n1111\n0000\n0000",
'e':"0000\n0000\n0110\n1001\n1111\n1000\n0111\n0000\n0000",
'F':"1111\n1000\n1000\n1111\n1000\n1000\n1000\n0000\n0000",
'f':"0110\n1001\n1000\n1110\n1000\n1000\n1000\n0000\n0000",
'G':"0110\n1001\n1000\n1000\n1011\n1001\n0110\n0000\n0000",
'g':"0000\n0000\n0000\n0111\n1001\n1001\n0111\n0001\n1110",
'H':"1001\n1001\n1001\n1111\n1001\n1001\n1001\n0000\n0000",
'h':"1000\n1000\n1000\n1110\n1001\n1001\n1001\n0000\n0000",
'I':"111\n010\n010\n010\n010\n010\n111\n000\n000",
'i':"000\n010\n000\n110\n010\n010\n111\n000\n000",
'J':"1111\n0001\n0001\n0001\n0001\n1001\n0110\n0000\n0000",
'j':"000\n010\n000\n111\n001\n001\n001\n101\n010",
'K':"1001\n1001\n1010\n1100\n1010\n1001\n1001\n0000\n0000",
'k':"1000\n1001\n1001\n1110\n1001\n1001\n1001\n0000\n0000",
'L':"1000\n1000\n1000\n1000\n1000\n1000\n1111\n0000\n0000",
'l':"110\n010\n010\n010\n010\n010\n111\n000\n000",
'M':"10001\n11011\n10101\n10001\n10001\n10001\n10001\n00000\n00000",
'm':"00000\n00000\n00000\n11110\n10101\n10101\n10101\n00000\n00000",
'N':"1001\n1001\n1101\n1011\n1001\n1001\n1001\n0000\n0000",
'n':"0000\n0000\n0000\n1110\n1001\n1001\n1001\n0000\n0000",
'O':"0110\n1001\n1001\n1001\n1001\n1001\n0110\n0000\n0000",
'o':"0000\n0000\n0000\n0110\n1001\n1001\n0110\n0000\n0000",
'P':"1110\n1001\n1001\n1110\n1000\n1000\n1000\n0000\n0000",
'p':"0000\n0000\n0000\n1110\n1001\n1001\n1110\n1000\n1000",
'Q':"0110\n1001\n1001\n1001\n1001\n1010\n0101\n0000\n0000",
'q':"0000\n0000\n0000\n0110\n1001\n1001\n0111\n0001\n0001",
'R':"1110\n1001\n1001\n1110\n1010\n1001\n1001\n0000\n0000",
'r':"0000\n0000\n0000\n1011\n1100\n1000\n1000\n0000\n0000",
'S':"0111\n1000\n1000\n0110\n0001\n0001\n1110\n0000\n0000",
's':"0000\n0000\n0111\n1000\n0110\n0001\n1110\n0000\n0000",
'T':"111\n010\n010\n010\n010\n010\n010\n000\n000",
't':"0100\n0100\n1111\n0100\n0100\n0101\n0010\n0000\n0000",
'U':"1001\n1001\n1001\n1001\n1001\n1001\n0110\n0000\n0000",
'u':"0000\n0000\n0000\n1001\n1001\n1001\n0111\n0000\n0000",
'V':"10001\n10001\n10001\n10001\n10001\n01010\n00100\n00000\n00000",
'v':"00000\n00000\n00000\n10001\n10001\n01010\n00100\n00000\n00000",
'W':"10001\n10001\n10001\n10001\n10001\n10101\n01010\n00000\n00000",
'w':"00000\n00000\n00000\n10001\n10001\n10101\n01010\n00000\n00000",
'X':"1001\n1001\n1001\n0110\n1001\n1001\n1001\n0000\n0000",
'x':"0000\n0000\n0000\n1001\n0110\n1001\n1001\n0000\n0000",
'Y':"1001\n1001\n1001\n0111\n0001\n0001\n1110\n0000\n0000",
'y':"0000\n0000\n0000\n1001\n1001\n0111\n0001\n1001\n0110",
'Z':"1111\n0001\n0001\n0110\n1000\n1000\n1111\n0000\n0000",
'z':"0000\n0000\n1111\n0001\n0110\n1000\n1111\n0000\n0000",
'1':"11\n01\n01\n01\n01\n01\n01\n00\n00",
'2':"0110\n1001\n0001\n0010\n0100\n1000\n1111\n0000\n0000",
'3':"0110\n1001\n0001\n0010\n0001\n1001\n0110\n0000\n0000",
'4':"0001\n0011\n0101\n1001\n1111\n0001\n0001\n0000\n0000",
'5':"1111\n1000\n1000\n1110\n0001\n0001\n1110\n0000\n0000",
'6':"0110\n1001\n1000\n1110\n1001\n1001\n0110\n0000\n0000",
'7':"1111\n0001\n0010\n0010\n0100\n0100\n1000\n0000\n0000",
'8':"0110\n1001\n1001\n0110\n1001\n1001\n0110\n0000\n0000",
'9':"0110\n1001\n1001\n0111\n0001\n0001\n0001\n0000\n0000",
'0':"0110\n1001\n1011\n1101\n1001\n1001\n0110\n0000\n0000",
' ':"0000000000000000\n0000000000000000\n0000000000000000\n0000000000000000\n0000000000000000\n0000000000000000\n0000000000000000\n0000000000000000\n0000000000000000",
' ': "0000\n0000\n00000\n0000\n0000\n0000\n0000\n0000\n0000",
'!':"0100\n0100\n0100\n0100\n0100\n0000\n0100\n0000\n0000",
'?':"0110\n1001\n0001\n0010\n0100\n0000\n0100\n0000\n0000",
'.':"00\n00\n00\n00\n00\n00\n10\n00\n00",
',':"00\n00\n00\n00\n00\n00\n10\n10\n00",
"'":"10\n10\n00\n00\n00\n00\n00\n00\n00",
'(':"0001\n0010\n0010\n0010\n0010\n0010\n0001\n0000\n0000",
')':"1000\n0100\n0100\n0100\n0100\n0100\n1000\n0000\n0000",
';':"00\n00\n00\n10\n00\n00\n10\n10\n00",
':':"00\n00\n00\n10\n00\n00\n10\n00\n00",
'-':"000\n000\n000\n111\n000\n000\n000\n000\n000",
'"':"101\n101\n000\n000\n000\n000\n000\n000\n000",
'|':"10\n10\n10\n10\n10\n10\n10\n00\n00",
'\\':"100\n100\n010\n010\n010\n001\n001\n000\n000",
'/':"001\n001\n010\n010\n010\n100\n100\n000\n000",
'`':"10\n01\n00\n00\n00\n00\n00\n00\n00",
'_':"000\n000\n000\n000\n000\n000\n111\n000\n000",
'<':"0000\n0010\n0100\n1000\n0100\n0010\n0000\n0000\n0000",
'>':"0000\n0100\n0010\n0001\n0010\n0100\n0000\n0000\n0000",
'=':"0000\n0000\n1111\n0000\n0000\n1111\n0000\n0000\n0000",
'+':"00000\n00100\n00100\n11111\n00100\n00100\n00000\n00000\n00000",
'{':"0001\n0010\n0010\n0100\n0010\n0010\n0001\n0000\n0000",
'}':"1000\n0100\n0100\n0010\n0100\n0100\n1000\n0000\n0000",
'[':"0011\n0010\n0010\n0010\n0010\n0010\n0011\n0000\n0000",
']':"1100\n0100\n0100\n0100\n0100\n0100\n1100\n0000\n0000"
}
#Initializing dicts
letterEncode1D = {}
letterEncode2D = {}
#Turn Map into Array of Lines
for j in letterMap:
letterEncode1D[j] = letterMap[j].split('\n')
#Turn Map into 2D Array of each bit for Drawing
for k in letterEncode1D:
a = [] #creates an array to temporarily store data
a.append(letterEncode1D[k])
for l in range(len(a)):
for m in range(len(a[l])):
letterEncode2D.setdefault(k, [])
letterEncode2D.get(k).append([x for x in a[l][m]])
colour = { #Turning Map Into Colours
1:'black',
2:'black',
3:'red',
4:'orange',
5:'yellow',
6:'green',
7:'blue',
8:'violet',
9:gradient('red', 'orange', 'yellow', 'green', 'blue', 'violet', start='left-top'),
0:3
}
pixels = {} #Create a list of the different pixels to be used
def drawDoc(Text):
for n in range(len(pixels)):
pixels[n+1].fill = 'white'
pixels[n+1].left = pixels[n+1].top = 0
#Split the String into an Array of Each Line
drawLineArray = Text.split('\n')
#Creating a 2D Array of each character in the drawing
drawLetterArray = []
for i in range(len(drawLineArray)):
drawLetterArray.append([x for x in drawLineArray[i]])
#Turning the letters into something drawable.
encodedLetterArray = []
for i in range(len(drawLetterArray)):
encodedLetterArray.append([])
for j in range(len(drawLetterArray[i])):
encodedLetterArray[i].append([x for x in letterEncode2D[drawLetterArray[i][j]]])
################Drawing the Image
#Variables
cy = 10
cx = 10
maxPixels = 0
pixelNo = 0
letterHeight = 18
lastLetterWidth = 8
rainbow = False
r = 255
g = 0
b = 0
rNeg = False
gNeg = False
bNeg = False
if(colour[1] == colour[9]): rainbow = True
for w in range(len(encodedLetterArray)): #By Scentence
for x in range(len(encodedLetterArray[w])): #By Letter
if rainbow == True: #Create letter rainbow effect by adding and subtracting rgb values
colour[1] = rgb(r, g, b)
if b == 255 and g == 0:
if r < 255: r += 15
rNeg = False
elif g == 255 or rNeg == True:
if r > 0: r -= 15
rNeg = True
if r == 255 and b == 0:
if g < 255: g += 15
gNeg = False
elif b == 255 or gNeg == True:
if g > 0: g -= 15
gNeg = True
if g == 255 and r == 0:
if b < 255: b += 15
bNeg = False
elif r == 255 or bNeg == True:
if b > 0: b -= 15
bNeg = True
for y in range(len(encodedLetterArray[w][x])): # By Letter Row
for z in range(len(encodedLetterArray[w][x][y])): # By Letter Pixel
encodedLetterArray[w][x][y][z] = int(encodedLetterArray[w][x][y][z]) #turns strings into numbers
if(encodedLetterArray[w][x][y][z] != 0): #if not whitespace, add a pixel
pixelNo += 1
if (pixelNo > len(pixels)): #if images need more pixels than available, add to cap and draw more
maxPixels = pixelNo
pixels[pixelNo] = Rect(0, 0, 2, 2, fill='white')
pixels[pixelNo].left = cx # Set positions and colour of pixels
pixels[pixelNo].top = cy
pixels[pixelNo].fill = colour[encodedLetterArray[w][x][y][z]]
lastLetterWidth = len(encodedLetterArray[w][x][y]) * 2 # find the width of the last letter
cx += 2 #shift over a pixel
cy += 2 #shift down a row
cx -= lastLetterWidth
cy -= letterHeight #shift to next letter
cx += lastLetterWidth + 2
cy += letterHeight + 2 # shift to next line
cx = 10
if rainbow == True: colour[1] = colour[9]
#Creating the actual 'buttons' for colour and text changing
changeColour = Rect(375, 375, 25, 25, fill=colour[1])
colourL = Label('Colour', 350, 385, fill=colour[1])
changeText = Circle(15, 385, 20, fill='black')
Label('Next', 50, 385)
drawDoc(Text01)
textNumber = {
1:2
}
def onMousePress(mx, my): #Implementing the onClickEvent for the two changers
if((mx - changeText.centerX) ** 2 + (my - changeText.centerY) ** 2 <= 20 ** 2): #onClickEvnet of circle
drawDoc(eval('Text' + str(0) + str(textNumber[1])))
if (textNumber[1] >= 6):
textNumber[1] = 1
else:
textNumber[1] += 1
elif(mx > 375 and my > 375): #onClickEvent of Square
colour[1] = colour[colour[0]]
if colour[0] >= 9:
colour[0] = 2
else:
colour[0] += 1
changeColour.fill = colour[1]
colourL.fill = colour[1]
drawDoc(eval('Text' + str(0) + str(textNumber[1]-1)))
else: #General dark mode
if colour[1] == 'black': colour[1] = 'white'
app.background = 'black'
drawDoc(eval('Text' + str(0) + str(textNumber[1] - 1)))
if((colour[1] == colour[6]) and textNumber[1] == 5):
colour[1] = colour[2]
changeColour.fill = colourL.fill = colour[1]
drawDoc("GREEN IS NOT CREATIVE")
def onMouseRelease(mx, my): #Return to normal after dark mode
if app.background == 'black':
colour[1] = colour[colour[0] - 1]
app.background = None
drawDoc(eval('Text' + str(0) + str(textNumber[1] - 1)))
if((colour[1] == colour[6]) and textNumber[1] == 5):
colour[1] = colour[2]
changeColour.fill = colourL.fill = colour[1]
drawDoc("GREEN IS NOT CREATIVE")