Здравствуйте дорогие друзья.
Для того чтобы двигаться дальше я посчитал необходимым иметь доступ к как можно большему числу различных позиций.
Позиции будут загружаться из файла fen.txt
Файл в ОС Android. Операции чтения и записи
fen.txt (облако) необходимо разместить в корневом каталоге
Незабываем дать разрешение Бени на доступ к диску.
AndroidManifest.xml
package="com.example.myappshess"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
activity_main.xml
<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
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/read_file"
android:id="@+id/buttonRead"
android:onClick="onMyButtonClick"
android:layout_weight="33.0"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/next_pos"
android:id="@+id/buttonNext"
android:onClick="onMyButtonClick"
android:layout_weight="33.0"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/view_fen"
android:id="@+id/buttonFen"
android:onClick="onMyButtonClick"
android:layout_weight="33.0"
/>
</LinearLayout>
<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="34dp"
android:id="@+id/textView"
android:layout_gravity="center_horizontal" />
</LinearLayout>
MainActivity.java
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import android.os.Environment;
import android.graphics.Typeface;
...
public TextView myText,myTextView;
...
private static final String fileName = "fen.txt";
private static StringBuilder stringBuilder;
public static String subStrBuild="";
public String fontPath1;
public Typeface typeface1;
public int NumPos=0;
...
public void onBackPressed() {
if (bol) {
ShowAlert("exit");
if (stringBuilder!=null)
{
stringBuilder = null;
}
this.finish();
} else
...
public void onMyButtonClick(View view)
...
case R.id.buttonRead:
myTextView = (TextView) findViewById(R.id.textView);
myTextView.setTypeface(Typeface.DEFAULT);
myTextView.setText(StrFen);
//ShowAlert("загрузка");
readFile();
break;
case R.id.buttonNext:
NumPos++;
if (stringBuilder==null){break;}
int r = stringBuilder.indexOf(",");
if (r > 0)
{
subStrBuild = stringBuilder.substring(0, r);
StrFen = subStrBuild+"\n"+"задача √"+NumPos;
myTextView = (TextView) findViewById(R.id.textView);
myTextView.setTypeface(Typeface.DEFAULT);
myTextView.setText(subStrBuild);
stringBuilder = stringBuilder.delete(0,subStrBuild.length()+1);
//StrFen = subStrBuild;
}
break;
case R.id.buttonFen:
myTextView = (TextView) findViewById(R.id.textView);
if (subStrBuild.length()>15)
{
String s = subStrBuild.substring(0, subStrBuild.length()-15);
s=FenToVision.fenToVis(s);
if (s.compareTo("error") != 0)
{
setFont();
}
myTextView.setText(s);
}
else
{
showAlert(this, "ВАЖНО", "Сначала загрузите fen.txt");
}
break;
}
...
switch (BitSwth)
...
case 7:{
number1 = 0;
test = true;
break;
}
...
number2=0x8000000000000000L>>>NumPol;
if (test){
MoveGenerator.TestPos(desc);
test = false;
}
...
private void readFile() {
int k = 0;
NumPos=1;
subStrBuild = "";
/*
создается объект файла
*/
File myFile = new File(Environment.getExternalStorageDirectory().toString() + "/" + fileName);
try {
FileInputStream inputStream = new FileInputStream(myFile);
/*
* Буфферезируем данные из выходного потока файла
*/
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
/*
* Класс для создания строк из последовательностей символов
*/
stringBuilder = new StringBuilder();
String line;
try {
/*
* Производим построчное считывание данных из файла в конструктор строки,
* Псоле того, как данные закончились, производим вывод текста в TextView
*/
while ((line = bufferedReader.readLine()) != null){
stringBuilder.append(line);
k++;
}
ShowAlert("кол-во загруженных строк равно " + k);
int r = stringBuilder.indexOf(",");
if (r > 0)
{
subStrBuild = stringBuilder.substring(0, r);
myTextView = (TextView) findViewById(R.id.textView); myTextView.setText(subStrBuild);
stringBuilder = stringBuilder.delete(0,subStrBuild.length()+1);
}
}
catch (IOException e)
{
ShowAlert("Ошибка1");
e.printStackTrace();
}
} catch
(FileNotFoundException e)
{
ShowAlert("Ошибка2");
e.printStackTrace();
}
}
public void setFont()
{
fontPath1 = "fonts/gc2004d.ttf";
typeface1 = Typeface.createFromAsset(getAssets(), fontPath1);
myTextView.setTypeface(typeface1);
}
FenToVision.java
package com.example.myappshess;
public class FenToVision {
public static String fenToVis(String sfen)
{
String strN = "12345678";
String strF = "KQRBNPkqrbnp";
String s01="";
String svis="";
int num = 0;
int n = 0;
int p = 0;
int k = 0;
char[] charNew = new char[7];
charNew[0]=163;//163 бел клетка 164 черн клетка
charNew[1]=48;//48-51 короли
charNew[2]=71;//71-74 ферзи
charNew[3]=87;//87-9/ ладьи
charNew[4]=109;//109-112 слоны
charNew[5]=169;//168-172 кони
charNew[6]=185;//185-188 пешки
p=0;
sfen+="/";
try {
k=sfen.length();
for (int i = 1; i < k; i++)
{
s01 = sfen.substring(i-1, i);
if (s01.compareTo("/") == 0)
{
if (p!=8)
{
return svis="error";
}//ошибка fen строки
p = 0;
svis+="\n";//(char)13+(char)10;
n^=1;
continue ;
} //if
num=strN.indexOf(s01)+1;
if (num>=0)
{
for (int j = 1; j <= num; j++)
{
svis+=String.valueOf((char)(charNew[0]+n));
p++;
n^=1;
}//for
}//if
num=strF.indexOf(s01)+1;
if (num>0)
{
p++;
if (num>6)
{
svis+=String.valueOf((char)(charNew[num-6]+n+2));
}
else
{
svis+=String.valueOf((char)(charNew[num]+n));
}//if
n^=1;
}//if
}//for
}//try
catch (Exception e)
{
if (MainActivity.getInstance()!=null){
MainActivity.showAlert(MainActivity.getInstance(),"FenToVision", "FEN ERROR");
}//lf
}
return svis;
}
}//class
strings.xml
<string name="read_file">fen.txt</string>
<string name="next_pos">еще позиция</string>
<string name="view_fen">позиция</string>
Используем сторонние шрифты для TextView
gc2004d.ttf (облако)
The GC font series was developed by David L. Brown for The Good Companions, and is used exclusively for diagrams on www.StrateGems.org
Серия шрифтов GC была разработана Дэвидом Л. Брауном для The Good Companions и используется исключительно для диаграмм на www.StrateGems.org
внутри папки assets создаем папку fonts :
assets должна находится на одном уровне с папкой res приложения
в папку fonts помещаем наши шрифты
Каждый начинающий шахматист знает, что пешка, которая начинает игру, может пойти не только на одну, но и на две клетки вперед. Но это правило появилось не сразу, а в 1280 году в Испании
Первоначально ферзь мог двигаться только на одну клетку по диагонали, затем на две. Так продолжалось до тех пор, пока королева Изабелла Испанская не приказала сделать ферзя (а в Европе его называют королевой) самой сильной фигурой на доске.
До встречи
PS добавлены несколько правок
- Только вертикальная ориентация
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
- диактивировано текстовое поле окна просмотра позиций
activity_main.xml
<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="34dp"
android:id="@+id/textView"
android:enabled="false"
android:layout_gravity="center_horizontal" />
- отключено отображение засечек времени
MainActivity.java
// showAlert(context, "время", time_count);
MoveGenerator.java
//ShowNsg("Время выполнения кода:", time_count);
И напоследок весь проект
benya_geniuse_14_задача15LSB (облако)
проект запоролен. пароль скрыт в названии файла
это 15 задача в fen.txt, значение бита LSB