【問題】五子棋的AI


Recommended Posts

  • 9 months later...

話說這東西其實做好很久了

不要問我這東西

為什麼

#include <cstdlib>

#include <iostream>

printf

XD

#include <cstdlib>
#include <iostream>
#include <conio.h>


#define xmax 19
#define ymax 19
#define curicon "■"
#define empty "┼"
#define p1c "○"//參考用:☆★ ○●♀♂
#define p2c "●"
#define p1cw "☆"
#define p2cw "★"

//AI權值
#define SD4 94011
#define ED4 5000
#define SA3 2511
#define EA3 2500
#define ED3 100
#define EA2 50
#define ED2 20
#define EA1 10

using namespace std;

const char fa[19][3]={"1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J",};



void rester(int);
int set(int,int,int);
void show (void);
int check(int,int);
int ai(void);
int btov(void);

char b[xmax][ymax],cursor[2],r[2][xmax][ymax];
int now;

char playername[2][21];
char defkey[7][2]={{27,0},{-32,72},{-32,80},{-32,75},{-32,77},{32,0},{'r',0}};//0:ESC 1:上 2:下 3:左 4:右 5:放置(空白) 6:悔棋

char wontext[100]="%s獲勝!!\n%s失敗!!\n" ;
char is_beep=0,is_comp=0;
char stat[5],out;


int main(int argc, char *argv[])
{
firstdot:
/*

printf("%d",getch());
system("PAUSE");
*/

//初始化開始
char inkey[2]={0,0};
now = 0;
out = 0;
cursor[0] = (int)(xmax / 2 - (xmax % 2)*0.5 );
cursor[1] = (int)(ymax / 2 - (ymax % 2)*0.5 );
for (int cy = 0;cy<ymax;cy++)
for (int cx = 0;cx<xmax;cx++)
b[cx][cy] = 0;

strcpy(playername[0],"");
strcpy(playername[1],"");
//初始化結束

do{//主目錄
system("cls");
printf("┌─────────────────┐\n");
printf("│五子棋     棋盤大小: %2dX%2d │\n",xmax,ymax);
printf("│     v3.14159265358 by Pichu │\n");
printf("├─────────────────┤\n");
printf("│(1)開始遊戲            │\n");
printf("│(2)遊戲設定           │\n");
printf("│(3)遊戲說明           │\n");
printf("│(4)遊戲製作            │\n");
printf("│(0)離開遊戲            │\n");
printf("└─────────────────┘\n");
inkey[0] = getch();
if (inkey[0] == '1'){
do{
system("cls");
printf("┌─────────────────┐\n");
printf("│五子棋              │\n");
printf("│     v3.14159265358 by Pichu │\n");
printf("├─────────────────┤\n");
printf("│(1)單人遊戲            │\n");
printf("│(2)雙人遊戲           │\n");
printf("│(0)返回上一層           │\n");
printf("└─────────────────┘\n");
inkey[0] = getch();
if (inkey[0] == '1'){
do{
system("cls");
printf("┌─────────────────┐\n");
printf("│五子棋              │\n");
printf("│       v3.1415926 by Pichu │\n");
printf("├─────────────────┤\n");
printf("│(1)玩家先             │\n");
printf("│(2)電腦先           │\n");
printf("│(0)返回上一層           │\n");
printf("└─────────────────┘\n");
inkey[0]=getch();
if (inkey[0] == '1'){
now = 3;
is_comp = 1;
break;
}
if (inkey[0] == '2'){
now = 2;
is_comp = 1;
break;
}
}while(inkey[0] != '0');
inkey[0] = 1;
}
else if (inkey[0] == '2'){
is_comp = 0;
now = 2;
break;
}
}while((now<2)and(inkey[0] != '0'));
inkey[0] = 1;
}
if (inkey[0] == '2') {//主目錄--遊戲設定
do{
system("cls");
printf("┌─────────────────┐\n");
printf("│遊戲設定             │\n");
printf("│           │\n");
printf("├─────────────────┤\n");
printf("│(1)按鍵控制            │\n");
printf("│(2)遊戲音效           │\n");
//printf("│(3)提示文字            │\n");
printf("│(0)返回上一層           │\n");
printf("└─────────────────┘\n");
inkey[0] = getch();
if (inkey[0] == '1') {//主目錄--遊戲設定--按鍵控制
do{
system("cls");
printf("┌─────────────────┐\n");
printf("│按鍵控制             │\n");
printf("│ 請選擇欲修改的項目 │\n");
printf("├─────────────────┤\n");
if (defkey[0][0]==27)
printf("│(1)離開:%26s│\n","<esc>");
else
printf("│(1)離開:%26c│\n",defkey[0][0]);
printf("│(2)方向控制     │\n");
if ((defkey[1][0] == -32) && (defkey[1][1] == 72))
printf("│ ├上:%26s│\n","<up>");
else
printf("│ ├上:%26c│\n",defkey[1][0]);
if ((defkey[2][0] == -32) && (defkey[2][1] == 80))
printf("│ ├下:%26s│\n","<down>");
else
printf("│ ├下:%26c│\n",defkey[2][0]);
if ((defkey[3][0] == -32) && (defkey[3][1] == 75))
printf("│ ├左:%26s│\n","<left>");
else
printf("│ ├左:%26c│\n",defkey[3][0]);
if ((defkey[4][0] == -32) && (defkey[4][1] == 77))
printf("│ ├右:%26s│\n","<right>");
else
printf("│ ├右:%26c│\n",defkey[4][0]);
if (defkey[5][0]==32)
printf("│(3)放置棋子:%22s│\n","<space>");
else
printf("│(3)放置棋子:%22c│\n",defkey[5][0]);
printf("│(4)悔棋:%26c│\n",defkey[6][0]);
printf("│(0)返回上一層           │\n");
printf("└─────────────────┘\n");
inkey[0] = getch();
if (inkey[0] == '1') {
printf("離開:");
defkey[0][0]=getch();
}
if (inkey[0] == '2') {
printf("上:");
defkey[1][0] = getch();
if (defkey[1][0] == -32) defkey[1][1] = getch();
printf("下:");
defkey[2][0]=getch();
if (defkey[2][0] == -32) defkey[2][1] = getch();
printf("左:");
defkey[3][0]=getch();
if (defkey[3][0] == -32) defkey[3][1] = getch();
printf("右:");
defkey[4][0]=getch();
if (defkey[4][0] == -32) defkey[4][1] = getch();
}
if (inkey[0] == '3') {
printf("放置棋子:");
defkey[5][0]=getch();
}
if (inkey[0] == '4') {
printf("悔棋:");
defkey[5][0]=getch();
}
}while(inkey[0] != '0');
inkey[0] = 0;
}
if (inkey[0] == '2'){//主目錄--遊戲設定--音效設定
do{
system("cls");
printf("┌─────────────────┐\n");
printf("│音效設定             │\n");
printf("│ 請選擇欲修改的項目 │\n");
printf("├─────────────────┤\n");
if (is_beep)
printf("│(1)音效狀態:          開│\n");
else
printf("│(1)音效狀態:          關│\n");
//printf("│(2)音效次數           │\n");
printf("│(0)返回上一層           │\n");
printf("└─────────────────┘\n");
inkey[0] = getch();
}while(inkey[0] != '0');
inkey[0] = 0;
}
}while(inkey[0] != '0');
inkey[0] = 0;
}
if (inkey[0] == '3') {
system("cls");
printf("┌─────────────────┐\n");
printf("│遊戲說明             │\n");
printf("│         五子棋│\n");
printf("├─────────────────┤\n");
printf("│  不需要想太多,這真的只是五子棋│\n");
printf("│,這應該是皮丘寫過最安全的遊戲之一│\n");
printf("│。            │\n");
printf("│按鍵說明:            │\n");
if (defkey[0][0]==27)
printf("│(1)離開:%26s│\n","<esc>");
else
printf("│(1)離開:%26c│\n",defkey[0][0]);
printf("│(2)方向控制            │\n");
if ((defkey[1][0] == -32) && (defkey[1][1] == 72))
printf("│ ├上:%26s│\n","<up>");
else
printf("│ ├上:%26c│\n",defkey[1][0]);
if ((defkey[2][0] == -32) && (defkey[2][1] == 80))
printf("│ ├下:%26s│\n","<down>");
else
printf("│ ├下:%26c│\n",defkey[2][0]);
if ((defkey[3][0] == -32) && (defkey[3][1] == 75))
printf("│ ├左:%26s│\n","<left>");
else
printf("│ ├左:%26c│\n",defkey[3][0]);
if ((defkey[4][0] == -32) && (defkey[4][1] == 77))
printf("│ ├右:%26s│\n","<right>");
else
printf("│ ├右:%26c│\n",defkey[4][0]);
if (defkey[5][0]==32)
printf("│(3)放置棋子:%22s│\n","<space>");
else
printf("│(3)放置棋子:%22c│\n",defkey[5][0]);
printf("│(4)悔棋:%26c│\n",defkey[6][0]);
printf("│以上            │\n");
printf("│        Pichu  │\n");
printf("└─────────────────┘\n");
system("pause");
}
if (inkey[0] == '4') {
system("cls");
printf("┌─────────────────┐\n");
printf("│遊戲製作             │\n");
printf("│          皮丘│\n");
printf("├─────────────────┤\n");
printf("│遊戲測試            │\n");
printf("│         陳彥安│\n");
printf("│         小小冠│\n");
printf("│         大明星│\n");
printf("│          小峰│\n");
//printf("│           │\n");
printf("├─────────────────┤\n");
printf("│特別感謝            │\n");
printf("│     資訊老師賴和隆│\n");
printf("│     中正高中童軍團│\n");
printf("└─────────────────┘\n");
system("pause");
}
if (inkey[0] == '0') return 0;
}while(now < 2);



//資料蒐集
do{
if (is_comp){
printf("請輸入玩家姓名\n");
scanf("%s",&playername[1]);
strcpy(playername[0],"Pichu's AI");
}else{
printf("請輸入玩家一姓名\n");
scanf("%s",&playername[0]);
printf("請輸入玩家二姓名\n");
scanf("%s",&playername[1]);
}
printf("以上資料是否需要修改(y/any key)? ");
inkey[0] = getche();

}while((inkey[0] == 'y') or (inkey[0] == 'Y'));
//資料蒐集結束

do{
start:
out = 0;
if (is_comp){
if ((now % 2) == 0){
now +=1 + ai();
if (is_beep)
for (int bi = 0 ; bi < 1 ; bi++)
printf("%c",7);
}
/* if ((now % 2) == 1){

now +=1 + ai();
if (is_beep)
for (int bi = 0 ; bi < 1 ; bi++)
printf("%c",7);

} *///電腦對下
}
show();
inkey[0] = getch();
if (inkey[0] == -32) inkey[1] = getch();
printf("%d,%d",inkey[0],inkey[1]);
if (inkey[0] == defkey[6][0]){
rester(1);
now--;
goto start;}
//移動開始
if (inkey[0] == 'p') is_comp = 1;
if (inkey[0] == 'o') is_comp = 0;
if ((inkey[0] == defkey[1][0]) && (inkey[1] == defkey[1][1])) cursor[1]--;
if ((inkey[0] == defkey[2][0]) && (inkey[1] == defkey[2][1])) cursor[1]++;
if ((inkey[0] == defkey[3][0]) && (inkey[1] == defkey[3][1])) cursor[0]--;
if ((inkey[0] == defkey[4][0]) && (inkey[1] == defkey[4][1])) cursor[0]++;
if (cursor[0] < 0) cursor[0] = 0;//避免暴走
if (cursor[1] < 0) cursor[1] = 0;
if (cursor[0] > xmax-1) cursor[0] = xmax-1;
if (cursor[1] > ymax-1) cursor[1] = ymax-1;
//移動結束
if (inkey[0] == defkey[5][0]) {
rester(0);
now +=1 + set(cursor[0],cursor[1],1+(now % 2));
if (is_beep)
for (int bi = 0 ; bi < 1 ; bi++)
printf("%c",7);
// now = 0 ;
}
}while((inkey[0] != defkey[0][0]) and !out);
inkey[0] = getch();
if (inkey[0] == defkey[6][0]){
rester(1);
now--;
goto start;
}
goto firstdot;
return EXIT_SUCCESS;
}//-------------------------------------------------------main在這裡~~ ^^^^

