First draft of the menu screen.

Tic-Tac-Toe Squared

I've only been programming for less than a year and using PyGame for less than half that time. This was my first PyWeek and I really enjoyed it. So the game I made for this challenge is Tic-Tac-Toe Squared, which is a lot like Tic-Tac-Toe only...squared.


Haskell Prize for Recursion
Presented by gcewing

Matthew Broderick Award - This game reminds War Games
Presented by circusblatta

Give this entry an award


Ratings (show detail)

Overall: 3.5
Fun: 3.5
Production: 3.5
Innovation: 3.6

19% respondents marked the game as not working.
Respondents: 21


File Uploader Date
Tic-Tac-Toe Squared (executable)
Math 2011/04/10 03:29
Tic-Tac-Toe Squared (source)
Math 2011/04/10 03:28
All the faces of the cpu
Math 2011/04/07 04:32
First draft of the menu screen.
Math 2011/04/05 04:41
This is what the game looks like after the first few hours of programming
Math 2011/04/03 06:41

Diary Entries

Before Competition

Only a few hours left to go. I've been able to think of ideas for all the themes except one. So if that one becomes the official theme, I will be really upset and probably end up not doing the competition altogether (unless I think of something in the next few hours).

I'm a student at Georgia Tech, so finding time to work on this project will be tricky. However, I have done a lot of work with PyGame in the last few months, so hopefully I won't have many major programming issues. I can create graphics using the GIMP, but not anything fantastic. As for sounds and music, I'm not sure what I'll do.

I do think that at the very least, I will be able to complete making the game within the week.



Nerdfighter Math: Day 1 Update

(Due to time zones, my "Day 1" is Saturday and my "Day 8" will be the next Saturday. Even though I might sometimes go past midnight, I'll still consider it the same day until I go to bed.)


8 PM - The competition has started. The theme is Nine Times, which is the theme I was really hoping for. The game will be called "Tic-Tac-Toe Squared" and that is all I will say about it for now. The first thing I'm doing is designing the main board for the game. I don't know if people usually start with the graphics before the programming, but I guess that's just my style o_o.

8:30 PM - The graphics of the main board is done. Now I will start with the basic pygame programming.

9:15 PM - I have defined the classes for SmallBoard and BigBoard. A SmallBoard is a single Tic-Tac-Toe board and BigBoard is made up of 9 SmallBoards with some extra functionality. They are not finished, but a lot of the functionality is implemented. Now I will make the graphics for X and O.

10:10 PM - Graphics for X and O are made. The game now allows players to click on tiles on the board and have that tile be filled in with an X or an O. Winning has not been implemented yet. Off to make more graphics.

11:10 PM - The game now shows restrictions where players cannot use, although it looks slightly confusing now. These restrictions will be explained in the game.

11:50 PM - Updated some more graphics. As far as regular gameplay goes, the game does pretty much what I want it do except what it does when someone wins the whole game. Taking a break now.

12:55 AM - After a good break, I went back and quickly implemented the logic for when a player wins. I'm probably going to stop for the night. I've already gotten the main interface of the game in place, although with less than 5 hours of work, it doesn't look fantastic, but I am glad to have gotten this much work done in one night. Stuff I need to add later includes a menu, better graphics, sounds, and possibly animations. I was going to upload a screenshot of my game so far, but that part of the website seems to be broken.


Add a comment

Nerdfighter Math: Day 2 Update


11:00 AM - Overslept, must start working. As I went to bed last night, I came up with the idea of developing AI that would pose as a computer. I have no idea how I'm going to do it, but I think it would make the game so much better. Also, I'm thinking of putting my own voice in the game, where the computer would react by playing my voice whenever something happens. First, I'm gonna make sure everything else from yesterday is solid.

11:40 AM - Managed to create a computer player class, but it's hardly AI. For now, it just randomly chooses an open spot on the board regardless of strategy.

12:30 PM - The computer now has the ability to recognize priority spaces. The cpu reads all the two-in-a-rows and one-in-a-rows for X and O. The cpu will move based on these priorities: blocking a player's two-in-a-row has highest priority, filling its own two-in-a-row has next priority, blocking a player's one-in-a-row has next priority, adding to its own one-in-a-row has lowest priority. In the case where the cpu cannot fill achieve any of it's priorities, it will fill a completely random space.

1:00 PM - Right now, I'm writing out lines for the computer to say when stuff happens. I've decided that the cpu will be rather sarcastic, sadistic, and kind of a jerk XD

2:40 PM - I'm starting to incorporate my voice into the game. Right now the voices are just placeholders. For example, when a human player blocks a cpu's two-in-a-row, it will say "Player blocks two-in-a-row" but during the final version, it might say say something like "NOOOOOOOOOOO" or "You're mean" or "Why did you do that"

5:30 PM - I've had to take quite a break because I have a test tomorrow. Most of the voice triggers are in place. Now I need to record multiple speech outcomes for different scenarios so that the player doesn't hear the same speeches over and over again. Also, I need to optimize the algorithms for cpu spot selection.

12:00 AM - Haven't gotten much work done, because of that test tomorrow. I'll try to make time during the week to keep working.


Nerdfighter Math: Day 3 Update


3:00 PM - I've been forgetting to update. I got some work done between classes...and during classes (yes, I'm a terrible person). The main thing I've been doing is refining the cpu class so it makes better decisions. Also, I noticed a bug where a cpu will interrupt itself while talking. So, I've made it so that the cpu will finish talking before it moves. However, the player can still interrupt the cpu by moving. I'm thinking my next step is recording my official voice clips for the game and updating the hud on the right side of the screen so it says something informative. Currently, it only shows the icon of the current player.

