Opening & Controlling Multiple Dialog Windows In A wxWidgets Project

0

One of the things that had bugged me forever in my years of using wxWidgets was not easily being able to open and control multiple Dialog windows. The idea behind what I had been trying to do (as had countless other thousands of people online) is quite simple; I wanted to open up a main Dialog window, with my main program buttons and gadgets on, but then I wanted to have a second window in the background that I could use to hold more gadgets, more controls. I also wanted a 3rd window that I would then set up as a debugging window; I could put data in there and hide it in my project unless you know the secret knock to get it to display 🙂 This would have saved me a lot of time and effort when I was coding my Litecoin Pool tools, instead of logging to a file and reading through it, I could have updated some gadgets in a seperate window and watched in real-time what the hell was going on with the data I was processing 🙂

Screenshot of the Sample Project running in a wxFrame with 3 seperate wxDialog windows open

So there-in lies the problem: When we open a new Dialog, it opens on top of the parent and now the parent is completely locked until the new window is closed. Very frustrating!

I tried a few different ways to achieve this in a way that worked for my project, and so far, this method is working the best for me. If theres a better way to do this, then please let me know in the comments below. I do like using the DialogBlocks tool to make my complex GUI’s as I find its just easier and more productive to do so. Im not too familiar with some of the editors, so i’m not sure if theres anything out there that is as good as DialogBlocks. It does miss some of the new classes that are available, but it works well for what I need it to.

When starting a new project (or in my case, I would make a new Main window in my existing projects) instead of creating a new wxDialog object, I created a new wxFrame. Frames look a little different to Dialogs, they inherit the Dark Grey background and there are no sizers. It’s also a fixed size (DialogBlocks). On this frame, I added some vertical sizers to start, and would construct my frame as normal. To remove the Dark Grey background, you can set a background colour, or use an ID panel etc. There’s quite a few different ways to design the interface properly, and everyone seems to have their own way of doing it 🙂

Now I want to add my Debugging window to my project. For this, I create a new wxDialog window called SecondaryWindow just as I normally would and construct it in exactly the same way. I can add some text strings, or a complete wxNotebook setup with some additional panels and gadgets as I need them. There really isn’t any limitations to what you can insert into the dialog. Once created, I have to initialize the windows manually. To help demonstrate this, I created a sample project which can be downloaded below for your own reference. All future references to code, and this example, will be in relation to this sample (with the concept still working fine in your application).

DialogBlocks puts special comments around functions to help it identify which sections need to be automatically updated when changes are made in the Interface designer. Its a good idea, especially when (like me) I use both DialogBlocks and Visual Studio 2017 at the same time, so if I make changes in one, it auto reloads in the other and I know where the automated blocks begin & end.

Getting back to the topic at hand, the sample project contains two windows. The first window is our main window, which is built using a wxFrame. It has a text box, and six buttons. Three of the buttons control the showing/hiding of up to 3 small sample windows (whose class is called SecondaryWindow). Each window is separate, unique and can be controller independently. The other 3 buttons control the wxTextControl and insert text into one of the three windows. The windows can be shown/hidden at any time. All three of the created windows are derived from the same Dialog class, but there is nothing at all to stop you from creating completely independent and different window classes.

To create the three windows, at the bottom of the file mainwindow.h, in the class MainWindow function I have inserted these lines:

////@begin MainWindow member variables
    wxTextCtrl* TextInputString;
////@end MainWindow member variables

// This is where we will initialize our 3 sample windows
SecondaryWindow *FirstWindow;
SecondaryWindow *SecondWindow;
SecondaryWindow *ThirdWindow;

// And create a variable to remember if the window is Visible or not
bool OpenedWindowA, OpenedWindowB, OpenedWindowC;

In the constructor code for the class, we set the values of the booleans to false so that the code thinks they are closed. By default in the project, I chose not to have them auto-open. At the bottom of the CreateControls() function, we can go ahead and initialize the windows themselves, along with giving each window a unique title to go with it:

wxButton* itemButton9 = new wxButton( itemStaticBoxSizer2->GetStaticBox(), ID_BUTTON_SHOWC, _("Show/Hide Window C"), wxDefaultPosition, wxDefaultSize, 0 );
    itemBoxSizer4->Add(itemButton9, 1, wxALIGN_CENTER_VERTICAL|wxALL, 2);

////@end MainWindow content construction

