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

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

?? marsdoc.cpp

?? MARS加密解密
?? CPP
字號(hào):
// MarsDoc.cpp : implementation of the CMarsDoc class
//
//	本程序是《瘋狂的火星蟲(chóng)—面向?qū)ο鬆顟B(tài)機(jī)實(shí)踐指南》的演示程序
//
//	版權(quán)所有 (C) 2004 王詠武
//	http://www.contextfree.net/wangyw/
//
/////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include <math.h>
#include "Mars.h"

#include "MarsDoc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMarsDoc

IMPLEMENT_DYNCREATE(CMarsDoc, CDocument)

BEGIN_MESSAGE_MAP(CMarsDoc, CDocument)
	//{{AFX_MSG_MAP(CMarsDoc)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMarsDoc construction/destruction

CMarsDoc::CMarsDoc()
{
	// TODO: add one-time construction code here
    srand(GetTickCount());
}

CMarsDoc::~CMarsDoc()
{
    for (int i = 0; i < m_Bugs.size(); i ++)
        delete m_Bugs[i].m_pBug;
}

BOOL CMarsDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)

    // 初始創(chuàng)建10個(gè)火星蟲(chóng)
    for (int i = 0; i < 10; i ++)
        AddNewBug();

	return TRUE;
}

/////////////////////////////////////////////////////////////////////////////
// CMarsDoc serialization

void CMarsDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: add storing code here
        int size = m_Bugs.size();
        ar << size;
        
        for (int i = 0; i < size; i ++)
        {
            m_Bugs[i].Serialize(ar);
        }
	}
	else
	{
		// TODO: add loading code here
        int size;
        ar >> size;

        int i;
        // 從文件裝載時(shí),先刪除原來(lái)的火星蟲(chóng)
        for (i = 0; i < m_Bugs.size(); i ++)
        {
            m_Bugs[i].m_pBug->Invalidate();
            delete m_Bugs[i].m_pBug;
        }
        m_Bugs.erase(m_Bugs.begin(), m_Bugs.end());

        for (i = 0; i < size; i ++)
        {
            SBugInfo bug_info(new CMarsBug(0, 0, 0));
            bug_info.Serialize(ar);
            m_Bugs.push_back(bug_info);
        }
    }
}

/////////////////////////////////////////////////////////////////////////////
// CMarsDoc diagnostics

#ifdef _DEBUG
void CMarsDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CMarsDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMarsDoc commands

void CMarsDoc::OnDraw(CDC* pDC)
{
    for (int i = 0; i < m_Bugs.size(); i ++)
        m_Bugs[i].m_pBug->OnDraw(pDC);
}

void CMarsDoc::OnTimer()
{
    vector<SBugInfo>::iterator it;
    for (it = m_Bugs.begin(); it < m_Bugs.end(); it ++)
        if (it->m_bRemove)
        {
            it->m_pBug->Invalidate();
            delete it->m_pBug;
            m_Bugs.erase(it);
            break;
        }

    // 根據(jù)距離確定給每個(gè)火星蟲(chóng)發(fā)送的消息
    for (int i = 0; i < m_Bugs.size(); i ++)
        for (int j = i + 1; j < m_Bugs.size(); j ++)
        {
            int distance = GetDistance(m_Bugs[i].m_pBug, m_Bugs[j].m_pBug);

            if (distance < m_Bugs[i].m_iDistance)
            {
                if (distance <= CMarsBug::DISTANCE_CAN_ATTACK)
                    m_Bugs[i].m_Event = CMarsBug::EVENT_CAN_ATTACK;
                else if (distance <= CMarsBug::DISTANCE_CAN_SEE)
                    m_Bugs[i].m_Event = CMarsBug::EVENT_CAN_SEE;
                else
                    m_Bugs[i].m_Event = CMarsBug::EVENT_IDLE;
                m_Bugs[i].m_iDistance = distance;
                m_Bugs[i].m_pEnemy = m_Bugs[j].m_pBug;
            }

            if (distance < m_Bugs[j].m_iDistance)
            {
                if (distance <= CMarsBug::DISTANCE_CAN_ATTACK)
                    m_Bugs[j].m_Event = CMarsBug::EVENT_CAN_ATTACK;
                else if (distance <= CMarsBug::DISTANCE_CAN_SEE)
                    m_Bugs[j].m_Event = CMarsBug::EVENT_CAN_SEE;
                else
                    m_Bugs[j].m_Event = CMarsBug::EVENT_IDLE;
                m_Bugs[j].m_iDistance = distance;
                m_Bugs[j].m_pEnemy = m_Bugs[i].m_pBug;
            }
        }

    for (int k = 0; k < m_Bugs.size(); k ++)
    {
        m_Bugs[k].m_pBug->Invalidate();
        m_Bugs[k].m_pBug->SendEvent(m_Bugs[k].m_Event, 0, (DWORD)m_Bugs[k].m_pEnemy);
        m_Bugs[k].m_pBug->Invalidate();
        m_Bugs[k].Init();
    }
}

