Projects / Programming coursework, Years 1 and 2
Programming coursework, Years 1 and 2
The three console programs are the real ones, recorded step by step. Each input types itself, then Enter shows the next screen. Console text translated into English, program logic unchanged.
LineIt card game
Year 1, C, team of 2
A card game for 2 to 5 players, played in the console. Each player builds a line of cards that goes up or down. The board is drawn with colors, and the 106 cards are stored in a structured type.

Interactive version on a computer.
Ride sharing manager
Year 2, C++, individual project
A console app in the spirit of BlaBlaCar, built on two classes, traveler and trip. It registers travelers on trips, creates, edits and deletes trips and users, and filters trips by price or date.

Interactive version on a computer.
Online shop manager
Year 2, C++, individual project
A shop manager built on a class hierarchy. Person is the base class, customer and employee inherit from it, and manager inherits from employee. Each role gets its own menus. Managers change stock, add products and customers, and check employee scores.

Interactive version on a computer.
Maze solving robot
Year 2, Python, team of 3, LEGO Spike
The robot follows black tape on a white floor. Colored patches mark the maze, blue for an intersection, red for a dead end, yellow for the treasure. It explores depth first. At each intersection it tries right, then straight, then left, and it turns back at dead ends. Each intersection becomes a node, placed by wheel odometry. Once the treasure is found, Dijkstra on the discovered nodes gives the shortest way back.
The robot was only available during lab sessions, so the team tested the code in between with the GearsBot simulator.
def explore(robot, nodes): while not robot.treasure: robot.follow_line() # to the next patch color = robot.sensor.color() if color == RED: # dead end robot.u_turn() robot.last_node.mark(DEAD_END) elif color == BLUE: # intersection intersection(robot, nodes) elif color == YELLOW: # treasure goal = nodes.add(robot.position) link(robot.last_node, goal) robot.treasure = True robot.u_turn() def intersection(robot, nodes): node = nodes.near(robot.position) # odometry if node is None: node = nodes.add(robot.position) node.scan_paths() # lines seen elif robot.on_new_line: # loop closed link(robot.last_node, node) robot.u_turn() return link(robot.last_node, node) # neighbors robot.last_node = node for turn in (RIGHT, STRAIGHT, LEFT): if node.paths[robot.heading + turn] == DETECTED: robot.turn(turn) return robot.turn_toward(node.parent) # backtrack def dijkstra(node): checked.append(node) for neighbor in node.neighbors: d = node.distance + distance(node, neighbor) if neighbor.distance > d: neighbor.distance = d parent[neighbor] = node reached.append(neighbor) nxt = closest(reached, not in checked) if nxt: dijkstra(nxt) def go_home(robot, start, goal): goal.distance = 0 dijkstra(goal) path = trace_path(start) # reversed for node in path[1:]: robot.turn_toward(node) robot.follow_line()