// Now we should try to initialize the three extra windows so we can use them later.
MainWindow::FirstWindow = new SecondaryWindow(this);
MainWindow::SecondWindow = new SecondaryWindow(this);
MainWindow::ThirdWindow = new SecondaryWindow(this);

// Set some Window titles
MainWindow::FirstWindow->SetTitle(wxT("First Window"));
MainWindow::SecondWindow->SetTitle(wxT("Second Window"));
MainWindow::ThirdWindow->SetTitle(wxT("Third Window"));

Now that the windows are created, we can start to call them. For the purpose of the example project, I made buttons that show/hide each of the windows. To do this in DialogBlocks, I added the button and then created an Event to trigger each time the button was clicked. Going into that function, I removed the default comment lines that were inserted and replaced it with my own code like below:

void MainWindow::OnButtonShowAClick( wxCommandEvent& event )
{
	if (MainWindow::OpenedWindowA == false) {
		// Display the Window. 
		MainWindow::FirstWindow->Show();
		MainWindow::OpenedWindowA = true;
	}
	else {
		// Now we should Hide the window from view
		MainWindow::FirstWindow->Hide();
		MainWindow::OpenedWindowA = false;
	}

	// Skip the event
        event.Skip();
}

Its a pretty crude method, but it works. As with any new Dialog, the window will appear by default in the centre of the parent, so you will have to move them around. The above code is modified for each window to produce the same effect. You can click the Show/Hide button to show/hide the window, or click the X button to close it. To make the contents of text appear in one of the windows, type something into the box and select the button for which window it should appear into.

Closing Notes

The sample project is pretty crude, and there are multiple ways to do it. The code is probably not the best in the world (I could pass the boolean directly to Show() for example and it will control hiding the window). You can also control opening the windows with ShowWithoutActivating() to display the window, but not switch the focus to it. Lot’s of different ways to do the same thing.

After spending a lot of time in the past working on trying to solve this for my own projects, I found a way that seems to work well for me, and I wanted to share it with the rest of the world who might be new to wxWidgets and are looking for that same answer. If you do find this example useful, please leave a friendly comment below.

Download The Sample Project

The sample project can be download from here: Link (1,354Kb)

Along with the source code & DialogBlocks project file to compile this project, there is also a compiled exe ready to run.

If you found this post, or the sample useful, please let me know in the comments below. Thank-you!

Share

[SOLD] For Sale: Schleuniger CS9100 & CA9170 Coax Stripper

1

See Pictures Below. I have for sale, a Schleuniger CS9100 Cut & Strip Machine w/CA9170 Stripper. The item is currently listed for sale on Facebook Marketplace and can be viewed at https://www.facebook.com/marketplace/item/2086871051614810/ Good condition, turns on and appears fine. No Prefeeder, but is compatible with most standard Schleuniger prefeeders. Reasonable offers accepted. Pick-up only is preferred, only as the unit is quite heavy.

In addition to the unit, the following extra tools & items are included:
1x Diamond Coated Feeder Wheel
1x Knurled Wheel
1x Grooved Feeding Wheel
1x Set of new Urethane Feed Rollers
Guide Tubes – Sizes 3mm through 8mm
2x Sets of V Blades
CA9170 Coaxial Stripping Unit & Inkjet Printer Interface
Robotics Interface
Misc. cables for connecting the components

Local pick-up from Schwenksville, PA only. Feel free to email me at fishguy8765 <at> gmail.com, or leave a comment here, and ask questions. Sold as-is. Thanks.

Share

Something Is Coming

0
Share

Amiga 1200 Power Supply Made From An Old ATX Power Supply

0

I was having some issues with my A1200 constantly crashing and resetting, and at the time I had been using an old, original white power supply box. A friend of mine had suggested that I get a new one, as the caps might be going bad in it. It would certainly explain the resets at random occasions and a few other things, so rather than buy a new one, I decided to convert an old ATX power supply I had laying around and make use of it.

As with all things power related, if you plan on trying to make one of these things at home, make sure it is unplugged and de-energized! I will not be held responsible for anyone electrocuting themselves!

So, what do we need to get going?

  • An old ATX power supply, any size will do. I used an old 250watt supply.
  • An old Amiga Power Supply or Power Connector
  • Multimeter
  • On/Off switch. I was creative and re-used one (See Below)
  • Crimp Tool/Insulation Tape

Step 1 – Prepare the Power Connector

Before we can start, we need to be able to connect the power to the Amiga. The best way to do this is to acquire one from an old Amiga supply. Most Amiga fans have several laying around, I used one from an old supply I had brought over from England years ago. It’s not much use to me here in the USA anyways 🙂

Open up the power supply, and cut out the wire at the base of the transformer. This will give you the maximum amount of length available on the new project. You can of course cut it down if you want a shorter one. My current desk doesn’t have a very good power layout, so having a 6 foot cord worked out quite well.

Step 2 – Acquire A Power Switch

Due to the ATX power supply needing a short to work, the best and easiest way to regulate this is to use a simple power switch. Being creative, I used the one that was already in my existing Amiga PSU and cut it out with a length of wire. It also helps to keep it a little more nostalgic!

Step 3 – Prepare the ATX Power Supply

The easiest way to make this work is to cut off one of the Molex connectors on the line that powers a HD. Most ATX supplies have some that are longer than the rest, just cut the plug off the end. You also need to cut the Blue line from the ATX Motherboard connector (-12V). Make sure to clean the other end up, so theres no exposed wiring hanging around. In the next step, there is a table showing the common colour codes for the Amiga wiring.

Step 4 – Assemble The Wires Together

Theres a number of different ways to connect the wiring, some people prefer to just twist wires together and tape them, but you can also use a crimping tool, or a terminal block. The good thing with terminal blocks during the testing phases is that you can swap the wires around if you do manage to get them mixed up. Below is a table showing the common wiring colours of the Amiga to ATX connections. Some Commodore wires may vary in colour, if this is the case, see below to determine how to make sure you have the right ones. It is crucial that it be correct before it is plugged into your Amiga. Don’t blow it up!

Assemble/Connect the wires as shown in the table. Make sure they are safe from coming into contact with each other.

Amiga Wire ColourATX Wire ColourVoltage/Supply
RedRed+5V
BlackBlack0V/Ground
BrownYellow+12V
WhiteBlue-12V

Step 5 – Connect The Power Switch

20150328_103058_HDR_resized.jpgNow we need to connect the power plug to the ATX supply. On a normal motherboard, this is done by shorting out 2 pins together. This is why using a switch makes the job perfect. The simple way to acheive this is to look at the blue wire we cut off the motherboard connector. The pins to short are directly next to it (See the picture above) in the form of the Green & Black wires.

Cut these wires and follow them up to the power supply, you can then attach the switch directly to these Green & Black wires and voila! You now have a working switch. When the switch is on, the power supply will work, and then flick the switch to turn it off again. Remember, not all ATX power supplies have a power switch in the back of them, so this is a perfect solution to the problem.

Step 6 – Test The Crap Out Of Your Wiring!

Amiga A1200 Power Pin Out.jpgI can’t stress enough that you DO NOT plug this new power supply into your Amiga until you have FULLY tested that it’s wired up correctly. If even one wire is not correct, your Amiga would be toast. Take the time to test your work, before plugging it in! All you need is a simple multimeter to read the voltages.

I drew a quick diagram of how to read the values. When you are holding the ATX side of the power plug and looking directly at the pins, each one should measure exactly as they are pictured in the diagram. Place the Negative electrode on the outer shield of the connector, and touch the Positive electrode on each of the pins. You should get very close to the values shown. If a wire is in the wrong location, then you need to fix it and test it again. It’s extra-important to test this when your Amiga wires don’t match the colour table above.

Step 7 – Give it a whirl!

When you are confident your wiring is all good, you can give it a try in your Amiga! She should boot up just the same as before, so take note if any wierd behaviour occurs. In my case, my A1200 booted a lot quicker and almost all my crashes and random resets stopped happening. It wasn’t until I did this, I realized how bad my original power supply really was!

If you have any questions about this, feel free to ask them in the comments. I hope you find this useful!

Image Gallery

Share

Slacking Period Commencing :)

0

Sub-Lit Testing StationI have been slacking hard by most standards over the last few months, I have been so busy with work and other activities that I really haven’t been able to spend too much time writing about anything.

As far as work goes, I have spent the last few months working with the Bosch Rexroth aluminium profiling system (or Aluminum as my american friends like to call it). You can find them at http://abbyservices.com/alavert/alavert-d/ if you’re curious. For those who have never heard of it, it’s a system of metal profiles, or struts, that interconnect similar to Meccano/Erector Set and it is used to build structures, desks, and anything else you can think of. I really like the system, and maybe I will start blogging about some of the various things I have built if there’s interest. I currently use it to build workstations, tooling, and small cabinets to house various pieces of equipment.

