views:

114

answers:

8

Hi,

I received an exercise: control a chess game. No AI, just a human-vs-human chess game.

This is the first full-blown project I'm developing.

I have 3 weeks, during which I have about 2-4 hours every day. I'm developing alone.

How do you suggest I manage the time and the flow of development?

Thanks, Nur

+1  A: 

I strongly suggest you write up a few use-cases before you start.

If you're new to java-programming, I furthermore suggest that you make sure you know how to implement each part of the application. Figuring out how to, for instance, draw a piece on the screen for the first time, is not a good idea to do during the actual project.

Writing up the algorithms for deciding which moves are legal and so on is probably not trivial, but it's not something you'll get stuck on. Using custom components and user interaction in Swing may be though. So make sure you know how to solve such problems before you start.

aioobe
A: 

What will be the output of your project. Will it be a full fledged game which handles all cases and will be used by many people throughout the world.

I suggest start with getting detailed requirements like

  1. Whether users will be able to edit the chess board theme.
  2. Whether you will provide undo features
  3. Whether you will provide sound etc

Once you get this part done you must be able to get sufficient information on what needs to be done and then you can plan accordingly.

Writing the core logic for the game can be pretty much done anytime as it wont require much changes once the other requirements are clear.

ckv
A: 

If it's just yourself, note down some high level objectives of what you want to do, quickly estimate the work to get to step one and then do it. Reassess once you get to that point and then repeat for the rest of the steps.

You've only got three weeks, you probably don't have much time for setting up a whole project management structure.

Paddy
A: 

Choose a software development method and try to stick to the main principles. In your case I'd have a look at scrum with a focus on solo scrum. Here is a guide but there are more shortes explantions on the web. You don't have to master the method but it's elements (backlog, sprint, burndown) are valuable.

in-step scrum edition is a very nice tool for this method.

And don't forget to build a good software development environment (SDE), at least a good Java IDE and a version control system (subversion, mercurial). Don't forget implementing a ot of tests (saves you a lot of time at the end of the project) and I suggest setting up a continuous integration tool (hudson CI). (if you use scrum, one of your first tasks in the project could be setting up the SDE)

Andreas_D
A: 

1- bring a pencil and some papers, start writing the big steps of your project and begin detailing every step (actually every step will generate new steps) so you will end with something like tree ending with the needed algorithms..
2- start coding!

M.H
+1  A: 

I would suggest TDD (Test Driven Development), that advocates writing test before writing the code. I did a similar project a few years back, and the test saved my ass more than once.

It is an iterative process, which advocates making small steps and gradually building the end application.

1) Start with writing the requirements for some subset of the problems, such as moves. 2) Make some test cases such as 'unit should be able to move three blocks' or 'unit should not be able to move, when it is the other players turn'. Remember to keep focus, which means keep changing the same problem domain until it works.

3) Fake it till you make it, i.e. fake the tests to return true or false or some other passing value. 4) Make a small change, see the tests fail and then implement the given problem correctly. 5) repeat

The main deal is to keep it simple and take small steps.

As for the design of the code, consider the FACADE pattern, and of course the other more trivial ones as State, Strategy and AbstractFactory.

Jes
+1  A: 

Before delving into details, develop the logic on paper and start coding a simple prototype that includes the basic and core functions, no fancy things. Then, incrementally develop, add new features.

Zafer
A: 

Don't waste any more time here and start cranking!

fortran