void CMarsDoc::Escape(CMarsBug * pBug, CMarsBug * pBugFrom)
{
    int distance = GetDistance(pBug, pBugFrom);

    int x = pBug->GetX();
    int xFrom = pBugFrom->GetX();
    if (distance)
        x -= (xFrom - x) * CMarsBug::ESCAPE_STEP / distance;
    else
        x -= CMarsBug::ESCAPE_STEP;
    int y = pBug->GetY();
    int yFrom = pBugFrom->GetY();
    if (distance)
        y -= (yFrom - y) * CMarsBug::ESCAPE_STEP / distance;
    else
        y -= CMarsBug::ESCAPE_STEP;

    BorderCheck(x, y);
    pBug->SetX(x);
    pBug->SetY(y);
}

void CMarsDoc::Chase(CMarsBug * pBug, CMarsBug * pBugFrom)
{
    int distance = GetDistance(pBug, pBugFrom);

    int x = pBug->GetX();
    int xFrom = pBugFrom->GetX();
    if (distance)
        x += (xFrom - x) * CMarsBug::CHASE_STEP / distance;
    int y = pBug->GetY();
    int yFrom = pBugFrom->GetY();
    if (distance)
        y += (yFrom - y) * CMarsBug::CHASE_STEP / distance;

    BorderCheck(x, y);
    pBug->SetX(x);
    pBug->SetY(y);
}

void CMarsDoc::Walk(CMarsBug * pBug)
{
    int x = pBug->GetX();
    x += rand() * CMarsBug::WALK_STEP / RAND_MAX - CMarsBug::WALK_STEP / 2;
    int y = pBug->GetY();
    y += rand() * CMarsBug::WALK_STEP / RAND_MAX - CMarsBug::WALK_STEP / 2;

    BorderCheck(x, y);
    pBug->SetX(x);
    pBug->SetY(y);
}

int CMarsDoc::GetDistance(CMarsBug *pBug1, CMarsBug *pBug2)
{
    double cx = pBug1->GetX() - pBug2->GetX();
    double cy = pBug1->GetY() - pBug2->GetY();
    return sqrt(cx * cx + cy * cy);
}

void CMarsDoc::AddNewBug()
{
    int x = rand() * m_iWidth / RAND_MAX;
    int y = rand() * m_iHeight / RAND_MAX;
    m_Bugs.push_back(SBugInfo(new CMarsBug(x, y,
        RGB(rand() * 255 / RAND_MAX, rand() * 255 / RAND_MAX, rand() * 255 / RAND_MAX))));
}

void CMarsDoc::Remove(CMarsBug * pBug)
{
    vector<SBugInfo>::iterator i;
    for (i = m_Bugs.begin(); i < m_Bugs.end(); i ++)
        if (i->m_pBug == pBug)
        {
            i->m_bRemove = TRUE;
            break;
        }
}

void CMarsDoc::Spawn(int x, int y)
{
    m_Bugs.push_back(SBugInfo(new CMarsBug(x, y, RGB(rand() * 255 / RAND_MAX, rand() * 255 / RAND_MAX, rand() * 255 / RAND_MAX))));
}