I have done a bit of coding, I made a great start to my Mahjong game, and hope to finish it as soon as I get some available time!

Share

New Schleuniger MegaStrip 9650!

3

Schleuniger MegaStrip 9650 My company has been lucky enough to purchase a brand new Schleuniger MegaStrip 9650 & PreFeeder machine. This beauty has the rotary incision box, and I have it set up and configured to work with Cayman software.

I was travelling to Europe last month as part of work, and was lucky enough to go to the Schleuniger facility in Thun, Switzerland for two days to do some testing on this machine before we purchased it. I toured the facility, met some of the engineers who designed and made their products, and learned a great deal. As always, Schleuniger were excellent hosts, thanks a lot guys 🙂

This machine will be used primarily to cut corrugated copper cables, about 16mm thick. The Cayman software will be configured with the various different connectors we use on our cables, then the lengths can be tweaked in later. It’s always nice to get a late christmas present, and i’m going to have a lot of fun working with this machine 🙂

Share

New CVGM.net Server Upgrade Almost Ready for the web company!

0

 This is the new Dell PowerEdge 2950 server that will be used on the CVGM.net website, along with the services from https://the-indexer.com/, it will be a total success. It’s packing a nice dual quad-core 3.16Ghz CPU, 16gb of ram, and VMWare to make management and repairs easier and better. The current server only has 2GB of ram, and a very ancient quad-core 2.1Ghz cpu (one of the first Xeon quad core CPU’s released). We are still adding some bits to it, saving up our spare change and buying them as we can.

In the next few weeks, this bad boy will be shipped off to the datacenter and installed in it’s rack, so the site can receive a much-needed upgrade.

If you want to check out CVGM and listen to some great oldskool computer game music, check out http://www.cvgm.net  Thanks!

Share

How I Made Reversi Magic For Android/iOS (And Games In General)

0

A few weeks ago, I took a bunch of my old computer systems (Atari’s, GameBoys and Sega Systems) to my kid’s school to show them off as part of his “History Of Video Games” project he had worked on. Several of the kids ask me, as a games programmer, how I make them, and even my own kids recently have started asking questions about how I make the small games that I do, so I thought I would write this up showing how I made my Reversi Magic game to hopefully educate them a little bit, and also anyone else who might be interested in learning the process.

Firstly, I should start by saying that the various methods used by different people tend to be very different; I take a more OldSkool approach to writing games than say, some of the modern game programmers. Also, being that I work mostly in my spare time, at home, at night, in-between a full time job & managing the kids, some things get done with more priority than others. Someone with more resources/time etc. can probbably get things done a lot quicker. That being said, i’m always open to feedback so feel free to comment on this if you have some 🙂 Don’t shoot me if I do something differently than everyone else 🙂

Coming Up With Ideas

Before I start laying in any amount of code, I usually try to come up with an idea of where I want the game to go. Depending on the game and whats going on, there might not even be an idea yet. Ideas tend to come from existing games, so you might have a couple of web games that seem good, but if one had this feature, or copied ideas from this, it might be even better. If I have a general idea of what I want to work on, i’ll take an empty project file of mine (which consists of the game basics such as the menu’s and basic graphics, enough to be able to press Play, and just start adding game code right away) and modify it to work with a very crude, but simple engine showing the gameplay for this idea. This will be tweaked until the game is able to do what I was thinking of, then its evaluated for how well it plays. Lately I have been playing online casino games at https://imhighroller.com/reviews/genesis-casino-review/, its been fun to play with other people. Some of these tests might seem pretty good, even with very basic graphics (often coloured blocks or re-used images). Others, will be quite bad. It’s not a bad thing if the idea doesn’t yet work, it just needs more refining. After working on a very basic idea, its often good to have a friend play with it and have them give you some feedback. You are trying to find an idea thats engaging to you and your players, so if your friend is very quickly bored, or finds the idea too challenging or confusing, then you need to head in another direction.

In this picture, this game (called Avalanche!) was put together in about 2 days altogether, to show off some ideas I had about a columns-based game, and matching snowflakes together to make some cool snowy explosions etc. In the end, I never released the game, but it was fun to work on the prototype.

In the past, I have prototyped as many as 30+ different game ideas, some better than others, until something comes up. Often, you’ll know when a good idea comes up as you’ll find yourself playing it for ages, while not getting bored of it. Also, your friends might like playing it too. They are also handy to come back on later as well, i’ve worked on some I haven’t touched in years, bringing some new changes and various elements to the table that turn it into a better game.

