This page focuses on my projects based around technology such as programming or robotics projects.
I made this website. I wrote the code for the website in Notepad++ and it uses a mix of technologies including web languages and frameworks.
Technologies included in the creation of this website include:
import time import anki_vector from anki_vector.util import degrees from anki_vector.behavior import MIN_HEAD_ANGLE, MAX_HEAD_ANGLE #starts at 06:29:02 def main(): args=anki_vector.util.parse_command_args() with anki_vector.Robot ("009064bf") as robot: print("Say 'Line 10 VVO1'...") time.sleep(20) robot.behavior.set_head_angle(degrees(3.0)) robot.anim.play_animation('anim_eyepose_determined') robot.say_text("Well I go to the objective") robot.anim.play_animation('anim_eyepose_frustrated') robot.say_text("Again") time.sleep(0.5) robot.say_text("I fly up here instead this time") robot.anim.play_animation('anim_eyepose_happy') robot.say_text("I killed the monkey") robot.say_text("Dropping down") robot.anim.play_animation('anim_eyepose_scared') robot.say_text("Flying away") time.sleep(6) robot.say_text("I've lost lots of health") time.sleep(1.5) robot.say_text("I'm out") robot.anim.play_animation('anim_eyepose_determined') robot.say_text("That doesn't stop me fighting though") time.sleep(7) robot.say_text("Monkey!") robot.say_text("Dammit I'm dead") robot.anim.play_animation('anim_rtpickup_loop_10') time.sleep(1) robot.anim.play_animation('anim_eyepose_determined') time.sleep(20) if __name__ == "__main__": main()
I tried to make a 2D shooter on HTML canvas for my studies. I never quite got that finished, but completed enough and showed enough competency to meet the requirements for the course it was part of.
I got enemies spawning randomly and made my character able to shoot, but where I last stopped was in a situation where I was having difficulty getting the enemies ammo to line up correctly. It couldn't come out of just their coordinates or they would be shooting out of their stomach or somewhere similar rather than out of the gun in their hand. However I found I could not get the program to work out where it should come from, and I tried to do it using the coordinates of each enemy +/- whatever it took to get it lined up but I kept getting NaN errors. I didn't have collisions set up at this point either, but I did have the enemies randomly spawning, spawning where they could fit rather than a small part spawning on the edges of the canvas and staying within the canvas instead of just moving off of it and disappearing. I don't know if I would solve it now if I were to look back at it now, but I simply tried to fit too much into the time period I had, but easily met the requirements for the assessment with what I did get done.
The map for my canvas game was made using an array. I made tiles for the map using GIMP and in the code to draw the map I used if statements to essentially assign a number to each tile and say "If the number is 4, draw this tile" for example. You can see this code here:
//SET TILES STARTING POSITION var Xpos=0; var Ypos=0; //DRAW TILES for (var i=0; i < mapArray.length; i++) { for (var j=0; j < mapArray.length; j++) { if (mapArray[i][j]==1) { ctx.drawImage(grasstileone, Xpos, Ypos, 20, 20); } if (mapArray[i][j] ==2) { ctx.drawImage(grasstiletwo, Xpos, Ypos, 20, 20); } if (mapArray[i][j] ==3) { ctx.drawImage(grasstilethree, Xpos, Ypos, 20, 20); } if (mapArray[i][j] ==4) { ctx.drawImage(grasstilefour, Xpos, Ypos, 20, 20); } if (mapArray[i][j]==5) { ctx.drawImage(dirtone, Xpos, Ypos, 20, 20); } if (mapArray[i][j]==6) { ctx.drawImage(dirttwo, Xpos, Ypos, 20,20); } if (mapArray[i][j]==7) { ctx.drawImage(dirtthree, Xpos, Ypos, 20,20); } if (mapArray[i][j]==8) { ctx.drawImage(dirtfour, Xpos,Ypos, 20,20); } if (mapArray[i][j]==9) { ctx.drawImage(dirtfive, Xpos, Ypos, 20,20); } if (mapArray[i][j]==10) { ctx.drawImage(dirtsix, Xpos, Ypos, 20,20); } if (mapArray[i][j]==11) { ctx.drawImage(dirtseven, Xpos, Ypos, 20,20); } if (mapArray[i][j]==12) { ctx.drawImage(grassanddirtbr, Xpos, Ypos, 20,20); } if (mapArray[i][j]==13) { ctx.drawImage(grassanddirttr, Xpos, Ypos, 20,20); } if (mapArray[i][j]==14) { ctx.drawImage(grassanddirtbl, Xpos, Ypos, 20,20); } if (mapArray[i][j]==15) { ctx.drawImage(grassanddirttl,Xpos,Ypos, 20,20); } Xpos+=20; } Xpos=0; Ypos+=20; }I had an array with the numbers in it, based on where I wanted each type of tile (grass, dirt, mixed). You can see the array code here:
//make array to make game map var mapArray=[ [1,2,3,1,4,1,4,3,4,2,2,1,3,4,2,1,2,4,3,2,1,4,2,3,4,2,4,3,2,13,6,7,11,5,9,10,11,9,8,7,5,11,10,6,9,5,11,6,9,8,5,6,8,5,10,6,8,11,10,11,5,7,6,9,10,6,8,5,11,8,9,10,5,7], [3,4,2,1,2,4,4,2,1,2,3,4,2,1,3,3,4,2,1,3,4,4,3,1,2,1,3,4,2,1,5,8,9,7,6,11,10,8,7,6,8,9,10,11,5,9,8,9,11,8,11,7,8,5,11,7,10,8,10,8,9,5,11,6,8,10,11,6,7,5,9,11,5,8,6], [4,2,3,4,3,2,4,1,2,3,2,4,1,2,3,1,3,4,2,4,2,4,3,2,1,1,2,4,3,4,9,10,8,6,9,11,5,6,7,8,9,10,11,10,8,6,7,5,9,10,11,8,9,7,9,6,5,8,10,11,5,6,8,9,7,5,9,8,11,10,6,9,5,11,6,], [2,1,4,1,3,4,2,4,2,3,4,1,2,3,4,2,4,1,3,3,2,1,2,4,3,4,1,2,4,3,11,5,6,7,9,10,11,9,11,6,8,9,10,9,8,6,5,10,9,6,11,7,9,8,5,11,10,9,6,5,8,6,9,10,11,11,8,10,9,6,6,7,8,11,10], [3,4,2,2,1,2,4,3,2,1,4,1,2,1,3,4,2,1,2,3,4,2,1,3,1,2,4,2,4,12,5,8,9,11,10,7,6,8,5,9,11,8,7,6,10,11,7,8,9,10,11,5,6,5,7,9,10,7,6,9,5,11,10,9,7,6,5,9,10,11,8,9,6,9,11,7], [1,2,4,3,2,4,1,3,4,3,2,1,4,4,3,2,1,4,2,1,3,4,2,3,6,8,9,11,9,11,8,6,7,5,9,8,5,11,10,9,7,6,8,9,10,11,5,8,9,5,6,7,10,11,8,9,7,6,9,11,5,9,10,9,8,6,7,6,5,9,7,6,9,5,6,11,10], [4,2,4,3,1,2,4,3,2,1,4,3,1,2,3,1,4,2,1,3,4,1,3,2,8,10,9,7,6,9,11,10,5,8,11,7,6,8,9,10,11,8,7,6,5,9,11,10,9,6,11,5,7,9,10,11,5,6,7,8,9,10,11,5,8,9,10,8,6,7,11,5,6,10,8], [1,2,4,3,1,4,2,4,3,2,1,4,3,4,2,4,1,3,1,4,1,2,3,4,5,6,8,5,9,8,6,7,9,5,11,10,5,9,8,5,6,11,10,9,5,7,6,8,5,6,8,11,10,9,8,7,6,11,5,8,11,6,9,10,8,9,5,6,7,6,10,5,8,6,9,11,10,8,9,7,6,5], [2,4,2,1,3,2,1,4,2,3,1,4,2,4,2,1,3,4,2,4,3,1,2,3,7,8,9,11,10,6,5,8,11,10,8,9,5,7,6,5,6,8,9,6,6,5,9,11,5,8,11,9,6,7,5,9,6,7,8,11,10,6,5,8,9,11,6,8,11,5,6,9,6,11,10,8], [1,4,2,3,4,2,1,3,4,2,1,1,2,3,4,2,1,3,4,2,1,2,4,2,9,7,6,9,6,7,10,8,6,9,5,6,10,9,8,6,7,11,10,9,8,7,6,5,8,10,9,7,6,11,5,8,10,6,10,9,7,6,5,9,11,10,8,6,5,10,11,10,6,8,9,11,5,6,8,10], [2,1,3,4,1,4,2,3,1,3,4,2,4,1,1,2,3,1,2,2,1,3,4,1,5,8,9,10,6,8,9,10,6,9,7,6,11,10,9,5,6,7,8,7,9,10,8,9,6,7,6,5,11,8,10,9,7,9,11,10,9,6,5,9,7,7,9,8,6,10,9,11,5,10,6,7,7,9,8], [1,4,2,3,2,4,1,4,2,4,2,4,3,2,1,2,4,2,4,3,2,4,1,3,9,7,6,5,10,9,8,6,11,10,6,5,8,9,7,11,9,7,8,11,6,9,11,10,9,10,8,6,8,9,5,9,11,7,9,8,6,9,9,5,11,7,9,8,11,10,8,5,6,8,9,11,10,6,7,9,6,5,11,10,9,8,7,6,5], [2,4,3,4,1,2,4,3,1,2,1,2,3,4,2,4,2,1,3,2,1,3,4,1,6,8,10,9,6,5,11,8,9,11,9,7,11,10,9,5,8,11,9,7,10,11,8,7,6,5,8,5,9,10,11,6,8,9,7,11,8,6,7,9,8,11,10,8,9,8,7], [3,2,1,3,4,1,2,4,3,1,2,1,2,3,4,2,1,3,2,4,2,4,2,3,9,8,6,9,7,11,5,9,6,8,11,10,9,7,6,6,8,11,9,8,6,5,9,11,7,8,9,11,6,7,6,9,9,10,6,5,7,9,8,10,11,10,8,9,6,10,9,11], [2,1,3,1,2,4,4,3,2,2,1,4,3,4,2,4,3,2,1,3,1,4,2,4,10,9,6,5,8,6,9,11,9,11,8,11,9,6,10,6,8,7,6,8,10,6,8,9,7,9,8,6,10,11,5,6,8,9,8,7,6,8,6,7,5,9,8,10,8,5,9,6,5], [1,2,3,4,3,1,2,4,3,1,2,3,4,2,3,1,4,1,3,4,2,3,1,3,8,9,10,9,5,11,9,8,6,7,9,6,7,11,5,6,7,6,5,8,11,5,9,7,10,9,8,6,10,6,9,8,11,9,7,8,11,10,9,6,8,9,11,7,11,8,5,11], [4,3,2,1,4,2,4,3,4,2,4,3,4,3,4,2,1,3,4,3,1,2,4,2,6,9,11,8,10,8,6,10,8,6,9,7,11,6,8,9,11,7,9,7,11,9,11,8,10,9,6,8,5,9,8,5,11,9,8,7,8,5,6,9,7,5,7,9,11,10,9,8], [2,1,3,4,2,3,2,3,2,1,3,4,2,4,3,4,2,1,3,4,2,4,2,1,11,6,5,7,9,8,11,10,6,5,7,6,9,11,8,6,5,9,8,5,6,9,11,10,8,7,6,8,9,10,9,11,8,7,6,8,11,9,8,5,8,9,7,8,5,9,11,10], [1,2,4,3,2,1,4,4,2,3,4,1,3,2,4,1,3,2,4,2,3,2,4,1,2,1,3,1,2,13,8,9,11,10,6,8,9,11,7,6,5,9,8,5,11,10,8,9,11,9,8,7,8,11,5,11,9,8,9,10,11,9,8,6,7,5,11,9,6,5,8], [2,3,1,2,4,3,2,1,3,1,2,3,4,3,2,1,2,1,3,1,3,2,1,2,3,4,3,2,4,2,11,8,7,6,5,11,9,8,6,5,11,7,6,5,7,8,9,11,10,8,9,11,8,7,6,5,8,9,8,10,11,9,8,5,11,8,6,9,7,6,8,10], [3,2,4,1,2,4,2,3,4,2,3,4,3,4,1,3,2,4,2,3,4,2,1,4,3,2,4,3,1,3,6,6,7,11,8,9,5,8,9,11,8,9,7,8,5,6,7,11,9,8,10,7,6,9,8,11,5,6,11,9,6,8,11,5,8,9,11,10,11,6,5,8], [1,2,3,4,3,2,4,1,3,4,2,1,2,3,4,2,4,1,3,2,4,3,2,4,3,1,2,3,4,1,7,8,9,10,5,6,8,11,6,5,7,9,11,8,9,11,10,6,8,5,9,11,7,8,9,6,5,11,10,9,6,7,9,8,11,5,6,11,9,8,11,7], [2,4,1,3,4,2,3,2,1,3,4,3,4,3,4,1,2,4,3,1,2,4,2,3,4,2,3,4,3,2,9,11,8,7,6,11,10,8,9,7,11,5,6,10,9,8,6,7,6,10,11,9,5,8,11,10,6,7,9,8,7,6,5,11,10,8,7,6,9,10,6], [4,2,3,1,2,4,2,4,3,1,2,4,3,2,1,4,3,2,1,4,2,2,1,2,1,4,3,1,2,1,11,9,5,7,6,8,9,11,10,9,11,7,6,5,8,9,10,11,9,8,6,7,11,5,9,10,8,11,7,9,8,5,11,7,6,10,9,8,7,6,5,11], [4,3,1,2,3,2,1,4,2,4,2,3,1,3,2,4,2,1,3,2,1,4,2,3,4,2,1,4,3,2,8,7,5,6,11,10,9,5,11,8,9,6,7,11,9,8,7,6,9,8,9,11,5,6,11,9,10,9,8,7,6,8,9,11,5,10,5,7,6,8,9,6,10], [2,4,2,3,4,3,4,2,1,4,3,1,2,4,3,1,3,4,3,2,1,2,4,2,1,4,3,2,2,4,9,11,6,10,8,6,7,8,9,10,11,8,5,6,7,6,11,5,10,9,7,8,6,7,11,9,5,6,7,9,8,10,8,9,11,5,8,9,6,5,9,8,9], [1,3,4,2,4,3,4,3,1,3,4,2,4,3,2,4,3,4,3,2,4,3,3,1,3,2,4,1,3,12,6,7,8,6,11,5,9,8,6,10,6,8,9,7,5,9,8,5,11,10,6,7,9,11,8,5,6,7,9,11,10,9,8,7,6,5,10,11,9,5,6,7], [2,4,3,1,2,4,3,1,3,2,4,3,2,4,6,8,9,7,10,8,9,11,5,9,8,7,6,5,10,5,6,7,9,11,5,6,8,10,9,8,6,7,11,5,6,9,5,6,7,9,8,10,9,6,8,7,6,5,11,10,6,9,8,7,6,5,8,9,11,9,8,10], [2,3,4,3,4,2,1,4,2,1,4,3,2,1,8,9,5,11,6,7,9,8,10,9,8,7,6,5,7,6,11,10,8,5,11,9,8,5,7,6,8,9,7,11,8,9,7,11,5,10,6,8,9,10,6,7,9,5,11,5,6,7,10,8,9,5,6,11,6,10,8], [1,2,3,4,3,4,2,4,3,2,1,4,3,2,9,11,10,6,9,11,9,8,5,6,5,7,11,10,9,8,7,6,5,6,7,8,9,10,11,5,6,8,9,7,6,5,7,6,11,10,5,6,7,8,9,10,9,11,6,5,7,11,10,6,9,11,8,9,7,6], [4,1,2,3,4,3,4,2,1,4,3,2,1,3,7,9,8,11,5,6,7,6,9,8,11,10,5,6,7,8,6,7,11,9,8,9,5,6,7,9,8,11,9,5,11,8,9,11,10,6,7,9,8,11,5,11,8,10,6,9,8,7,6,9,7,8,11,9,8,6,5], [2,3,4,2,1,3,2,4,3,1,4,3,2,4,8,9,11,6,7,6,5,8,9,11,9,7,9,8,11,10,6,7,8,9,5,6,7,8,9,11,10,6,9,8,7,6,9,11,9,8,7,6,5,10,9,8,6,5,7,6,5,11,6,7,6,10,6,5,9,8,7,10], [1,3,2,4,2,4,2,3,4,2,4,3,2,1,11,5,6,8,6,9,8,10,9,8,7,6,5,8,9,10,11,9,8,11,6,5,9,8,11,9,8,11,7,9,8,6,11,10,6,8,6,9,8,11,7,6,7,9,8,11,5,7,6,8,9,10,11,6,9,11], [3,2,1,4,2,3,4,3,2,4,3,4,3,2,6,7,8,6,9,5,11,9,8,6,7,9,8,11,9,8,5,11,9,8,5,6,7,9,8,10,6,9,8,9,11,5,9,8,11,5,6,9,7,8,9,11,6,8,6,8,9,10,6,8,9,11,8,11,5,9,8,5], [1,3,2,4,2,3,4,3,2,4,3,2,4,3,5,9,7,6,5,11,10,9,7,6,5,8,9,10,11,7,9,8,9,6,9,11,8,11,5,8,5,9,7,6,8,11,9,7,6,10,11,9,8,7,6,5,9,8,7,5,11,6,11,9,8,6,11,9,8,5,7], [3,2,4,3,1,3,2,3,4,2,1,3,4,3,11,6,9,10,11,5,6,8,9,11,5,9,7,8,9,11,10,9,8,6,7,6,5,9,8,11,10,9,8,7,6,8,9,5,7,11,9,8,6,10,8,9,5,6,9,8,7,11,6,8,11,5,11,8,7,9,11], [1,3,2,4,2,4,3,4,3,2,1,4,2,1,8,9,11,5,6,7,8,9,10,9,8,7,6,5,11,10,9,6,8,5,11,8,9,7,6,8,9,5,9,8,11,10,8,9,10,11,8,9,7,6,8,9,10,11,5,9,6,7,6,9,8,11,10,8,9,11,10], [3,2,1,4,3,1,2,3,4,3,2,4,2,4,11,5,8,9,5,6,7,11,10,9,7,6,5,9,8,9,8,10,11,8,9,5,9,6,8,7,9,11,10,9,8,7,6,5,8,9,7,10,11,8,9,5,6,7,9,10,8,11,7,6,8,9,10,9,8,6,5], [4,3,2,1,2,4,3,4,2,3,4,2,1,4,7,11,5,10,9,8,7,6,5,9,8,5,7,8,6,9,8,11,5,9,8,10,8,9,6,11,10,11,5,9,8,5,8,6,9,5,11,9,8,10,9,8,10,8,7,6,9,7,8,9,11,5,8,9,11,8,9], [3,2,4,2,4,1,3,4,2,1,3,4,3,2,6,11,5,9,8,10,11,9,8,7,6,5,10,9,8,6,5,7,10,9,11,6,8,9,5,11,9,7,9,8,9,6,11,10,9,8,6,6,8,9,5,8,9,7,11,9,8,11,9,10,9,5,8,6,8,9,8], [1,3,2,4,2,4,3,2,1,3,2,1,3,2,9,8,11,7,6,5,11,10,9,8,11,6,8,9,10,6,7,8,9,10,8,9,5,9,8,9,9,11,5,9,8,6,7,6,5,9,8,11,10,9,8,11,7,9,8,11,5,8,6,5,9,8,6,7,11,9,10], [3,2,1,4,3,3,2,1,4,2,3,1,4,3,11,7,6,8,6,9,5,11,5,9,10,11,8,9,10,9,8,7,9,11,5,6,8,9,10,9,8,7,6,5,11,8,9,7,6,8,9,9,11,10,9,7,8,5,6,9,8,11,10,11,9,11,8,7,6,5], [4,3,2,1,3,4,3,2,1,2,3,4,3,2,9,8,7,8,9,11,5,6,8,9,5,6,8,11,7,9,8,7,11,9,5,8,6,11,8,9,10,9,11,5,9,6,8,11,5,9,8,7,5,9,8,7,11,5,8,6,9,8,11,9,8,10,8,9,10,9,11], [1,4,3,2,4,3,4,1,3,4,2,1,4,3,5,11,9,8,7,6,5,8,10,9,7,6,8,10,9,7,6,5,8,9,10,11,9,8,7,8,11,9,8,11,6,5,11,7,9,8,5,8,11,10,6,9,8,7,11,9,8,10,6,9,8,7,6,10,11,5], [3,4,2,4,1,3,4,2,1,4,3,2,1,4,11,8,9,6,7,8,9,10,9,5,11,8,6,7,11,5,8,10,9,8,7,6,5,8,9,10,9,5,11,7,9,8,5,8,6,8,11,5,9,8,6,5,8,9,10,8,5,6,8,9,8,5,11,9,6,8,5,9], ];Both of these parts of the code made up a function called drawMap(). As the array is a variable it was actually listed first in my function followed by the code that translated the numbers into tiles and said "if the tile is 11, draw dirt seven etc".
I entered the fourth SteemitJam. This is a game jam on the platform Steemit. I used Unreal Engine Paper 2D for this. This was a significantly different experience to working on my html game (mentioned above).
I didn't get very far in the SteemitJam as I was going in pretty blind as I had never used Unreal Engine and I had fairly limited game development experience, but I had big ambitions. Despite this, I did benefit from my experience participating in the SteemitJam.
The theme of the SteemitJam was "starting from nothing". While participating in this SteemitJam I thought of a basic idea for a story using my character, Pug Bee(who was also in the HTML game mentioned above). I didn't write any story but just had a basic idea, and then jumped into making visual aspects of the game.
Using Unreal Engine 4 Paper2D and the graphics editor software GIMP, I started working on a tileset and tile map for my SteemitJam game. This was significantly easier than making the tilemap for my HTML game. The HTML game had a coded map using an array, but I didn't have to write code in order to make a tilemap for Paper2D.
I made new tiles for this game rather than recycling the ones from my previous HTML game and I made these using the program GIMP. In doing so, I had to ensure that my tiles were the right size for Paper2D's system and then put the tiles in one document as a tilesheet before importing it, upon which it divided the whole image back up into tiles. Making the map was as simple as setting collisions so my charcater wouldn't fall through the ground, and then painting my tiles I made in GIMP onto a grid made up of previously empty tiles. This was much less time consuming than writing each number out with my HTML game array. It also meant I got immediate feedback on what it looked like as I could see it as I was painting the tiles. Conversely, when making my tilemap for my HTML game I had to write some of the code, and then launch the webpage in Chrome to see what it looked like, then write some more and launch again to see how it looks after I wrote more changes and rinse and repeat. The visual feedback on how the map looked was much more immediate with the Paper2D map.
I then turned to animation and tried to put a character into the game complete with animations. I put the character into Anime Studio Pro 11, a puppet based animation software. This software works by putting "bones" into the 2D art and manipulating them to make the artwork move, similar to 3D rigging for 3D animation, but in 2D.
Here is a video of my character, Pug Bee, performing a walk cycle which was created using Anime Studio Pro 11: