📄 pokegame.cpp
字号:
m_ptAnime3.y = m_ptAnime2.y + 4;
m_ptAnime4.y = 0;//坐标偏移
}
else
{
m_nAnimeStep++;
//初始化发牌牌堆位置
m_ptAnime4.x = (m_cxScreen - m_nTotalHeight * 2 - m_rtPoke.x * 3) / 4;
}
}
break;
case 25://牌堆移到屏幕做边,准备发牌
if (m_ptAnime1.x - FRAMESKIP * XP_STEP25> m_ptAnime4.x)
m_ptAnime1.x -= FRAMESKIP * XP_STEP25;
else
m_ptAnime1.x = m_ptAnime4.x;
for (i = m_nTotalHeight - 1;i >=0;i--)
m_pBmpBuffer->BltIn(m_ptAnime1.x + i, m_ptAnime1.y + i, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, BK_POKE_POS, 0, AEE_RO_TRANSPARENT);
if (m_ptAnime1.x == m_ptAnime4.x)
{
m_nAnimeStep++;
int temp1 = 0,temp2 = 0;
for (i = 0;i < TOTALPOKES;i++)
{
byte byRand;
GETRAND(&byRand, 1);
temp1 = byRand % TOTALPOKES;
temp2 = m_arwPKQueue[i];
m_arwPKQueue[i] = m_arwPKQueue[temp1];
m_arwPKQueue[temp1] = temp2;
}
//牌堆坐标为最底下的那张的坐标
i = m_nTotalHeight - 1;
m_ptAnime1.x+=i;
m_ptAnime1.y+=i;
m_ptAnime5.x = m_ptAnime4.x * 2 + m_nTotalHeight + m_rtPoke.x;
m_ptAnime5.y = m_ptAnime1.y;
m_ptAnime2.x = m_cxScreen - m_ptAnime4.x - m_rtPoke.x;
m_ptAnime2.y = m_ptAnime1.y;
}
break;
case 26://保持牌堆,等待用户按键
for (i = 0;i <=m_nTotalHeight - 1;i++)
m_pBmpBuffer->BltIn(m_ptAnime1.x - i, m_ptAnime1.y - i, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, BK_POKE_POS, 0, AEE_RO_TRANSPARENT);
break;
}
UpdateEx();
//文字
if (m_nAnimeStep == 26)
{
if(m_pShell->LoadResString(POKE_RES_FILE, IDS_FP, m_szFlashText, 50) == 0)
return;
StrFlash(IDS_FP);
}
}
void CPokeGame::AnimeFP(void)
{
//循环用变量
int i = 0,j = 0,k = 0;
switch (m_nAnimeStep)//步骤
{
case 1://从1次队列最下方取牌
//画1次队列
j = 0;
if (m_nPosQueue_2 + m_nPosResult < TOTALPOKES)
for (; j < (TOTALPOKES - 1 - m_nPosResult - m_nPosQueue_2) / POKESPERPIXEL + 1; j++)
m_pBmpBuffer->BltIn(m_ptAnime1.x - j, m_ptAnime1.y - j, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, BK_POKE_POS, 0, AEE_RO_TRANSPARENT);
//画2次队列
if (m_nPosQueue_2)
for (i = 0;i < m_nPosQueue_2 / POKESPERPIXEL + 1;i++)
m_pBmpBuffer->BltIn(m_ptAnime2.x - i, m_ptAnime2.y - i, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, m_rtPoke.x * (m_arwPKQueue_2[m_nPosQueue_2 - 1] - 1), 0, AEE_RO_TRANSPARENT);
//画结果队列
for (i = 0;i < m_nPosResult;i++)
m_pBmpBuffer->BltIn(DISTANCE_EDGE + m_nPokeDistance * i, DISTANCE_EDGE, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, m_rtPoke.x * (m_arwResult[i] - 1), 0, AEE_RO_TRANSPARENT);
m_nAnimeStep = 2;
m_ptAnime3.x = m_ptAnime1.x;
m_ptAnime3.y = m_ptAnime1.y;
break;
case 2://把1次队列取出的牌向临时纸牌队列移动
//画2次队列
j = 0;
if (m_nPosQueue_2)
for(; j < m_nPosQueue_2 / POKESPERPIXEL + 1; j++)
m_pBmpBuffer->BltIn(m_ptAnime2.x - j, m_ptAnime2.y - j, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, m_rtPoke.x * (m_arwPKQueue_2[m_nPosQueue_2 - 1] - 1), 0, AEE_RO_TRANSPARENT);
//计算移动后的坐标。其中m_ptAnime5是临时队列坐标,是目的地;m_ptAnime1为1次队列坐标,是出发地;m_ptAnime3为当前坐标
//如果距离大于一步
if (m_ptAnime5.x - m_ptAnime3.x >= FRAMESKIP * FP_STEP2_MOVE)
m_ptAnime3.x += FRAMESKIP * FP_STEP2_MOVE;//5倍速度移动
else
m_ptAnime3.x = m_ptAnime5.x;
//画结果队列
for (i = 0;i < m_nPosResult;i++)
m_pBmpBuffer->BltIn(DISTANCE_EDGE + m_nPokeDistance * i, DISTANCE_EDGE, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, m_rtPoke.x * (m_arwResult[i] - 1), 0, AEE_RO_TRANSPARENT);
//画被移动的牌
m_pBmpBuffer->BltIn(m_ptAnime3.x, m_ptAnime3.y, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, BK_POKE_POS, 0, AEE_RO_TRANSPARENT);
//画1次队列
i = 0;
if (m_nPosQueue_2 + m_nPosResult + 1 < TOTALPOKES)
for (; i < (TOTALPOKES - 1 - m_nPosResult - m_nPosQueue_2) / POKESPERPIXEL + 1; i++)
m_pBmpBuffer->BltIn(m_ptAnime1.x - i, m_ptAnime1.y - i, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, BK_POKE_POS, 0, AEE_RO_TRANSPARENT);
//移动完毕
if (m_ptAnime3.x == m_ptAnime5.x)
{
m_arwPKQueueTmp[m_nPosQueueTmp] = m_arwPKQueue[TOTALPOKES - m_nPosQueue_2 - m_nPosResult + m_nPosQueue - 1];
m_nPosQueueTmp++;
m_nDelayms = FP_STEP2_DELAY;
//如果1次纸牌队列空
if (m_nPosQueue_2 + m_nPosResult + m_nPosQueueTmp == TOTALPOKES)
m_nAnimeStep = 4;
else
{
m_nAnimeStep = 3;
m_ptAnime3.x = m_ptAnime1.x - i;
m_ptAnime4.x = (m_ptAnime5.x - m_ptAnime3.x) / 13;//每次移动的距离
m_ptAnime4.y = 16;//旋转一共需要13贞,前后相距3贞
}
}
break;
case 3://从1次队列顶部移动2张牌到临时队列
m_ptAnime4.y--;
m_ptAnime3.x += m_ptAnime4.x;
j = (TOTALPOKES - m_nPosQueue_2 - m_nPosResult - 1) / POKESPERPIXEL;
m_ptAnime3.y = m_ptAnime5.y - j + (m_ptAnime3.x - m_ptAnime1.x + j) * j / (m_ptAnime5.x - m_ptAnime1.x + j);
k = m_ptAnime1.y - (m_ptAnime3.x - m_ptAnime4.x * 3 - m_ptAnime1.x + j) * j / (m_ptAnime5.x - m_ptAnime1.x + j);
//画1次队列
i = 0;
switch (TOTALPOKES - m_nPosQueue_2 - m_nPosResult - 1)
{
case 1:
break;
case 2:
if (m_ptAnime4.y > 12)
m_pBmpBuffer->BltIn(m_ptAnime1.x, m_ptAnime1.y, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, BK_POKE_POS, 0, AEE_RO_TRANSPARENT);
break;
default:
for (; i < (TOTALPOKES - 2 - m_nPosResult - m_nPosQueue_2) / POKESPERPIXEL + 1; i++)
m_pBmpBuffer->BltIn(m_ptAnime1.x - i, m_ptAnime1.y - i, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, BK_POKE_POS, 0, AEE_RO_TRANSPARENT);
}
//画2次队列
j = 0;
if (m_nPosQueue_2)
for (; j < m_nPosQueue_2 / POKESPERPIXEL + 1; j++)
m_pBmpBuffer->BltIn(m_ptAnime2.x - j, m_ptAnime2.y - j, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, m_rtPoke.x * (m_arwPKQueue_2[m_nPosQueue_2 - 1] - 1), 0, AEE_RO_TRANSPARENT);
//画临时队列
for (i = 0;i < m_nPosQueueTmp / POKESPERPIXEL + 1;i++)
m_pBmpBuffer->BltIn(m_ptAnime5.x - i, m_ptAnime5.y - i, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, BK_POKE_POS, 0, AEE_RO_TRANSPARENT);
if (m_ptAnime4.y == 15)
m_pBmpBuffer->BltIn(m_ptAnime3.x, m_ptAnime3.y, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, BK_POKE_POS, 0, AEE_RO_TRANSPARENT);
if (m_ptAnime4.y == 14 || m_ptAnime4.y == 13)
m_pBmpBuffer->BltIn(m_ptAnime3.x - (m_rtPokeRotate.x - m_rtPoke.x) / 2, m_ptAnime3.y - (m_rtPokeRotate.y - m_rtPoke.y) / 2, m_rtPokeRotate.x, m_rtPokeRotate.y, m_pBmpPokeRotate, m_rtPokeRotate.x * (34 - m_ptAnime4.y * 2), 0, AEE_RO_TRANSPARENT);
if (m_ptAnime4.y == 12)
{
if (m_nPosQueue_2 + m_nPosResult < TOTALPOKES - 2)
m_pBmpBuffer->BltIn(m_ptAnime3.x - m_ptAnime4.x * 3, k, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, BK_POKE_POS, 0, AEE_RO_TRANSPARENT);
m_pBmpBuffer->BltIn(m_ptAnime3.x - (m_rtPokeBkH.x - m_rtPoke.x) / 2, m_ptAnime3.y - (m_rtPokeBkH.y - m_rtPoke.y) / 2, m_rtPokeBkH.x, m_rtPokeBkH.y, m_pBmpPokeBkH, 0, 0, AEE_RO_TRANSPARENT);
}
if (m_ptAnime4.y == 11 || m_ptAnime4.y == 10)
{
if (m_nPosQueue_2 + m_nPosResult < TOTALPOKES - 2)
m_pBmpBuffer->BltIn(m_ptAnime3.x - (m_rtPokeRotate.x - m_rtPoke.x) / 2 - m_ptAnime4.x * 3, k - (m_rtPokeRotate.y - m_rtPoke.y) / 2, m_rtPokeRotate.x, m_rtPokeRotate.y, m_pBmpPokeRotate, m_rtPokeRotate.x * (28 - m_ptAnime4.y * 2), 0, AEE_RO_TRANSPARENT);
m_pBmpBuffer->BltIn(m_ptAnime3.x - (m_rtPokeRotate.x - m_rtPoke.x) / 2, m_ptAnime3.y - (m_rtPokeRotate.y - m_rtPoke.y) / 2, m_rtPokeRotate.x, m_rtPokeRotate.y, m_pBmpPokeRotate, m_rtPokeRotate.x * (23 - m_ptAnime4.y * 2), 0, AEE_RO_TRANSPARENT);
}
if (m_ptAnime4.y == 9)
{
if (m_nPosQueue_2 + m_nPosResult < TOTALPOKES - 2)
m_pBmpBuffer->BltIn(m_ptAnime3.x - (m_rtPokeBkH.x - m_rtPoke.x) / 2 - m_ptAnime4.x * 3, k - (m_rtPokeBkH.y - m_rtPoke.y) / 2, m_rtPokeBkH.x, m_rtPokeBkH.y, m_pBmpPokeBkH, 0, 0, AEE_RO_TRANSPARENT);
m_pBmpBuffer->BltIn(m_ptAnime3.x, m_ptAnime3.y, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, BK_POKE_POS, 0, AEE_RO_TRANSPARENT);
}
if (m_ptAnime4.y == 8 || m_ptAnime4.y == 7)
if (m_nPosQueue_2 + m_nPosResult < TOTALPOKES - 2)
m_pBmpBuffer->BltIn(m_ptAnime3.x - (m_rtPokeRotate.x - m_rtPoke.x) / 2 - m_ptAnime4.x * 3, k - (m_rtPokeRotate.y - m_rtPoke.y) / 2, m_rtPokeRotate.x, m_rtPokeRotate.y, m_pBmpPokeRotate, m_rtPokeRotate.x * (17 - m_ptAnime4.y * 2), 0, AEE_RO_TRANSPARENT);
if (m_ptAnime4.y == 6)
if (m_nPosQueue_2 + m_nPosResult < TOTALPOKES - 2)
m_pBmpBuffer->BltIn(m_ptAnime3.x - m_ptAnime4.x * 3, k, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, BK_POKE_POS, 0, AEE_RO_TRANSPARENT);
if (m_ptAnime4.y == 8 || m_ptAnime4.y == 7)
m_pBmpBuffer->BltIn(m_ptAnime3.x - (m_rtPokeRotate.x - m_rtPoke.x) / 2, m_ptAnime3.y - (m_rtPokeRotate.y - m_rtPoke.y) / 2, m_rtPokeRotate.x, m_rtPokeRotate.y, m_pBmpPokeRotate, m_rtPokeRotate.x * (22 - m_ptAnime4.y * 2), 0, AEE_RO_TRANSPARENT);
if (m_ptAnime4.y == 6)
m_pBmpBuffer->BltIn(m_ptAnime3.x - (m_rtPokeBkH.x - m_rtPoke.x) / 2, m_ptAnime3.y - (m_rtPokeBkH.y - m_rtPoke.y) / 2, m_rtPokeBkH.x, m_rtPokeBkH.y, m_pBmpPokeBkH, 0, 0, AEE_RO_TRANSPARENT);
if (m_ptAnime4.y == 5 || m_ptAnime4.y == 4)
{
if (m_nPosQueue_2 + m_nPosResult < TOTALPOKES - 2)
m_pBmpBuffer->BltIn(m_ptAnime3.x - (m_rtPokeRotate.x - m_rtPoke.x) / 2 - m_ptAnime4.x * 3, k - (m_rtPokeRotate.y - m_rtPoke.y) / 2, m_rtPokeRotate.x, m_rtPokeRotate.y, m_pBmpPokeRotate, m_rtPokeRotate.x * (16 - m_ptAnime4.y * 2), 0, AEE_RO_TRANSPARENT);
m_pBmpBuffer->BltIn(m_ptAnime3.x - (m_rtPokeRotate.y - m_rtPoke.y) / 2, m_ptAnime3.y - (m_rtPokeRotate.y - m_rtPoke.y) / 2, m_rtPokeRotate.x, m_rtPokeRotate.y, m_pBmpPokeRotate, m_rtPokeRotate.x * (11 - m_ptAnime4.y * 2), 0, AEE_RO_TRANSPARENT);
}
if (m_ptAnime4.y == 3)
{
if (m_nPosQueue_2 + m_nPosResult < TOTALPOKES - 2)
m_pBmpBuffer->BltIn(m_ptAnime3.x - (m_rtPokeBkH.x - m_rtPoke.x) / 2 - m_ptAnime4.x * 3, k - (m_rtPokeBkH.y - m_rtPoke.y) / 2, m_rtPokeBkH.x, m_rtPokeBkH.y, m_pBmpPokeBkH, 0, 0, AEE_RO_TRANSPARENT);
m_pBmpBuffer->BltIn(m_ptAnime3.x, m_ptAnime3.y, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, BK_POKE_POS, 0, AEE_RO_TRANSPARENT);
}
if (m_ptAnime4.y == 2 || m_ptAnime4.y == 1)
{
m_pBmpBuffer->BltIn(m_ptAnime5.x, m_ptAnime5.y, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, BK_POKE_POS, 0, AEE_RO_TRANSPARENT);
if (m_nPosQueue_2 + m_nPosResult < TOTALPOKES - 2)
m_pBmpBuffer->BltIn(m_ptAnime3.x - (m_rtPokeRotate.x - m_rtPoke.x) / 2 - m_ptAnime4.x * 3, k - (m_rtPokeRotate.y - m_rtPoke.y) / 2, m_rtPokeRotate.x, m_rtPokeRotate.y, m_pBmpPokeRotate, m_rtPokeRotate.x * (5 - m_ptAnime4.y * 2), 0, AEE_RO_TRANSPARENT);
}
if (m_ptAnime4.y == 0)
{
m_pBmpBuffer->BltIn(m_ptAnime5.x, m_ptAnime5.y, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, BK_POKE_POS, 0, AEE_RO_TRANSPARENT);
if (m_nPosQueue_2 + m_nPosResult < TOTALPOKES - 2)
m_pBmpBuffer->BltIn(m_ptAnime5.x, m_ptAnime5.y, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, BK_POKE_POS, 0, AEE_RO_TRANSPARENT);
}
//画结果队列
for (i = 0;i < m_nPosResult;i++)
m_pBmpBuffer->BltIn(DISTANCE_EDGE + m_nPokeDistance * i, DISTANCE_EDGE, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, m_rtPoke.x * (m_arwResult[i] - 1), 0, AEE_RO_TRANSPARENT);
//判断跳转
if (m_ptAnime4.y == 0)
{
m_nDelayms = FP_STEP3_DELAY;
//牌值转移
m_arwPKQueueTmp[m_nPosQueueTmp] = m_arwPKQueue[m_nPosQueue];
m_nPosQueue++;
m_nPosQueueTmp++;
if (m_nPosQueue_2 + m_nPosResult < TOTALPOKES - 2)
{
m_arwPKQueueTmp[m_nPosQueueTmp] = m_arwPKQueue[m_nPosQueue];
m_nPosQueue++;
m_nPosQueueTmp++;
}
m_nAnimeStep = 4;
}
break;
case 4://将临时队列反转
//画1次队列
j = 0;
if (m_nPosQueue_2 + m_nPosResult + m_nPosQueueTmp < TOTALPOKES)
for (; j < (TOTALPOKES - 1 - m_nPosResult - m_nPosQueue_2 - m_nPosQueueTmp) / POKESPERPIXEL + 1; j++)
m_pBmpBuffer->BltIn(m_ptAnime1.x - j, m_ptAnime1.y - j, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, BK_POKE_POS, 0, AEE_RO_TRANSPARENT);
//画2次队列
if (m_nPosQueue_2)
for (i = 0;i < m_nPosQueue_2 / POKESPERPIXEL + 1;i++)
m_pBmpBuffer->BltIn(m_ptAnime2.x - i, m_ptAnime2.y - i, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, m_rtPoke.x * (m_arwPKQueue_2[m_nPosQueue_2 - 1] - 1), 0, AEE_RO_TRANSPARENT);
//画结果队列
for (i = 0;i < m_nPosResult;i++)
m_pBmpBuffer->BltIn(DISTANCE_EDGE + m_nPokeDistance * i, DISTANCE_EDGE, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, m_rtPoke.x * (m_arwResult[i] - 1), 0, AEE_RO_TRANSPARENT);
//画临时队列
for (i = 0;i < m_nPosQueueTmp / POKESPERPIXEL + 1;i++)
m_pBmpBuffer->BltIn(m_ptAnime5.x - i, m_ptAnime5.y - i, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, m_rtPoke.x * (m_arwPKQueueTmp[0] - 1), 0, AEE_RO_TRANSPARENT);
m_nAnimeStep = 5;
m_ptAnime3.x = m_ptAnime5.x;
m_ptAnime3.y = m_ptAnime5.y;
m_nDelayms = FP_STEP4_DELAY;
m_nAnimeStep = 5;
break;
case 5://把临时队列向2次纸牌队列移动
//画2次队列
j = 0;
if (m_nPosQueue_2)
for (; j < m_nPosQueue_2 / POKESPERPIXEL + 1; j++)
m_pBmpBuffer->BltIn(m_ptAnime2.x - j, m_ptAnime2.y - j, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, m_rtPoke.x * (m_arwPKQueue_2[m_nPosQueue_2 - 1] - 1), 0, AEE_RO_TRANSPARENT);
//计算移动后的坐标。其中m_ptAnime2为目的地,m_ptAnime5为源地,m_ptAnime3为当前坐标
//如果距离大于一步
if (m_ptAnime2.x - j - m_ptAnime3.x >= FRAMESKIP * FP_STEP5_MOVE)
{
m_ptAnime3.x += FRAMESKIP * FP_STEP5_MOVE;//FP_STEP5_MOVE倍速度移动
m_ptAnime3.y = m_ptAnime5.y - (m_ptAnime3.x - m_ptAnime5.x) * j/ (m_ptAnime2.x - m_ptAnime5.x);
}
else
{
m_ptAnime3.x = m_ptAnime2.x - j;
m_ptAnime3.y = m_ptAnime2.y - j;
}
//画结果队列
for (i = 0;i < m_nPosResult;i++)
m_pBmpBuffer->BltIn(DISTANCE_EDGE + m_nPokeDistance * i, DISTANCE_EDGE, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, m_rtPoke.x * (m_arwResult[i] - 1), 0, AEE_RO_TRANSPARENT);
//画被移动的牌
if (m_arwPKQueueTmp[0])
for (i = 0;i < m_nPosQueueTmp / POKESPERPIXEL + 1;i++)
m_pBmpBuffer->BltIn(m_ptAnime3.x - i, m_ptAnime3.y - i, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, m_rtPoke.x * (m_arwPKQueueTmp[0] - 1), 0, AEE_RO_TRANSPARENT);
//画1次队列
i = 0;
if (m_nPosQueue_2 + m_nPosResult + m_nPosQueueTmp < TOTALPOKES)
for(; i < (TOTALPOKES - 1 - m_nPosResult - m_nPosQueue_2 - m_nPosQueueTmp) / POKESPERPIXEL + 1; i++)
m_pBmpBuffer->BltIn(m_ptAnime1.x - i, m_ptAnime1.y - i, m_rtPoke.x, m_rtPoke.y, m_pBmpPoke, BK_POKE_POS, 0, AEE_RO_TRANSPARENT);
//移动完毕
if (m_ptAnime3.x == m_ptAnime2.x - j)
{
for (i = 1;i <= m_nPosQueueTmp;i++)
{
m_arwPKQueue_2[m_nPosQueue_2] = m_arwPKQueueTmp[m_nPosQueueTmp - i];
m_nPosQueue_2++;
m_arwPKQueueTmp[m_nPosQueueTmp - i] = 0;
}
m_nPosQueueTmp = 0;
m_nDelayms = FP_STEP5_DELAY;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -