Drivin’ My Car – μέρος 3ο

Καλά όλα αυτά αλλά ακόμα και ο πιο αδαής στον κόσμο των βιντεοπαιχνιδιών έχει προσέξει ότι ένα παιχνίδι δεν είναι τόσο απλό ώστε να το τρέχουμε, να παίζουμε μια φόρα και να τερματίζεται η εφαρμογή λείπουν πολλά στοιχεία για να γίνει ένα παιχνίδι. Συνήθως σε κάθε παιχνίδι υπάρχει μια εισαγωγή, ακολουθεί ένα μενού με τις διάφορες επιλογές, το κυρίως μενού, μενού επιλογών κατά την παύση του παιχνιδιού κλπ. για το δικό μας παιχνίδι θα ακολουθήσουμε την εξής δομή για τις καταστάσεις που το αποτελούν.

Οι καταστάσεις του παιχνιδιού

Οι καταστάσεις του παιχνιδιού

Για την υλοποίηση μιας ολοκληρωμένης δομής παιχνιδιού πρέπει να σκεφτούμε αρκετά πιο περίπλοκα έτσι ώστε το παιχνίδι να απεικονίζει την τρέχουσα κατάσταση και να δέχεται τις ενέργειες του χρήστη στην κατάσταση αυτή. Η απλούστερη προσέγγιση προϋποθέτει την διάσπαση των μεθόδων Update και Draw σε μικρότερες και η εκτέλεση της κατάλληλης ανάλογα με την τρέχουσα κατάσταση του παιχνιδιού που ελέγχεται από την μεταβλητή CurrentState, όπως φαίνεται στον κώδικα που ακολουθεί.

private enum ScreenStates
{
	Menu,
	Game,
	Options,
	Difficulty,
	Screen,
	Paused
}
protected override void Update(GameTime gameTime)
{
	switch(CurrentState)
	{
		case ScreenStates.Menu:
			UpdateMenu(gameTime);
			break;
		case ScreenStates.Game:
			UpdateGame(gameTime);
			break;
		case ScreenStates.Options:
			UpdateOptions(gameTime);
			break;
		case ScreenStates.Difficulty:
			UpdateDifficulty(gameTime);
			break;
		case ScreenStates.Screen:
			UpdateScreen(gameTime);
			break;
		case ScreenStates.Paused:
			UpdatePaused(gameTime);
			break;
	}
	base.Update(gameTime);
}

protected override void Draw(GameTime gameTime)
{
	switch(CurrentState)
	{
		case ScreenStates.Menu:
			DrawMenu(gameTime);
			break;
		case ScreenStates.Game:
			DrawGame(gameTime);
			break;
		case ScreenStates.Options:
			DrawOptions(gameTime);
			break;
		case ScreenStates.Difficulty:
			DrawDifficulty(gameTime);
			break;
		case ScreenStates.Screen:
			DrawScreen(gameTime);
			break;
		case ScreenStates.Paused:
			DrawPaused(gameTime);
			break;
	}

	base.Draw(gameTime);
}



This entry was posted in Ανάπτυξη βιντεοπαιχνιδιών. Bookmark the permalink.

Comments are closed.