The Design Process

Once you have thought of a solid idea to work on, it’s often a good idea to do a brief design draft of where the game should be heading, so that you don’t fall off the wagon too easily. If you’re going a route that’s not recommended or you get stuck what to do next, you still have your plan to fall back on for guidance. Again, depending on the type of game you are writing, you can also define a list of specific behaviour rules here, that must be followed at all times. For example, if it’s a puzzle game, you would lay out the logic here exactly, so that you know exactly how it’s supposed to play. If its doing something its not supposed to, you can later analyze this logic to start tracking bugs. This is more important for larger games, or puzzle games that have a lot of different AI/Logic combinations.

Normally I do paper notes for almost all of my games, I still have notebooks with designs in them from my days of writing programs on the ZX spectrum games! One day, i’ll put all that stuff online, but it won’t be today hehe 🙂

Below is my notebook pages that I did for my Reversi Magic game, that’s currently available on Android, iOS and Kindle Fire. The notes were done a year or so ago. The idea was very simple, and I have always been interested in playing Reversi on the computer, with this game not being my 1st on the computer. The goal was to make a simple, easy to pick up game that anyone could familiarize themselves with, without having to learn any new rules or be bombarded with over-the-top graphics. Not all games require notes, but it doesn’t hurt to play with pen/paper every so often to make some design sketches. These 2 pages are the design spec that I originally set forward to complete:

 

The 1st page just covers some simple layout rules and goals that I would like to have the program meet, and the 2nd page shows some interface layouts for various orientations, and a few other design elements such as an idea I had for dynamic grid frames.

Applying Code

 Once you have a clear idea of where you want to go, you can start laying in code. I’m often asked which part of the game do I start on first? Most people always assume that the graphics are first. The correct answer is actually the AI/Logic of the game (how I do it anyways) with a little bit of graphics work to get the basic shape of what you are working on. The graphics for this game were actually quite simple to do. I use a CAD program called CoCreate, so I used it to make the rotating disk image and capture each of the frames for it. The picture on the left is a small version, with an added drop shadow to make the edges stand out a bit more. The actual images are a lot bigger, so they look sharp & crisp even on the iPad Retina displays. The backdrop is also translucent, so the shapes can be blitted anywhere.

I spent a full month of non-stop coding of the AI engine for the game. The tough parts were testing it to make sure it plays 100% compliant moves, so in the end, there would be a long debug report of the game, how the computer did, as well as opportunities that it took/missed so I could review and tweak the AI later. The AI algorithm itself is based on a combination mix of NegaScout & Min/Max game theories. The Min/Max algo will evaluate scores recursively for the Best/Worst possible scoring points, and NegaScout does some pruning to several paths in that tree, to ensure the answer it comes out with can be found faster. Combine this with some traditional elements of gameplay, a method of looking at grid moves to determine how risky they are, and you have a very powerful AI routine. You can learn more about the Min/Max methods Here in this great tutorial (with samples and images).

The next hardest part of programming the AI was to teach the computer not to be too hard on beginner players. Its programatically easy to make the computer as hard as nails when it comes to playing the game, but how do you adjust those levels so that they are somewhat forgiving to a new player? Again, with a reverse NegaScout algo, and a few other traditional playing rules implemented, the computer will now assist the player to some extent when playing its moves, so as not to dominate. Of course, there are always some people who are just not very good at the game (or Reversi in general), and as I have seen on the feedback for my games, they think the game is the fault and tend to leave negative feedback because of that.

Your game should also show assists/help to your players, for when they get stuck and cannot decide where to play a move. They also may not realize they can play a move in certain areas. In Reversi Magic, I added options that show you where you can place a tile, they actually cycle in and out as small transparent disks of your colour. Tap the disk to place your move. There is also an option that shows you where the opponent last moved, so if you are not following the board too closely, you can still see where they last played and how it affects your strategy. Both of these assist options can be turned off in the game Options screen at any time, though they are enabled by default for first time users of the game. In my original design, I had wanted to show how many disks were going to be flipped for each move that was shown as available, but as experienced players will tell you, playing for the best possible score every time is not the best playing strategy at all, so I eventually removed it.

Cleaning Things Up

