From: Killery Date: Sat, 2 Jan 2016 04:44:50 +0000 (+0900) Subject: しゃていはんげき X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=cfb9feb811eca17b55fad2538aef4e6325074e8c;p=awarsiii%2FAwarsIV.git しゃていはんげき --- diff --git a/Awars III/FieldView.m b/Awars III/FieldView.m index 80bf1b1..e049364 100755 --- a/Awars III/FieldView.m +++ b/Awars III/FieldView.m @@ -1348,37 +1348,32 @@ -(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]; + } } @@ -2457,7 +2452,15 @@ 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++){ @@ -2497,6 +2500,7 @@ 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; @@ -2553,6 +2557,7 @@ 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; @@ -2594,7 +2599,14 @@ 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++){ @@ -2615,6 +2627,7 @@ 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; @@ -2648,6 +2661,7 @@ 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; @@ -2675,7 +2689,15 @@ 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){ @@ -3650,7 +3672,7 @@ } } - /* + if((cpuModeATTACKflag && !unitMoveEndFlag && !cpuIsAttackingFlag && Utarget)) for (int x = 1; x <= chipWidth;x++) { for(int y = 1;y <= chipHeight;y++){ @@ -3661,7 +3683,14 @@ 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]; @@ -3706,7 +3735,7 @@ } } - */ + if(cpuIsAttackingFlag || (UA && unitMoveEndFlag)){ for (int x = 1; x <= chipWidth;x++) {