6:00 PM - spent the last half an hour or so thinking of cpu dialogue. I'm trying to incorporate memes, quotes, and such, which is why it's taking so long. I'm gonna try to record the audio today and start working on a good voice filter.

6:20 PM - I lost a game to my cpu...I have created a monster!

10:45 PM - ANIMATIONS!...AND A MENU!... so yeah, those. Actually, the animations are just Xs and Os scrolling down the page while the game is playing and across the page in the menu. The menu consists of the title and a tic-tac-toe board with 9 options: player v player, cpu v cpu, player vs cpu (easy, normal, hard), theme toggle, voice toggle, fullscreen toggle, and quit. I'll probably upload a picture of it.

1 comment

Nerdfighter Math: Day 4 Update


11:50 - My classes are really cutting in o_O. My one goal today is to get all my audio recorded and edited into sound clips.

12:50 - I've implemented the options for player vs player, player vs cpu (easy, normal, hard), and cpu vs cpu. That last one is very intersting, especially when the turns are 100 milliseconds each.

1:15 PM - Voice and fullscreen toggle buttons are usable.

6:30 PM - Note: cpu vs cpu looks even cooler when turns are 10 milliseconds each. I must find a way to let the user choose how fast turns are. As it turns out, when two computers have filled in 7 of the 8 large squares, they will NEVER fill in the last one because they will always tie. I don't know if I can do anything about that.

6:50 PM - Voice and fullscreen toggle buttons now show "On" or "Off" instead of "On/Off"

8:00 PM - Just recorded the cpu voice audio. Now to edit it.

9:00 PM - Out of my work, I have made 62 audio clips with a mild robotic-sounding filter. I wish I could keep working, but I have school crap to study for.

Add a comment

Nerdfighter Math: Day 5 Update


5:00 PM - Wednesday is my busiest day of the week. I haven't gotten any work in yet.

7:00 PM - The cpu now has a face, which changes with the voices.

10:30 PM - Just added the condition that if 8 big spaces are taken and the 9th one ties, you clear the whole board. Otherwise, you'll end up fighting with the computer forever; or two computers will go forever.

12:30 PM - I redesigned all the faces for the cpu. The original faces didn't look computer-like enough. I'll post a picture of all the faces and stop for the night.

Add a comment

Nerdfighter Math: Day 6 Update


11:50 AM - Just updated the voice-to-face dictionary to include the new faces.

12:50 PM - Made a slight tweak to the CPU hard mode. It's hard to test if it works, but I think it works.

3:50 PM - I've implemented the condition that you have to beat easy to play normal, and beat normal to play hard.

5:00 PM - List of things I still need to do: Make the instruction pages, change the "theme" button on the menu into "How to play" (there will not be multiple themes), record and add new voice clips, finalize AI for "hard" mode, update some of the graphics so they look nicer, display cpu speed for cpu vs cpu, disallow X/O animation changing when clicking inside the grid on the menu

6:10 PM - Instructions (How to Play) is implemented and the menu has been updated to include an instructions button.

Add a comment

Nerdfighter Math: Day 7 Update


4:20 PM - I've had classes all day and some homework later. I have the rest of the day to do whatever, so I need to get the majority of what is left before the end of the day. I still have Saturday to work, but I have other things to do.

12:00 AM - Okay, so almost nothing got done today. The game's pretty much finished as it is, except for some final touches (extra voice clips, optimizing hard mode). I'll get whatever work done tomorrow that I can get done and upload the final program.

Add a comment

Nerdfighter Math: Day 8 FINAL Update


4:40 PM - I've been working on school stuff all day. Next week, I have a Java test, a paper due, an English group project to be prepared for, a pair programming/linear algebra assignment due, and a couple weeks from now, I have finals. But as it is, the deadline for PyWeek is in 3-4 hours so I need to finish up what I need to finish up. Things I intend to finish: hard mode, extra voice clips, add sound clip for moving, and reupdate voice to face dictionary.

6:30 - 90 minutes to go. I've recorded and edited the final voice clips, updated the face dictionary, finalized hard mode (or at least as hard as I can think to make it). We're almost done here

7:00 - 1 hour left and I'm pretty much done coding. I just need to make an .exe version and upload them together with the source code. Unfortunately, I could NOT FIGURE OUT how to make OGG work, so I had to use WAV files, which are so incredibly uncompressed that the audio takes up 97% of the memory of the game, which is about 30 MB. The game itself is less than 1 MB.

7:25 - Okay, I'm done, both the source and the executable versions of the game are uploaded, so...yeah, I'm done. I'm still a bit mad that the files are so fricking big because of the sound files, but I can't do anything about that now.

So Tic-Tac-Toe Squared is done. I hope you enjoy it.

Add a comment


I just realized, I created four voices (12-1 to 12-4) for when a board gets cleared. I completely forgot to code the triggers for those voices...derp. Also, I meant to create voices for when you click on the computer's face...derp. Also, one of the voices is "derp" and it does work...derp.

But other than that, Tic-Tac-Toe Squared is finished, uploaded, and I think it's f***ing awesome.
This was my first PyWeek and I really enjoyed it. I plan to participate in it again.

=Nerdfighter Math