亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? winmain.cpp

?? 是一個RPG游戲的源碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/**************************************************
WinMain.cpp
Chapter 20 Full Game Demo - The Tower

Programming Role-Playing Games with DirectX
by Jim Adams (01 Jan 2002)

Required libraries:
  D3D8.LIB, D3DX8.LIB, D3DXOF.LIB, DXGUID.LIB,
  DINPUT8.LIB, DSOUND.LIB, and WINMM.LIB 
**************************************************/

//#define FULLSCREENMODE
#include "Global.h"

///////////////////////////////////////////////////////////
// Global declarations
///////////////////////////////////////////////////////////
#define MENU_BACK   1
#define MENU_LOAD   2
#define MENU_SAVE   4

long g_MenuOptions = 0;

// Global names of character meshes
char *g_CharMeshNames[] = {
    { "..\\Data\\Warrior1.x" },   // Mesh # 0
    { "..\\Data\\Warrior2.x" },   // Mesh # 1
    { "..\\Data\\Yodan1.x"   },   // Mesh # 2
    { "..\\Data\\Yodan2.x"   },   // Mesh # 3
    { "..\\Data\\Yodan3.x"   },   // Mesh # 4
    { "..\\Data\\Yodan4.x"   }    // Mesh # 5
  };

// Global character animation information
sCharAnimationInfo g_CharAnimations[] = {
    { "Idle",  TRUE  },
    { "Walk",  TRUE  },
    { "Swing", FALSE },
    { "Spell", FALSE },
    { "Swing", FALSE },
    { "Hurt",  FALSE },
    { "Die",   FALSE },
    { "Idle",  TRUE  }
  };

// Global spell mesh information
char *g_SpellMeshNames[] = {
    { "..\\Data\\Fireball.x"   },
    { "..\\Data\\Explosion.x"  },
    { "..\\Data\\Ice.x"        },
    { "..\\Data\\Heal.x"       },
    { "..\\Data\\Teleport.x"   },
    { "..\\Data\\Groundball.x" },
    { "..\\Data\\Bomb.x"       },
    { "..\\Data\\Force.x"      }
  };

// Global sound effect filenames
#define NUM_SOUNDS 9
char *g_SoundFilenames[NUM_SOUNDS] = {
    { "..\\Data\\Attack1.wav" },
    { "..\\Data\\Attack2.wav" },
    { "..\\Data\\Spell.wav"   },
    { "..\\Data\\Roar.wav"    },
    { "..\\Data\\Hurt1.wav"   },
    { "..\\Data\\Hurt2.wav"   },
    { "..\\Data\\Die1.wav"    },
    { "..\\Data\\Die2.wav"    },
    { "..\\Data\\Beep.wav"    }
  };

// Global music filenames
long g_CurrentMusic = -1;
char *g_MusicFilenames[] = {
    { "..\\Data\\Cathedral_Sunrise.mid" },
    { "..\\Data\\Distant_tribe.mid"     },
    { "..\\Data\\Escape.mid"            },
    { "..\\Data\\Jungle1.mid"           },
    { "..\\Data\\Magic_Harp.mid"        },
    { "..\\Data\\Medi_Strings.mid"      },
    { "..\\Data\\Medi_techno.mid"       },
    { "..\\Data\\Song_of_the_sea.mid"   },
    { "..\\Data\\Storm.mid"             }
  };

// Global character pointer to PC, bartering NPC, and barter ICS
sCharacter *g_PCChar = NULL;
sCharacter *g_BarterChar = NULL;
char        g_BarterICS[MAX_PATH];

///////////////////////////////////////////////////////////
// cApp function code
///////////////////////////////////////////////////////////
cApp::cApp()
{ 
  m_Width  = 640; 
  m_Height = 480;
  m_Style  = WS_BORDER | WS_CAPTION |                         \
             WS_MINIMIZEBOX | WS_SYSMENU;
  strcpy(m_Class, "GameClass");
  strcpy(m_Caption, "The Tower by Jim Adams");
}