int set(int x,int y,int player){
if (player == 0){
b[x][y]=0;return 0;
}else if (b[x][y] ==0 ){
b[x][y] = player;
if (check(x,y) > 0){
out = 1;
show();
if (player == 1)
printf(wontext,playername[0],playername[1]) ;
else
printf(wontext,playername[1],playername[0]) ;
if (is_beep)
for (int bi = 0 ; bi < 5 ; bi++)
printf("%c",7);
system("pause");
}
if (check(x,y) == -1 ){
out = 1;
show();
printf("%s與%s平手!!\n",playername[0],playername[1]) ;
if (is_beep)
for (int bi = 0 ; bi < 10 ; bi++)
printf("%c",7);
system("pause");
}
return 0;
}else if (b[x][y] ==player ){
printf("不要把兩顆棋疊在一起!!\n");
if (is_beep)
for (int bi = 0 ; bi < 10 ; bi++)
printf("%c",7);
system("PAUSE");return -1;
}else{
printf("不要把棋疊在別人的棋上!!\n");
if (is_beep)
for (int bi = 0 ; bi < 10 ; bi++)
printf("%c",7);
system("PAUSE");return -1;
}
}

void show(void){
system("cls");
printf("@");
for (int fk = 0; fk < xmax;fk++){
printf("%s",fa[fk]);
}
printf("\n");
for (int sy = 0;sy < ymax ; sy++){
printf("%s",fa[sy]);
switch (sy){
}
for(int sx = 0 ; sx < xmax; sx++){
if((sx == cursor[0]) && (sy == cursor[1])){
printf(curicon);continue;}//印出游標
switch (b[sx][sy]){
case 0:
printf(empty);break;
case 1:
printf(p1c);break;
case 2:
printf(p2c);break;
case 3:
printf(p1cw);break;
case 4:
printf(p2cw);break;
}
}
cout<<endl;
}

}

int check(int x,int y){
int win=0;
if ((b[x][y] == 1)or(b[x][y] == 2)){
int k,num;
num=0;
k=1;

while((b[x][y]==b[x+k][y]) and (x+k < xmax)){

if (++num >= 4){
for(k = 0 ; k <= 4 ; k++)
b[x+k][y] +=2;
win++;
}
k++;
}
k=1;
while((b[x][y]==b[x-k][y]) and (x-k >= 0)){
if (++num >= 4){
for(int fk = 0 ; fk <= 4 ; fk++)
b[x-k+fk][y] +=2;
win++;
}
k++;
}//1
num=0;
k=1;
while((b[x][y]==b[x][y+k]) and (y+k < ymax)){
if (++num >= 4){
for(k = 0 ; k <= 4 ; k++)
b[x][y+k] +=2;win++;
}
k++;
}
k=1;
while((b[x][y]==b[x][y-k]) and (y-k >= 0)){
if (++num >= 4){
for(int fk = 0 ; fk <= 4 ; fk++)
b[x][y-k+fk] +=2;
win++;
}
k++;
}//2
num=0;
k=1;
while((b[x][y]==b[x+k][y+k]) and (x+k < xmax) and (y+k < ymax)){
if (++num >= 4){
for(k = 0 ; k <= 4 ; k++)
b[x+k][y+k] +=2;
win++;
}
k++;
}
k=1;
while((b[x][y]==b[x-k][y-k]) and (x-k >= 0) and (y-k >= 0)){
if (++num >= 4){
for(int fk = 0 ; fk <= 4 ; fk++)
b[x-k+fk][y-k+fk] +=2;
win++;
}
k++;
}//3
num=0;
k=1;
while((b[x][y]==b[x+k][y-k]) and (x+k < xmax) and (y-k >= 0)){
if (++num >= 4){
for(k = 0 ; k <= 4 ; k++)
b[x+k][y-k] +=2;win++;
}
k++;
}
k=1;
while((b[x][y]==b[x-k][y+k]) and (x-k >= 0) and (y+k < ymax)){
if (++num >= 4){
for(int fk = 0 ; fk <= 4 ; fk++)
b[x-k+fk][y+k-fk] +=2;
win++;
}
k++;
}
}

if (win == 0){
for (int cy = 0;cy<ymax;cy++){
for (int cx = 0;cx<xmax;cx++){
if (b[cx][cy] != 0 ){
win = -1;
}else{
win = 0;
break;
}
}
if (win == 0)
break;
}
}
return win;
}

void rester(int fun){//0:讀取b 1:寫入b
if (fun){
for (int cy = 0;cy<ymax;cy++)
for (int cx = 0;cx<xmax;cx++)
b[cx][cy] = r[((now)%2)][cx][cy];
now--;
if (is_beep)
for (int bi = 0 ; bi < 2 ; bi++)
printf("%c",7);
}else{
for (int cy = 0;cy<ymax;cy++)
for (int cx = 0;cx<xmax;cx++)
r[(now)%2][cx][cy] = b[cx][cy];
}
}

