同求funcode平台下拼图游戏的C语言代码

同求funcode平台下拼图游戏的C语言代码,第1张

//第一题:#includevoidfun(char*a[],char*b[]){intl/*获取较短数组的长度姿岁*/没脊if(strlen(*a)usingnamespacestdclassCircle{public:voidinput(double)//输入voidprint()//输出doublegetArea()//计算半径private:doubler//半迹察睁径}voidCircle::input(doublea){r=a}doubleCircle::getArea(){returnr*r*3.14159}voidCircle::print(){cout>ac.input(a)c.print()return0}

//funcode黄金矿工源文件

#include "CommonAPI.h"

#include "stdio.h"

#include "string.h"

void   DrawHookLine()

int g_fGoldBornMinX = 0

int g_fGoldBornMaxX = 0

int g_fGoldBornMinY = 0

int g_fGoldBornMaxY = 0

int g_iGoldCount =  20

int g_iGameState=2

int flag=1 

float Score=0.f

int flagnum=0 

char szGotGoldName[20]  //当前抓到金子的名称

float g_fHookRotation = 0.f

float g_fEmptyHookSpeed =35.f

float fTimeDelta

float g_fHookStartPosX //存储钩子的初始X位置

float g_fHookStartPosY //存储钩子的初始Y位置

///////////////////////////////////////////////////////////////////////////////////////////

//

// 主函数入口

//

//////////////////////////////////////////////////////////////////////////////////////////

int PASCAL WinMain(HINSTANCE hInstance,

                   HINSTANCE hPrevInstance,

                   LPSTR     lpCmdLine,

                   int       nCmdShow)

{

 // 初始化游戏引擎

 if( !dInitGameEngine( hInstance, lpCmdLine 知茄和) )

  return 0

 // 游戏初始化代码 

    dSetWindowTitle("黄金矿工")

 g_fGoldBornMinX  = dGetScreenLeft() + 5  //金子左边界

 g_fGoldBornMaxX  = dGetScreenRight() - 5  //金子右边界

 g_fGoldBornMinY  = dGetScreenTop() + 20  //金子上边界

 g_fGoldBornMaxY  = dGetScreenBottom() - 5 //金子下边界

 g_fHookStartPosX = dGetSpritePositionX("GoldHook") //获取钩子的初始X坐标

 g_fHookStartPosY = dGetSpritePositionY("GoldHook") //获取钩子的初始Y坐标

    dSetSpriteCollisionSend("goldHook", 1)

 dSetSpriteCollisionReceive("goldTemplate", 1)

 const float fRotateSpeed = 45.f  //  摇摆速度,单位 度/秒

 int iHookRotToLeft = 1   //钩子摆动的方向:1 ← ;0 →

 float fTimeDelta = dGetTimeDelta()

    // 引擎主循环,处理屏幕图像刷新等工作

 while( dEngineMainLoop() )

 {

  // 获取两次调用之间的时间差,传递给游戏逻辑处理

  float fTimeDelta = dGetTimeDelta()

  DrawHookLine()

        // 执行游戏主循环

  if(g_iGameState == 0)

  {

      float fThisRotate = fRotateSpeed * fTimeDelta   

            if( iHookRotToLeft )

   {

    g_fHookRotation += 纳裤fThisRotate

    if( g_fHookRotation >= 180.f )

    {

     g_fHookRotation  = 180.f

     iHookRotToLeft = 0

    }

   }

      else

   {

        g_fHookRotation -= fThisRotate

   搭盯    if( g_fHookRotation <= 0.f )

    {

     g_fHookRotation  = 0.f

     iHookRotToLeft = 1

    }

   }

      dSetSpriteRotation("GoldHook",g_fHookRotation)

  }

  else if(g_iGameState == 1)

  { 

   dSetTextValue("Score",Score)

   //播放拉金块的动作

   dAnimateSpritePlayAnimation("goldMan","GolderManAnimation3", 1 )             //获取钩子X方向的速度

      float fSpeedX = dGetSpriteLinearVelocityX("GoldHook") 

            //获取钩子Y方向的速度

       float fSpeedY = dGetSpriteLinearVelocityY("GoldHook")   

            //当速度接近为0时,即可判定其已到达初始点

            if( fSpeedX < 0.00001f && fSpeedX > -0.00001f && 

   fSpeedY < 0.00001f && fSpeedY > -0.00001f )

   {

                //解除金块与钩子的锚定

   dSpriteDismount(szGotGoldName) 

                //删除获取的金块

   dDeleteSprite(szGotGoldName)  

                //回拉结束,设定状态为0

   g_iGameState = 0   

        if(flagnum)

   {g_iGoldCount--

     }

   }

  }

  // 播放挖金者的动作(恢复初始守候动作)

  dAnimateSpritePlayAnimation("goldMan", "GolderManAnimation2", 1)

  if(g_iGoldCount==0)

  {

   g_iGameState = 0

   Score=0

            dSetSpriteVisible("GameBegin",1) 

   g_iGoldCount =  20

   flag=1 

  }

 }

 dAnimateSpritePlayAnimation("goldMan", "GolderManAnimation2", 1)

 

    // 关闭游戏引擎

 dShutdownGameEngine()

 return 0

}

