Начинаем делать игру "виселица" для 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.При создании приложения сначала выключим верхнюю панель и поместим наш компонент на дисплей с помощью кода, описанного здесь (вторая часть текста - про размещение кнопок). Запускаем прототип будущей игры на виртуальном устройстве - убеждаемся, что все работает - на экране серебряный прямоугольник.
Скачать исходник игры

Комментариев нет:
Отправить комментарий