Здравствуйте дорогие друзья.
Алгоритм визуализации о котором я рассказал ранее будет выглядеть именно так.
Теперь наш Беня может помахать нам ручкой т.е. показать наглядно шахматную позицию.
Чуть позже мы научим его понимать FEN строку и отображать ее на экране в понятном нам виде.
Работа этой части алгоритма визуализации выглядит следующим образом
- берем часть изображения, с соответствующей фигурой и рисуем эту фигуру в соответствующем поле доски
MainActivity.java
package com.example.myappshess;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import com.example.myappshess.R;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
}
public Boolean bol = true;
public void onBackPressed()
{
if (bol) {
ShowAlert("exit");
this.finish();
}
bol = true;
setContentView(new DrawView(this)); setContentView(R.layout.activity_main);
}
public void ShowAlert (String str) {
AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); Toast.makeText(getApplicationContext(),str, Toast.LENGTH_SHORT).show();
}
public void onMyButtonClick1(View view)
{
bol = false;
setContentView(new DrawView(this));
ShowAlert("нажмите кнопку -назад- чтобы вернуться");
}
class DrawView extends View {
Paint paint;
Bitmap bitmap1,bitmap2;
Bitmap[] arrayOfBitmap = new Bitmap[12];
public DrawView(Context context) {
super(context);
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
//доска
bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.reduced_board);
//фигуры
bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.reduced_peice);
/*
createBitmap(Bitmap source, int x, int y, int width, int height) - Returns an immutable bitmap from the specified subset of the source bitmap.
*/
for(int i = 0; i < 6; i++) {
//черные
arrayOfBitmap[i] = Bitmap.createBitmap(bitmap2, i*60,60,60, 60);
//белые
arrayOfBitmap[i+6] = Bitmap.createBitmap(bitmap2, i*60,0,60, 60);
}
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawARGB(80, 102, 204, 255);
//доска
canvas.drawBitmap(bitmap1, 0, 0, paint);
//пример начальной позиции
//король
canvas.drawBitmap(arrayOfBitmap[0], 266, 22, paint);
canvas.drawBitmap(arrayOfBitmap[6], 266, 442, paint);
//ферзь
canvas.drawBitmap(arrayOfBitmap[1], 206, 22, paint);
canvas.drawBitmap(arrayOfBitmap[7], 206, 442, paint);
//слон
canvas.drawBitmap(arrayOfBitmap[3], 326, 22, paint);
canvas.drawBitmap(arrayOfBitmap[3], 146, 22, paint);
canvas.drawBitmap(arrayOfBitmap[9], 326, 442, paint);
canvas.drawBitmap(arrayOfBitmap[9], 146, 442, paint);
//конь
canvas.drawBitmap(arrayOfBitmap[4], 386, 22, paint);
canvas.drawBitmap(arrayOfBitmap[4], 86, 22, paint);
canvas.drawBitmap(arrayOfBitmap[10], 386, 442, paint);
canvas.drawBitmap(arrayOfBitmap[10], 86, 442, paint);
//ладья
canvas.drawBitmap(arrayOfBitmap[2], 446, 22, paint);
canvas.drawBitmap(arrayOfBitmap[2], 26, 22, paint);
canvas.drawBitmap(arrayOfBitmap[8], 446, 442, paint);
canvas.drawBitmap(arrayOfBitmap[8], 26, 442, paint);
//пешки
for(int i = 0; i < 8; i++)
{
canvas.drawBitmap(arrayOfBitmap[5], 26+i*60, 82, paint);
canvas.drawBitmap(arrayOfBitmap[11], 26+i*60, 382, paint);
}
// canvas.drawBitmap(bitmap2, 86, 82, paint);
// canvas.drawBitmap(bitmap2, 26, 22, paint);
}
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top">
<EditText
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="@string/fen"
android:layout_weight="100.0" />
<Button
android:id="@+id/add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/but1"
android:onClick="onMyButtonClick1"
/>
</LinearLayout>
<TextView
android:layout_gravity="left"
android:id="@android:id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pos"/>
<TextView
android:layout_gravity="left"
android:id="@android:id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/back"/>
</LinearLayout>
strings.xml
<resources>
<string name="app_name">benya_geniuse</string>
<string name="title_activity_main">MAIN_ACTIVITY</string>
<string name="fen">rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1</string>
<string name="but1">показать</string>
<string name="pos">Задайте позицию FEN строкой
</string>
<string name="back">чтобы закрыть приложение нажмите кнопку - назад
</string>
</resources>
Важно
Фигуры должны быть в формате PNG с прозрачным фоном
Пришел мужик в гости к соседу, смотрит, а тот шахматную позицию анализирует.
- А жена твоя где?
- В сарае - дрова колет.
- Ну-у, сосед, и не стыдно тебе? Ты тут сидишь в тепле, позицию анализируешь, а она там на холоде дрова колет.
- А что я могу сделать, если она в шахматы играть не умеет?
продолжение следует ...
Проект (Облако)
До встречи