-(void)checkRangeAttack:(int)startX startY:(int)startY leftPow:(int)leftPow pieceType:(int)pieceType aMap:(int[][1002])aMap aPiece:(UNITCHIP*)aPiece i:(int)i{
- int i0 = i;
- if(leftPow <= i0) return;
-
- int chipTeam;
- if(Uselected) chipTeam = Uselected->team;
+ int i0;
if(startX < 0) startX = 0;
if(startY < 0) startY = 0;
- aMap[startY][startX] = i0; //広がる範囲
- i0++; // 上
-
- if( leftPow > i0 ){
- [self checkRangeAttack:startX startY:startY - 1 leftPow:leftPow pieceType:pieceType aMap:aMap aPiece:aPiece i:i0];
- }
+ aMap[startY][startX] = leftPow; // 残り射程の長さ
- // 下
- if( leftPow > i0 ){
- [self checkRangeAttack:startX startY:startY + 1 leftPow:leftPow pieceType:pieceType aMap:aMap aPiece:aPiece i:i0];
+ i0 = leftPow - 1; // 上
+ if( aMap[startY-1][startX] < i0 ){
+ [self checkRangeAttack:startX startY:startY - 1 leftPow:i0 pieceType:pieceType aMap:aMap aPiece:aPiece i:i];
}
- // 右
- if( leftPow > i0 ){
- [self checkRangeAttack:startX - 1 startY:startY leftPow:leftPow pieceType:pieceType aMap:aMap aPiece:aPiece i:i0];
+ i0 = leftPow - 1; // 下
+ if( aMap[startY+1][startX] < i0 ){
+ [self checkRangeAttack:startX startY:startY + 1 leftPow:i0 pieceType:pieceType aMap:aMap aPiece:aPiece i:i];
}
- // 左
- if( leftPow > i0 ){
- [self checkRangeAttack:startX + 1 startY:startY leftPow:leftPow pieceType:pieceType aMap:aMap aPiece:aPiece i:i0];
+ i0 = leftPow - 1; // 右
+ if( aMap[startY][startX-1] < i0 ){
+ [self checkRangeAttack:startX - 1 startY:startY leftPow:i0 pieceType:pieceType aMap:aMap aPiece:aPiece i:i];
}
+ i0 = leftPow - 1; // 左
+ if( aMap[startY][startX+1] < i0 ){
+ [self checkRangeAttack:startX + 1 startY:startY leftPow:i0 pieceType:pieceType aMap:aMap aPiece:aPiece i:i];
+ }
}
g_attackRangeTheta[y][x] = 0;
}
}
- [self checkRangeAttack:U->y startY:U->x leftPow:unitBreak->atkRange+1 pieceType:U->C.S_C.typeMONS aMap:g_attackRangeTheta aPiece:&U->C i:0];
+ [self checkRangeAttack:U->y startY:U->x leftPow:unitBreak->atkRange+1 pieceType:U->C.S_C.typeMONS aMap:g_attackRangeTheta aPiece:&U->C i:unitBreak->atkRange+1 ];
+
+ for (int i = 0;i < chipWidth;i++) {
+ for(int k = 0;k < chipHeight;k++){
+ if(g_attackRangeTheta[i][k] > 0)
+ g_attackRangeTheta[i][k] = unitBreak->atkRange+1 - g_attackRangeTheta[i][k];
+ }
+ }
+
ATTACK *AT = unitBreak->C.A;
for(int i = 0;i < crCAL1;i++){
AUN[1] = unitBreak->number;
DUN[1] = U->number;
Utarget = U;
+ unitBreak->atkRange = g_attackRangeTheta[unitBreak->x][unitBreak->y];
g_target_x = unitBreak->y;
g_target_y = unitBreak->x;
unitNoMoveFlag = true;
if(eval_point < point){
eval_point = point;
Utarget = U;
+ unitBreak->atkRange = g_attackRangeTheta[y][x];
g_target_x = x;
g_target_y = y;
CPUAttackFlag = true;
g_attackRangeTheta[y][x] = 0;
}
}
- [self checkRangeAttack:U->y startY:U->x leftPow:unitBreak->atkRange+1 pieceType:U->C.S_C.typeMONS aMap:g_attackRangeTheta aPiece:&U->C i:0];
+ [self checkRangeAttack:U->y startY:U->x leftPow:unitBreak->atkRange+1 pieceType:U->C.S_C.typeMONS aMap:g_attackRangeTheta aPiece:&U->C i:unitBreak->atkRange+1 ];
+
+ for (int i = 0;i < chipWidth;i++) {
+ for(int k = 0;k < chipHeight;k++){
+ if(g_attackRangeTheta[i][k] > 0)
+ g_attackRangeTheta[i][k] = unitBreak->atkRange+1 - g_attackRangeTheta[i][k];
+ }
+ }
ATTACK *AT = unitBreak->C.A;
for(int i = 0;i < crCAL1;i++){
AUN[1] = unitBreak->number;
DUN[1] = U->number;
+ unitBreak->atkRange = g_attackRangeTheta[unitBreak->x][unitBreak->y];
Utarget = U;
g_target_x = unitBreak->y;
g_target_y = unitBreak->x;
if(eval_point < point){
eval_point = point;
Utarget = U;
+ unitBreak->atkRange = g_attackRangeTheta[y][x];
g_target_x = x;
g_target_y = y;
CPUAttackFlag = true;
g_attackRangeTheta[y][x] = 0;
}
}
- [self checkRangeAttack:Utarget->y startY:Utarget->x leftPow:unitBreak->atkRange+1 pieceType:U->C.S_C.typeMONS aMap:g_attackRangeTheta aPiece:&U->C i:0];
+ [self checkRangeAttack:Utarget->y startY:Utarget->x leftPow:unitBreak->atkRange+1 pieceType:U->C.S_C.typeMONS aMap:g_attackRangeTheta aPiece:&U->C i:unitBreak->atkRange+1 ];
+
+
+ for (int i = 0;i < chipWidth;i++) {
+ for(int k = 0;k < chipHeight;k++){
+ if(g_attackRangeTheta[i][k] > 0)
+ g_attackRangeTheta[i][k] = unitBreak->atkRange+1 - g_attackRangeTheta[i][k];
+ }
+ }
if(g_attackRangeTheta[g_target_y][g_target_x] != unitBreak->atkRange){
}
}
- /*
+
if((cpuModeATTACKflag && !unitMoveEndFlag && !cpuIsAttackingFlag && Utarget))
for (int x = 1; x <= chipWidth;x++) {
for(int y = 1;y <= chipHeight;y++){
g_attackRangeTheta[y][x] = 0;
}
}
- [self checkRangeAttack:Utarget->y startY:Utarget->x leftPow:unitBreak->atkRange+1 pieceType:U->C.S_C.typeMONS aMap:g_attackRangeTheta aPiece:&U->C i:0];
+ [self checkRangeAttack:Utarget->y startY:Utarget->x leftPow:unitBreak->atkRange+1 pieceType:U->C.S_C.typeMONS aMap:g_attackRangeTheta aPiece:&U->C i:unitBreak->atkRange+1 ];
+
+ for (int i = 0;i < chipWidth;i++) {
+ for(int k = 0;k < chipHeight;k++){
+ if(g_attackRangeTheta[i][k] > 0)
+ g_attackRangeTheta[i][k] = unitBreak->atkRange+1 - g_attackRangeTheta[i][k];
+ }
+ }
if(g_attackRangeTheta[y][x] > 0 && !cpuOMFGmoveATKfixFlag){
[self DrawImage:chipSelect x:(y-1)*32 y:(x-1)*32 cx:0 cy:0 f:0.6];
}
}
- */
+
if(cpuIsAttackingFlag || (UA && unitMoveEndFlag)){
for (int x = 1; x <= chipWidth;x++) {