I was bored and that can be a dangerous thing. Like doodling on the phone book while you are talking on the phone, I doodle code while answering questions on DIC. Yeah, it means I have no life and yes it means I was born a coder. During this little doodle I decided to make a slot machine. But not your standard slot machine per say, but one designed a little bit more like the real thing. Sure it could have been done a little more simpler and not even using a Wheel class at all, but what fun is that? In this entry I show the creation of a slot machine from a bit more of a mechanical aspect than a purely computerized one. It should provide a small sampling of classes and how they can represent real life machines. We cover it all right here on the Programming Underground!
So as I have already said, this little project was just something to play around with. It turned out kinda nice, so I thought I would share it. But what did I mean about it being mechanical in nature? Well, if you have ever played a real slot machine, not the digital ones they have in casinos now, you would see a metal case with a series of wheels. Typically it would be three wheels with pictures on them. When you put your money in and pull the handle the wheels would be set into motion. They would spin and then the first wheel would stop, followed by the second and then the third. After they have all stopped, the winnings are determined and you are paid out in coinage or credits.
- The classic slot machine design works on an elaborate configuration of gears and levers. The central element is a metal shaft, which supports the reels. This shaft is connected to a handle mechanism that gets things moving. A braking system brings the spinning reels to a stop, and sensors communicate the position of the reels to the payout system.
- Anyone who has ever walked into a casino has felt the lure of the slot machine. The bright lights, inviting little stools, and the promise of hitting the elusive jackpot are ever-present.
I thought, why not be a bit mechanical in this slot machine design and create the wheels as a class called “Wheel” and give it the ability to spin independently of the other wheels? Have the wheel keep track of which picture (or in our case number) is flying by and report the results to the actual slot machine class. I could have done this mechanism without the need of a wheel at all and instead load up an array and have it randomly pick a number from the wheel. Little slimmer, little more efficient but wouldn’t show much programming theory.
I'm programming a slot machine for school and cannot get the machine to re-run once it is finished. I am relatively new and would like some honest feedback. How can I get my program to re-run? This is the code I'm trying to do this with. I've just modified my code to look like this.
What do we gain by recreating these Wheel classes and spinning them independently? Well, you gain a slight bit of flexibility. Independently we are able to control the speed of the spinning if we wanted to, we are able to grasp the idea of the wheel as a concept in our mind and manipulate it. We could easily built in features like if the wheel lands on a certain number it will adjust itself. Like some slots in Vegas, if you land on lets say a rocket in the center line, the machine would see the rocket and correct the wheel to spin backwards 1 spot (in the direction of the rocket as if the rocket was controlling the wheel). We could spin one wheel one way and another wheel another. We could inherit from that wheel and create a specialized wheel that does a slew of new different behaviors. All encapsulated into one solid object making the actual Machine class oblivious to the trickery of the wheel itself… encapsulation at its finest!
The machine class we create will contain 3 pointers. Each to one of the wheels. The machine itself will be in charge of a few different tasks. Taking money, issuing and removing credits, determining when to spin, telling each of the wheels to spin and checking our winnings based on some chart we create. It has enough on its plate than worrying about the wheels and reading their values.
So lets start with our Wheel class and its declaration/implementation…
wheel.h
As you can see the wheel itself is not a difficult concept to envision. The bulk of the work is in the read() method. Here we simply read the values from our internal array of integers (the values on the wheel) and return those values as an array of the three integers… representing the visible column. This column will then be loaded into our 2-Dimensional Array back in the Machine class. The 2D array represents the view or screen by which the user sees the results. Remember that the user never gets to see the entire wheel. Only the 3 consecutive values on the face of the wheel.
Here is how it may look in the real world. We have our machine with the three wheels and our 2D array called “Screen” which acts as our viewing window. Each wheel will report its values and those values will be put into the screen…
Below is our machine class…
machine.h
This looks like a lot of code but really it is not if you look at each function. Most of them are very very simple to understand. We have a spin method which essentially spins each of the wheels, reads their values back from the Wheel class into a pointer (representing each column), then they are loaded into the 2D array one column at a time (our view screen), printed for the user to see the results and lastly the winnings are checked. The checkwinnings() method determines which rows to check based on the amount of the bet. If they chose 1 line, it checks for winning combinations on the middle row only. If they choose 2 lines, it checks the middle and top lines, 3 line bet checks all three horizontal rows, 4 line bet checks the first diagonal as well and 5 line bet checks both diagonals in addition to the lines.
How does it check the lines? Well each line is given to the checkline() helper function which compares the 3 values of the line against an enumerated type of various symbols. Here we are just assigning a symbol against each numbered value to help the programmer determine which numbers correspond to which winning combos. For instance, luckyseven represents the number 3 in the enumeration. So if it runs across a line with 3 number 3s, then it knows it hit the grand jackpot and credits the player 1000. This method makes things easy because if we ever wanted to change the win patterns later, we could change the enum and checkline method to do so. We could also build in multiple types of symbols and even let the user choose what slot machine game they want to go by. It becomes very flexible and is a testament to great design!
Lastly we can put some tests together just to show some the various aspects of how this thing works and how the programmer can use the classes…
slotmachine.cpp
This simply inserts a 5 dollar bill and a coin for good luck. Then bets 5 lines and spins. Despite the outcome we go and bet five lines again and spin once more. Hopefully we win something this time around! But either way, those are the classes for you and I hope you like them. As always, all code here on the Programming Underground is in the public domain and free for the taking (just don’t cause a mess in isle 3, I am tired of running out there for cleanup). Thanks for stopping by and reading my blog. 🙂
(Full version of this article and other MBaaS related posts - http://blog.blazesoft.ca)
There are dozens social slot games out there. Most of them have fantastic UI. Great symbols, animations and sound effects.
But when you review store ratings and read the comments, you notice that most of the slot machines have severe %RTP (Return to Player) and Hit Frequency issues and unplanned Volatility ratio.
The reason is that most of the games you play out there can't make scientific calculations of Slot machine RTP, Hit Frequency and other important parameters.
To build your own 'Slotomania' like game, to provide great experience and to be able to control your game economy, the following components should be configured properly and if needed you should be able to make quick adjustments.
Pay Line- The line on the slot window.
Number of Pay Lines - Slot machines may have several pay lines. Can be 3 lines, 5 lines or even 100 or more on video slots games.

Pay Table - Area in the Slot Machine that shows the payouts for each winning scenario.
The pay table will also tell you if there are other types of payouts.
Bonus Symbol - Combination of bonus symbols (as defined in Pay table) triggers a 'mini-game' in a slot machine game that allows the player to win additional goods.

Scatter Symbol - Combination of X Scatter symbols initiates 'Free Spins'. Spins that generate additional profit to the player without paying for those spins.
Wild Symbol - Acts as a joker symbol to make up a winning combination on the pay line. Can be also used for other purposes, based on the 'game play' of specific machine.
Reels- Rotating barrels (or any other graphical elements) on which the symbols appear.
In modern slot machines, you can find different number of reels - two, three, four, five.
Reels can have different number of rows. Usually it's from one to 5. Most popular is three.
The most common are three and five. Statistically, more reels, it's harder to get jackpot.
Besides the visible symbols, you should be able to configure total amount of symbols for each reel.
For example, in reel 1 you can have 30 symbols in total, while only 3 are visible. and in reel 2 and 3, you will have 50 symbols
Based on the terms described above, you should be able to calculate your -
RTP - Return to Player (RTP) is the term casinos / social casino games use to describe the percentage of what slot machine will pay back to players over time. For example, if you make a hundred $1 bets on a machine on which the RTP is 90%, statistically, you might expect to get back about $90 in wins.
Hit Frequency - How often a machine will stop on a winning combination. For example, if a machine has a hit frequency of 10%, it means that statistically, the machine will stop on a winning combination about 10% of the time. It’s worth noting that many slots allow players to bet on multiple lines on each spin. The result is that, on a single spin, a player could get one or more winning combinations, along with numerous losing combinations. To the player, it may feel as though he is winning more often, but as always, over time the losing combinations will far outnumber the winning ones.
Logic Design Slot Machine Machines
Volatility - The ratio of size versus frequency of major wins in a slot game.
So, what's your options as a social slots game developer -
1. Client side Slots logic development - You can plan and code all mentioned above in your app as client-side development.
Cons -
1. Client side development requires to 're-publish' the app every time you make changes. On some stores it's a matter of several days until your change is public
2. Client side development is dangerous - you are always in risk that your dev guys will harm existing functionality during change process
3. Not having these values as server side parameters - makes that process super inefficient. sometimes, you need to make frequent changes (same day or week) and it's just impossible.
4. Security / Security / Security - having all your logic as 'client-side', makes your app vulnerable to hackers, 'copycats'. For example - any app that resides on Android store, can be easily downloaded as APK.
Logic Design Slot Machine Software
Pro's -
I can't really think of any, besides some tactical advantage of making something quicker (and very inefficient) and having 'fun' of managing crazy excel files with formulas and machine details.
OR...
2. Server side Slots logic development - having your slot related logic securely managed on server side
I can't really think about Con's in this scenario. Client (mobile / web / Facebook or any other platform) do not control the outcome of the spin. it comes as a value for each spin based on all the parameters mentioned above (paytable , RTP, .....)
Security aspects are fully covered because the app is useless without having connection with company's backend. And there are various methods to make sure that only 'legit' app will make the connection - SSL tunnel, SSL Pinning, handshake mechanisms and more..
What Blazesoft has to offer -
Blazesoft developed A-Z slot backend. You can easily manage all parameters mentioned above from your admin screen and with 1 click calculation expected %RTP.
And it takes one more click to publish your changes to your players.
Blazesoft develops API that allows new or existing gaming companies to create new machines via provided SDK and to receive the output values to your Slot Machine based on predefined configuration.
All the day to day management is done via advanced CRM system.
Contact Blazesoft for more details: info@blazesoft.ca
http://www.blazesoft.ca
*** All trademarks, names, images and logos appearing on the site are the property of their respective owners. Do not copy & use without written approval from Blazesoft legal department.