The Bitmap-Binary Converter will likely be the core engine for at least the early versions of Alphabet Soup. To create it, there are a few things we need to consider. The two most glaring questions are how will we read individual pixels, and how will the actual conversion between pixel color and binary code take place? An even more basic consideration is which programming language we will use. I am leaning heavily toward C#, as it seems fully capable of tackling both problems.
There are a couple of ways we could do this. Let's start with the assumption we begin with the bitmap and define all the colors for a given letter ("A", for example).
This website explains how to access each pixel individually--exactly what we are trying to do.
This is the core of the code allowing the color definition for each pixel based on location within the bitmap:
public void SetPixel(int x, int y, PixelData color)
{
PixelData* pixel = PixelAt(x, y);
*pixel = color;
}
However this is using 'unsafe' code to access each individual pixel. To use 'safe' code the actual program execution would take forever. So there may be a
third alternative worth looking into. And
here are more thoughts about this. This is something we are going to have to experiment with to find the best method, or we might have to figure out our own.
To save the bitmap code for future use, we will have to set the black pixels to 1 and white pixels to 0. This will produce 256 characters, ranging from
charA[0] to
charA[255]. We might have the program write this data to a separate file, or just store it within its own memory.
For visual reference, here is the bitmap in actual size:

Here is the 'A' bitmap represented in binary:
0000000000000000
0000000100000000
0000001110000000
0000001010000000
0000011011000000
0000010001000000
0000110001100000
0000100000100000
0000100000100000
0001111111110000
0001111111110000
0001000000010000
0011000000011000
0010000000001000
0110000000001100
0000000000000000
Here is the above bitmap referenced in pixel notation (shortened to describe the four corners):
(0,0) through
(0,15)
...
(15,0) through
(15,15)
And here is the character equivalent to the above pixels:
charA[0] =
(0,0) = value of
'0'
charA[15] =
(0, 15) = value of
'0'
charA[240] =
(15,0) = value of
'0'
charA[255] =
(15,15) = value of
'0'
Or, we do it the other way: Start with 62 '.txt' files (52 letters and numbers 0-9, or whatever amount we end up with for the base set of characters), each with 256 "0" and "1" characters representing the 16x16 bitmap.
Read the text from the file and use the code
"if charA[0]='0'..." / "if charA[0]='1'..." and the earlier bitmap code to convert each corresponding pixel to black or white by referencing the corresponding pixel within the bitmap. Whenever crossover occurs in the program, it creates a new binary (or .txt) file to represent that organism. I think a thorough understanding of the C#
StringBuilder Class is going to come in handy for this, in splicing strings of binary characters and
performing other modifications. Again, this will be closely intertwined with the GP or GA code, which will be the determining factor for where the splicing will occur each time.
Basically we're accomplishing the same thing but from two different directions: bitmap-to-binary or binary-to-bitmap. It will probably be valuable to know how to do this in both directions for purposes of the program anyway. Basic C# data type conversions (string-to-binary-to-decimal-to-chars-to-string and so on) will be instrumental in making this work properly. This should actually be pretty simple; it will just take some time to sort out the details.
What I described above should accomplish the basic functionality of the BBC; once we get this working we can move onto the engine's more complex functions, such as attributing higher "sensitivity values" to certain pixels and recognizing "contact" with other letters.