Now that the majority of your code is done, the last part of the process is to apply the spit & polish needed before you release it. For me, this is usually when I will finalize all of my graphics, and add all of the last bits of fine tuning to the game. Normally, i’ll sit in a room with my Nexus 7 and play the game, write down all the stuff that I see that is annoying, or needs fixed (out of place text, menus that move too slow, playing effects that should happen that don’t, ways to improve the ingame experience etc. etc.) and then after I have the list, i’ll set forth on making the changes. If you are not already doing so at this point, its often a good idea to send out your game to some private testers. Friends/family often make a good choice, but you want to pick some who are open to give you criticizing feedback (and some who will actually give feedback!) Listen to their complaints and what they think might make the experience better. You might not be able to implement it 100% exactly as everyone wants it, but you might be able to meet in the middle, especially if several testers are reporting on one specific area/feature of the game (which normally means you should focus some effort on it anyways).

From Prototype, To Finished Game

 When you think that the game is ready, it can be released to the world. Be sure that before you release it, it has been tested thoroughly by your team, as there is nothing worse than having a game that gets launched on a platform such as iOS and theres a massive bug in it that prevents users from playing properly. I’ve been there, and its not a good feeling, as Apple are not very fast when it comes around to updating. The general public tend to do more crazy things with the game (seeing as there is much wider exposure to strange incidents) so putting your app through the ringer beforehand, making sure certain phone events don’t crash it, is extremely important. If you plan to release on tablets as well, be absolutely sure to test a range of different tablet resolutions, both in the Landscape/Portrait aspect. You should also make sure your graphics look good, as if someone on say a retina iPad has to look at your scaled-up low resolution logos, it makes for quite an eyesore.

In the above pictures, I have used my game Twinz! as an example of what the game may look like in prototype, to the final product. The left screenshot is from the prototype game I did in about 2005 or so. It was just a handful of images, a simple shaded image for the door shutters, and a small logo. The image on the right is taken from an iPhone running the released version of the game. As you can see, the screen’s real-estate has been cleaned up to make the size of the tiles more optimal, and get rid of the unused areas. This game runs great on tablets, and features high resolution tiles.

Whats Next?

After the launch, you can sit back and watch your total downloads go up for each market, and wait for your customer’s feedback. Most players are nice in that they will contact you directly about any bugs they might find, before they leave negative feedback, so if you do get not-so perfect app feedback, or bug reports, be sure to get right on top of them and prepare for an update in the future.

While I have yet to become mega rich or famous from one of my games, this is still a hobby that I love to do, and hope that one day at least one of my games will be successful enough that I can quit my job and focus on doing this full time 🙂

If you want to play any of the games mentioned above, or any other games of mine, please visit the app store for your preferred device and try them (there are free versions of all of my games): Amazon App Store (For All Kindle Fires), Apple App Store, Google Play

Should you find the info in this page useful for anything, show your support by buying a game! If you have questions, ask in the comments or send me a quick email. Thanks!

Share

New Version Of Litecoin Miner Status Released

1

Hi,

Today I released a new version of my popular Litecoin Miner Status program. The tool sits in the background of your computer and monitors various litecoin mining pools for your mining activity. The program does not do any mining of it’s own, it simply watches the pools that you mine at to provide you with statistics about how well your miners, and your profits are doing. You can go directly to the application page Here or by the Discography -> Litecoin Miner Status link at the top of this page.

Lots of changes & tweaks have gone into the new program, including the addition of new pools to monitor. If you mine LTC and wish to keep track of your mining rigs or your coins, give the program a try.

Share

Reversi Magic Updated For iOS / Android / Amazon Kindle Fire

2

I have been spending a lot of time lately working on Reversi Magic, my Othello/Reversi game. Since the game was originally released last year, I have been spending time on optimizing the various parts of the game for AI, appearance, and also ensuring that it works on absolutely any device out there. The game has certainly come a long way since I originally started working on it!

The game’s AI functions make use of a NegaScout/PVS algorithm to determine the best possible moves based on a series of conditions, such as difficulty, board status and a few other things. The easy level is designed to be not too difficult, but good enough to keep you alert during play. As the levels get harder, the AI will step up it’s game and the Hard levels are quite tough to beat! I spent close to a full month working on AI code alone, and it was very educational for me. One day I should write up something on how the AI works, as someone else might find it useful in a different game.

embedded by Embedded Video

YouTube Direkt

Anyways, if you would like to give the Free version of the game a go, you can find it at your favourite App Store by clicking one of the links below:

appleappstoreAndroidMarketLarge

amazon-android-app-store

Screenshot Gallery for Reversi Magic:

Share
Go to Top