Translate

вторник, 22 мая 2012 г.

Пишем игру "виселица" на android. Программное рисование и вывод текста.

 Это вторая часть повествования о написании простой игры со словами на андроид. Первая часть.



 Сперва нам надо нарисовать буквы в нижней части компонента LetterField по алфавиту. Для этого нам придется объявить следующие поля, отвечающие за их отображение:
  
String alphabet="АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
double letter_size=20;
int letter_color=Color.BLACK;
int rows=7;
int columns=6;
double off_const=0.4;
double opt_a=0.20;
double opt_b=0.65;
  Перваое - строка алфавита большими буквами
  Второе и третье - параметры выводимых букв - кегль и цвет шрифта.
  Третье и четвертое - количество столбцов и строк выводимых букв. Их произведение должно быть больше или равно количеству букв в алфавите.
  Пятое - размер отступа таблицы в буквами от верхнего края (1-высота дисплея)
  Шестое и седьмое - специальные коэффициенты, которыми мы будем выравнивать положение букв по вертикали и горизонтали, чтобы композиция красивее смотрелась.

  В методе onDraw(), который исполняется тогда, когда нужно перерисовать компонент, объявим объект типа Paint, который будет содержать различные параметры для рисования объектов: толщины линий, цвета, параметры шрифтов:
Paint paint=new Paint();
paint.setTextSize((float) letter_size);
paint.setColor(letter_color);
paint.setStrokeWidth(1);

  Мы только что установили кегль текста, цвет и ширину линий.
double red_height=(1-off_const)*height;


  Определим важную переменную red_height, равную той части высоты дисплея, которая занята буквами.

  Код помещения букв будет выглядеть так. Используем для рисования графики методы класса canvas:
 -drawLine() - рисование линии от пункта А до пункта B
 -drawText() - написать текст в точке с заданными координатами

for (int j=0;j<columns;j++){//Выполняем для каждой строки
          
            float YLine=(float) ((double)(j)/(double)(columns)*red_height+off_const*height);//Находим координату Y горизонтальной линии сетки
            canvas.drawLine((float)(0),  (float)(YLine),  (float)(width),  (float)(YLine),  paint);//Чертим линию сетки
          
            //Сейчас будем ставить буквы
            for (int i=0;i<rows;i++){//Обходим каждый столбец
                if(j*rows+i+1<=alphabet.length()){//Определяем номер буквы, помещаемый в ячейку и убеждаемся, что он допустим
                  
                   float X=(float) ((double)(i)/(double)(rows)*width+opt_a/(double)(columns)*height); //Определим X местоположения буквы (обратите внимание на смещение opt_a/(double)(columns)*height для красоты)
                   float Y=(float) ((double)(j)/(double)(columns)*red_height+opt_b/(double)(columns)*red_height+off_const*height);//Определим Y местоположения буквы - аналогично
                                              
                   canvas.drawText(alphabet.charAt(j*rows+i)+"", X, Y, paint);//Вывод буквы
                 
                }
            }
}
      
//Проводим вертикальные линии сетки способом, аналогичным горизонтальным
for (int i=0;i<=rows;i++){      
            float XLine=(float) ((double)(i)/(double)(rows)*width);
            canvas.drawLine((float)(XLine),  (float)(height*off_const),  (float)(XLine),  (float)(height),  paint);  
}
  Включив девайс, любуемся на выведенные буквы.


Скачать исходник игры

Комментариев нет:

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

Related Posts Plugin for WordPress, Blogger...