int ai(void){
rester(0);
int best[3]={1,10,10};
int a[xmax][ymax];
for (int ay = 0 ;ay<ymax ; ay ++)
for (int ax = 0 ;ax<xmax ; ax ++)
a[ax][ay] = 0;
for (int ay = 0 ;ay<ymax ; ay ++){
for (int ax = 0 ;ax<xmax ; ax ++){
for (int k = 0 ;k<5 ; k ++){
if (ax+k >= xmax) {stat[k] = 3; continue;}

stat[k] = b[ax+k][ay];
}
switch (btov()){
case 80:
a[ax][ay] +=ED4 ;
break;
case 188:
a[ax+1][ay] +=ED4 ;
break;
case 224:
a[ax+2][ay] +=ED4 ;
break;
case 236:
a[ax+3][ay] +=ED4 ;
break;
case 240:
a[ax+4][ay] +=ED4 ;
break;
case 40:
a[ax][ay] +=SD4 ;
break;
case 94:
a[ax+1][ay] +=SD4 ;
break;
case 112:
a[ax+2][ay] +=SD4 ;
break;
case 118:
a[ax+3][ay] +=SD4 ;
break;
case 120:
a[ax+4][ay] +=SD4 ;
break;
case 39:
a[ax+0][ay] +=SA3 ;
a[ax+4][ay] +=SA3 ;
break;
case 78:
a[ax+0][ay] +=EA3 ;
a[ax+4][ay] +=EA3 ;
break;
case 26:case 13:
a[ax+0][ay] +=ED3 ;
a[ax+1][ay] +=ED3 ;
break;
case 62:case 31:
a[ax+0][ay] +=ED3 ;
a[ax+2][ay] +=ED3 ;
break;
case 74:case 37:
a[ax+0][ay] +=ED3 ;
a[ax+3][ay] +=ED3 ;
break;
case 170:case 85:
a[ax+1][ay] +=ED3 ;
a[ax+2][ay] +=ED3 ;
break;
case 182:case 91:
a[ax+1][ay] +=ED3 ;
a[ax+3][ay] +=ED3 ;
break;
case 186:case 93:
a[ax+1][ay] +=ED3 ;
a[ax+4][ay] +=ED3 ;
break;
case 218:case 109:
a[ax+1][ay] +=ED3 ;
a[ax+4][ay] +=ED3 ;
break;
case 222:case 111:
a[ax+2][ay] +=ED3 ;
a[ax+4][ay] +=ED3 ;
break;
case 234:case 117:
a[ax+3][ay] +=ED3 ;
a[ax+4][ay] +=ED3 ;
break;
case 24:case 12:
a[ax][ay] +=EA2 ;
a[ax+1][ay] +=EA2 ;
a[ax+4][ay] +=EA2 ;
break;
case 60:case 30:
a[ax][ay] +=EA2 ;
a[ax+2][ay] +=EA2 ;
a[ax+4][ay] +=EA2 ;
break;
case 72:case 36:
a[ax][ay] +=EA2 ;
a[ax+3][ay] +=EA2 ;
a[ax+4][ay] +=EA2 ;
break;
case 8:case 4:
a[ax][ay] +=ED2 ;
a[ax+1][ay] +=ED2 ;
a[ax+2][ay] +=ED2 ;
break;
case 20:case 10:
a[ax][ay] +=ED2 ;
a[ax+1][ay] +=ED2 ;
a[ax+3][ay] +=ED2 ;
break;
case 56:case 28:
a[ax][ay] +=ED2 ;
a[ax+2][ay] +=ED2 ;
a[ax+3][ay] +=ED2 ;
break;
case 164:case 82:
a[ax+1][ay] +=ED2 ;
a[ax+2][ay] +=ED2 ;
a[ax+3][ay] +=ED2 ;
break;
case 168:case 84:
a[ax+1][ay] +=ED2 ;
a[ax+2][ay] +=ED2 ;
a[ax+4][ay] +=ED2 ;
break;
case 180:case 90:
a[ax+1][ay] +=ED2 ;
a[ax+3][ay] +=ED2 ;
a[ax+4][ay] +=ED2 ;
break;
case 216:case 108:
a[ax+2][ay] +=ED2 ;
a[ax+3][ay] +=ED2 ;
a[ax+4][ay] +=ED2 ;
break;
case 54:case 27:
a[ax+0][ay] +=EA1 ;
a[ax+2][ay] +=EA1 ;
a[ax+3][ay] +=EA1 ;
a[ax+4][ay] +=EA1 ;
break;
case 18:case 9:
a[ax+0][ay] +=EA1 ;
a[ax+1][ay] +=EA1 ;
a[ax+3][ay] +=EA1 ;
a[ax+4][ay] +=EA1 ;
break;
case 6:case 3:
a[ax+0][ay] +=EA1 ;
a[ax+1][ay] +=EA1 ;
a[ax+2][ay] +=EA1 ;
a[ax+4][ay] +=EA1 ;
break;
case 162:case 81:
a[ax+1][ay] +=1 ;
a[ax+2][ay] +=1 ;
a[ax+3][ay] +=1 ;
a[ax+4][ay] +=1 ;
break;
case 2:case 1:
a[ax+0][ay] +=1 ;
a[ax+1][ay] +=1 ;
a[ax+2][ay] +=1 ;
a[ax+3][ay] +=1 ;
break;
}


for (int k = 0 ;k<5 ; k ++){
if (ay+k >= ymax) {stat[k] = 3;continue;}
stat[k] = b[ax][ay+k];
}
switch (btov()){
case 80:
a[ax][ay] +=ED4 ;
break;
case 188:
a[ax][ay+1] +=ED4 ;
break;
case 224:
a[ax][ay+2] +=ED4 ;
break;
case 236:
a[ax][ay+3] +=ED4 ;
break;
case 240:
a[ax][ay+4] +=ED4 ;
break;
case 40:
a[ax][ay] +=SD4 ;
break;
case 94:
a[ax][ay+1] +=SD4 ;
break;
case 112:
a[ax][ay+2] +=SD4 ;
break;
case 118:
a[ax][ay+3] +=SD4 ;
break;
case 120:
a[ax][ay+4] +=SD4 ;
break;
case 39:
a[ax][ay] +=SA3 ;
a[ax][ay+4] +=SA3 ;
break;
case 78:
a[ax][ay+0] +=EA3 ;
a[ax][ay+4] +=EA3 ;
break;
case 26:case 13:
a[ax][ay+0] +=ED3 ;
a[ax][ay+1] +=ED3 ;
break;
case 62:case 31:
a[ax][ay+0] +=ED3 ;
a[ax][ay+2] +=ED3 ;
break;
case 74:case 37:
a[ax][ay+0] +=ED3 ;
a[ax][ay+3] +=ED3 ;
break;
case 170:case 85:
a[ax][ay+1] +=ED3 ;
a[ax][ay+2] +=ED3 ;
break;
case 182:case 91:
a[ax][ay+1] +=ED3 ;
a[ax][ay+3] +=ED3 ;
break;
case 186:case 93:
a[ax][ay+1] +=ED3 ;
a[ax][ay+4] +=ED3 ;
break;
case 218:case 109:
a[ax][ay+1] +=ED3 ;
a[ax][ay+4] +=ED3 ;
break;
case 222:case 111:
a[ax][ay+2] +=ED3 ;
a[ax][ay+4] +=ED3 ;
break;
case 234:case 117:
a[ax][ay+3] +=ED3 ;
a[ax][ay+4] +=ED3 ;
break;
case 24:case 12:
a[ax][ay] +=EA2 ;
a[ax][ay+1] +=EA2 ;
a[ax][ay+4] +=EA2 ;
break;
case 60:case 30:
a[ax][ay] +=EA2 ;
a[ax][ay+2] +=EA2 ;
a[ax][ay+4] +=EA2 ;
break;
case 72:case 36:
a[ax][ay] +=EA2 ;
a[ax][ay+3] +=EA2 ;
a[ax][ay+4] +=EA2 ;
break;
case 8:case 4:
a[ax][ay] +=ED2 ;
a[ax][ay+1] +=ED2 ;
a[ax][ay+2] +=ED2 ;
break;
case 20:case 10:
a[ax][ay] +=ED2 ;
a[ax][ay+1] +=ED2 ;
a[ax][ay+3] +=ED2 ;
break;
case 56:case 28:
a[ax][ay] +=ED2 ;
a[ax][ay+2] +=ED2 ;
a[ax][ay+3] +=ED2 ;
break;
case 164:case 82:
a[ax][ay+1] +=ED2 ;
a[ax][ay+2] +=ED2 ;
a[ax][ay+3] +=ED2 ;
break;
case 168:case 84:
a[ax][ay+1] +=ED2 ;
a[ax][ay+2] +=ED2 ;
a[ax][ay+4] +=ED2 ;
break;
case 180:case 90:
a[ax][ay+1] +=ED2 ;
a[ax][ay+3] +=ED2 ;
a[ax][ay+4] +=ED2 ;
break;
case 216:case 108:
a[ax][ay+2] +=ED2 ;
a[ax][ay+3] +=ED2 ;
a[ax][ay+4] +=ED2 ;
break;
case 54:case 27:
a[ax+0][ay] +=EA1 ;
a[ax][ay+2] +=EA1 ;
a[ax][ay+3] +=EA1 ;
a[ax][ay+4] +=EA1 ;
break;
case 18:case 9:
a[ax+0][ay] +=EA1 ;
a[ax][ay+1] +=EA1 ;
a[ax][ay+3] +=EA1 ;
a[ax][ay+4] +=EA1 ;
break;
case 6:case 3:
a[ax+0][ay] +=EA1 ;
a[ax][ay+1] +=EA1 ;
a[ax][ay+2] +=EA1 ;
a[ax][ay+4] +=EA1 ;
break;
case 162:case 81:
a[ax][ay+1] +=1 ;
a[ax][ay+2] +=1 ;
a[ax][ay+3] +=1 ;
a[ax][ay+4] +=1 ;
break;
case 2:case 1:
a[ax][ay] +=1 ;
a[ax][ay+1] +=1 ;
a[ax][ay+2] +=1 ;
a[ax][ay+3] +=1 ;
break;
}

for (int k = 0 ;k<5 ; k ++){
if ((ax+k >= xmax)or (ay+k >= ymax)) {stat[k] = 3;continue;}
stat[k] = b[ax+k][ay+k];
}
switch (btov()){
case 80:
a[ax][ay] +=ED4 ;
break;
case 188:
a[ax+1][ay+1] +=ED4 ;
break;
case 224:
a[ax+2][ay+2] +=ED4 ;
break;
case 236:
a[ax+3][ay+3] +=ED4 ;
break;
case 240:
a[ax+4][ay+4] +=ED4 ;
break;
case 40:
a[ax][ay] +=SD4 ;
break;
case 94:
a[ax+1][ay+1] +=SD4 ;
break;
case 112:
a[ax+2][ay+2] +=SD4 ;
break;
case 118:
a[ax+3][ay+3] +=SD4 ;
break;
case 120:
a[ax+4][ay+4] +=SD4 ;
break;
case 39:
a[ax+0][ay] +=SA3 ;
a[ax+4][ay+4] +=SA3 ;
break;
case 78:
a[ax][ay+0] +=EA3 ;
a[ax+4][ay+4] +=EA3 ;
break;
case 26:case 13:
a[ax][ay+0] +=ED3 ;
a[ax+1][ay+1] +=ED3 ;
break;
case 62:case 31:
a[ax][ay+0] +=ED3 ;
a[ax+2][ay+2] +=ED3 ;
break;
case 74:case 37:
a[ax][ay+0] +=ED3 ;
a[ax+3][ay+3] +=ED3 ;
break;
case 170:case 85:
a[ax+1][ay+1] +=ED3 ;
a[ax+2][ay+2] +=ED3 ;
break;
case 182:case 91:
a[ax+1][ay+1] +=ED3 ;
a[ax+3][ay+3] +=ED3 ;
break;
case 186:case 93:
a[ax+1][ay+1] +=ED3 ;
a[ax+4][ay+4] +=ED3 ;
break;
case 218:case 109:
a[ax+1][ay+1] +=ED3 ;
a[ax+4][ay+4] +=ED3 ;
break;
case 222:case 111:
a[ax+2][ay+2] +=ED3 ;
a[ax+4][ay+4] +=ED3 ;
break;
case 234:case 117:
a[ax+3][ay+3] +=ED3 ;
a[ax+4][ay+4] +=ED3 ;
break;
case 24:case 12:
a[ax][ay] +=EA2 ;
a[ax+1][ay+1] +=EA2 ;
a[ax+4][ay+4] +=EA2 ;
break;
case 60:case 30:
a[ax][ay] +=EA2 ;
a[ax+2][ay+2] +=EA2 ;
a[ax+4][ay+4] +=EA2 ;
break;
case 72:case 36:
a[ax][ay] +=EA2 ;
a[ax+3][ay+3] +=EA2 ;
a[ax+4][ay+4] +=EA2 ;
break;
case 8:case 4:
a[ax][ay] +=ED2 ;
a[ax+1][ay+1] +=ED2 ;
a[ax+2][ay+2] +=ED2 ;
break;
case 20:case 10:
a[ax][ay] +=ED2 ;
a[ax+1][ay+1] +=ED2 ;
a[ax+3][ay+3] +=ED2 ;
break;
case 56:case 28:
a[ax][ay] +=ED2 ;
a[ax+2][ay+2] +=ED2 ;
a[ax+3][ay+3] +=ED2 ;
break;
case 164:case 82:
a[ax+1][ay+1] +=ED2 ;
a[ax+2][ay+2] +=ED2 ;
a[ax+3][ay+3] +=ED2 ;
break;
case 168:case 84:
a[ax+1][ay+1] +=ED2 ;
a[ax+2][ay+2] +=ED2 ;
a[ax+4][ay+4] +=ED2 ;
break;
case 180:case 90:
a[ax+1][ay+1] +=ED2 ;
a[ax+3][ay+3] +=ED2 ;
a[ax+4][ay+4] +=ED2 ;
break;
case 216:case 108:
a[ax+2][ay+2] +=ED2 ;
a[ax+3][ay+3] +=ED2 ;
a[ax+4][ay+4] +=ED2 ;
break;
case 54:case 27:
a[ax+0][ay] +=EA1 ;
a[ax+2][ay+2] +=EA1 ;
a[ax+3][ay+3] +=EA1 ;
a[ax+4][ay+4] +=EA1 ;
break;
case 18:case 9:
a[ax+0][ay] +=EA1 ;
a[ax+1][ay+1] +=EA1 ;
a[ax+3][ay+3] +=EA1 ;
a[ax+4][ay+4] +=EA1 ;
break;
case 6:case 3:
a[ax+0][ay] +=EA1 ;
a[ax+1][ay+1] +=EA1 ;
a[ax+2][ay+2] +=EA1 ;
a[ax+4][ay+4] +=EA1 ;
break;
case 162:case 81:
a[ax+1][ay+1] +=1 ;
a[ax+2][ay+2] +=1 ;
a[ax+3][ay+3] +=1 ;
a[ax+4][ay+4] +=1 ;
break;
case 2:case 1:
a[ax][ay] +=1 ;
a[ax+1][ay+1] +=1 ;
a[ax+2][ay+2] +=1 ;
a[ax+3][ay+3] +=1 ;
break;
}



for (int k = 0 ;k<5 ; k ++){
if ((ax+k >= xmax)or (ay-k < 0)) {stat[k] = 3;continue;}
stat[k] = b[ax+k][ay-k];
}

switch (btov()){
case 80:
a[ax][ay] +=ED4 ;
break;
case 188:
a[ax+1][ay-1] +=ED4 ;
break;
case 224:
a[ax+2][ay-2] +=ED4 ;
break;
case 236:
a[ax+3][ay-3] +=ED4 ;
break;
case 240:
a[ax+4][ay-4] +=ED4 ;
break;
case 40:
a[ax][ay] +=SD4 ;
break;
case 94:
a[ax+1][ay-1] +=SD4 ;
break;
case 112:
a[ax+2][ay-2] +=SD4 ;
break;
case 118:
a[ax+3][ay-3] +=SD4 ;
break;
case 120:
a[ax+4][ay-4] +=SD4 ;
break;
case 39:
a[ax+0][ay] +=SA3 ;
a[ax+4][ay-4] +=SA3 ;
break;
case 78:
a[ax][ay+0] +=EA3 ;
a[ax+4][ay-4] +=EA3 ;
break;
case 26:case 13:
a[ax][ay+0] +=ED3 ;
a[ax+1][ay-1] +=ED3 ;
break;
case 62:case 31:
a[ax][ay+0] +=ED3 ;
a[ax+2][ay-2] +=ED3 ;
break;
case 74:case 37:
a[ax][ay+0] +=ED3 ;
a[ax+3][ay-3] +=ED3 ;
break;
case 170:case 85:
a[ax+1][ay-1] +=ED3 ;
a[ax+2][ay-2] +=ED3 ;
break;
case 182:case 91:
a[ax+1][ay-1] +=ED3 ;
a[ax+3][ay-3] +=ED3 ;
break;
case 186:case 93:
a[ax+1][ay-1] +=ED3 ;
a[ax+4][ay-4] +=ED3 ;
break;
case 218:case 109:
a[ax+1][ay-1] +=ED3 ;
a[ax+4][ay-4] +=ED3 ;
break;
case 222:case 111:
a[ax+2][ay-2] +=ED3 ;
a[ax+4][ay-4] +=ED3 ;
break;
case 234:case 117:
a[ax+3][ay-3] +=ED3 ;
a[ax+4][ay-4] +=ED3 ;
break;
case 24:case 12:
a[ax][ay] +=EA2 ;
a[ax+1][ay-1] +=EA2 ;
a[ax+4][ay-4] +=EA2 ;
break;
case 60:case 30:
a[ax][ay] +=EA2 ;
a[ax+2][ay-2] +=EA2 ;
a[ax+4][ay-4] +=EA2 ;
break;
case 72:case 36:
a[ax][ay] +=EA2 ;
a[ax+3][ay-3] +=EA2 ;
a[ax+4][ay-4] +=EA2 ;
break;
case 8:case 4:
a[ax][ay] +=ED2 ;
a[ax+1][ay-1] +=ED2 ;
a[ax+2][ay-2] +=ED2 ;
break;
case 20:case 10:
a[ax][ay] +=ED2 ;
a[ax+1][ay-1] +=ED2 ;
a[ax+3][ay-3] +=ED2 ;
break;
case 56:case 28:
a[ax][ay] +=ED2 ;
a[ax+2][ay-2] +=ED2 ;
a[ax+3][ay-3] +=ED2 ;
break;
case 164:case 82:
a[ax+1][ay-1] +=ED2 ;
a[ax+2][ay-2] +=ED2 ;
a[ax+3][ay-3] +=ED2 ;
break;
case 168:case 84:
a[ax+1][ay-1] +=ED2 ;
a[ax+2][ay-2] +=ED2 ;
a[ax+4][ay-4] +=ED2 ;
break;
case 180:case 90:
a[ax+1][ay-1] +=ED2 ;
a[ax+3][ay-3] +=ED2 ;
a[ax+4][ay-4] +=ED2 ;
break;
case 216:case 108:
a[ax+2][ay-2] +=ED2 ;
a[ax+3][ay-3] +=ED2 ;
a[ax+4][ay-4] +=ED2 ;
break;
case 54:case 27:
a[ax+0][ay] +=EA1 ;
a[ax+2][ay-2] +=EA1 ;
a[ax+3][ay-3] +=EA1 ;
a[ax+4][ay-4] +=EA1 ;
break;
case 18:case 9:
a[ax+0][ay] +=EA1 ;
a[ax+1][ay-1] +=EA1 ;
a[ax+3][ay-3] +=EA1 ;
a[ax+4][ay-4] +=EA1 ;
break;
case 6:case 3:
a[ax+0][ay] +=EA1 ;
a[ax+1][ay-1] +=EA1 ;
a[ax+2][ay-2] +=EA1 ;
a[ax+4][ay-4] +=EA1 ;
break;
case 162:case 81:
a[ax+1][ay-1] +=1 ;
a[ax+2][ay-2] +=1 ;
a[ax+3][ay-3] +=1 ;
a[ax+4][ay-4] +=1 ;
break;
case 2:case 1:
a[ax][ay] +=1 ;
a[ax+1][ay-1] +=1 ;
a[ax+2][ay-2] +=1 ;
a[ax+3][ay-3] +=1 ;
break;
}

for (int k = 0 ;k<5 ; k ++){
if ((ax-k < 0)) {stat[k] = 3;continue;}
stat[k] = b[ax-k][ay];
}

switch (btov()){
case 80:
a[ax][ay] +=ED4 ;
break;
case 188:
a[ax-1][ay] +=ED4 ;
break;
case 224:
a[ax-2][ay] +=ED4 ;
break;
case 236:
a[ax-3][ay] +=ED4 ;
break;
case 240:
a[ax-4][ay] +=ED4 ;
break;
case 40:
a[ax][ay] +=SD4 ;
break;
case 94:
a[ax-1][ay] +=SD4 ;
break;
case 112:
a[ax-2][ay] +=SD4 ;
break;
case 118:
a[ax-3][ay] +=SD4 ;
break;
case 120:
a[ax-4][ay] +=SD4 ;
break;
case 39:
a[ax+0][ay] +=SA3 ;
a[ax-4][ay] +=SA3 ;
break;
case 78:
a[ax][ay+0] +=EA3 ;
a[ax-4][ay] +=EA3 ;
break;
case 26:case 13:
a[ax][ay+0] +=ED3 ;
a[ax-1][ay] +=ED3 ;
break;
case 62:case 31:
a[ax][ay+0] +=ED3 ;
a[ax-2][ay] +=ED3 ;
break;
case 74:case 37:
a[ax][ay+0] +=ED3 ;
a[ax-3][ay] +=ED3 ;
break;
case 170:case 85:
a[ax-1][ay] +=ED3 ;
a[ax-2][ay] +=ED3 ;
break;
case 182:case 91:
a[ax-1][ay] +=ED3 ;
a[ax-3][ay] +=ED3 ;
break;
case 186:case 93:
a[ax-1][ay] +=ED3 ;
a[ax-4][ay] +=ED3 ;
break;
case 218:case 109:
a[ax-1][ay] +=ED3 ;
a[ax-4][ay] +=ED3 ;
break;
case 222:case 111:
a[ax-2][ay] +=ED3 ;
a[ax-4][ay] +=ED3 ;
break;
case 234:case 117:
a[ax-3][ay] +=ED3 ;
a[ax-4][ay] +=ED3 ;
break;
case 24:case 12:
a[ax][ay] +=EA2 ;
a[ax-1][ay] +=EA2 ;
a[ax-4][ay] +=EA2 ;
break;
case 60:case 30:
a[ax][ay] +=EA2 ;
a[ax-2][ay] +=EA2 ;
a[ax-4][ay] +=EA2 ;
break;
case 72:case 36:
a[ax][ay] +=EA2 ;
a[ax-3][ay] +=EA2 ;
a[ax-4][ay] +=EA2 ;
break;
case 8:case 4:
a[ax][ay] +=ED2 ;
a[ax-1][ay] +=ED2 ;
a[ax-2][ay] +=ED2 ;
break;
case 20:case 10:
a[ax][ay] +=ED2 ;
a[ax-1][ay] +=ED2 ;
a[ax-3][ay] +=ED2 ;
break;
case 56:case 28:
a[ax][ay] +=ED2 ;
a[ax-2][ay] +=ED2 ;
a[ax-3][ay] +=ED2 ;
break;
case 164:case 82:
a[ax-1][ay] +=ED2 ;
a[ax-2][ay] +=ED2 ;
a[ax-3][ay] +=ED2 ;
break;
case 168:case 84:
a[ax-1][ay] +=ED2 ;
a[ax-2][ay] +=ED2 ;
a[ax-4][ay] +=ED2 ;
break;
case 180:case 90:
a[ax-1][ay] +=ED2 ;
a[ax-3][ay] +=ED2 ;
a[ax-4][ay] +=ED2 ;
break;
case 216:case 108:
a[ax-2][ay] +=ED2 ;
a[ax-3][ay] +=ED2 ;
a[ax-4][ay] +=ED2 ;
break;
case 54:case 27:
a[ax+0][ay] +=EA1 ;
a[ax-2][ay] +=EA1 ;
a[ax-3][ay] +=EA1 ;
a[ax-4][ay] +=EA1 ;
break;
case 18:case 9:
a[ax+0][ay] +=EA1 ;
a[ax-1][ay] +=EA1 ;
a[ax-3][ay] +=EA1 ;
a[ax-4][ay] +=EA1 ;
break;
case 6:case 3:
a[ax+0][ay] +=EA1 ;
a[ax-1][ay] +=EA1 ;
a[ax-2][ay] +=EA1 ;
a[ax-4][ay] +=EA1 ;
break;
case 162:case 81:
a[ax-1][ay] +=1 ;
a[ax-2][ay] +=1 ;
a[ax-3][ay] +=1 ;
a[ax-4][ay] +=1 ;
break;
case 2:case 1:
a[ax][ay] +=1 ;
a[ax-1][ay] +=1 ;
a[ax-2][ay] +=1 ;
a[ax-3][ay] +=1 ;
break;
}


for (int k = 0 ;k<5 ; k ++){
if ((ay-k < 0)) {stat[k] = 3;continue;}
stat[k] = b[ax][ay-k];
}

switch (btov()){
case 80:
a[ax][ay] +=ED4 ;
break;
case 188:
a[ax][ay-1] +=ED4 ;
break;
case 224:
a[ax][ay-2] +=ED4 ;
break;
case 236:
a[ax][ay-3] +=ED4 ;
break;
case 240:
a[ax][ay-4] +=ED4 ;
break;
case 40:
a[ax][ay] +=SD4 ;
break;
case 94:
a[ax][ay-1] +=SD4 ;
break;
case 112:
a[ax][ay-2] +=SD4 ;
break;
case 118:
a[ax][ay-3] +=SD4 ;
break;
case 120:
a[ax][ay-4] +=SD4 ;
break;
case 39:
a[ax+0][ay] +=SA3 ;
a[ax][ay-4] +=SA3 ;
break;
case 78:
a[ax][ay+0] +=EA3 ;
a[ax][ay-4] +=EA3 ;
break;
case 26:case 13:
a[ax][ay+0] +=ED3 ;
a[ax][ay-1] +=ED3 ;
break;
case 62:case 31:
a[ax][ay+0] +=ED3 ;
a[ax][ay-2] +=ED3 ;
break;
case 74:case 37:
a[ax][ay+0] +=ED3 ;
a[ax][ay-3] +=ED3 ;
break;
case 170:case 85:
a[ax][ay-1] +=ED3 ;
a[ax][ay-2] +=ED3 ;
break;
case 182:case 91:
a[ax][ay-1] +=ED3 ;
a[ax][ay-3] +=ED3 ;
break;
case 186:case 93:
a[ax][ay-1] +=ED3 ;
a[ax][ay-4] +=ED3 ;
break;
case 218:case 109:
a[ax][ay-1] +=ED3 ;
a[ax][ay-4] +=ED3 ;
break;
case 222:case 111:
a[ax][ay-2] +=ED3 ;
a[ax][ay-4] +=ED3 ;
break;
case 234:case 117:
a[ax][ay-3] +=ED3 ;
a[ax][ay-4] +=ED3 ;
break;
case 24:case 12:
a[ax][ay] +=EA2 ;
a[ax][ay-1] +=EA2 ;
a[ax][ay-4] +=EA2 ;
break;
case 60:case 30:
a[ax][ay] +=EA2 ;
a[ax][ay-2] +=EA2 ;
a[ax][ay-4] +=EA2 ;
break;
case 72:case 36:
a[ax][ay] +=EA2 ;
a[ax][ay-3] +=EA2 ;
a[ax][ay-4] +=EA2 ;
break;
case 8:case 4:
a[ax][ay] +=ED2 ;
a[ax][ay-1] +=ED2 ;
a[ax][ay-2] +=ED2 ;
break;
case 20:case 10:
a[ax][ay] +=ED2 ;
a[ax][ay-1] +=ED2 ;
a[ax][ay-3] +=ED2 ;
break;
case 56:case 28:
a[ax][ay] +=ED2 ;
a[ax][ay-2] +=ED2 ;
a[ax][ay-3] +=ED2 ;
break;
case 164:case 82:
a[ax][ay-1] +=ED2 ;
a[ax][ay-2] +=ED2 ;
a[ax][ay-3] +=ED2 ;
break;
case 168:case 84:
a[ax][ay-1] +=ED2 ;
a[ax][ay-2] +=ED2 ;
a[ax][ay-4] +=ED2 ;
break;
case 180:case 90:
a[ax][ay-1] +=ED2 ;
a[ax][ay-3] +=ED2 ;
a[ax][ay-4] +=ED2 ;
break;
case 216:case 108:
a[ax][ay-2] +=ED2 ;
a[ax][ay-3] +=ED2 ;
a[ax][ay-4] +=ED2 ;
break;
case 54:case 27:
a[ax+0][ay] +=EA1 ;
a[ax][ay-2] +=EA1 ;
a[ax][ay-3] +=EA1 ;
a[ax][ay-4] +=EA1 ;
break;
case 18:case 9:
a[ax+0][ay] +=EA1 ;
a[ax][ay-1] +=EA1 ;
a[ax][ay-3] +=EA1 ;
a[ax][ay-4] +=EA1 ;
break;
case 6:case 3:
a[ax+0][ay] +=EA1 ;
a[ax][ay-1] +=EA1 ;
a[ax][ay-2] +=EA1 ;
a[ax][ay-4] +=EA1 ;
break;
case 162:case 81:
a[ax][ay-1] +=1 ;
a[ax][ay-2] +=1 ;
a[ax][ay-3] +=1 ;
a[ax][ay-4] +=1 ;
break;
case 2:case 1:
a[ax][ay] +=1 ;
a[ax][ay-1] +=1 ;
a[ax][ay-2] +=1 ;
a[ax][ay-3] +=1 ;
break;
}

for (int k = 0 ;k<5 ; k ++){
if ((ax-k < 0)or (ay-k < 0)) {stat[k] = 3;continue;}
stat[k] = b[ax-k][ay-k];
}

switch (btov()){
case 80:
a[ax][ay] +=ED4 ;
break;
case 188:
a[ax-1][ay-1] +=ED4 ;
break;
case 224:
a[ax-2][ay-2] +=ED4 ;
break;
case 236:
a[ax-3][ay-3] +=ED4 ;
break;
case 240:
a[ax-4][ay-4] +=ED4 ;
break;
case 40:
a[ax][ay] +=SD4 ;
break;
case 94:
a[ax-1][ay-1] +=SD4 ;
break;
case 112:
a[ax-2][ay-2] +=SD4 ;
break;
case 118:
a[ax-3][ay-3] +=SD4 ;
break;
case 120:
a[ax-4][ay-4] +=SD4 ;
break;
case 39:
a[ax+0][ay] +=SA3 ;
a[ax-4][ay-4] +=SA3 ;
break;
case 78:
a[ax][ay+0] +=EA3 ;
a[ax-4][ay-4] +=EA3 ;
break;
case 26:case 13:
a[ax][ay+0] +=ED3 ;
a[ax-1][ay-1] +=ED3 ;
break;
case 62:case 31:
a[ax][ay+0] +=ED3 ;
a[ax-2][ay-2] +=ED3 ;
break;
case 74:case 37:
a[ax][ay+0] +=ED3 ;
a[ax-3][ay-3] +=ED3 ;
break;
case 170:case 85:
a[ax-1][ay-1] +=ED3 ;
a[ax-2][ay-2] +=ED3 ;
break;
case 182:case 91:
a[ax-1][ay-1] +=ED3 ;
a[ax-3][ay-3] +=ED3 ;
break;
case 186:case 93:
a[ax-1][ay-1] +=ED3 ;
a[ax-4][ay-4] +=ED3 ;
break;
case 218:case 109:
a[ax-1][ay-1] +=ED3 ;
a[ax-4][ay-4] +=ED3 ;
break;
case 222:case 111:
a[ax-2][ay-2] +=ED3 ;
a[ax-4][ay-4] +=ED3 ;
break;
case 234:case 117:
a[ax-3][ay-3] +=ED3 ;
a[ax-4][ay-4] +=ED3 ;
break;
case 24:case 12:
a[ax][ay] +=EA2 ;
a[ax-1][ay-1] +=EA2 ;
a[ax-4][ay-4] +=EA2 ;
break;
case 60:case 30:
a[ax][ay] +=EA2 ;
a[ax-2][ay-2] +=EA2 ;
a[ax-4][ay-4] +=EA2 ;
break;
case 72:case 36:
a[ax][ay] +=EA2 ;
a[ax-3][ay-3] +=EA2 ;
a[ax-4][ay-4] +=EA2 ;
break;
case 8:case 4:
a[ax][ay] +=ED2 ;
a[ax-1][ay-1] +=ED2 ;
a[ax-2][ay-2] +=ED2 ;
break;
case 20:case 10:
a[ax][ay] +=ED2 ;
a[ax-1][ay-1] +=ED2 ;
a[ax-3][ay-3] +=ED2 ;
break;
case 56:case 28:
a[ax][ay] +=ED2 ;
a[ax-2][ay-2] +=ED2 ;
a[ax-3][ay-3] +=ED2 ;
break;
case 164:case 82:
a[ax-1][ay-1] +=ED2 ;
a[ax-2][ay-2] +=ED2 ;
a[ax-3][ay-3] +=ED2 ;
break;
case 168:case 84:
a[ax-1][ay-1] +=ED2 ;
a[ax-2][ay-2] +=ED2 ;
a[ax-4][ay-4] +=ED2 ;
break;
case 180:case 90:
a[ax-1][ay-1] +=ED2 ;
a[ax-3][ay-3] +=ED2 ;
a[ax-4][ay-4] +=ED2 ;
break;
case 216:case 108:
a[ax-2][ay-2] +=ED2 ;
a[ax-3][ay-3] +=ED2 ;
a[ax-4][ay-4] +=ED2 ;
break;
case 54:case 27:
a[ax+0][ay] +=EA1 ;
a[ax-2][ay-2] +=EA1 ;
a[ax-3][ay-3] +=EA1 ;
a[ax-4][ay-4] +=EA1 ;
break;
case 18:case 9:
a[ax+0][ay] +=EA1 ;
a[ax-1][ay-1] +=EA1 ;
a[ax-3][ay-3] +=EA1 ;
a[ax-4][ay-4] +=EA1 ;
break;
case 6:case 3:
a[ax+0][ay] +=EA1 ;
a[ax-1][ay-1] +=EA1 ;
a[ax-2][ay-2] +=EA1 ;
a[ax-4][ay-4] +=EA1 ;
break;
case 162:case 81:
a[ax-1][ay-1] +=1 ;
a[ax-2][ay-2] +=1 ;
a[ax-3][ay-3] +=1 ;
a[ax-4][ay-4] +=1 ;
break;
case 2:case 1:
a[ax][ay] +=1 ;
a[ax-1][ay-1] +=1 ;
a[ax-2][ay-2] +=1 ;
a[ax-3][ay-3] +=1 ;
break;
}
for (int k = 0 ;k<5 ; k ++){
if ((ax-k < 0)or (ay+k >= ymax)) {stat[k] = 3;continue;}
stat[k] = b[ax-k][ay+k];
}

switch (btov()){
case 80:
a[ax][ay] +=ED4 ;
break;
case 188:
a[ax-1][ay+1] +=ED4 ;
break;
case 224:
a[ax-2][ay+2] +=ED4 ;
break;
case 236:
a[ax-3][ay+3] +=ED4 ;
break;
case 240:
a[ax-4][ay+4] +=ED4 ;
break;
case 40:
a[ax][ay] +=SD4 ;
break;
case 94:
a[ax-1][ay+1] +=SD4 ;
break;
case 112:
a[ax-2][ay+2] +=SD4 ;
break;
case 118:
a[ax-3][ay+3] +=SD4 ;
break;
case 120:
a[ax-4][ay+4] +=SD4 ;
break;
case 39:
a[ax+0][ay] +=SA3 ;
a[ax-4][ay+4] +=SA3 ;
break;
case 78:
a[ax][ay+0] +=EA3 ;
a[ax-4][ay+4] +=EA3 ;
break;
case 26:case 13:
a[ax][ay+0] +=ED3 ;
a[ax-1][ay+1] +=ED3 ;
break;
case 62:case 31:
a[ax][ay+0] +=ED3 ;
a[ax-2][ay+2] +=ED3 ;
break;
case 74:case 37:
a[ax][ay+0] +=ED3 ;
a[ax-3][ay+3] +=ED3 ;
break;
case 170:case 85:
a[ax-1][ay+1] +=ED3 ;
a[ax-2][ay+2] +=ED3 ;
break;
case 182:case 91:
a[ax-1][ay+1] +=ED3 ;
a[ax-3][ay+3] +=ED3 ;
break;
case 186:case 93:
a[ax-1][ay+1] +=ED3 ;
a[ax-4][ay+4] +=ED3 ;
break;
case 218:case 109:
a[ax-1][ay+1] +=ED3 ;
a[ax-4][ay+4] +=ED3 ;
break;
case 222:case 111:
a[ax-2][ay+2] +=ED3 ;
a[ax-4][ay+4] +=ED3 ;
break;
case 234:case 117:
a[ax-3][ay+3] +=ED3 ;
a[ax-4][ay+4] +=ED3 ;
break;
case 24:case 12:
a[ax][ay] +=EA2 ;
a[ax-1][ay+1] +=EA2 ;
a[ax-4][ay+4] +=EA2 ;
break;
case 60:case 30:
a[ax][ay] +=EA2 ;
a[ax-2][ay+2] +=EA2 ;
a[ax-4][ay+4] +=EA2 ;
break;
case 72:case 36:
a[ax][ay] +=EA2 ;
a[ax-3][ay+3] +=EA2 ;
a[ax-4][ay+4] +=EA2 ;
break;
case 8:case 4:
a[ax][ay] +=ED2 ;
a[ax-1][ay+1] +=ED2 ;
a[ax-2][ay+2] +=ED2 ;
break;
case 20:case 10:
a[ax][ay] +=ED2 ;
a[ax-1][ay+1] +=ED2 ;
a[ax-3][ay+3] +=ED2 ;
break;
case 56:case 28:
a[ax][ay] +=ED2 ;
a[ax-2][ay+2] +=ED2 ;
a[ax-3][ay+3] +=ED2 ;
break;
case 164:case 82:
a[ax-1][ay+1] +=ED2 ;
a[ax-2][ay+2] +=ED2 ;
a[ax-3][ay+3] +=ED2 ;
break;
case 168:case 84:
a[ax-1][ay+1] +=ED2 ;
a[ax-2][ay+2] +=ED2 ;
a[ax-4][ay+4] +=ED2 ;
break;
case 180:case 90:
a[ax-1][ay+1] +=ED2 ;
a[ax-3][ay+3] +=ED2 ;
a[ax-4][ay+4] +=ED2 ;
break;
case 216:case 108:
a[ax-2][ay+2] +=ED2 ;
a[ax-3][ay+3] +=ED2 ;
a[ax-4][ay+4] +=ED2 ;
break;
case 54:case 27:
a[ax+0][ay] +=EA1 ;
a[ax-2][ay+2] +=EA1 ;
a[ax-3][ay+3] +=EA1 ;
a[ax-4][ay+4] +=EA1 ;
break;
case 18:case 9:
a[ax+0][ay] +=EA1 ;
a[ax-1][ay+1] +=EA1 ;
a[ax-3][ay+3] +=EA1 ;
a[ax-4][ay+4] +=EA1 ;
break;
case 6:case 3:
a[ax+0][ay] +=EA1 ;
a[ax-1][ay+1] +=EA1 ;
a[ax-2][ay+2] +=EA1 ;
a[ax-4][ay+4] +=EA1 ;
break;
case 162:case 81:
a[ax-1][ay+1] +=1 ;
a[ax-2][ay+2] +=1 ;
a[ax-3][ay+3] +=1 ;
a[ax-4][ay+4] +=1 ;
break;
case 2:case 1:
a[ax][ay] +=1 ;
a[ax-1][ay+1] +=1 ;
a[ax-2][ay+2] +=1 ;
a[ax-3][ay+3] +=1 ;
break;
}
}
}
for (int ay = 0 ;ay<ymax ; ay ++){
for (int ax = 0 ;ax<xmax ; ax ++){
if((best[0] < a[ax][ay]) and (b[ax][ay] == 0)){
best[0] =a[ax][ay];
best[1] = ax;
best[2] = ay;
}
}
}
if (is_beep)
for (int bi = 0 ; bi < 1 ; bi++)
printf("%c",7);
cursor[0]=best[1];
cursor[1]=best[2];
return set(best[1],best[2],1+(now % 2));
}
inline int btov(void){
if ((stat[4] == 3) or (stat[3] == 3) or (stat[2] == 3) or (stat[1] == 3) or (stat[0] == 3))
return 243;
return (stat[4]+ 3*stat[3] + 9*stat[2] + 27*stat[1] + 81*stat[0]);
}

鏈接文章
分享到其他網站

請登入後來留意見

在登入之後,您才能留意見



立即登入