-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathREADME.html
462 lines (460 loc) · 24.3 KB
/
README.html
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
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<title>CMPT276-Chip8-Group4</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.css" integrity="sha384-9eLZqc9ds8eNjO3TmqPeYcDj8n+Qfa4nuSiGYa6DjLNcv9BtN69ZIulL9+8CqC9Y" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/Microsoft/vscode/extensions/markdown-language-features/media/markdown.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/Microsoft/vscode/extensions/markdown-language-features/media/highlight.css">
<link href="https://cdn.jsdelivr.net/npm/katex-copytex@latest/dist/katex-copytex.min.css" rel="stylesheet" type="text/css">
<style>
.task-list-item { list-style-type: none; } .task-list-item-checkbox { margin-left: -20px; vertical-align: middle; }
</style>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe WPC', 'Segoe UI', 'Ubuntu', 'Droid Sans', sans-serif;
font-size: 14px;
line-height: 1.6;
}
</style>
<script src="https://cdn.jsdelivr.net/npm/katex-copytex@latest/dist/katex-copytex.min.js"></script>
</head>
<body>
<h1 id="cmpt276-chip8-group4">CMPT276-Chip8-Group4</h1>
<p>Team 4 Members: Gabriele Dal Cengio, Lina Dang-Nguyen, Nishan Ghimire, Mathieu Laflamme, Harman Singh, Calvin So</p>
<h2 id="release-4"><strong>Release 4</strong></h2>
<h2 id="summary-of-changes-from-previous-release"><strong>Summary of changes from previous release</strong></h2>
<h3 id="what-was-implemented"><strong>What was implemented</strong></h3>
<p><strong>PLANNED FEATURES:</strong></p>
<p>Our games have been completed and fully tested. Snake can be moved around with the w, a, s, d keys and is equipped with collision detection. The snake grows when it eats pellets and dies if it collides into its tail or the wall. Floppy bird can jump using the w key. There are 4 different variations of pipes that will spawn for the bird to go through. The score is incremented on the right side of the screen. The games have been tested by a small group of users and the whole development team. Through these testings, we are confident that our games are ready for the release and definitely playable.</p>
<p><strong>UNPLANNED FEATURES:</strong></p>
<p>Since the games were the only thing left for this release, we have made a series of improvements to the project. The first improvement was the UI. We decided to change up the colours to make it look less like a prototype. Pink was chosen as our main colour due to its inviting nature and uniqueness. The font was also changed to meet the overall aesthetic.</p>
<p>The next thing that was improved was the assembler. We decided to add an interface to it so that users can easily use it. One of the problems we had with our previous assembler was that no one wanted to read the documentation and as a result, they had difficulty using it. So we converted the java into javascript and created a web interface that allowed game development to be done at ease.</p>
<p>The emulator and visualizer have also been improved. We discovered in testing that the log slowed down the system quite a bit. As a result, we have created a toggle button which allows users to play the games with decreased lag. We wanted to keep the log still because it was great for debugging.</p>
<h3 id="list-of-all-system-changes"><strong>List of all system changes:</strong></h3>
<ul>
<li>UI: Changed UI colour scheme to pink</li>
<li>Emulator: Increased speed due to log toggle</li>
<li>Visualizer: Added a log toggle</li>
<li>Snake: Completed game</li>
<li>Flappy Bird: Completed game</li>
<li>Assembler: Created an html webpage for the interface</li>
</ul>
<h2 id="readme"><strong>README</strong></h2>
<h3 id="readme-emulator"><strong>README Emulator</strong></h3>
<p>The development of the Emulator has been fully completed in terms on functionality.</p>
<p>To run the emulator, follow these instructions:</p>
<ol>
<li>Open index.html in google chrome</li>
<li>Click on “choose file” under file input</li>
<li>Navigate to the rom folder and open the maze.txt example file</li>
<li>Dismiss the alert and press the start emulation button</li>
</ol>
<h3 id="readme-run-emulator-tests"><strong>README Run Emulator Tests</strong></h3>
<ol>
<li>Open index.html in google chrome</li>
<li>Click run tests</li>
<li>Output of the tests will show in the log</li>
</ol>
<h3 id="readme-visualizer-step-controls"><strong>README Visualizer Step Controls</strong></h3>
<p>The visualizer has pause functionality, resume functionality and step forward functionality.</p>
<p>To use the step controls, follow these instructions:</p>
<ol>
<li>While the emulator is running, click on the pause icon (two vertical bars)</li>
<li>While the emulator is in the pause state, you may either press the resume icon (arrow to the right),the step forward icon (the "+1" icon) or the step backwards icon (the "-1" icon)</li>
</ol>
<h3 id="readme-assembler"><strong>README Assembler</strong></h3>
<p>The assembler follows instructions from the following reference: <a href="http://devernay.free.fr/hacks/chip8/C8TECH10.HTM#memmap">http://devernay.free.fr/hacks/chip8/C8TECH10.HTM#memmap</a>. The assembler transforms assembly language instructions into chip8 supported opcodes. For example it will take SE V3 VA and output 53A0. Because we have created our own assembler, the assembly language used has been slightly modified from the reference noted above.</p>
<h3 id="how-to-run-it">How to run it:</h3>
<p>Getting to the assembler:</p>
<ol>
<li>Open up the emulator.</li>
<li>At the bottom right corner, there will be a button that says <strong>open in new tab</strong>. Click it to be redirected to the assembler</li>
</ol>
<p>Converting using assembler:</p>
<ol>
<li>In the section that says convert file, make sure the drop down menu is on the assembler.</li>
<li>Click choose file</li>
<li>Choose the assemblerSampleProgram.txt, which is located in the assembler folder</li>
<li>Click convert file and a copy of the file will be downloaded into your computer</li>
</ol>
<p>Converting using the disassembler:</p>
<ol>
<li>In the section that says convert file, make sure the drop down menu is on the disassembler.</li>
<li>Click choose file</li>
<li>Choose the disassemblerSampleProgram.txt, which is located in the assembler folder</li>
<li>Click convert file and a copy of the file will be downloaded into your computer</li>
</ol>
<p>Using the text box on the webpage:</p>
<ol>
<li>Make sure you are in the assembler setting</li>
<li>Click any of the buttons located in the mnemonics section</li>
<li>If they have any variables like: x, y, nibble, addr, byte, Vx, Vy make sure to change it to a correct value. More instructions on this can be found in the manual button located on the top right of the screen.</li>
</ol>
<h3 id="readme-snake"><strong>README Snake</strong></h3>
<p>We have refered to this document: <a href="https://github.com/vinheim3/CHIP-8/tree/master/Snake">https://github.com/vinheim3/CHIP-8/tree/master/Snake</a> during our development of the game</p>
<p>To load snake into the emulator follow these steps:</p>
<ol>
<li>Go to the web browser by clicking the index.html</li>
<li>Click the drop down menu that says choose game</li>
<li>Choose Snake</li>
<li>Click start emulation</li>
<li>You can move around using w,a,s,d keys and eat the pellets that have been dropped.</li>
</ol>
<h3 id="readme-flappy-bird"><strong>README Flappy Bird</strong></h3>
<p>To load Flappy Bird into the emulator follow these steps:</p>
<ol>
<li>Go to the web browser by clicking the index.html</li>
<li>Click the drop down menu that says choose game</li>
<li>Choose Flappy Bird</li>
<li>Click start emulation</li>
<li>You can move around using w,a,s,d keys and eat the pellets that have been dropped.</li>
</ol>
<h2 id="emulator-bugs"><strong>Emulator Bugs</strong></h2>
<p>All bugs have been fixed in release 3.</p>
<hr>
<h2 id="introduction"><strong>Introduction</strong></h2>
<p>Chip-8 is an interpreter, which was developed in the 70s to run programs such as games like Pong, Tetris, and Pac-Man.</p>
<p>The goal of this project is to develop an interpreter like the original Chip-8 and two games to play with it. Our first game will be snake, which is more of a classic game. Whereas, our second game will be more of a newer, contempory game with retro aspects. This game will be a recreation of the hit game Flappy Bird. In order to simplify the development of these games, we will create an assembler and visualizer to help create and debug the game.</p>
<h3 id="planned-use-cases"><strong>Planned Use Cases</strong></h3>
<h4 id="release-1-runnable-emulator-completed">Release 1: Runnable Emulator [COMPLETED]</h4>
<ul class="contains-task-list">
<li class="task-list-item"><input class="task-list-item-checkbox" checked="" disabled="" type="checkbox"> Have memory, register and intial opcodes set up</li>
<li class="task-list-item"><input class="task-list-item-checkbox" checked="" disabled="" type="checkbox"> Output graphics</li>
<li class="task-list-item"><input class="task-list-item-checkbox" checked="" disabled="" type="checkbox"> Input keyboard commands</li>
<li class="task-list-item"><input class="task-list-item-checkbox" checked="" disabled="" type="checkbox"> External Rom inputs</li>
</ul>
<h4 id="release-2-runnable-visualizer--assembler-completed">Release 2: Runnable Visualizer & Assembler [COMPLETED]</h4>
<ul class="contains-task-list">
<li class="task-list-item"><input class="task-list-item-checkbox" checked="" disabled="" type="checkbox"> Display log for registers, memory, pc, index, sound timer, delay timer, stack</li>
<li class="task-list-item"><input class="task-list-item-checkbox" disabled="" type="checkbox"> <s>Provide interface feedback for users by showing keyboard presses (REMOVED FEATURE)</s></li>
<li class="task-list-item"><input class="task-list-item-checkbox" checked="" disabled="" type="checkbox"> Allow user control by creating buttons to step through, go back and pause the program</li>
<li class="task-list-item"><input class="task-list-item-checkbox" checked="" disabled="" type="checkbox"> Assembler can change mnemonics to opcodes, which can be ran in the emulator</li>
<li class="task-list-item"><input class="task-list-item-checkbox" checked="" disabled="" type="checkbox"> Emulator and Visualizer will be fully functional on Google Chrome</li>
</ul>
<h4 id="release-3-completed-visualizer-completed">Release 3: Completed Visualizer [COMPLETED]</h4>
<ul class="contains-task-list">
<li class="task-list-item"><input class="task-list-item-checkbox" disabled="" type="checkbox"> <s>Provide interface feedback for users by showing keyboard presses (REMOVED FEATURE)</s></li>
<li class="task-list-item"><input class="task-list-item-checkbox" checked="" disabled="" type="checkbox"> Allow user to step back one step</li>
</ul>
<h4 id="release-4-completed-snake-game-completed-flappy-bird-game-gui-assembler-completed">Release 4: Completed Snake Game, Completed Flappy Bird Game, GUI Assembler [COMPLETED]</h4>
<ul class="contains-task-list">
<li class="task-list-item"><input class="task-list-item-checkbox" checked="" disabled="" type="checkbox"> Have snake game polished and playable (unfinished from release 2)</li>
<li class="task-list-item"><input class="task-list-item-checkbox" checked="" disabled="" type="checkbox"> Have flappy bird game polished and playable</li>
<li class="task-list-item"><input class="task-list-item-checkbox" checked="" disabled="" type="checkbox"> Have an assembler interface that is easy to use and required less documentation reading.</li>
</ul>
<h2 id="table-of-contents"><strong>Table of Contents</strong></h2>
<ul>
<li>
<p><a href="#Project-Organization">Project Organization</a></p>
<ul>
<li><a href="#Details-of-our-software-methodology">Details of our software methodology</a></li>
<li><a href="#Our-Roles">Our Roles</a></li>
</ul>
</li>
<li>
<p><a href="#Monitoring-and-Reporting-Mechanisms">Monitoring and Reporting Mechanisms</a></p>
<ul>
<li><a href="#Meeting-Schedule">Meeting Schedule</a></li>
<li><a href="#Communication-and-Software-Repository">Communication and Software Repository</a></li>
</ul>
</li>
<li>
<p><a href="#Hardware-and-Software-Requirements">Hardware and Software Requirements</a></p>
<ul>
<li><a href="#Testing-Methods">Testing Methods</a></li>
<li><a href="#Main-Language-and-Libraries">Main Language and Libraries </a></li>
</ul>
</li>
<li>
<p><a href="#Work-Breakdown-and-Project-Schedule">Work Breakdown and Project Schedule</a></p>
<ul>
<li><a href="#Timeline">Timeline</a></li>
<li><a href="#Work-breakdown">Work breakdown</a></li>
</ul>
</li>
<li>
<p><a href="#References">References</a></p>
</li>
<li>
<p><a href="#Post-Mortem">Post Mortem</a></p>
</li>
</ul>
<h2 id="project-organization"><strong>Project Organization</strong></h2>
<h3 id="details-of-our-software-methodology">Details of Our Software Methodology</h3>
<p>For our use, <em>incremental development</em> is the most efficient and effective methodology as we will be testing for each release and making sure it is able to submit by each release. It also allows for improvements on the features, which means we can get feedback and make any necessary changes if time permits.</p>
<h3 id="our-roles">Our Roles</h3>
<p>Gabe: Project Manager/UI</p>
<p>Calvin: Tester</p>
<p>Mathieu: Developer</p>
<p>Harman: Developer</p>
<p>Nishan: Tester</p>
<p>Lina: Developer</p>
<h2 id="monitoring-and-reporting-mechanisms"><strong>Monitoring and Reporting Mechanisms</strong></h2>
<h3 id="meeting-schedule">Meeting Schedule</h3>
<p>We have decided to meet every week on <em>Monday</em> at <em>3:30</em> o'clock in a meeting room that we can find.</p>
<h3 id="communication-and-software-repository">Communication and Software Repository</h3>
<p>We will be communicating via <em>Slack</em> at least once a day and use <em>Trello</em> to track our development progress and status.</p>
<p>We will be working in a <em>GitHub</em> repo.</p>
<h2 id="hardware-and-software-requirements"><strong>Hardware and Software Requirements</strong></h2>
<h3 id="testing-methods">Testing Methods</h3>
<p>Automatized tests will be written in Javascript and ran on Chrome to see if there are any runtime errors.</p>
<p>We will be engaging in three types of testing to ensure the validation of our program. These three types are:</p>
<ul>
<li>
<p><em>Unit Testing</em> - each feature will be tested individually by the programmer in charge of the feature. This will be done while the programmer is developing the feature by writing automated tests using the Jest framework</p>
</li>
<li>
<p><em>Integration Testing</em> - where the features for one major component of the program are combined and automated tests are written for that component. This will be done by the member who has been assigned the role of tester and will commence when all the features for a component have been completed.</p>
</li>
<li>
<p><em>System Testing</em> - where all the components of the program are combined into one program and tested. This will be done by the member who has been assigned the role of tester and will commence once the visualizer and emulator has been completed as these two parts go together.</p>
</li>
</ul>
<h3 id="main-language-and-libraries">Main language and libraries</h3>
<p>We will be using <em>Javascript</em> in order to render the virtual machine. To debug our code, we will be using the <em>Chrome Browser Development Tools</em>.</p>
<h2 id="work-breakdown-and-project-schedule"><strong>Work Breakdown and Project Schedule</strong></h2>
<h3 id="timeline-updated">Timeline [UPDATED]</h3>
<p><img src="https://cdn.discordapp.com/attachments/513589409661059082/555562961561845770/Gaant.png" alt="Image of First Gantt Timeline"></p>
<h3 id="work-breakdown">Work Breakdown</h3>
<h3 id="release-1-feb-6-2019"><strong>Release 1: Feb 6 2019</strong></h3>
<p>Deliverables for Release 1:</p>
<ul>
<li>Emulator: Finish development and testing by Feb 3</li>
</ul>
<p>Work Breakdown: <strong>Emulator</strong></p>
<table>
<thead>
<tr>
<th>Feature</th>
<th>Estimated Time Required</th>
<th>Finish Date</th>
</tr>
</thead>
<tbody>
<tr>
<td>Web Interface</td>
<td>1 day</td>
<td>Jan 20</td>
</tr>
<tr>
<td>Memory, Registers</td>
<td>1 week</td>
<td>Jan 21</td>
</tr>
<tr>
<td>Initialize Instructions</td>
<td>1 week</td>
<td>Jan 21</td>
</tr>
<tr>
<td>Graphics Output</td>
<td>3 days</td>
<td>Jan 24</td>
</tr>
<tr>
<td>Keyboard Input</td>
<td>3 days</td>
<td>Jan 24</td>
</tr>
<tr>
<td>Sound Output</td>
<td>2 days</td>
<td>Jan 27</td>
</tr>
<tr>
<td>External Rom Input</td>
<td>1 week</td>
<td>Jan 31</td>
</tr>
<tr>
<td>Integrated Testing</td>
<td>3 days</td>
<td>Feb 3</td>
</tr>
</tbody>
</table>
<h3 id="release-2-feb-27-2019"><strong>Release 2: Feb 27 2019</strong></h3>
<p>Deliverables for Release 2:</p>
<ul>
<li>Visualizer: Finish development and testing by Feb 20</li>
<li>Assembler (Chip 8 tool): Finish development and testing by Feb 20</li>
</ul>
<p>Work Breakdown: <strong>Visualizer</strong></p>
<table>
<thead>
<tr>
<th>Feature</th>
<th>Estimated Time Required</th>
<th>Finish Date</th>
</tr>
</thead>
<tbody>
<tr>
<td>Display memory during execution</td>
<td>2 days</td>
<td>Feb 9</td>
</tr>
<tr>
<td>Display registers during execution</td>
<td>2 days</td>
<td>Feb 9</td>
</tr>
<tr>
<td>Display instructions during execution</td>
<td>2 days</td>
<td>Feb 9</td>
</tr>
<tr>
<td>Display key press during execution</td>
<td>1 day</td>
<td>Feb 10</td>
</tr>
<tr>
<td>Pause program</td>
<td>1 day</td>
<td>Feb 10</td>
</tr>
<tr>
<td>Play program</td>
<td>1 day</td>
<td>Feb 10</td>
</tr>
<tr>
<td>Step-forward one instruction</td>
<td>2 days</td>
<td>Feb 14</td>
</tr>
<tr>
<td>Step-backwards one instruction</td>
<td>3 days</td>
<td>Feb 20</td>
</tr>
<tr>
<td>Finish debugging the Emulator</td>
<td>2 weeks</td>
<td>Feb 20</td>
</tr>
<tr>
<td>Testing</td>
<td>3 days</td>
<td>Feb 23</td>
</tr>
</tbody>
</table>
<p>Work Breakdown: <strong>Assembler</strong></p>
<table>
<thead>
<tr>
<th>Feature</th>
<th>Estimated Time Required</th>
<th>Finish Date</th>
</tr>
</thead>
<tbody>
<tr>
<td>Assembler</td>
<td>2 weeks</td>
<td>Feb 20</td>
</tr>
<tr>
<td>Testing</td>
<td>4 days</td>
<td>Feb 23</td>
</tr>
</tbody>
</table>
<h3 id="release-3-march-13-2019"><strong>Release 3: March 13 2019</strong></h3>
<p>Deliverables for Release 3:</p>
<ul>
<li>Snake (Game 1): Finish development and testing by Mar 9</li>
<li>Step backwards for Visualizer: Finish by Mar 4</li>
</ul>
<p>Work Breakdown: <strong>Snake</strong></p>
<table>
<thead>
<tr>
<th>Feature</th>
<th>Estimated Time Required</th>
<th>Finish Date</th>
</tr>
</thead>
<tbody>
<tr>
<td>Display key press during execution</td>
<td>3 day</td>
<td>Feb 10</td>
</tr>
<tr>
<td>Step-backwards one instruction</td>
<td>6 days</td>
<td>Mar 4</td>
</tr>
<tr>
<td>Snake <strong>(DELAYED)</strong></td>
<td>2 weeks</td>
<td>Mar 7</td>
</tr>
<tr>
<td>Testing</td>
<td>3 days</td>
<td>Mar 9</td>
</tr>
</tbody>
</table>
<h3 id="release-4-april-8-2019"><strong>Release 4: April 8 2019</strong></h3>
<p>Deliverables for Release 4:</p>
<ul>
<li>Flappy Bird: Finish development and testing by April 3</li>
<li>Snake: Finish development and testing by April 3</li>
<li>GUI Assembler: Finish development and testing by April 3</li>
</ul>
<p>Work Breakdown: <strong>Flappy Bird</strong></p>
<table>
<thead>
<tr>
<th>Feature</th>
<th>Estimated Time Required</th>
<th>Finish Date</th>
</tr>
</thead>
<tbody>
<tr>
<td>Flappy Bird</td>
<td>2 weeks</td>
<td>April 3</td>
</tr>
<tr>
<td>Snake <strong>(DELAYED)</strong></td>
<td>2 weeks</td>
<td>April 3</td>
</tr>
<tr>
<td>GUI Assembler</td>
<td>2 weeks</td>
<td>April 3</td>
</tr>
</tbody>
</table>
<h2 id="references"><strong>References</strong></h2>
<p>Chip 8 information and history: <a href="https://en.wikipedia.org/wiki/CHIP-8">https://en.wikipedia.org/wiki/CHIP-8</a></p>
<p>Cowgod's Chip 8 Technical Reference: <a href="http://devernay.free.fr/hacks/chip8/C8TECH10.HTM">http://devernay.free.fr/hacks/chip8/C8TECH10.HTM</a></p>
<h1 id="post-mortem">Post-Mortem</h1>
<p>This will be our final release. There will be no more added features or optimizations since the completed product is sufficient for our use case. This is evident in the user testing that we have conducted. Users were able to use the emulator at ease and were moderately satisfied. The only lacking aspect of our project that was expressed by the test users was the speed of the emulator.</p>
<p>Overall our project was successful and our team dynamic was satisfactory.</p>
<h3 id="what-worked"><strong>What Worked?</strong></h3>
<p>Our success was due to our detailed breakdown of what needed to be completed. This gave us a strong direction on how to proceed in the following weeks and allowed us to stay relatively on schedule. We did not do this for snake and ended up not being able to finish it for release 3. Using this breakdown, we used trello to organize and set reminders as to when things needed to be completed. Then every meeting we would refer to this and adjust it depending on the current status of the project.</p>
<h3 id="what-didnt-work"><strong>What Didn’t Work?</strong></h3>
<p>Although our project was quite smooth, the only thing that didn't work was the definite roles that we set in the beginning. We did not really follow it because when we were struggling, we would help each other and therefore, some people would take on small aspects of each others roles.</p>
<h3 id="improvements"><strong>Improvements</strong></h3>
<p>Now that we have all completed a project, there are a few improvements that we would like to make. The first one would be better automatized testing. Since we decided to not use Jest because of the learning curve, our automatized testing was done through our html file using if/else statements. Even though what we currently have is sufficient, using a testing framework would have allowed our automatized testing to be conducted in a more convenient way. Also, now that we all have web development experience, we definitely would have like to create a much more efficient emulator that would work at a faster rate.</p>
<h3 id="biggest-unexpected-challenge"><strong>Biggest Unexpected Challenge</strong></h3>
<p>Communication was definitely a challenge at first. The project manager would have to constantly ask for the status of everyone’s part. Once things got into the flow and the expectation has been established, our communication did improve. Therefore, setting the expectation early on in the project would be good so that there is time to talk to any members who are having trouble meeting this.</p>
<h3 id="was-all-the-testing-worth-it"><strong>Was all the testing worth it</strong></h3>
<p>Yes, all of the testing we that we’ve conducted was definitely worth it. The automatized unit testing allowed us to be fully confident in our program and that it is functional. There were many bugs that would have not been found without testing such as the backwards step causing the whole browser to fail and the sprite bug that drew pixels in wrong locations.</p>
<p>Then our user testing allowed us to make the user interface a product that users would actually use. We were able to use their input to make their experience better. One of the ways we were able to incorporate their valued opinions was through the colour scheme. Originally we were going to keep it with the grey but users mentioned that the design was too plain. Hence why we changed it up after release 3.</p>
<h3 id="what-advice-would-you-give-to-the-next-students-who-take-276"><strong>What advice would you give to the next students who take 276?</strong></h3>
<p>Through our learnings, we recommend that for future students, every team member works on the development of the emulator together. The development of the emulator allows the programmer to truly know how the system works, which applies to game and tool development. The emulator was definitely one of the most important parts of the project so having a high bus factor on it would be beneficial as well.</p>
<p>To ensure productivity we also recommend that specific goals are set after each meeting so that everyone has something to bring to the table for the next meeting. This also allows people to budget their time accordingly to their schedule and ensures things are completed on schedule. If someone is not able to complete their portion, communicate with them and see why they are struggling. It is important to have a strong team dynamic when working in a project.</p>
</body>
</html>