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

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

?? game.cpp

?? 一個(gè)五子棋的畢業(yè)設(shè)計(jì)
?? CPP
字號(hào):
#include "StdAfx.h"
#include "Table.h"
#include "Game.h"
#include "Messages.h"
#include "Resource.h"

//////////////////////////////////////////////////////////////////////////
// CGame類的實(shí)現(xiàn)部分
//////////////////////////////////////////////////////////////////////////
CGame::~CGame()
{
}
void CGame::Win( const STEP& stepSend )
{
}
//////////////////////////////////////////////////////////////////////////
// COneGame類的實(shí)現(xiàn)部分
//////////////////////////////////////////////////////////////////////////
COneGame::~COneGame()
{
}
void COneGame::Init()
{
    // 設(shè)置網(wǎng)絡(luò)連接狀態(tài)
    m_pTable->m_bConnected = FALSE;
    // 設(shè)置敵人姓名
    m_pTable->GetParent()->SetDlgItemText( IDC_ST_ENEMY, _T("計(jì)算機(jī)") );
    // 計(jì)算獲勝組合情況
    int i, j, k, nCount = 0;
    for ( i = 0; i < 15; i++ )
    {
        for ( j = 0; j < 15; j++ )
        {
            for ( k = 0; k < 572; k++ )
            {
                m_Player[i][j][k] = false;
                m_Computer[i][j][k] = false;
            }
        }
    }
    for ( i = 0; i < 2; i++ )
    {
        for ( j = 0; j < 572; j++ )
        {
            m_Win[i][j] = 0;
        }
    }
    for ( i = 0; i < 15; i++ )
    {
        for ( j = 0; j < 11; j++ )
        {
            for ( k = 0; k < 5; k++ )
            {
                m_Player[j + k][i][nCount] = true;
                m_Computer[j + k][i][nCount] = true;
            }
            nCount++;
        }
    }
    for ( i = 0; i < 15; i++ )
    {
        for ( j = 0; j < 11; j++ )
        {
            for ( k = 0; k < 5; k++ )
            {
                m_Player[i][j + k][nCount] = true;
                m_Computer[i][j + k][nCount] = true;
            }
            nCount++;
        }
    }
    for ( i = 0; i < 11; i++ )
    {
        for ( j = 0; j < 11; j++ )
        {
            for ( k = 0; k < 5; k++ )
            {
                m_Player[j + k][i + k][nCount] = true;
                m_Computer[j + k][i + k][nCount] = true;
            }
            nCount++;
        }
    }
    for ( i = 0; i < 11; i++ )
    {
        for ( j = 14; j >= 4; j-- )
        {
            for ( k = 0; k < 5; k++ )
            {
                m_Player[j - k][i + k][nCount] = true;
                m_Computer[j - k][i + k][nCount] = true;
            }
            nCount++;
        }
    }
    if ( 1 == m_pTable->GetColor() )
    {
        // 如果玩家后走,則手動(dòng)控制電腦占據(jù)天元
        m_pTable->SetData( 7, 7, 0 );
        PlaySound( MAKEINTRESOURCE( IDR_WAVE_PUT ), NULL, SND_RESOURCE | SND_SYNC );
        m_bStart = false;
        for ( i = 0; i < 572; i++ )
        {
            // 保存先前數(shù)據(jù),做悔棋之用
            m_nOldWin[0][i] = m_Win[0][i];
            m_nOldWin[1][i] = m_Win[1][i];
            m_bOldPlayer[i] = m_Player[7][7][i];
        }
        for ( i = 0; i < 572; i++ )
        {
            // 修改計(jì)算機(jī)下子后,棋盤(pán)的變化狀況
            if ( m_Computer[7][7][i] && m_Win[1][i] != -1 )
            {
                m_Win[1][i]++;
            }
            if ( m_Player[7][7][i] )
            {
                m_Player[7][7][i] = false;
                m_Win[0][i] = -1;
            }
        }
    }
    else
    {
        m_bStart = true;
    }
}
void COneGame::SendStep( const STEP& stepPut )
{
    int bestx, besty, i, j, pi, pj, ptemp, ctemp, pscore = 10, cscore = -10000;
    int ctempTable[15][15], ptempTable[15][15];
    int m, n, temp1[20], temp2[20]; // 暫存第一步搜索的信息

    m_pTable->GetParent()->GetDlgItem( IDC_BTN_BACK )->EnableWindow( FALSE );
    // 保存先前數(shù)據(jù),做悔棋之用
    for ( i = 0; i < 572; i++)
    {
        m_nOldWin[0][i] = m_Win[0][i];
        m_nOldWin[1][i] = m_Win[1][i];
        m_bOldPlayer[i] = m_Player[stepPut.x][stepPut.y][i];
        m_bOldComputer[i] = m_Computer[stepPut.x][stepPut.y][i];
    }
    // 修改玩家下子后棋盤(pán)狀態(tài)的變化
    for ( i = 0; i < 572; i++ )
    {
        // 修改狀態(tài)變化
        if ( m_Player[stepPut.x][stepPut.y][i] && m_Win[0][i] != -1 )
            m_Win[0][i]++;
        if ( m_Computer[stepPut.x][stepPut.y][i] )
        {
            m_Computer[stepPut.x][stepPut.y][i] = false;
            m_Win[1][i] = -1;
        }
    }
    if ( m_bStart )
    {
        // 手動(dòng)確定第一步:天元或(8, 8)
        if ( -1 == m_pTable->m_data[7][7] )
        {
            bestx = 7;
            besty = 7;
        }
        else
        {
            bestx = 8;
            besty = 8;
        }
        m_bStart = false;
    }
    else
    {
        STEP step;
        // 尋找最佳位置
        GetTable( ctempTable, m_pTable->m_data );
        while ( SearchBlank( i, j, ctempTable ) )
        {
            n = 0;
            pscore = 10;
            GetTable( ptempTable, m_pTable->m_data );
            ctempTable[i][j] = 2; // 標(biāo)記已被查找
            step.color = 1 - m_pTable->GetColor();
            step.x = i;
            step.y = j;
            // 給這個(gè)空位打分
            ctemp = GiveScore( step );
            for ( m = 0; m < 572; m++ )
            {
                // 暫時(shí)更改玩家信息
                if ( m_Player[i][j][m] )
                {
                    temp1[n] = m;
                    m_Player[i][j][m] = false;
                    temp2[n] = m_Win[0][m];
                    m_Win[0][m] = -1;
                    n++;
                }
            }
            ptempTable[i][j] = 0;
            
            pi = i;
            pj = j;
            while ( SearchBlank( i, j, ptempTable ) )
            {
                
                ptempTable[i][j] = 2; // 標(biāo)記已被查找
                step.color = m_pTable->GetColor();
                step.x = i;
                step.y = j;
                ptemp = GiveScore( step );
                if ( pscore > ptemp ) // 此時(shí)為玩家下子,運(yùn)用極小極大法時(shí)應(yīng)選取最小值
                    pscore = ptemp;
            }
            for ( m = 0; m < n; m++ )
            {
                // 恢復(fù)玩家信息
                m_Player[pi][pj][temp1[m]] = true;
                m_Win[0][temp1[m]] = temp2[m];
            }
            if ( ctemp + pscore > cscore ) // 此時(shí)為計(jì)算機(jī)下子,運(yùn)用極小極大法時(shí)應(yīng)選取最最大值
            {
                cscore = ctemp + pscore;
                bestx = pi;
                besty = pj;
            }
        }
    }
    m_step.color = 1 - m_pTable->GetColor();
    m_step.x = bestx;
    m_step.y = besty;
    for ( i = 0; i < 572; i++ )
    {
        // 修改計(jì)算機(jī)下子后,棋盤(pán)的變化狀況
        if ( m_Computer[bestx][besty][i] && m_Win[1][i] != -1 )
            m_Win[1][i]++;
        if ( m_Player[bestx][besty][i] )
        {
            m_Player[bestx][besty][i] = false;
            m_Win[0][i] = -1;
        }
    }
    m_pTable->GetParent()->GetDlgItem( IDC_BTN_BACK )->EnableWindow();
    // 由于是單人游戲,所以直接接收數(shù)據(jù)
    m_pTable->Receive();
}
void COneGame::ReceiveMsg( MSGSTRUCT *pMsg )
{
    pMsg->color = m_step.color;
    pMsg->x = m_step.x;
    pMsg->y = m_step.y;
    pMsg->uMsg = MSG_PUTSTEP;
}
void COneGame::Back()
{
    int i;
    // 單人游戲直接允許悔棋
    STEP step;
    // 悔第一步(電腦落子)
    step = *( m_StepList.begin() );
    m_StepList.pop_front();
    m_pTable->m_data[step.x][step.y] = -1;
    // 恢復(fù)原有勝負(fù)布局
    for ( i = 0; i < 572; i++ )
    {
        m_Win[0][i] = m_nOldWin[0][i];
        m_Win[1][i] = m_nOldWin[1][i];
        m_Player[step.x][step.y][i] = m_bOldPlayer[i];
    }
    // 悔第二步(玩家落子)
    step = *( m_StepList.begin() );
    m_StepList.pop_front();
    m_pTable->m_data[step.x][step.y] = -1;
    // 恢復(fù)原有勝負(fù)布局
    for ( i = 0; i < 572; i++ )
    {
        m_Computer[step.x][step.y][i] = m_bOldComputer[i];
    }
    m_pTable->Invalidate();
    // 考慮到程序的負(fù)荷,這時(shí)候就不允許悔棋了
    AfxGetMainWnd()->GetDlgItem( IDC_BTN_BACK )->EnableWindow( FALSE );
}
int COneGame::GiveScore( const STEP& stepPut )
{
    int i, nScore = 0;
    for ( i = 0; i < 572; i++ )
    {
        if ( m_pTable->GetColor() == stepPut.color )
        {
            // 玩家下
            if ( m_Player[stepPut.x][stepPut.y][i] )
            {
                switch ( m_Win[0][i] )
                {
                case 1:
                    nScore -= 5;
                    break;
                case 2:
                    nScore -= 50;
                    break;
                case 3:
                    nScore -= 500;
                    break;
                case 4:
                    nScore -= 5000;
                    break;
                default:
                    break;
                }
            }
        }
        else
        {
            // 計(jì)算機(jī)下
            if ( m_Computer[stepPut.x][stepPut.y][i] )
            {
                switch ( m_Win[1][i] )
                {
                case 1:
                    nScore += 5;
                    break;
                case 2:
                    nScore += 50;
                    break;
                case 3:
                    nScore += 100;
                    break;
                case 4:
                    nScore += 10000;
                    break;
                default:
                    break;
                }
            }
        }
    }
    return nScore;
}
void COneGame::GetTable( int tempTable[][15], int nowTable[][15] )
{
    int i, j;
    for ( i = 0; i < 15; i++ )
    {
        for ( j = 0; j < 15; j++ )
        {
            tempTable[i][j] = nowTable[i][j];
        }
    }
}
bool COneGame::SearchBlank( int &i, int &j, int nowTable[][15] )
{
    int x, y;
    for ( x = 0; x < 15; x++ )
    {
        for ( y = 0; y < 15; y++ )
        {
            if ( nowTable[x][y] == -1 && nowTable[x][y] != 2 )
            {
                i = x;
                j = y;
                return true;
            }
        }
    }
    return false;
}
//////////////////////////////////////////////////////////////////////////
// CTwoGame類的實(shí)現(xiàn)部分
//////////////////////////////////////////////////////////////////////////
CTwoGame::~CTwoGame()
{
}
//////////////////////////////////////////////////////////////////////////
void CTwoGame::Init()
{
}
void CTwoGame::Win( const STEP& stepSend )
{
    SendStep( stepSend );
}
void CTwoGame::SendStep( const STEP& stepPut )
{
    MSGSTRUCT msg;
    msg.uMsg = MSG_PUTSTEP;
    msg.color = stepPut.color;
    msg.x = stepPut.x;
    msg.y = stepPut.y;

    m_pTable->m_conn.Send( (LPCVOID)&msg, sizeof( MSGSTRUCT ) );
}
void CTwoGame::ReceiveMsg( MSGSTRUCT *pMsg )
{
    int nRet = m_pTable->m_conn.Receive( pMsg, sizeof( MSGSTRUCT ) );
    if ( SOCKET_ERROR == nRet )
    {
        AfxGetMainWnd()->MessageBox( _T("接收數(shù)據(jù)時(shí)發(fā)生錯(cuò)誤,請(qǐng)檢查您的網(wǎng)絡(luò)連接。"), _T("錯(cuò)誤"), MB_ICONSTOP );
    }
}
void CTwoGame::Back()
{
    CDialog *pDlg = (CDialog *)AfxGetMainWnd();
    // 使按鈕失效
    pDlg->GetDlgItem( IDC_BTN_BACK )->EnableWindow( FALSE );
    pDlg->GetDlgItem( IDC_BTN_HQ )->EnableWindow( FALSE );
    pDlg->GetDlgItem( IDC_BTN_LOST )->EnableWindow( FALSE );
    // 設(shè)置等待標(biāo)志
    m_pTable->SetWait( TRUE );

    MSGSTRUCT msg;
    msg.uMsg = MSG_BACK;

    m_pTable->m_conn.Send( (LPCVOID)&msg, sizeof( MSGSTRUCT ) );
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品日韩欧美一区二区| 爽好多水快深点欧美视频| 26uuu亚洲综合色欧美| 欧美一区二区三级| 欧美一区二区在线视频| 欧美一区二区三区视频免费| 欧美日韩免费电影| 欧美一卡二卡在线| 精品日产卡一卡二卡麻豆| 日韩精品一区二| 欧美精品一区二区在线播放 | 欧美韩国日本不卡| 欧美国产日韩一二三区| 中文字幕亚洲成人| 一区二区激情视频| 日韩精品一卡二卡三卡四卡无卡| 日韩精品久久久久久| 蜜臀av在线播放一区二区三区| 青青青伊人色综合久久| 国产精品18久久久久久vr| 国产福利一区二区三区视频| 成人一级片网址| av网站免费线看精品| 欧美色图在线观看| 欧美一区二区三区喷汁尤物| 精品久久久久av影院| 国产精品美女久久久久久 | 成人久久18免费网站麻豆| www.成人网.com| 欧美日韩免费视频| 欧美精品一区二区三区高清aⅴ | 欧美一区二区三区啪啪| 久久久青草青青国产亚洲免观| 国产精品天天看| 亚洲国产精品综合小说图片区| 美女一区二区视频| 波多野结衣一区二区三区 | 亚洲欧洲精品成人久久奇米网| 一区二区免费看| 久久99精品国产91久久来源| 成+人+亚洲+综合天堂| 欧美日韩精品电影| 中文字幕巨乱亚洲| 日韩成人精品在线观看| 成人免费视频国产在线观看| 欧美日韩一区三区| 久久久不卡网国产精品二区| 亚洲另类在线一区| 久久成人精品无人区| 91美女精品福利| 欧美哺乳videos| 亚洲卡通动漫在线| 国产一区二区中文字幕| 欧美午夜精品一区二区三区| 久久久久88色偷偷免费| 亚洲福利视频一区二区| 国产99精品国产| 欧美一区二区三区四区久久| 中文字幕在线不卡一区| 久久精品国产精品亚洲红杏 | 中文字幕在线免费不卡| 久久精品72免费观看| 日本精品一级二级| 国产三级精品在线| 日韩高清在线不卡| 99久久精品一区二区| 精品国产1区二区| 亚洲va在线va天堂| 99精品视频免费在线观看| 精品精品国产高清一毛片一天堂| 亚洲美女免费视频| 处破女av一区二区| 日韩免费在线观看| 亚洲高清免费在线| 97精品国产露脸对白| 26uuu另类欧美| 七七婷婷婷婷精品国产| 欧美亚一区二区| 亚洲男女一区二区三区| 豆国产96在线|亚洲| 亚洲精品一线二线三线无人区| 天堂成人国产精品一区| 欧美视频中文一区二区三区在线观看 | 日韩免费一区二区| 午夜欧美电影在线观看| 色婷婷精品久久二区二区蜜臀av | 精品av久久707| 日韩成人一级片| 欧美精品一卡两卡| 亚洲电影一区二区| 在线观看视频91| 亚洲精选视频在线| 色综合天天在线| 亚洲欧美影音先锋| 成人99免费视频| 日韩一区在线看| 91色porny在线视频| 日韩一区欧美一区| 色综合久久久久| 亚洲精品菠萝久久久久久久| 91丨九色丨尤物| 亚洲另类春色校园小说| 91国偷自产一区二区三区成为亚洲经典| 国产精品色在线观看| av电影在线观看完整版一区二区| 亚洲国产成人自拍| 成人激情免费视频| 国产精品免费丝袜| 91片黄在线观看| 亚洲一区二三区| 91精品国产综合久久久久久| 日韩av成人高清| 精品国产一区二区三区久久影院 | 成人免费va视频| 成人免费在线观看入口| 一本色道久久综合精品竹菊| 亚洲综合激情另类小说区| 欧美日韩国产电影| 久久成人18免费观看| 久久久久久久久99精品| 成人免费av资源| 亚洲精品亚洲人成人网| 欧美高清性hdvideosex| 蜜桃精品在线观看| 国产欧美一区二区三区鸳鸯浴| 成人av网址在线观看| 亚洲三级在线观看| 欧美日韩日本视频| 久久超碰97中文字幕| 欧美国产禁国产网站cc| 色婷婷综合久久久久中文一区二区 | 欧美大片在线观看一区二区| 黑人巨大精品欧美黑白配亚洲| 国产精品天干天干在线综合| 91麻豆国产福利精品| 日本午夜精品视频在线观看| 欧美精品一区二区三区在线| av在线播放成人| 青青草原综合久久大伊人精品 | 国产一区二区三区免费观看| 国产精品萝li| 欧美高清你懂得| 国产999精品久久久久久绿帽| 一区二区三区高清不卡| 日韩午夜在线播放| av激情综合网| 青娱乐精品视频| 亚洲欧洲日韩av| 日韩亚洲欧美在线| av亚洲产国偷v产偷v自拍| 青青草91视频| 日韩伦理电影网| 精品国产乱码久久久久久影片| 99精品欧美一区| 国模大尺度一区二区三区| 亚洲欧美一区二区久久| 欧美一区二区三区色| 91在线视频在线| 久久97超碰色| 亚洲一区在线观看网站| 日本一区二区三区电影| 7777精品伊人久久久大香线蕉超级流畅 | 日韩精品中午字幕| 91原创在线视频| 国产精品综合一区二区| 三级成人在线视频| 中文字幕佐山爱一区二区免费| 日韩欧美区一区二| 欧洲精品视频在线观看| 懂色av一区二区在线播放| 日韩高清不卡在线| 一区二区三区在线观看视频| 国产午夜亚洲精品理论片色戒| 欧美一区二区三区视频在线| 91国产福利在线| 99视频一区二区| 国产精品69毛片高清亚洲| 欧美aa在线视频| 亚洲成av人片| 亚洲一区二区在线视频| 亚洲欧美自拍偷拍色图| 国产亚洲成av人在线观看导航 | 亚洲高清免费视频| ...中文天堂在线一区| 国产三区在线成人av| 日韩亚洲欧美高清| 91精品黄色片免费大全| 欧美日韩一区二区三区四区五区| 91女厕偷拍女厕偷拍高清| 国产91富婆露脸刺激对白| 黄页视频在线91| 免费成人在线观看| 欧美aa在线视频| 日本免费新一区视频| 日韩电影在线观看网站| 婷婷国产在线综合| 亚洲va欧美va人人爽| 天天色天天操综合| 午夜电影久久久| 丝袜国产日韩另类美女|