#include "stdafx.h"
#include <stdio.h>
#include <math.h>
#include <locale.h>
struct chess //координата поля - 1 буква и соответствующий номер, 2 цифра
{
int a;
char b_char;
int b;
};
int char_to_int(char b_char) //переводит буквенную координату в числовую: a - 1, b - 2,...
{
int b;
b = (int)b_char - (int)'а' + 1;
return b;
}
//функция turn описывает возможные ходы коня при направлениях 1-8
chess turn(chess st, int dir)
{
chess fn;
switch (dir)
{
case 1:
fn.a = st.a - 1;
fn.b = st.b + 2;
fn.b_char = 0; //???
break;
case 2:
fn.a = st.a - 2; fn.b = st.b + 1; break;
case 3:
fn.a = st.a - 2; fn.b = st.b - 1; break;
case 4:
fn.a = st.a - 1; fn.b = st.b - 2; break;
case 5:
fn.a = st.a + 1; fn.b = st.b - 2; break;
case 6:
fn.a = st.a + 2; fn.b = st.b - 1; break;
case 7:
fn.a = st.a + 2; fn.b = st.b + 1; break;
case 8:
fn.a = st.a + 1; fn.b = st.b + 2; break;
default:
break;
}
return fn;
}
int place(chess st, chess fn)
{
int place, ro_height, ro_width;
ro_height = fn.a - st.a;
ro_width = fn.b - fn.b;
if (ro_height > 0)
if (ro_width > 0)
if (ro_height < ro_width)
place = 1;
else place = 2;
else
if (abs(ro_height) < abs(ro_width))
place = 4;
else place = 3;
else
if (ro_width > 0)
if (abs(ro_height) < abs(ro_width))
place = 8;
else place = 7;
else
if (abs(ro_height) > abs(ro_width))
place = 6;
else place = 5;
return place;
}
void main()
{
chess F[8][8];
int i, aux_int;
char j,aux_c;
chess fin;
for (j = 0; j <= 8; j++)
for (i = 'a'; i <= 'h'; i++)
{
F[i][j].a = 0;
F[i][j].b_char = 'z';
F[i][j].b = 0;
}
printf("enter the starting square coordinates: \n");
scanf("%c%i", &aux_c, &aux_int);
F[aux_int][char_to_int(aux_c)].a = aux_int;
F[aux_int][char_to_int(aux_c)].b_char = aux_c;
F[aux_int][char_to_int(aux_c)].b = char_to_int(aux_c);
printf("enter the finishing square coordinates: \n");
scanf("%c%i", &fin.a, &fin.b_char);
fin.b = char_to_int(fin.b_char);
F[fin.a][char_to_int(fin.b_char)].a = fin.a;
F[fin.a][char_to_int(fin.b_char)].b_char = &fin.b_char;
F[fin.a][char_to_int(fin.b_char)].b = char_to_int(fin.b_char);
do
{
turn(F[aux_int][char_to_int(aux_c)], place(F[aux_int][char_to_int(aux_c)], F[fin.a][char_to_int(fin.b_char)]));
} while (/*взаимное расположение начальной и конечной координаты не критическое*/);
}
Be the first to comment
You can use [html][/html], [css][/css], [php][/php] and more to embed the code. Urls are automatically hyperlinked. Line breaks and paragraphs are automatically generated.