Driverstation Pong!

Yesterday, the programming part of our team had a little fun playing pong on our (still functional!) Driverstation. I had originally written the code coming back from one of our competitions while trying to teach some C++ to a VB programmer, and had never tested it. Once we finished what we were doing yesterday, I happened to notice the project, and decided to test it out. Aside from a few small bugs, it worked! I have the (C++) source attached. This is fun!

to use: create new simpleTemplate example project, and copy DS pong files to it. Build and download. Then switch to the user display on the DS (hold Select down for 1 second). Start pong by pulling Joystick 1’s trigger. to reset after winning or loosing, pull joystick 1’s trigger. The ball moves in random directions from random locations.

Ideal setup: Driver station on table between 2 people, with joystick 1 on left of DS, joy 2 on right, both backwards (trigger towards front of DS)

DSPong.zip (3.14 KB)


DSPong.zip (3.14 KB)

This is quite a cool idea, although I did take a look at your code and found some issues.

  • There are quite a few places where there’s no code formatting, making it very difficult to read.
  • The use of a try/catch statement for program flow is bad. There’s no reason to do this. Simply use a goto statement if you want to reenter the loop.

Now, to defend the use of goto.
Using an exception is the exact same thing as a goto in this case, except that the try/catch implies something different is going on, and ignores all real exceptions because of the catch(…).

Yes, you could use some extra logic to handle exiting the double loop, but in the end, the simplest, and most readable solution is to have a label directly before the main while, and a goto on win.

Although the best solution would be to split the code up into separate functions such as.

  • Setup
  • WaitForStart
  • Update - Returns a value in {continue, player_1_won, player_2_won}

Then the problem wouldn’t be there to begin with :P.

cool. At first glance, I thought you were talking about “apple juice” pong. I then imagined trying to play DS pong and how hard it wouold be. :slight_smile:

where do you paste the code in the template?

haha just kidding i just got it. nice code! :yikes: :yikes: :yikes: :yikes: :yikes:

I know, Its not ideal (I could improve it a ton), but I did not want to spend too much time designing if statements, remembered about exceptions, and used them. (I did not think of goto until just now, being a very OOPy programmer)

It is hard, I have a 30-40% hitting rate! (and about half are lost on the first hit)

Anyone dare to post a picture?

Just as a random thought. (I have not dared to mess with my team’s DS.) I know people have created virtual Driver Stations. Would it be possible to put this game into the Virtual DS?

I think it can display the User Data, so yes.

It is hard, I have a 30-40% hitting rate! (and about half are lost on the first hit)

that’s pretty good i guess. we should start up a new game, and devote half of thursday to having a DS pong tournament. -

I have a stupid question…

Where are DriverStationLCD.h and DriverStationLCD.cpp coming from? I notice the official WPILib Header, but neither are in the latest version I’m aware of (3.1.1764). Should I be getting updates form somewhere besides the following site?

http://first.wpi.edu/FRC/frcupdates.html

The WPI think tank site: http://thinktank.wpi.edu/article/144

I (finally!) have a video of DS Pong:
http://thecatattack.org/DriverStationPong
I don’t know if it will work on the classmate, but I would think so, because it has the status updates in the corner