Начинаем делать игру "виселица" для android. Суть игры состоит в том, чтобы отгадать загаданное слово, выбивая буквы из списка. Если буква есть в слове, нам показывают все ее местоположения в слове. Если нет - мы теряем одну жизнь. Если жизней не осталось - мы проиграли. Если все буквы в слове найдены - мы выиграли.
Самый лучший способ графического оформления для написания такой игры - создать компонент, который будет отрисовывать игровую ситуацию на самом себе в методе onDraw(). Назовем этот компонент LetterField и создадим соответствующий ему класс LetterField.java
Таким образом, наша игра будет включать в себя 2 класса : WordGameActivity и LetterField.
В классе LetterField нам, прежде всего, нужно сделать следующее:
-сделать его наследником класса визуальных компонентов View
-объявить конструктор класса
-объявить метод onMeasure()
-создать метод OnDraw() - в этом методе будет производиться отрисовка всех игровых объектов
Заведем поля width и height класса LetterField, отвечающие за длину и ширину игрового поля. Кроме того, нам позже понадобится поле context типа Context - для вывода сообщений пользователю.
Конструктор будет принимать извне контекст, длину и ширину:
В метод onDraw() передается объект canvas - холст, на котором мы и будем рисовать:
Таким образом, полный код класса на текущий момент:
Теперь нужно поместить этот компонент на экран. Код главного activity:
При создании приложения сначала выключим верхнюю панель и поместим наш компонент на дисплей с помощью кода, описанного здесь (вторая часть текста - про размещение кнопок). Запускаем прототип будущей игры на виртуальном устройстве - убеждаемся, что все работает - на экране серебряный прямоугольник.
Скачать исходник игры
Самый лучший способ графического оформления для написания такой игры - создать компонент, который будет отрисовывать игровую ситуацию на самом себе в методе onDraw(). Назовем этот компонент LetterField и создадим соответствующий ему класс LetterField.java
Таким образом, наша игра будет включать в себя 2 класса : WordGameActivity и LetterField.
В классе LetterField нам, прежде всего, нужно сделать следующее:
-сделать его наследником класса визуальных компонентов View
-объявить конструктор класса
-объявить метод onMeasure()
-создать метод OnDraw() - в этом методе будет производиться отрисовка всех игровых объектов
Заведем поля width и height класса LetterField, отвечающие за длину и ширину игрового поля. Кроме того, нам позже понадобится поле context типа Context - для вывода сообщений пользователю.
Конструктор будет принимать извне контекст, длину и ширину:
public LetterField(Context _context, double _width, double _height) { super(_context); width=_width; height=_height; context=_context; }Метод OnMeasure должен быть таким (происходит установка размеров при размещении компонента в activity):
@Override protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension((int)width, (int)height); }Метод onDraw() обязательно должен содержать первой строкой выполнение метода суперкласса : super.onDraw(canvas);
В метод onDraw() передается объект canvas - холст, на котором мы и будем рисовать:
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); }
Таким образом, полный код класса на текущий момент:
public class LetterField extends View { double width; double height; Context context; public LetterField(Context _context, double _width, double _height) { super(_context); width=_width; height=_height; context=_context; } @Override protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension((int)width, (int)height); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); } }
Теперь нужно поместить этот компонент на экран. Код главного activity:
public class WordGameActivity extends Activity { private LetterField field; private AbsoluteLayout Abs; double width; double height; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main); Abs=new AbsoluteLayout(this); setContentView(Abs); Display display = getWindowManager().getDefaultDisplay(); width=display.getWidth(); height=display.getHeight(); field=new LetterField(this, (float)width, (float)(height)); AbsoluteLayout.LayoutParams params=new AbsoluteLayout.LayoutParams( (int)width,(int)(height),0,(int)(height*0) ); field.setLayoutParams(params); field.setBackgroundColor(0xBBFFFFFF); Abs.addView(field); } }Сначала мы объявим компоненты field (наш) и Abs, а также переменные width и height.
При создании приложения сначала выключим верхнюю панель и поместим наш компонент на дисплей с помощью кода, описанного здесь (вторая часть текста - про размещение кнопок). Запускаем прототип будущей игры на виртуальном устройстве - убеждаемся, что все работает - на экране серебряный прямоугольник.
Скачать исходник игры
Комментариев нет:
Отправить комментарий