Талеи на С++, небольшая оптимзация и прочее

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);
}

С++, Славяне, образование, программирование, досуг, время

Previous post Next post
Up