BOOL cApp::Init()
{
  // Initialize the graphics device
  m_Graphics.Init();

  // Determine to use fullscreen mode or not
#ifdef FULLSCREENMODE
  m_Graphics.SetMode(GethWnd(), FALSE, TRUE, 640, 480);
#else
  m_Graphics.SetMode(GethWnd(), TRUE, TRUE);
#endif

  // Set perspective
  m_Graphics.SetPerspective(0.6021124f,1.33333f,1.0f,20000.0f);

  // Enable cursor
  ShowMouse(TRUE);

  // Create a font
  m_Font.Create(&m_Graphics, "Arial", 16, TRUE);

  // Initialize input and input devices
  m_Input.Init(GethWnd(), GethInst());
  m_Keyboard.Create(&m_Input, KEYBOARD);
  m_Mouse.Create(&m_Input, MOUSE, TRUE);

  // Initialize the sound system and channels
  m_Sound.Init(GethWnd(), 22050, 1, 16);
  m_SoundChannel.Create(&m_Sound, 22050, 1, 16);
  m_MusicChannel.Create(&m_Sound);
  
  // Load the master item list
  FILE *fp;
  for(long i=0;i<1024;i++)
    ZeroMemory(&m_MIL[i], sizeof(sItem));
  if((fp=fopen("..\\Data\\Game.mil", "rb")) != NULL) {
    for(i=0;i<1024;i++)
      fread(&m_MIL[i], 1, sizeof(sItem), fp);
    fclose(fp);
  }

  // Initialize the character controller
  m_CharController.SetData(this);
  m_CharController.Init(&m_Graphics, &m_Font,                 \
      "..\\Data\\Game.mcl", (sItem*)&m_MIL,                   \
      m_SpellController.GetSpell(0),                          \
      sizeof(g_CharMeshNames)/sizeof(char*), g_CharMeshNames, \
      "..\\Data\\", "..\\Data\\",                             \
      sizeof(g_CharAnimations) / sizeof(sCharAnimationInfo),  \
      (sCharAnimationInfo*)&g_CharAnimations,                 \
      &m_SpellController);

  // Initialize the spell controller
  m_SpellController.SetData(this);
  m_SpellController.Init(&m_Graphics,                         \
     "..\\Data\\Game.msl",                                    \
     sizeof(g_SpellMeshNames)/sizeof(char*),g_SpellMeshNames, \
     "..\\Data\\", &m_CharController);

  // Get the options bitmap
  m_Options.Load(&m_Graphics, "..\\Data\\Options.bmp");

  // Create the main, header, and stats windows
  m_Window.Create(&m_Graphics, &m_Font);
  m_Header.Create(&m_Graphics, &m_Font);
  m_Stats.Create(&m_Graphics, &m_Font);

  // Position all windows
  m_Window.Move(2,2, 636, 476);
  m_Header.Move(2,2,128,32,-1,-1,D3DCOLOR_RGBA(128,16,16,255));
  m_Stats.Move(2,2,128,48);

  // Set script application pointer
  m_Script.SetData(this);

  // Push the main menu state, setting menu options first
  g_MenuOptions = MENU_LOAD;
  m_StateManager.Push(MenuFrame, this);

  return TRUE;
}

BOOL cApp::Shutdown()
{
  // Pop all states
  m_StateManager.PopAll(this);

  // Free controllers
  m_CharController.Free();
  m_SpellController.Free();

  // Free script object
  m_Script.Free();

  // Free level data
  FreeLevel();

  // Free the options texture
  m_Options.Free();

  // Free the text windows
  m_Window.Free();
  m_Header.Free();
  m_Stats.Free();

  // Shutdown sound
  m_MusicChannel.Free();
  m_SoundChannel.Free();
  m_Sound.Shutdown();

  // Shutdown input
  m_Keyboard.Free();
  m_Mouse.Free();
  m_Input.Shutdown();

  // Shutdown graphics
  m_Font.Free();
  m_Graphics.Shutdown();

  return TRUE;
}

BOOL cApp::Frame()
{
  static DWORD UpdateTimer = timeGetTime();

  // Limit all frame updates to 30 fps
  if(timeGetTime() < UpdateTimer + 33)
    return TRUE;
  UpdateTimer = timeGetTime();

  // Acquire input devices and read input for all states
  m_Keyboard.Acquire(TRUE);   // Read keyboard
  m_Keyboard.Read();
  m_Mouse.Acquire(TRUE);      // Read mouse
  m_Mouse.Read();

  // Process state, returning result
  return m_StateManager.Process(this);
}

BOOL cApp::RenderFrame(long Elapsed)
{
  long i, j;

  // Render simplified mesh for z-values
  m_Graphics.EnableZBuffer(TRUE);
  m_SceneObject.Render();

  // Draw the backdrop (composed of six textures)
  m_Graphics.EnableZBuffer(FALSE);
  m_Graphics.BeginSprite();
  for(i=0;i<2;i++) {
    for(j=0;j<3;j++)
      m_SceneTextures[i*3+j].Blit(j*256,i*256);
  }
  m_Graphics.EndSprite();

  // Draw the 3-D objects
  m_Graphics.EnableZBuffer(TRUE);
  m_CharController.Render(Elapsed);
  m_SpellController.Render();

  return TRUE;
}

