Для примера рассмотрим создание игры судоку. Из контента использованы только текстуры (рис 4 – 9):
Рисунок 4 – 0.png, 1.png, 2.png, 3.png, 4.png, 5.png, 6.png, 7.png, 8.png, 9.png и d.png соответственно
Рисунок 5 – error.png и s.png соответственно, полупрозрачные (здесь обведены в рамку, чтобы из можно было увидеть)
Рисунок 6 – MenuRecord.png
Рисунок 7 – GameField.png
Рисунок 8 – MenuUpdate.png
Рисунок 9 – Контент в составе проекта
Для генерации игрового поля была использована следующая последовательность действий:
Первая строка заполняется случайными неповторяющимися числами от 1 до 9. Далее для каждой следующей строки происходит особая перестановка элементов из первой строки такая, что судоку имеет решение и является верным. Затем в каждом блоке из трех строк (1—3, 4—6, 7—9) происходит случайная перестановка двух строк, если программа выбрала одинаковую строку, то перестановка не происходит, тоже самое делается и с столбцами. Далее переставляем местами 2 случайных блока по горизонтали и по вертикали, по тому же принципу как и строки со столбцами. Затем удаляются лишние клетки. В итоге получается уникальное судоку.
Ниже приведен код из файла Game1:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Input.Touch;
using Microsoft.Xna.Framework.Media;
using System.IO.IsolatedStorage;
using System.IO;
namespace Sudoku
{
// Класс Field
public class Field
{
// Квадрат
public short Square {get; set;}
// Значение
public short Value {get; set;}
// Стандартное
public bool Standard {get; set;}
// Повтор
public bool Repeat {get; set;}
}
public class Game1: Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
// Объявление переменных
// Текстуры:
Texture2D gameField;
Texture2D doublePoint;
Texture2D standartNumbers, errorNumbers;
Texture2D menuUpdate, menuRecord;
Texture2D [] numbersTexture = new Texture2D [10];
// Массив элементов поля
Field [,] field = new Field [9,9];