//==========================================================================

//

// 引擎捕捉鼠标移动消息后,将调用到本函数

void dOnMouseMove( const float fMouseX, const float fMouseY )

{

 // 可以在此添加游戏需要的响应函数

}

//==========================================================================

//

// 引擎捕捉鼠标点击消息后,将调用到本函数

void dOnMouseClick( const int iMouseType, const float fMouseX, const float fMouseY )

{

 // 可以在此添加游戏需要的响应函数

}

//==========================================================================

//

// 引擎捕捉键盘按下消息后,将调用到本函数

// iAltPress iShiftPress iCtrlPress 分别为判断Shift,Alt,Ctrl当前是否也处于按下状态。比如可以判断Ctrl+E组合键

void dOnKeyDown( const int iKey, const int iAltPress, const int iShiftPress, const int iCtrlPress )

{

 // 可以在此添加游戏需要的响应函数

  if(iKey==KEY_SPACE)

  {

       g_iGameState = 1 // 初始化之后,将游戏状态设置为进行中

       dSetSpriteVisible("GameBegin",0)

    //生成金子

     int iLoop = 0 //循环变量控制

           int iSize = 4, iPosX = 0, iPosY = 0 //iSize表示金块大小的变量

     if(flag)

   {

       for( iLoop = 0 iLoop < g_iGoldCount iLoop++ )

    {

              if( iLoop < 10 )//生成10个小金块,大小为4

     {

                iSize = 4

     }

              else if( iLoop >= 10 && iLoop < 16 )//生成6个中金块,大小为6

     {

                iSize = 6

     }

              else//生成4个大金块,大小为8

     {

                   iSize = 8

     }//初始化金子精灵实例

                    char* tmpName

     //生成金块名字

     tmpName=dMakeSpriteName("GoldBlock",iLoop)           

     dCloneSprite("goldTemplate",tmpName)

     //设置金块的宽度

     dSetSpriteWidth(tmpName,(float)iSize)

     //设置金块的高度            

     dSetSpriteHeight(tmpName,(float)iSize)  

     //设置金子精灵位置

              iPosX =  dRandomRange(g_fGoldBornMinX, g_fGoldBornMaxX)

              iPosY =  dRandomRange(g_fGoldBornMinY, g_fGoldBornMaxY)

              dSetSpritePosition(tmpName,(float)iPosX, (float)iPosY)

        flag=0

    }

   }

         if(g_iGoldCount==0)

   {

                flag=1

    g_iGoldCount=20

   }

  }

  if( iKey == KEY_S &&g_iGameState ==0 )

  {   //按下↓并且游戏状态为 "0" 

          g_iGameState = 2 //置游戏状态为2,可用于控制钩子是否摆动

         // 以当前朝向给钩子一个向前的速度

   dSetSpriteLinearVelocityPolar("GoldHook",g_fEmptyHookSpeed,g_fHookRotation)

         // 播放挖金者的动作(一个胳膊往下压的动作)

   dAnimateSpritePlayAnimation("goldMan","GolderManAnimation1", 0)

         //0 表示播放一次,这里胳膊往下压就是一次

  } 

}