void CMarsDoc::BorderCheck(int & x, int & y)
{
    if (x < CMarsBug::RADIUS)
        x = CMarsBug::RADIUS;
    else if (x > m_iWidth - CMarsBug::RADIUS)
        x = m_iWidth - CMarsBug::RADIUS;

    if (y < CMarsBug::RADIUS)
        y = CMarsBug::RADIUS;
    else if (y > m_iHeight - CMarsBug::RADIUS)
        y = m_iHeight - CMarsBug::RADIUS;
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆精品视频在线观看免费| 日本成人在线网站| 久久99精品视频| 欧洲另类一二三四区| 久久久久久久综合色一本| 亚洲成av人片一区二区梦乃| heyzo一本久久综合| 精品福利一区二区三区免费视频| 亚洲一卡二卡三卡四卡无卡久久| 高清视频一区二区| 日韩亚洲欧美高清| 亚洲狠狠爱一区二区三区| 99国产精品一区| 久久综合狠狠综合| 蜜桃精品在线观看| 亚洲免费色视频| 国产精品一区在线观看你懂的| 91精品国产一区二区三区蜜臀| 一区二区三区在线看| 99久久久久久| 国产精品久久久久一区二区三区| 久久99久久精品| 91精品国产综合久久香蕉麻豆| 一区二区三区中文字幕电影| 91亚洲男人天堂| 国产精品久久久久天堂| 国产成人精品亚洲日本在线桃色| 精品少妇一区二区三区在线视频| 日韩精品亚洲一区二区三区免费| 在线观看欧美黄色| 亚洲综合在线五月| 一本一道综合狠狠老| 最近中文字幕一区二区三区| 91污在线观看| 亚洲精品视频免费观看| 91免费版pro下载短视频| 国产精品久久国产精麻豆99网站 | 欧美大胆一级视频| 日韩成人dvd| 91精品国产欧美一区二区成人 | 1000精品久久久久久久久| 国产成+人+日韩+欧美+亚洲| 久久久久国产免费免费| 国产成人精品影院| 国产欧美视频一区二区| 丁香婷婷综合网| 高清视频一区二区| 亚洲国产成人一区二区三区| 高清视频一区二区| 日韩毛片视频在线看| 色狠狠综合天天综合综合| 伊人一区二区三区| 欧美视频第二页| 日韩高清国产一区在线| 日韩一区二区不卡| 国产在线一区观看| 国产精品美女久久久久aⅴ| www.亚洲精品| 亚洲在线一区二区三区| 91精品国产麻豆国产自产在线| 久久99蜜桃精品| 久久精品视频一区二区三区| 国产精品99久久久久久似苏梦涵| 欧美国产精品中文字幕| 99精品一区二区| 亚洲国产日韩一级| 欧美一级二级在线观看| 国产美女精品在线| 国产精品久久久久7777按摩| 91福利区一区二区三区| 日产欧产美韩系列久久99| 久久综合视频网| av不卡免费在线观看| 香蕉久久一区二区不卡无毒影院| 欧美一个色资源| 国产1区2区3区精品美女| 一区二区不卡在线播放 | 国产不卡视频一区二区三区| 中文字幕一区二区三区四区| 日本乱人伦一区| 蜜桃久久久久久| 亚洲欧洲美洲综合色网| 3d动漫精品啪啪1区2区免费| 国产成人精品免费在线| 亚洲高清三级视频| 精品国产伦一区二区三区免费| 不卡在线观看av| 日韩成人av影视| ●精品国产综合乱码久久久久| 欧美电影影音先锋| 欧美精品一区二区久久婷婷| 92国产精品观看| 久久国产精品一区二区| 亚洲欧洲精品一区二区三区| 欧美欧美午夜aⅴ在线观看| 国产成人av电影在线播放| 亚洲一卡二卡三卡四卡无卡久久| 久久伊人蜜桃av一区二区| 91久久精品国产91性色tv| 国产一区二区剧情av在线| 亚洲精品videosex极品| 久久先锋影音av| 欧美日产在线观看| 99久久久精品| 国产一区二区三区免费播放| 一区二区三区精品在线| 国产亚洲人成网站| 欧美精品v日韩精品v韩国精品v| 国产成人精品免费一区二区| 青青草97国产精品免费观看无弹窗版 | 日韩成人一级大片| 亚洲人123区| 久久久99精品久久| 欧美一区二区三区电影| 99久久er热在这里只有精品15| 免费在线观看视频一区| 亚洲资源中文字幕| 国产精品毛片久久久久久| 精品久久人人做人人爽| 欧美日韩一区二区三区四区 | 国产剧情在线观看一区二区| 亚洲国产成人tv| 中文字幕第一区| 日韩美女在线视频| 欧美日韩一区小说| 99国产精品久| 国产精品99久久不卡二区| 免费高清在线视频一区·| 亚洲国产精品久久艾草纯爱| 亚洲少妇30p| 国产欧美日韩一区二区三区在线观看| 678五月天丁香亚洲综合网| 色综合久久久网| 99天天综合性| 国产黑丝在线一区二区三区| 久久99久久99精品免视看婷婷| 日韩高清国产一区在线| 午夜亚洲福利老司机| 一区二区成人在线视频| 亚洲欧洲综合另类| 亚洲视频图片小说| 最新欧美精品一区二区三区| 国产免费观看久久| 国产午夜精品在线观看| 久久久久久久久久久电影| 欧美本精品男人aⅴ天堂| 欧美一级电影网站| 日韩一级二级三级精品视频| 在线播放日韩导航| 欧美精品xxxxbbbb| 7777精品伊人久久久大香线蕉的| 欧美日韩成人综合在线一区二区| 欧美日韩在线综合| 欧美日韩你懂得| 午夜不卡av免费| 婷婷中文字幕综合| 丝袜脚交一区二区| 日韩av一二三| 美女一区二区三区| 狠狠色狠狠色合久久伊人| 精品在线观看免费| 国产精品自拍av| 粉嫩久久99精品久久久久久夜| 国产成人99久久亚洲综合精品| 国产99久久精品| heyzo一本久久综合| 色一区在线观看| 91行情网站电视在线观看高清版| 欧美在线播放高清精品| 欧美日韩小视频| 日韩美女一区二区三区| 久久影视一区二区| 国产精品欧美综合在线| 亚洲欧美综合在线精品| 亚洲精品菠萝久久久久久久| 亚洲国产一区在线观看| 日韩在线观看一区二区| 九色|91porny| 成人国产免费视频| 91福利在线看| 欧美一区二区三区公司| 久久久99精品免费观看不卡| 国产精品对白交换视频| 亚洲综合小说图片| 秋霞影院一区二区| 国产精品自拍在线| 日本久久精品电影| 91精品国产全国免费观看| 337p粉嫩大胆噜噜噜噜噜91av| 国产亚洲制服色| 亚洲欧美日韩国产成人精品影院| 午夜av电影一区| 国产一区不卡在线| 99精品偷自拍| 日韩一区二区三区高清免费看看| 久久人人超碰精品| 亚洲精品中文在线影院| 日本不卡视频在线| 成人网页在线观看| 8x8x8国产精品|