float cApp::GetHeightBelow(float XPos, float YPos, float ZPos)
{
  BOOL  Hit;
  float u, v, Dist;
  DWORD FaceIndex;

  D3DXIntersect(m_SceneMesh.GetParentMesh()->m_Mesh, 
                &D3DXVECTOR3(XPos,YPos,ZPos),
                &D3DXVECTOR3(0.0f, -1.0f, 0.0f),
                &Hit, &FaceIndex, &u, &v, &Dist);
  if(Hit == TRUE)
    return YPos-Dist;
  return YPos;
}

BOOL cApp::CheckIntersect(                                    \
                    float XStart, float YStart, float ZStart, \
                    float XEnd,   float YEnd,   float ZEnd,   \
                    float *Length)
{
  BOOL  Hit;
  float u, v, Dist;
  float XDiff, YDiff, ZDiff, Size;
  DWORD FaceIndex;
  D3DXVECTOR3 vecDir;

  XDiff = XEnd - XStart;
  YDiff = YEnd - YStart;
  ZDiff = ZEnd - ZStart;

  D3DXVec3Normalize(&vecDir, &D3DXVECTOR3(XDiff, YDiff, ZDiff));

  D3DXIntersect(m_SceneMesh.GetParentMesh()->m_Mesh,          \
                &D3DXVECTOR3(XStart,YStart,ZStart), &vecDir,  \
                &Hit, &FaceIndex, &u, &v, &Dist);

  if(Hit == TRUE) {
    Size = (float)sqrt(XDiff*XDiff+YDiff*YDiff+ZDiff*ZDiff);
    if(Dist > Size)
      Hit = FALSE;
    else {
      if(Length != NULL)
        *Length = Dist;
    }
  }

  return Hit;
}

float cApp::GetNextFloat(FILE *fp)
{
  char Buf[1024];
  long Pos = 0;
  int c;

  // Read until EOF or EOL
  while(1) {
    if((c = fgetc(fp)) == EOF)
      break;
    if(c == 0x0a || c == ' ')
      break;
    if((c >= '0' && c <= '9') || c == '.' || c == '-')
      Buf[Pos++] = c;
  }
  Buf[Pos] = 0;

  return (float)atof(Buf);
}

BOOL cApp::LoadLevel(long Num)
{
  char Filename[MAX_PATH];
  FILE *fp;
  long i;
  float XPos, YPos, ZPos, XAt, YAt, ZAt;

  FreeLevel(); // Free a prior level

  // Record scene number
  m_SceneNum = Num;

  // Load the backdrop textures
  for(i=0;i<6;i++) {
    sprintf(Filename, "..\\Data\\Scene%u%u.bmp", Num, i+1);
    if(m_SceneTextures[i].Load(&m_Graphics, Filename) == FALSE)
      return FALSE;
  }

  // Load the scene mesh and configure object
  sprintf(Filename, "..\\Data\\Scene%u.x", Num);
  if(m_SceneMesh.Load(&m_Graphics, Filename) == FALSE)
    return FALSE;
  m_SceneObject.Create(&m_Graphics, &m_SceneMesh);

  // Load the camera data
  sprintf(Filename, "..\\Data\\Cam%u.txt", Num);
  if((fp=fopen(Filename, "rb"))==NULL)
    return FALSE;
  XPos = GetNextFloat(fp);
  YPos = GetNextFloat(fp);
  ZPos = GetNextFloat(fp);
  XAt  = GetNextFloat(fp);
  YAt  = GetNextFloat(fp);
  ZAt  = GetNextFloat(fp);
  fclose(fp);
  m_Camera.Point(XPos, YPos, ZPos, XAt, YAt, ZAt);

  // Position the camera for the scene
  m_Graphics.SetCamera(&m_Camera);

  // Set no monsters in last frame
  m_MonstersLastFrame = FALSE;

  // Execute the script for loading this scene
  sprintf(Filename, "..\\Data\\Scene%lu.mls", Num);
  m_Script.Execute(Filename);

  return TRUE;
}