//==========================================================================

//

// 引擎捕捉键盘d起消息后,将调用到本函数

void dOnKeyUp( const int iKey )

{

 // 可以在此添加游戏需要的响应函数

}

//===========================================================================

//

// 引擎捕捉到精灵与精灵碰撞之后,调用此函数

void dOnSpriteColSprite( const char *szSrcName, const char *szTarName )

{

 // 发起者为GoldHook,接受者含有GoldBlock字段

 

  if(strcmp(szSrcName,"GoldHook")== 1 && strstr(szTarName,"GoldBlock")!=NULL )

  {

   //将金块锚定在钩子上

      dSpriteMountToSpriteLinkPoint( szTarName, "GoldHook", 2 )

   //使钩子向初始位置移动,即会拉

   dSpriteMoveTo("GoldHook",g_fHookStartPosX,g_fHookStartPosY, g_fEmptyHookSpeed, 1)

   //复制并保存当前抓取到金块的名称

   strcpy(szGotGoldName,szTarName)    

   // 发起者为GoldHook,接受者含有GoldBlock字段

            // 根据金子大小,计算钩子的往回收的速度,越大的越慢。

   // 算法:之前设置的金子大小为4,6,8,用10减去该大小再除以10,得到3个小数:0.6,0.4,0.2.该小数乘以空钩子的速度即得到挂接不同金子后的实际速度

             float fWidth = dGetSpriteWidth( szTarName )

             float fSpeed = ((10.f - fWidth) / 10.f) * g_fEmptyHookSpeed

   Score+=fWidth

            // 钩子往初始位置移动  

            dSpriteMoveTo( "goldhook", g_fHookStartPosX, g_fHookStartPosY, fSpeed, 1)

   //播放拉金块的动作

   dAnimateSpritePlayAnimation("goldMan","GolderManAnimation1", 0 ) 

   g_iGameState = 1

   flagnum=1

  }

}

//===========================================================================

//

// 引擎捕捉到精灵与世界边界碰撞之后,调用此函数.

// iColSide : 0 左边,1 右边,2 上边,3 下边

void dOnSpriteColWorldLimit( const char *szName, const int iColSide )

{

 if(strcmp(szName,"GoldHook")!=0)

 {  

      //碰到边界的为钩子时

//同样设置为回拉,只是没有碰到金子

 dSpriteMoveTo(szName,g_fHookStartPosX,g_fHookStartPosY, g_fEmptyHookSpeed, 1)

//播放拉金块的动作

        dAnimateSpritePlayAnimation("goldMan","GolderManAnimation3", 0)    g_iGameState = 1

     flagnum=0

 } 

}

void DrawHookLine()

{

 // 首先,从矿工精灵上获取一个缆绳链接点作为绳子的起始点   

 float fStartX = dGetSpriteLinkPointPosX( "GoldMan", 1 )

 float fStartY = dGetSpriteLinkPointPosY( "GoldMan", 1 )

 // 绳子终点在钩子精灵上获取

 float fEndX = dGetSpriteLinkPointPosX( "GoldHook", 1 )

 float fEndY = dGetSpriteLinkPointPosY( "GoldHook", 1 )

 // 在这两点之间划线.线的颜色红绿蓝值都为50,即灰色

 dDrawLine( fStartX, fStartY, fEndX, fEndY, 2.f, 0, 50, 50, 50, 255 )

}

public int getSalary(int month){

return this.salaryPerMonth + super.getSalary(month)+

this.getAddtionalSalary()

}

public int getAddtionalSalary(){

return 2000

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12417267.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存