Bar Blunder: Cocktail Creation Simulator
C++, QtCreator, Slots/Signals, Agile, SCRUM, LiquidFun, Box2D
May 1, 2024
CS 3505 - Software Practice II
A unique educational application that teaches precise mixology techniques. The core feature is a real-time pouring mechanic to accurately simulate pouring behavior adhering to professional bartending standards.
This project leverages LiquidFun, an extension of the C++ physics engine Box2D, to simulate realistic liquid behavior in our cocktail simulator. By assigning collision bounds to glassware, we were able to pour particle-based liquid from the center of the screen such that it gracefully lands in a glass. Adjusting parameters such as density, gravity, mass, and position allowed us to replicate the natural flow and interaction of liquids, creating a realistic and immersive pour experience.
We brought this project to together using the Agile process, by running three separate ten day sprints. Every evening, our team met for daily check-ins to sync progress, discuss ideas, and clear roadblocks. Sprint one laid the foundation with fully pourable liquid, giving us a working prototype. Sprint two integrated a complete UI, interactive buttons, and backend connections. Sprint three polished the app with accessibility and learning features—recipe lists, bar guest feedback, audio, and adaptive screen resizing. By the end we got much better at iterating, which led to an engaging final product.
Qt Creator and Model–View Architecture Qt applications often follow the Model–View design pattern, which differs from traditional MVC by not requiring an explicit controller. Instead, Qt handles much of the interaction between model and view internally, using a combination of signals and slots and delegates. For example, a model can emit a signal like dataChanged, which a view automatically responds to by updating the display. Similarly, when the user edits data in the view, the delegate communicates the change back to the model. This architecture keeps data and presentation separate while simplifying event handling, and it’s the design we used to build this project.
Show me the code...