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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? charics.cpp

?? 3D游戲引擎 Programming Role-Playing Games with DirectX, 2nd Edition by Jim Adams
?? CPP
字號(hào):
#include <windows.h>
#include <stdio.h>
#include "CharICS.h"

cCharICS::cCharICS()
{
  m_NumItems = 0;
  m_ItemParent = NULL;
}

cCharICS::~cCharICS()
{
  Free();
}

BOOL cCharICS::Load(char *Filename)
{
  FILE *fp;
  long LongNum;
  sCharItem *Item, *ItemPtr = NULL;

  Free();  // Free a prior set

  // Open the file
  if((fp=fopen(Filename, "rb"))==NULL)
    return FALSE;

  // Loop forever reading in items
  while(1) {
    // Get next item number (break if no more items,
    // which is represented by a return value of -1).
    if((LongNum = GetNextLong(fp)) == -1)
      break;

    // Create a new item pointer and link it in
    Item = new sCharItem();
    if(ItemPtr == NULL)
      m_ItemParent = Item;
    else {
      Item->Prev = ItemPtr;
      ItemPtr->Next = Item;
    }
    ItemPtr = Item;

    // Store MIL item number
    Item->ItemNum = LongNum;

    // Get quantity
    Item->Quantity = GetNextLong(fp);

    // Get owner #
    Item->Owner = GetNextLong(fp);

    // Save index # and increase count
    Item->Index = m_NumItems++;
  }

  // Close the file
  fclose(fp);

  // Match objects that belong to others
  ItemPtr = m_ItemParent;
  while(ItemPtr != NULL) {

    // Check if this item belongs to another
    if(ItemPtr->Owner != -1) {

      // Find matching parent item
      Item = m_ItemParent;
      while(Item != NULL) {

        if(ItemPtr->Owner == Item->Index) {
          // A match, point to parent
          ItemPtr->Parent = Item;
          break; // Stop scanning for parents
        }

        Item = Item->Next;
      }
    }

    // Go to next item
    ItemPtr = ItemPtr->Next;
  }

  return TRUE;
}

BOOL cCharICS::Save(char *Filename)
{
  FILE *fp;
  sCharItem *Item;
  long Index = 0;

  // Open the file
  if((fp=fopen(Filename, "wb"))==NULL)
    return FALSE;

  // Assign index numbers to items
  if((Item = m_ItemParent) == NULL) {
    fclose(fp);
    return TRUE; // no items to save
  }
  while(Item != NULL) {
    Item->Index = Index++;
    Item = Item->Next;
  }

  // Match child items to parents
  Item = m_ItemParent;
  while(Item != NULL) {
    if(Item->Parent != NULL)
      Item->Owner = Item->Parent->Index;
    else
      Item->Owner = -1;
    Item = Item->Next;
  }

  // Save 'em out
  Item = m_ItemParent;
  while(Item != NULL) {
    // Item number
    fprintf(fp, "%lu\r\n", Item->ItemNum);

    // Quantity
    fprintf(fp, "%lu\r\n", Item->Quantity);

    // Owner #
    fprintf(fp, "%ld\r\n", Item->Owner);

    // Next item
    Item = Item->Next;
  }

  fclose(fp); // Close the file

  return TRUE; // Return success!
}

BOOL cCharICS::Free()
{
  m_NumItems = 0;
  delete m_ItemParent;
  m_ItemParent = NULL;
  return TRUE;
}

BOOL cCharICS::Add(long ItemNum, long Quantity,                \
                  sCharItem *OwnerItem)
{
  sCharItem *Item;

  // Create a new item structure
  Item = new sCharItem();

  // Insert into top of list
  Item->Next = m_ItemParent;
  if(m_ItemParent != NULL)
    m_ItemParent->Prev = Item;
  m_ItemParent = Item;

  // Fill the item structure
  Item->ItemNum  = ItemNum;
  Item->Quantity = Quantity;
  Item->Parent   = OwnerItem;

  // Increate # of items
  m_NumItems++;
  
  return TRUE;
}

BOOL cCharICS::Remove(sCharItem *Item)
{
  sCharItem *ItemPtr, *NextItem;
  
  // Remove child objects first
  if((ItemPtr = m_ItemParent) != NULL) {
    while(ItemPtr != NULL) {
      NextItem = ItemPtr->Next;
      if(ItemPtr->Parent == Item)
        Remove(ItemPtr);
      ItemPtr = NextItem;
    }
  }

  // Remove from linked list and reset root
  // if it's the current head of list.
  if(Item->Prev != NULL)
    Item->Prev->Next = Item->Next;
  else
    m_ItemParent = Item->Next;
  if(Item->Next != NULL)
    Item->Next->Prev = Item->Prev;

  // Clear link list
  Item->Prev = Item->Next = NULL;

  // Remove an item
  m_NumItems--;

  // Free memory
  delete Item;

  return TRUE;
}

long cCharICS::GetNumItems()
{
  return m_NumItems;
}