BOOL cApp::FreeLevel()
{
  sCharacter *CharPtr, *NextChar;
  long i;

  // Free scene mesh and textures
  m_SceneMesh.Free();
  m_SceneObject.Free();
  for(i=0;i<6;i++)
    m_SceneTextures[i].Free();

  // Free triggers and barriers
  m_Barrier.Free();
  m_Trigger.Free();

  // Free all non-pc characters
  if((CharPtr=m_CharController.GetParentCharacter()) != NULL) {
    while(CharPtr != NULL) {
      // Remember next character
      NextChar = CharPtr->Next;

      // Remove non-PC character
      if(CharPtr->Type != CHAR_PC)
        m_CharController.Remove(CharPtr);

      // Go to next character
      CharPtr = NextChar;
    }
  }  

  // Free all spell effects
  m_SpellController.Free();

  return TRUE;
}

BOOL cApp::PlaySound(long Num)
{
  if(Num >=0 && Num < NUM_SOUNDS) {
    m_SoundData.Free();

    if(m_SoundData.LoadWAV(g_SoundFilenames[Num]) == TRUE)
      m_SoundChannel.Play(&m_SoundData);

    return TRUE;
  }

  return FALSE;
}

BOOL cApp::PlayMusic(long Num)
{
  // Don't bother changing song if same already playing
  if(g_CurrentMusic == Num)
    return TRUE;

  // Stop and free current song
  m_MusicChannel.Stop();
  m_MusicChannel.Free();

  // Fade music out, giving DirectMusic enough time
  // to finish up last song (or else new song doesn't
  // play correctly.  The 700 is based on play volume
  // of music, so adjust ahead.
  DWORD Timer = timeGetTime() + 700;
  while(timeGetTime() < Timer) {
    DWORD Level = (Timer - timeGetTime()) / 10;
    m_MusicChannel.SetVolume(Level);
  }

  // Load and play new song
  m_MusicChannel.Load(g_MusicFilenames[Num]);
  m_MusicChannel.Play(70,0);

  // Remember new song #
  g_CurrentMusic = Num;

  return TRUE;
}

BOOL cApp::StopMusic()
{
  // Stop and free music, marking current song as none
  m_MusicChannel.Stop();
  m_MusicChannel.Free();
  g_CurrentMusic = -1;

  return TRUE;
}

