Feb 12, 2015 17:27
Во первых, убран рандом. Теперь буду разрабатывать неебольшой ИИ. Ходы защиты и нападения в моих руках для отладки.
Во вторых, победа защищающихся изменена. Теперь программа не использует циклы, королю достаточно достигнуть девятки. Благодаря именованным константам я парился над этим всего полминуты. Теперь координаты игры более понятны. Всё ж от 1-го до 9-ми лучше, чем от 0 до 8-ми.
В третьих, введена функция "перепрыг". Отныне фигуры не будут вести себя как кони в шахматах.
В четвёртых, введена победа нападения. Можно с уверенностью сказать, что в мою консольку можно поиграть вдоём.
Сам код, изменения выделены.
#include
#include
# include
#define A 11
#define B 11
int pole[A][B]={{9,9,9,9,9,9,9,9,9,9,9},
{9,0,0,0,1,1,1,0,0,0,9},
{9,0,5,0,0,1,0,0,0,0,9},
{9,0,1,0,0,2,0,0,0,0,9},
{9,1,0,0,0,2,0,0,0,1,9},
{9,1,1,2,2,5,2,2,1,1,9},
{9,1,0,0,0,2,0,0,0,1,9},
{9,0,0,0,0,2,0,0,0,0,9},
{9,0,0,0,0,1,0,0,0,0,9},
{9,0,0,0,1,1,1,0,0,0,9},
{9,9,9,9,9,9,9,9,9,9,9}};
int contr=0;
int pereprig (int k1, int k3) {
for (int p=k1;p
int ataka ( int k3, int k4,int zn1=1, int zn2=2, int pe1=2, int pe2=0,int pe3=1, int pe4=0, int rez=1, int rez2=0)
{
if ( pole [k3][k4]==zn1 and pole[k3+pe1][k4+pe2]==zn1 and pole[k3+pe3][k4+pe4]==zn2) /// атака фигур
{
pole[k3+rez][k4+rez2]=0;
printf ("figura unictojena\n");
}
return (0);
}
int pobedN (int k3,int k4,int p1=2,int p2=0,int p3=1, int p4=0) {
if ( pole [k3][k4]==1 and pole[k3+p1][k4+p2]==1 and pole[k3+p3][k4+p4]==5) /// победа нападения
{
printf ("pobeda napadenia\n");
contr=3;
return contr;
}
return (0);
}
int main () {
printf ( "1 - napadenie, 2- zasita, 5- corol, 0 - pustota\n"); /// начальные условия
for ( int i=0; iwhile (1<2){
while (1<2) {
int kl1, kl2, kl3,kl4;
printf ("vvedite znacenie\n");
scanf ("%d", &kl1); // всегда обращать внимание на scanf
scanf ("%d", &kl2);
printf (" kletka 1 ravna = %d\n", pole [kl1][kl2]);
printf ("vvedite znacenie\n");
scanf ("%d", &kl3);
scanf ("%d", &kl4);
printf ("kletka 2 ravna = %d\n", pole [kl3][kl4]);
pereprig(kl1,kl3);
pereprig (kl2,kl4);
if (contr==1){
contr=0;
continue;}
if (pole[kl1][kl2]==pole[kl3][kl4]) {continue;} // защита от дурака
if (kl1==kl3 or kl2==kl4) // вертикаль и горизонталь
{
if (pole[kl1][kl2]==1 and pole [kl3][kl4]==0) /// ход нападения
{
pole [kl1][kl2]=0;
pole [kl3][kl4]=1;
ataka ( kl3, kl4); //n1
ataka ( kl3, kl4, 1, 2, 0, 2,0, 1, 0, 1); //n2
ataka ( kl3, kl4, 1, 2, -2, 0,-1, 0, -1, 0); //n3
ataka ( kl3, kl4, 1, 2, 0, -2,0, -1, 0, -1); //n4
pobedN( kl3,kl4); // победа нападающих
pobedN( kl3, kl4,-2,0,-1,0);
pobedN( kl3, kl4,0,2,0,1);
pobedN( kl3, kl4,0,-2,0,-1);
for ( int i=0; i if (contr==3) {
return(0);}
break;
}
}
}
int vl1, vl2, vl3,vl4;
printf ("/////////\n");
while (1<2){
scanf ("%d", &vl1); // всегда обращать внимание на scanf
scanf ("%d", &vl2);
printf (" kletka 1 ravna = %d\n", pole [vl1][vl2]);
printf ("vvedite znacenie\n");
scanf ("%d", &vl3);
scanf ("%d", &vl4);
printf ("kletka 2 ravna = %d\n", pole [vl3][vl4]);
pereprig(vl1,vl3);
pereprig (vl2,vl4);
if (contr==1){
contr=0;
continue;}
if (pole[vl1][vl2]==pole[vl3][vl4]) {continue;} // защита от дурака
if (vl1==vl3 or vl2==vl4)
{
if (pole[vl1][vl2]==2 and pole [vl3][vl4]==0) // ход обороны
{
pole [vl1][vl2]=0;
pole [vl3][vl4]=2;
ataka ( vl3, vl4, 2,1); //z1
ataka ( vl3, vl4, 2, 1, 0, 2,0, 1, 0, 1); //z2
ataka ( vl3, vl4, 2, 1, -2, 0,-1, 0, -1, 0); //z3
ataka ( vl3, vl4, 2, 1, 0, -2,0, -1, 0, -1); //z4
}
if (pole[vl1][vl2]==5)
{ if (pole [vl3][vl4]==0) // ход короля
{
pole [vl1][vl2]=0;
pole [vl3][vl4]=5;
}
if (pole [vl3][vl4]==9)
{
pole [vl1][vl2]=0;
contr=1;
}
}
for ( int i=0; i if (contr==1){
contr=0;
printf ("zasita pobedila\n");
return (0);}
break;
}
}
}
return (0);
}
С++,
Славяне,
образование,
программирование,
досуг,
время