如何使对象从A点移动到B点但B点移动? C ++

时间:2018-05-23 03:05:10

标签: c++

我正在制作一个简单的游戏来帮助我学习基本的c ++代码。我想让一个僵尸能够在2d蛇状环境中追随/追逐玩家。虽然我还没有找到办法让这个工作起作用。

  For Each crxFormula In crxRpt.FormulaFields
    Select Case crxFormula.FormulaFieldName
      Case CR_FORMULA_COMPANY_NAME
        crxFormula.Text = QuoteIt(Trim(strCompanyName(1)))
      Case CR_FORMULA_GROUP_1_HIGHLIGHT
        crxFormula.Text = Replace$(strHCGroup(1), " ", "")
      Case CR_FORMULA_GROUP_2_HIGHLIGHT
        crxFormula.Text = Replace$(strHCGroup(2), " ", "")
      Case CR_FORMULA_GROUP_3_HIGHLIGHT
        crxFormula.Text = Replace$(strHCGroup(3), " ", "")
      Case CR_FORMULA_GROUP_4_HIGHLIGHT
        crxFormula.Text = Replace$(strHCGroup(4), " ", "")
      Case CR_FORMULA_GRAND_HIGHLIGHT
        crxFormula.Text = Replace$(strHCGrand, " ", "")
      Case "Processing Date"
        crxFormula.Text = "Date(" & QuoteIt(Format(dtpProcDate.Value, "Short Date")) & ")"
      Case "Days Col 1"
        crxFormula.Text = CStr(txtPeriod(0).Value)
      Case "Days Col 2"
        crxFormula.Text = CStr(txtPeriod(1).Value)
      Case "Days Col 3"
        crxFormula.Text = CStr(txtPeriod(2).Value)
      Case "Days Col 4"
        crxFormula.Text = CStr(txtPeriod(3).Value)
      Case "Age Type"
        Select Case True
          Case optAgingType(0).Value
            crxFormula.Text = QuoteIt(optAgingType(0).Tag)
          Case optAgingType(1).Value
            crxFormula.Text = QuoteIt(optAgingType(1).Tag)
          Case optAgingType(2).Value
            crxFormula.Text = QuoteIt(optAgingType(2).Tag)
          Case optAgingType(3).Value
            crxFormula.Text = QuoteIt(optAgingType(3).Tag)
        End Select
      Case "Summary"
        crxFormula.Text = IIf(optReportType(1).Value, "True", "False")
    End Select
    crxFormula.Check blnFormulaOK, strFormulaErr
    If Not blnFormulaOK Then
      MsgBox CR_FORMULA_ERROR_TEXT & crxFormula.FormulaFieldName & vbNewLine & vbNewLine & _
             strFormulaErr & vbNewLine & vbNewLine & _
             Trim(crxFormula.Text), vbCritical, CR_FORMULA_ERROR_TITLE
      Exit For
    End If
  Next crxFormula

2 个答案:

答案 0 :(得分:1)

在主循环中,在致电Draw之前,您需要更改僵尸的位置。使其位置(在X或Y轴上)离玩家更近一步。

由于您知道播放器的当前位置,因此可以轻松完成。如果zombie-X高于player-X,则减少zombie-X。或者如果相反则增加zombie-X。与Y位置相同。

为了不使僵尸只是走上下(或左右)你在主循环中每隔一次调整僵尸的X位置,每隔一次调整Y位置。或者你可以随机选择X或Y.

简而言之,你的“B点”总是球员的当前位置。

答案 1 :(得分:0)

你的游戏逻辑应该是这样的。

Setup();
do
{
 Draw();
 Delay();
 Update();
}while(!bIsEnd);

更新是您更新对象位置的位置 包括检查任何人类输入(键盘/鼠标)和 根据它移动物体。
某些对象会自动移动(AI)

此功能应该放置更新位置的逻辑(I& Z)
我假设'我'是人为控制的,'Z'是计算机控制的(AI)。
对于'我',您可以使用_getch()功能从键盘输入并切换大小写。
对于'Z',因为这是一款游戏,你应该让它具有挑战性。
不是太愚蠢或太聪明。
您可以随机移动(X或Y方向) 对于每4次更新调用,您可以通过计算来定义其方向 '我'和'Z'的位置。

if(X > ZombX) 
  ZombX += random(2);
else
  ZombX -= random(2);
if(Y > ZombY)
  ZombY += random(2);
else
 ZombY -= random(2);

4个更新电话就是一个例子。您可以使用另一个常量或开发一个新逻辑。

if(X == ZombX&& Y == ZombY),设置bIsEnd。