BOOL cApp::WinGame()
{
  m_StateManager.PopAll(this);
  g_MenuOptions = MENU_LOAD;
  m_StateManager.Push(MenuFrame, this);

  return TRUE;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日日夜夜精品视频免费| 欧美日韩精品一区视频| 亚洲国产美女搞黄色| 亚洲欧美一区二区视频| 中文一区一区三区高中清不卡| 精品国产不卡一区二区三区| 日韩美女一区二区三区| 日韩欧美国产精品| 精品88久久久久88久久久| 精品久久人人做人人爱| 久久精品视频在线看| 欧美国产精品一区| 亚洲精品成人少妇| 亚洲第一在线综合网站| 蜜臀精品一区二区三区在线观看 | 午夜激情久久久| 视频一区二区中文字幕| 男女激情视频一区| 精品在线免费观看| 99视频精品在线| 色吊一区二区三区| 欧美日韩国产在线观看| 日韩免费看网站| 国产精品久久久久久久久免费桃花 | 欧洲亚洲精品在线| 欧美日韩国产一级| 精品久久一二三区| 亚洲视频狠狠干| 日韩国产欧美三级| 精品一区二区三区不卡 | 在线播放/欧美激情| 精品久久久久久无| 亚洲人精品午夜| 麻豆一区二区三区| va亚洲va日韩不卡在线观看| 欧美福利一区二区| 久久综合久久综合久久| 亚洲色图制服诱惑| 久久福利资源站| 欧美主播一区二区三区美女| 国产色爱av资源综合区| 亚洲主播在线播放| 国产成a人无v码亚洲福利| 欧美亚洲精品一区| 久久久久久亚洲综合| 亚洲国产成人av| www.一区二区| 久久奇米777| 麻豆91在线播放| 欧美日韩高清影院| 亚洲欧美日韩综合aⅴ视频| 激情综合色综合久久| 欧美日韩中文字幕一区二区| 国产精品对白交换视频| 蜜臀av一级做a爰片久久| 欧美私人免费视频| 中文字幕一区在线观看视频| 紧缚奴在线一区二区三区| 欧美精品久久一区| 洋洋av久久久久久久一区| av不卡在线观看| 国产欧美日韩亚州综合| 麻豆成人免费电影| 7777精品伊人久久久大香线蕉超级流畅| 中文字幕成人网| 国产精品一区免费视频| 日韩精品自拍偷拍| 三级欧美在线一区| 欧美巨大另类极品videosbest | 久久久久国产一区二区三区四区| 午夜精品福利久久久| 欧美三级日韩三级国产三级| 亚洲男女一区二区三区| 一本一本大道香蕉久在线精品 | 成人免费av网站| 日本一区二区三区dvd视频在线| 极品尤物av久久免费看| 欧美成人一区二区三区在线观看 | 亚洲大片一区二区三区| 99视频精品免费视频| 中文欧美字幕免费| 国产成人h网站| 精品国产网站在线观看| 久久成人羞羞网站| 久久精品欧美日韩精品| 国产成人综合在线| 综合电影一区二区三区| 色婷婷精品大视频在线蜜桃视频| 亚洲精品v日韩精品| 欧美艳星brazzers| 免费成人结看片| 2欧美一区二区三区在线观看视频| 国产一区二区0| 亚洲天堂福利av| 欧美午夜电影网| 麻豆视频观看网址久久| 精品国产乱码久久久久久久久| 国产精品综合av一区二区国产馆| 美女一区二区在线观看| 久久蜜桃一区二区| 久久精品国产网站| 国产欧美一区二区三区在线老狼| 成人做爰69片免费看网站| 亚洲视频一区在线| 欧美精品乱人伦久久久久久| 久久精品99久久久| 国产精品入口麻豆九色| 欧美中文字幕不卡| 激情综合一区二区三区| 日韩伦理免费电影| 在线播放国产精品二区一二区四区| 久久国产乱子精品免费女| 久久久久久99久久久精品网站| 91网站黄www| 青青草国产精品97视觉盛宴| 国产精品污www在线观看| 欧美体内she精高潮| 国产福利一区二区三区视频在线| 亚洲欧美日韩国产另类专区| 欧美一区二区性放荡片| 激情国产一区二区| 亚洲r级在线视频| 国产精品美女久久久久久| 欧美精品高清视频| 国产一区二区三区黄视频| 亚洲va中文字幕| 亚洲欧洲精品一区二区三区| 91精品国产乱| 欧洲国内综合视频| 国产精华液一区二区三区| 午夜电影网一区| 亚洲人精品一区| 久久精品视频一区二区| 日韩欧美一区二区三区在线| 一本久久综合亚洲鲁鲁五月天| 国产精品资源在线| 蜜桃在线一区二区三区| 丝袜美腿成人在线| 一区二区在线观看免费视频播放 | 美洲天堂一区二卡三卡四卡视频 | 久久精品久久久精品美女| 一区二区在线观看视频在线观看| 日韩一级片在线观看| 欧美综合天天夜夜久久| www.亚洲在线| 99精品欧美一区二区三区小说 | 中文字幕在线不卡国产视频| 久久久精品tv| 久久精品水蜜桃av综合天堂| 欧美mv和日韩mv的网站| 欧美性大战久久久久久久| 国产精品1区2区| 福利一区福利二区| 国产真实精品久久二三区| 国产主播一区二区| 精东粉嫩av免费一区二区三区| 精品一区二区三区免费观看| 另类小说欧美激情| 国产一区二区调教| 国产成人亚洲综合a∨猫咪| 国产一区二区免费在线| 国产精品91xxx| 99热在这里有精品免费| 色婷婷国产精品综合在线观看| 色哟哟一区二区| 欧美性色aⅴ视频一区日韩精品| 欧美三级电影一区| 91精品国产综合久久精品| 精品久久久久久最新网址| 国产亚洲精品资源在线26u| 国产精品欧美久久久久无广告| 中文字幕免费在线观看视频一区| 中文字幕在线不卡一区二区三区| 亚洲精品欧美二区三区中文字幕| 一区二区三区欧美亚洲| 日本三级韩国三级欧美三级| 美女国产一区二区| 成人午夜在线免费| 色狠狠桃花综合| 精品久久一区二区| 日韩一区在线播放| 热久久一区二区| 成人自拍视频在线| 91国在线观看| 久久午夜免费电影| 亚洲欧美一区二区三区孕妇| 麻豆精品在线视频| 91一区二区在线| 日韩免费成人网| 亚洲欧美另类久久久精品2019| 日韩成人免费电影| 不卡一区二区中文字幕| 精品视频色一区| 欧美激情综合五月色丁香| 亚洲国产毛片aaaaa无费看| 国产一区高清在线| 制服丝袜中文字幕亚洲| 久久久不卡网国产精品二区| 亚洲乱码中文字幕综合| 久久av资源站|