OSDN Git Service

しゃていはんげき
authorKillery <Killery@kiritani-no-mac-mini.local>
Sat, 2 Jan 2016 04:44:50 +0000 (13:44 +0900)
committer桐谷 諭史 <Killery@kiritani-no-Mac-mini.local>
Sat, 2 Jan 2016 04:44:50 +0000 (13:44 +0900)
Awars III/FieldView.m

index 80bf1b1..e049364 100755 (executable)
 
 -(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++) {