sCharItem *cCharICS::GetParentItem()
{
  return m_ItemParent;
}

sCharItem *cCharICS::GetItem(long Num)
{
  sCharItem *Item;

  Item = m_ItemParent;
  while(Num==NULL){
	  // Loop until reached item num
    if(Item == NULL)
      return NULL;
    Item = Item->Next;
  }
  return Item;
}

BOOL cCharICS::Arrange()
{
  sCharItem *Item, *PrevItem;
  
  // Start at top of linked list and float
  // each item up that has a lesser ItemNum.
  // Break if past bottom of list
  Item = m_ItemParent;
  while(Item != NULL) {

    // Check previous item to float up
    if(Item->Prev != NULL) {

      // Keep floating up while prev item has
      // a lesser ItemNum value or until top
      // of list has been reached.
      while(Item->Prev != NULL) {
        PrevItem = Item->Prev;  // Get prev item pointer

        // Break if no more to float up
        if(Item->ItemNum >= PrevItem->ItemNum)
          break;

        // Swap 'em
        if((PrevItem = Item->Prev) != NULL) {
          if(PrevItem->Prev != NULL)
            PrevItem->Prev->Next = Item;

          if((PrevItem->Next = Item->Next) != NULL)
            Item->Next->Prev = PrevItem;

          if((Item->Prev = PrevItem->Prev) == NULL)
            m_ItemParent = Item;

          PrevItem->Prev = Item;
          Item->Next = PrevItem;
        }
      }
    }

    // Go to next object
    Item = Item->Next;
  }

  return TRUE;
}

BOOL cCharICS::MoveUp(sCharItem *Item)
{
  sCharItem *PrevItem;

  // Swap item and item before it
  if((PrevItem = Item->Prev) != NULL) {
    if(PrevItem->Prev != NULL)
      PrevItem->Prev->Next = Item;

    if((PrevItem->Next = Item->Next) != NULL)
      Item->Next->Prev = PrevItem;

    if((Item->Prev = PrevItem->Prev) == NULL)
      m_ItemParent = Item;

    PrevItem->Prev = Item;
    Item->Next = PrevItem;
  }

  return TRUE; // Return success
}

BOOL cCharICS::MoveDown(sCharItem *Item)
{
  sCharItem *NextItem;

  // Swap item and item after it
  if((NextItem = Item->Next) != NULL) {
    if((Item->Next = NextItem->Next) != NULL)
      NextItem->Next->Prev = Item;

    if((NextItem->Prev = Item->Prev) != NULL)
      Item->Prev->Next = NextItem;
    else
      m_ItemParent = NextItem;

    NextItem->Next = Item;
    Item->Prev = NextItem;
  }

  return TRUE; // Return success
}

long cCharICS::GetNextLong(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)
      break;
    if((c >= '0' && c <= '9') || c == '.' || c == '-')
      Buf[Pos++] = c;
  }
  if(!Pos)
    return -1;
  Buf[Pos] = 0;

  return atol(Buf);
}

float cCharICS::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)
      break;
    if((c >= '0' && c <= '9') || c == '.' || c == '-')
      Buf[Pos++] = c;
  }
  Buf[Pos] = 0;

  return (float)atof(Buf);
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
老司机午夜精品99久久| 国产成都精品91一区二区三| 亚洲成人免费视频| 精品国产一区a| 色婷婷综合久久久中文一区二区| 老色鬼精品视频在线观看播放| 国产精品久久综合| 日韩午夜在线观看视频| 91九色最新地址| 国产成人精品网址| 奇米精品一区二区三区在线观看 | 最新高清无码专区| 7777精品伊人久久久大香线蕉完整版 | av爱爱亚洲一区| 精品在线播放免费| 亚洲成人一区在线| 亚洲色图19p| 中文av一区特黄| 日韩欧美国产电影| 欧美日韩一级视频| 91在线视频网址| 成人自拍视频在线观看| 久久国产精品露脸对白| 午夜欧美在线一二页| 亚洲免费毛片网站| 中文字幕成人网| 日韩欧美高清一区| 欧美一区三区四区| 欧美日韩国产首页| 色婷婷综合久久久久中文一区二区| 国产精品综合二区| 狠狠色狠狠色合久久伊人| 秋霞午夜av一区二区三区| 亚洲成人在线观看视频| 亚洲一区二区三区在线| 成人的网站免费观看| 国产精品一区二区果冻传媒| 亚洲午夜久久久久| 亚洲自拍偷拍网站| 亚洲地区一二三色| 亚洲午夜成aⅴ人片| 亚洲综合男人的天堂| 亚洲综合激情另类小说区| 亚洲制服丝袜av| 亚洲国产视频网站| 日韩制服丝袜av| 日韩成人免费看| 久久se这里有精品| 国产一区二区三区综合| 国产福利一区二区三区视频 | 国产午夜精品在线观看| 精品国一区二区三区| 久久久三级国产网站| 久久婷婷一区二区三区| 欧美国产一区在线| 亚洲欧洲日韩在线| 艳妇臀荡乳欲伦亚洲一区| 午夜电影一区二区| 日本最新不卡在线| 奇米四色…亚洲| 国产乱码字幕精品高清av| 成人爽a毛片一区二区免费| 国产成人综合在线观看| av资源网一区| 欧美精品乱码久久久久久| 日韩视频免费直播| 国产目拍亚洲精品99久久精品| 国产精品久久久久影院色老大| 自拍偷拍亚洲综合| 天天色图综合网| 国产精品538一区二区在线| 91在线观看视频| 欧美男男青年gay1069videost| 日韩精品一区二区三区在线观看| 久久久精品免费观看| 亚洲卡通动漫在线| 久久99蜜桃精品| eeuss影院一区二区三区| 欧美视频完全免费看| 久久亚洲综合色| 一区二区三区四区国产精品| 日本欧美肥老太交大片| 国产91高潮流白浆在线麻豆 | 一区二区在线看| 蜜桃视频在线一区| proumb性欧美在线观看| 91麻豆精品91久久久久久清纯 | 在线播放一区二区三区| 久久精品网站免费观看| 亚洲国产日韩综合久久精品| 国产一区二区女| 欧洲一区在线电影| 久久久久久免费网| 午夜精品久久久| 成人午夜av影视| 日韩视频123| 一区二区三区蜜桃| 高清国产一区二区| 日韩一区二区三区av| 亚洲久本草在线中文字幕| 国产一区二区三区日韩| 9191精品国产综合久久久久久 | 亚洲一区二区精品久久av| 国产一区二区久久| 在线播放中文字幕一区| 一区二区在线看| 成人一区二区三区| 26uuu色噜噜精品一区| 五月激情六月综合| 色狠狠色噜噜噜综合网| 另类成人小视频在线| 欧美影院午夜播放| 国产精品女主播av| 国产精品一区一区| 欧美本精品男人aⅴ天堂| 亚洲国产sm捆绑调教视频 | 欧美成人一区二区三区在线观看 | 在线电影一区二区三区| 亚洲靠逼com| 99久久精品99国产精品| 久久久青草青青国产亚洲免观| 美女尤物国产一区| 正在播放亚洲一区| 亚洲午夜久久久久久久久电影网 | 欧美久久婷婷综合色| 樱桃国产成人精品视频| 92国产精品观看| 中文字幕视频一区二区三区久| 风间由美中文字幕在线看视频国产欧美 | 黑人巨大精品欧美一区| 91精品国产欧美一区二区| 亚洲1区2区3区4区| 欧美日韩一级黄| 五月天久久比比资源色| 欧美特级限制片免费在线观看| 亚洲综合色噜噜狠狠| 欧美自拍偷拍一区| 亚洲国产综合在线| 在线观看国产一区二区| 夜夜嗨av一区二区三区网页 | 色综合久久久久综合| 亚洲青青青在线视频| 色一情一乱一乱一91av| 中文字幕综合网| 色综合婷婷久久| 一区二区三区视频在线观看| 色94色欧美sute亚洲13| 一区二区三区国产豹纹内裤在线| 在线观看一区二区视频| 亚洲国产日韩一区二区| 欧美一区二区在线免费观看| 日产精品久久久久久久性色| 欧美大片在线观看一区二区| 激情五月激情综合网| 久久久久国产精品厨房| 国产99久久久精品| 亚洲欧美综合色| 在线观看不卡一区| 亚洲电影你懂得| 日韩丝袜情趣美女图片| 国产成人a级片| 亚洲欧美aⅴ...| 欧美精品粉嫩高潮一区二区| 免费观看久久久4p| 国产日韩欧美精品电影三级在线| 99re6这里只有精品视频在线观看| 一区二区三区在线免费| 一区二区三区在线看| 日韩欧美国产一区二区在线播放| 国产成人综合网| 一区二区三区精品| 欧美变态tickling挠脚心| 成人国产视频在线观看| 亚洲成av人片在线| 久久亚洲免费视频| 91久久一区二区| 麻豆中文一区二区| 国产精品久久久久久久久搜平片 | 免费成人美女在线观看| 国产精品毛片高清在线完整版 | 久久久久久久久久久久久久久99 | 国产成人亚洲精品青草天美| 有码一区二区三区| 精品捆绑美女sm三区| 97精品视频在线观看自产线路二| 五月天激情综合| 国产精品五月天| 日韩午夜在线观看视频| 91免费观看视频在线| 免费不卡在线观看| 夜夜精品浪潮av一区二区三区| 欧美成人精品3d动漫h| 色婷婷综合久久久久中文一区二区 | 日韩国产精品91| 中文字幕一区二区三区精华液 | 久久久精品影视| 在线电影欧美成精品| 97久久久精品综合88久久| 久久国产精品区| 亚洲r级在线视频|