www.tjgcgs88.cn-狠狠久久亚洲欧美专区不卡,久久精品国产99久久无毒不卡,噼里啪啦国语版在线观看,zσzσzσ女人极品另类

  • <strike id="qgi8o"><td id="qgi8o"></td></strike>
  • <ul id="qgi8o"><acronym id="qgi8o"></acronym></ul>
  • <li id="qgi8o"></li>
    <ul id="qgi8o"></ul>
    <strike id="qgi8o"><rt id="qgi8o"></rt></strike>
    <ul id="qgi8o"><center id="qgi8o"></center></ul>
  • <kbd id="qgi8o"></kbd>

    關(guān)于四子棋的AI,四子棋高手進(jìn) 一個(gè)關(guān)于四子棋規(guī)則的問題

    #include <windows.h>
    HINSTANCE hInst;
    HWND hWnd;

    ATOM MyRegisterClass(HINSTANCE hInstance);
    BOOL InitInstance(HINSTANCE, int);
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    void MyPaint();
    BOOL XiaQi(int whichPlay, LPARAM lParam);
    BOOL IsWin(int whichPlay);
    void SetMap();
    HBITMAP bmp[3],bg,bufBmp;
    HDC mdc,hdc,bufDC;
    int who=1;
    const int h=11,w=12;
    const int picH=40,picW=40;
    int map[w][h];
    unsigned long now,pass;
    void SetMap()
    {
    for(int i=0; i<w; i++)
    {
    for(int j=0; j<h; j++)
    {
    map[i][j]=0;
    }
    }
    }
    int APIENTRY WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
    {
    MSG msg;

    MyRegisterClass(hInstance);

    if (!InitInstance (hInstance, nCmdShow))
    {
    return FALSE;
    }

    while( msg.message!=WM_QUIT )
    {
    if( PeekMessage( &msg, NULL, 0,0 ,PM_REMOVE) )
    {
    TranslateMessage( &msg );
    DispatchMessage( &msg );
    }
    else
    {
    now=GetTickCount();
    if(pass-now>=40)
    {
    MyPaint();
    }
    }
    }

    return msg.wParam;
    }

    ATOM MyRegisterClass(HINSTANCE hInstance)
    {
    WNDCLASSEX wcex;

    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = (WNDPROC)WndProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;
    wcex.hIcon = NULL;
    wcex.hCursor = NULL;
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName = NULL;
    wcex.lpszClassName = "canvas";
    wcex.hIconSm = NULL;

    return RegisterClassEx(&wcex);
    }

    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
    hInst = hInstance;

    hWnd = CreateWindow("canvas", "五子棋" , WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,0,0, 0, NULL, NULL, hInstance, NULL);

    if (!hWnd)
    {
    return FALSE;
    }

    SetMap();
    bmp[0]=(HBITMAP)LoadImage(NULL,"white.bmp",IMAGE_BITMAP,picW,picH,LR_LOADFROMFILE);
    bmp[1]=(HBITMAP)LoadImage(NULL,"red.bmp",IMAGE_BITMAP,picW,picH,LR_LOADFROMFILE);
    bmp[2]=(HBITMAP)LoadImage(NULL,"black.bmp",IMAGE_BITMAP,picW,picH,LR_LOADFROMFILE);
    if(!bmp[0] || !bmp[1] || !bmp[2])
    {
    MessageBox(hWnd,"找不要需要的資源,程序?qū)⑼顺?","錯(cuò)誤提示",MB_ICONERROR);
    ExitProcess(0);
    }
    MoveWindow(hWnd,10,10,640,480,true);
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    hdc=GetDC(hWnd);
    SetTextColor(hdc,RGB(255,0,0));
    TextOut(hdc,500,100,"紅方先下棋",strlen("紅方先下棋"));
    mdc=CreateCompatibleDC(hdc);
    bufDC=CreateCompatibleDC(hdc);
    bufBmp=CreateCompatibleBitmap(hdc,w*picW,h*picW);
    SelectObject(mdc,bufBmp);
    MyPaint();
    return TRUE;
    }

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    int i=0;
    switch (message)
    {
    case WM_LBUTTONDOWN:

    if(XiaQi(who,lParam))
    {
    MyPaint();
    if(who==1)
    {
    if(IsWin(who))
    {
    MessageBox(hWnd,"紅方獲勝.","恭喜",MB_OK);
    SetMap();
    }

    who=2;

    SetTextColor(hdc,RGB(0,0,0));
    TextOut(hdc,500,100,"輪到黑方下棋",strlen("輪到黑方下棋"));
    }
    else
    {
    if(IsWin(who))
    {
    MessageBox(hWnd,"黑方獲勝.","恭喜",MB_OK);
    SetMap();
    }
    who=1;

    SetTextColor(hdc,RGB(255,0,0));
    TextOut(hdc,500,100,"輪到紅方下棋",strlen("輪到紅方下棋"));
    }
    }
    break;

    case WM_DESTROY:
    for(i=0; i<3; i++)
    {
    DeleteObject(bmp[i]);
    }
    ReleaseDC(hWnd,bufDC);
    DeleteObject(bufBmp);
    ReleaseDC(hWnd,mdc);
    ReleaseDC(hWnd,hdc);
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
    }

    void MyPaint()
    {
    SelectObject(mdc,bg);
    for(int i=0; i<w; i++)
    {
    for(int j=0; j<h; j++)
    {
    SelectObject(bufDC,bmp[map[i][j]]);
    BitBlt(mdc,picW*i,picW*j,picW*w,picH*h,bufDC,0,0,SRCCOPY);
    }
    }
    BitBlt(hdc,0,0,picW*w,picH*h,mdc,0,0,SRCCOPY);

    pass=GetTickCount();
    }
    BOOL XiaQi(int whichPlay, LPARAM lParam)
    {
    if( LOWORD(lParam) <= picW*w && LOWORD(lParam)>=0 &&
    HIWORD(lParam) <= picH*h && HIWORD(lParam)>=0)
    {
    int x=0,y=0;
    for(int i=1; i<=w; i++)
    {
    if( i*picW >= LOWORD(lParam) )
    {
    x=i;
    x--;
    break;
    }
    }

    for(int j=1; j<=h; j++)
    {
    if( j*picH >= HIWORD(lParam) )
    {
    y=j;
    y--;
    break;
    }
    }

    if(whichPlay==1)
    {
    if(map[x][y]==0)
    {
    map[x][y]=1;
    }
    else
    {
    return FALSE;
    }
    }
    else
    {
    if(map[x][y]==0)
    {
    map[x][y]=2;
    }
    else
    {
    return FALSE;
    }
    }

    return TRUE;
    }
    else
    {
    return FALSE;
    }
    }
    BOOL IsWin(int whichPlay)
    {
    int num=0;
    for(int i=0; i<w; i++)
    {
    for(int j=0; j<h; j++)
    {
    if(whichPlay==1)
    {
    if(map[i][j]==2 || map[i][j]==0 )
    {
    num=0;
    }
    if(map[i][j]==1 )
    {
    num++;
    if(num==5)
    {
    return TRUE;
    }
    }
    }
    else
    {
    if(map[i][j]==1 || map[i][j]==0)
    {
    num=0;
    }
    if(map[i][j]==2)
    {
    num++;
    if(num==5)
    {
    return TRUE;
    }
    }
    }
    }
    }

    num=0;
    for( i=0; i<w; i++)
    {
    for(int j=0; j<h; j++)
    {
    if(whichPlay==1)
    {
    if(map[j][i]==2 || map[j][i]==0)
    {
    num=0;
    }
    if(map[j][i]==1)
    {
    num++;
    if(num==5)
    {
    return TRUE;
    }
    }
    }
    else
    {
    if(map[j][i]==1||map[j][i]==0)
    {
    num=0;
    }
    if(map[j][i]==2)
    {
    num++;

    if(num==5)
    {
    return TRUE;
    }
    }
    }
    }
    }

    num=0;
    int k=0;
    for(i=w-1; i>=0; i--)
    {
    for(int j=0; j<=i; j++)
    {
    if(whichPlay==1)
    {
    if(map[j+k][j]==0 || map[j+k][j]==2)
    {
    num=0;
    }
    if(map[j+k][j]==1)
    {
    num++;
    }
    if(num==5)
    {
    return TRUE;
    }
    }
    else
    {
    if(map[j+k][j]==0 || map[j+k][j]==1)
    {
    num=0;
    }
    if(map[j+k][j]==2)
    {
    num++;
    }
    if(num==5)
    {
    return TRUE;
    }
    }

    }
    num=0;
    k++;
    }

    num=0;
    k=0;
    for(i=w-1; i>=0; i--)
    {
    for(int j=0; j<=i; j++)
    {
    if(whichPlay==1)
    {
    if(map[j][j+k]==0 || map[j][j+k]==2)
    {
    num=0;
    }
    if(map[j][j+k]==1)
    {
    num++;
    }
    if(num==5)
    {
    return TRUE;
    }
    }
    else
    {
    if(map[j][j+k]==0 || map[j][j+k]==1)
    {
    num=0;
    }
    if(map[j][j+k]==2)
    {
    num++;
    }
    if(num==5)
    {
    return TRUE;
    }
    }

    }
    num=0;
    k++;
    }
    num=0;
    for(i=0; i<w; i++)
    {
    k=i;
    for(int j=w-1; j>=i; j--,k++)
    {
    if(whichPlay==1)
    {
    if(map[j][k]==0 || map[j][k]==2)
    {
    num=0;
    }
    if(map[j][k]==1)
    {
    num++;
    }
    if(num==5)
    {
    return TRUE;
    }
    }
    else
    {
    if(map[j][k]==0 || map[j][k]==1)
    {
    num=0;
    }
    if(map[j][k]==2)
    {
    num++;
    }
    if(num==5)
    {
    return TRUE;
    }
    }
    }
    num=0;
    }

    num=0;
    for( i=w-1; i>=0; i--)
    {
    k=0;
    for(int j=i; j>=0; j--,k++)
    {
    if(whichPlay==1)
    {
    if(map[j][k]==0 || map[j][k]==2)
    {
    num=0;
    }
    if(map[j][k]==1)
    {
    num++;
    }
    if(num==5)
    {
    return TRUE;
    }
    }
    else
    {
    if(map[j][k]==0 || map[j][k]==1)
    {
    num=0;
    }
    if(map[j][k]==2)
    {
    num++;
    }
    if(num==5)
    {
    return TRUE;
    }
    }
    }
    num=0;
    }
    return FALSE;
    }

      按照你舉例的這個(gè)程序,他使用了WM_LBUTTONDOWN 這個(gè)方法來獲得鼠標(biāo)點(diǎn)擊的位置。這是windows的API,由更底層的傳遞給它參數(shù),不用專門考慮了。

      WM_LBUTTONDOWN 使用方法(英文)

      WM_LBUTTONDOWN Message
      Platforms

      * Windows 95: Supported.
      * Windows 98: Supported.
      * Windows NT: Requires Windows NT 3.1 or later.
      * Windows 2000: Supported.
      * Windows CE: Requires Windows CE 1.0 or later.

      Description & Usage

      The WM_LBUTTONDOWN message tells a window that the left mouse button has been pressed while the cursor is inside the window's client area. The information sent with the message identifies the cursor postion relative to the window as well as the state of various modifier keys and mouse buttons. The target window's window procedure processes the message. When handling the message, the GET_X_LPARAM, GET_Y_LPARAM, and MAKEPOINTS macros can be used to unpack the coordinate information easily.
      Return Value

      WM_LBUTTONDOWN should always return 0.
      Visual Basic-Specific Issues

      It is not necessary to create a special hander for the WM_LBUTTONDOWN message. The MouseDown event handler provided by Visual Basic actually process WM_LBUTTONDOWN and unpacks some of the information passed with it for easier use.
      Parameters

      wParam
      A combination of the following flags specifying which modifer keys, if any, are currently depressed:

      MK_CONTROL
      The Ctrl key is down.
      MK_LBUTTON
      The left mouse button is down.
      MK_MBUTTON
      The middle mouse button is down.
      MK_RBUTTON
      The right mouse button is down.
      MK_SHIFT
      The Shift key is down.
      MK_XBUTTON1
      Windows 2000: The first X button is down.
      MK_XBUTTON2
      Windows 2000: The second X button is down.

      lParam
      The (x,y) coordinates of the mouse cursor relative to the window. The low-order word contains the x-coordinate, and the high-order word contains the y-coordinate.

      Constant Definitions

      Const WM_LBUTTONDOWN = &H201
      Const MK_CONTROL = &H8
      Const MK_LBUTTON = &H1
      Const MK_MBUTTON = &H10
      Const MK_RBUTTON = &H2
      Const MK_SHIFT = &H4
      Const MK_XBUTTON1 = &H20
      Const MK_XBUTTON2 = &H40

      Example

      ' This code is licensed according to the terms and conditions listed here.

      ' Make window Form1 think that the left mouse button has been
      ' pressed in its center by sending the appropriate message to it.
      Dim xcoord As Long, ycoord As Long ' x and y coordinates of the faked cursor position
      Dim packed As Long ' the coordinates "packed" into a single 32-bit integer
      Dim winrect As RECT ' receives coordinates of the window
      Dim retval As Long ' return value

      ' First, get the coordinates of window Form1.
      retval = GetWindowRect(Form1.hWnd, winrect)
      ' Use the coordinates to calculate the midpoint of Form1.
      xcoord = (winrect.right - winrect.left) / 2
      ycoord = (winrect.bottom - winrect.top) / 2
      ' Now pack the coordinates into the appropriate words of the value
      packed = (ycoord * &H10000) + xcoord

      ' Make Form1 think the left mouse button was just pressed in that position.
      retval = SendMessage(Form1.hWnd, WM_LBUTTONDOWN, ByVal CLng(MK_LBUTTON), ByVal packed)

      See Also

      WM_LBUTTONDBLCLK, WM_LBUTTONUP, WM_MBUTTONDOWN, WM_RBUTTONDOWN
      Category

      Mouse

      -------------------------------------------------------------------
      //一點(diǎn)解釋
      LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
      {
      int i=0;
      switch (message) //檢查消息隊(duì)列
      {
      case WM_LBUTTONDOWN: //發(fā)現(xiàn)WM_LBUTTONDOWN消息

      if(XiaQi(who,lParam))
      {
      MyPaint(); //調(diào)用MyPaint()刷新棋盤;
      if(who==1)
      {
      if(IsWin(who))
      {
      MessageBox(hWnd,"紅方獲勝.","恭喜",MB_OK);
      SetMap();
      }

      who=2;

      SetTextColor(hdc,RGB(0,0,0)); //點(diǎn)擊的地方涂黑
      TextOut(hdc,500,100,"輪到黑方下棋",strlen("輪到黑方下棋"));
      }
      else
      {
      if(IsWin(who))
      {
      MessageBox(hWnd,"黑方獲勝.","恭喜",MB_OK);
      SetMap();
      }
      who=1;

      SetTextColor(hdc,RGB(255,0,0)); //點(diǎn)擊的地方涂紅
      TextOut(hdc,500,100,"輪到紅方下棋",strlen("輪到紅方下棋"));
      }
      }
      break;

    #include <windows.h>
    HINSTANCE hInst;
    HWND hWnd;

    ATOM MyRegisterClass(HINSTANCE hInstance);
    BOOL InitInstance(HINSTANCE, int);
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    void MyPaint();
    BOOL XiaQi(int whichPlay, LPARAM lParam);
    BOOL IsWin(int whichPlay);
    void SetMap();
    HBITMAP bmp[3],bg,bufBmp;
    HDC mdc,hdc,bufDC;
    int who=1;
    const int h=11,w=12;
    const int picH=40,picW=40;
    int map[w][h];
    unsigned long now,pass;
    void SetMap()
    {
    for(int i=0; i<w; i++)
    {
    for(int j=0; j<h; j++)
    {
    map[i][j]=0;
    }
    }
    }
    int APIENTRY WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
    {
    MSG msg;

    MyRegisterClass(hInstance);

    if (!InitInstance (hInstance, nCmdShow))
    {
    return FALSE;
    }

    while( msg.message!=WM_QUIT )
    {
    if( PeekMessage( &msg, NULL, 0,0 ,PM_REMOVE) )
    {
    TranslateMessage( &msg );
    DispatchMessage( &msg );
    }
    else
    {
    now=GetTickCount();
    if(pass-now>=40)
    {
    MyPaint();
    }
    }
    }

    return msg.wParam;
    }

    ATOM MyRegisterClass(HINSTANCE hInstance)
    {
    WNDCLASSEX wcex;

    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc = (WNDPROC)WndProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;
    wcex.hIcon = NULL;
    wcex.hCursor = NULL;
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName = NULL;
    wcex.lpszClassName = "canvas";
    wcex.hIconSm = NULL;

    return RegisterClassEx(&wcex);
    }

    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
    hInst = hInstance;

    hWnd = CreateWindow("canvas", "五子棋" , WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,0,0, 0, NULL, NULL, hInstance, NULL);

    if (!hWnd)
    {
    return FALSE;
    }

    SetMap();
    bmp[0]=(HBITMAP)LoadImage(NULL,"white.bmp",IMAGE_BITMAP,picW,picH,LR_LOADFROMFILE);
    bmp[1]=(HBITMAP)LoadImage(NULL,"red.bmp",IMAGE_BITMAP,picW,picH,LR_LOADFROMFILE);
    bmp[2]=(HBITMAP)LoadImage(NULL,"black.bmp",IMAGE_BITMAP,picW,picH,LR_LOADFROMFILE);
    if(!bmp[0] || !bmp[1] || !bmp[2])
    {
    MessageBox(hWnd,"找不要需要的資源,程序?qū)⑼顺?","錯(cuò)誤提示",MB_ICONERROR);
    ExitProcess(0);
    }
    MoveWindow(hWnd,10,10,640,480,true);
    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    hdc=GetDC(hWnd);
    SetTextColor(hdc,RGB(255,0,0));
    TextOut(hdc,500,100,"紅方先下棋",strlen("紅方先下棋"));
    mdc=CreateCompatibleDC(hdc);
    bufDC=CreateCompatibleDC(hdc);
    bufBmp=CreateCompatibleBitmap(hdc,w*picW,h*picW);
    SelectObject(mdc,bufBmp);
    MyPaint();
    return TRUE;
    }

    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    int i=0;
    switch (message)
    {
    case WM_LBUTTONDOWN:

    if(XiaQi(who,lParam))
    {
    MyPaint();
    if(who==1)
    {
    if(IsWin(who))
    {
    MessageBox(hWnd,"紅方獲勝.","恭喜",MB_OK);
    SetMap();
    }

    who=2;

    SetTextColor(hdc,RGB(0,0,0));
    TextOut(hdc,500,100,"輪到黑方下棋",strlen("輪到黑方下棋"));
    }
    else
    {
    if(IsWin(who))
    {
    MessageBox(hWnd,"黑方獲勝.","恭喜",MB_OK);
    SetMap();
    }
    who=1;

    SetTextColor(hdc,RGB(255,0,0));
    TextOut(hdc,500,100,"輪到紅方下棋",strlen("輪到紅方下棋"));
    }
    }
    break;

    case WM_DESTROY:
    for(i=0; i<3; i++)
    {
    DeleteObject(bmp[i]);
    }
    ReleaseDC(hWnd,bufDC);
    DeleteObject(bufBmp);
    ReleaseDC(hWnd,mdc);
    ReleaseDC(hWnd,hdc);
    PostQuitMessage(0);
    break;
    default:
    return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
    }

    void MyPaint()
    {
    SelectObject(mdc,bg);
    for(int i=0; i<w; i++)
    {
    for(int j=0; j<h; j++)
    {
    SelectObject(bufDC,bmp[map[i][j]]);
    BitBlt(mdc,picW*i,picW*j,picW*w,picH*h,bufDC,0,0,SRCCOPY);
    }
    }
    BitBlt(hdc,0,0,picW*w,picH*h,mdc,0,0,SRCCOPY);

    pass=GetTickCount();
    }
    BOOL XiaQi(int whichPlay, LPARAM lParam)
    {
    if( LOWORD(lParam) <= picW*w && LOWORD(lParam)>=0 &&
    HIWORD(lParam) <= picH*h && HIWORD(lParam)>=0)
    {
    int x=0,y=0;
    for(int i=1; i<=w; i++)
    {
    if( i*picW >= LOWORD(lParam) )
    {
    x=i;
    x--;
    break;
    }
    }

    for(int j=1; j<=h; j++)
    {
    if( j*picH >= HIWORD(lParam) )
    {
    y=j;
    y--;
    break;
    }
    }

    if(whichPlay==1)
    {
    if(map[x][y]==0)
    {
    map[x][y]=1;
    }
    else
    {
    return FALSE;
    }
    }
    else
    {
    if(map[x][y]==0)
    {
    map[x][y]=2;
    }
    else
    {
    return FALSE;
    }
    }

    return TRUE;
    }
    else
    {
    return FALSE;
    }
    }
    BOOL IsWin(int whichPlay)
    {
    int num=0;
    for(int i=0; i<w; i++)
    {
    for(int j=0; j<h; j++)
    {
    if(whichPlay==1)
    {
    if(map[i][j]==2 || map[i][j]==0 )
    {
    num=0;
    }
    if(map[i][j]==1 )
    {
    num++;
    if(num==5)
    {
    return TRUE;
    }
    }
    }
    else
    {
    if(map[i][j]==1 || map[i][j]==0)
    {
    num=0;
    }
    if(map[i][j]==2)
    {
    num++;
    if(num==5)
    {
    return TRUE;
    }
    }
    }
    }
    }

    num=0;
    for( i=0; i<w; i++)
    {
    for(int j=0; j<h; j++)
    {
    if(whichPlay==1)
    {
    if(map[j][i]==2 || map[j][i]==0)
    {
    num=0;
    }
    if(map[j][i]==1)
    {
    num++;
    if(num==5)
    {
    return TRUE;
    }
    }
    }
    else
    {
    if(map[j][i]==1||map[j][i]==0)
    {
    num=0;
    }
    if(map[j][i]==2)
    {
    num++;

    if(num==5)
    {
    return TRUE;
    }
    }
    }
    }
    }

    num=0;
    int k=0;
    for(i=w-1; i>=0; i--)
    {
    for(int j=0; j<=i; j++)
    {
    if(whichPlay==1)
    {
    if(map[j+k][j]==0 || map[j+k][j]==2)
    {
    num=0;
    }
    if(map[j+k][j]==1)
    {
    num++;
    }
    if(num==5)
    {
    return TRUE;
    }
    }
    else
    {
    if(map[j+k][j]==0 || map[j+k][j]==1)
    {
    num=0;
    }
    if(map[j+k][j]==2)
    {
    num++;
    }
    if(num==5)
    {
    return TRUE;
    }
    }

    }
    num=0;
    k++;
    }

    num=0;
    k=0;
    for(i=w-1; i>=0; i--)
    {
    for(int j=0; j<=i; j++)
    {
    if(whichPlay==1)
    {
    if(map[j][j+k]==0 || map[j][j+k]==2)
    {
    num=0;
    }
    if(map[j][j+k]==1)
    {
    num++;
    }
    if(num==5)
    {
    return TRUE;
    }
    }
    else
    {
    if(map[j][j+k]==0 || map[j][j+k]==1)
    {
    num=0;
    }
    if(map[j][j+k]==2)
    {
    num++;
    }
    if(num==5)
    {
    return TRUE;
    }
    }

    }
    num=0;
    k++;
    }
    num=0;
    for(i=0; i<w; i++)
    {
    k=i;
    for(int j=w-1; j>=i; j--,k++)
    {
    if(whichPlay==1)
    {
    if(map[j][k]==0 || map[j][k]==2)
    {
    num=0;
    }
    if(map[j][k]==1)
    {
    num++;
    }
    if(num==5)
    {
    return TRUE;
    }
    }
    else
    {
    if(map[j][k]==0 || map[j][k]==1)
    {
    num=0;
    }
    if(map[j][k]==2)
    {
    num++;
    }
    if(num==5)
    {
    return TRUE;
    }
    }
    }
    num=0;
    }

    num=0;
    for( i=w-1; i>=0; i--)
    {
    k=0;
    for(int j=i; j>=0; j--,k++)
    {
    if(whichPlay==1)
    {
    if(map[j][k]==0 || map[j][k]==2)
    {
    num=0;
    }
    if(map[j][k]==1)
    {
    num++;
    }
    if(num==5)
    {
    return TRUE;
    }
    }
    else
    {
    if(map[j][k]==0 || map[j][k]==1)
    {
    num=0;
    }
    if(map[j][k]==2)
    {
    num++;
    }
    if(num==5)
    {
    return TRUE;
    }
    }
    }
    num=0;
    }
    return FALSE;
    }

    2回答者: asszxc124

    你只用判斷每個(gè)可以下子的地方八個(gè)方向下子的權(quán)值,取權(quán)值最高的作為候選。然后判斷排除不合規(guī)則的下子點(diǎn),然后判斷4子已連接的必勝點(diǎn)再下子就可以了

    四子棋,想要贏,一開始就要下在中間
    再來就是看對(duì)手的下子方向再來決定要下哪里
    要注意每一列剩幾格,行行是否有具備有四子相連條件
    四子棋只要直四、行四或是橫四,形成四子就贏了四子棋,不是正規(guī)棋盤

    MI 小米 JKSZQ001 計(jì)客智能空間四子棋 黑白-購買最佳價(jià)格
    除了基本的四子棋玩法,這款棋盤還支持熄燈模式。在這種模式下,玩家需要依靠記憶力和邏輯推理來移動(dòng)棋子,這種玩法能夠鍛煉玩家的觀察力和邏輯思維能力,增加游戲的挑戰(zhàn)性和樂趣。智能空間四子棋還提供了與多種難度的人工智能機(jī)器人對(duì)戰(zhàn)的功能。玩家無需聯(lián)網(wǎng),便可以隨時(shí)挑戰(zhàn)內(nèi)置的AI機(jī)器人,或通過藍(lán)牙連接...

    四子棋游戲方法及教育意義怎么寫
    四子棋雖然是從五子棋的玩法變化而來的,但還是有著些許的不一樣,它和五子棋最大的差別就在于它的下子會(huì)被限制,畢竟四子棋的棋盤那么小,如果還能隨意落子的話,那游戲就真的太簡(jiǎn)單了,因此它被限制每一位玩家下棋的時(shí)候,要底下一列有子才可以接著下,這也讓四子棋的玩法有著不一樣的特色。...

    城市四子棋游戲測(cè)評(píng)
    對(duì)于新手而言,"城市四子棋"的上手度非常高。游戲規(guī)則極其簡(jiǎn)單,只需在橫豎或斜線上連接四個(gè)棋子即可得分,無需過多復(fù)雜的學(xué)習(xí)過程,玩家可以快速進(jìn)入游戲狀態(tài)。創(chuàng)意上,這款游戲的最大亮點(diǎn)在于開發(fā)者設(shè)計(jì)了一套既合理又富有創(chuàng)意的游戲規(guī)則。即使規(guī)則簡(jiǎn)單,但通過巧妙運(yùn)用特殊的棋子,游戲的策略性與趣味性...

    四子棋現(xiàn)代四子棋
    現(xiàn)代四子棋,又名“四仔棋”,起源于珠海市實(shí)驗(yàn)中學(xué)初中部,由學(xué)生TZQ、ZKF及他們的同學(xué)們共同創(chuàng)作。這款游戲的獨(dú)特之處在于無需實(shí)體棋子,僅憑一張紙就能進(jìn)行,因此迅速風(fēng)靡全球。在實(shí)驗(yàn)中學(xué)的高中部,這款游戲也逐漸受到歡迎,TZQ將它引入并逐漸在校園內(nèi)普及,預(yù)計(jì)未來將更加廣泛流傳。對(duì)戰(zhàn)規(guī)則是這樣...

    四子棋之逆轉(zhuǎn)乾坤游戲介紹
    四子棋之逆轉(zhuǎn)乾坤(Gravity Wins)是一款富有策略和驚喜的二人對(duì)戰(zhàn)棋盤游戲。游戲目標(biāo)是將四個(gè)棋子排成橫豎或斜向的連續(xù)線,然而,游戲的獨(dú)特之處在于棋盤每幾個(gè)回合就會(huì)旋轉(zhuǎn)一次,棋子會(huì)根據(jù)重力規(guī)則重新排列,這就要求玩家不僅要快速?zèng)Q策,還要靈活應(yīng)變,以應(yīng)對(duì)隨時(shí)可能的大逆轉(zhuǎn)局勢(shì)。目前,游戲僅支持二人...

    世界游戲大全51白金成就達(dá)成心得分享
    游戲最后會(huì)演變?yōu)椤獙⒁粋€(gè)正方形劃分為若干個(gè)連通區(qū)域,然后雙方平分這些區(qū)域,要點(diǎn)就是構(gòu)造大小不一的區(qū)域,設(shè)法把最大的區(qū)域最后留給自己。4個(gè)AI難度差異小。3.快艇骰子:運(yùn)氣好是關(guān)鍵,硬要說優(yōu)勝策略,算下各個(gè)組合的期望吧,優(yōu)先把高于期望值且難出的型填了。防止最后吃癟。4.四子棋:基本上每...

    親子玩具有哪些
    親子玩具有智能四子棋桌游、家用桌球臺(tái)等。1、智能四子棋桌游。計(jì)客智能四子棋,一款全新的立體對(duì)弈游戲,玩家需在5*5*5的三維空間里橫、豎、斜任意直線方向率先完成四子連線。規(guī)則簡(jiǎn)單又極具挑戰(zhàn),大人小孩都能輕松上手玩。棋盤智能記錄每一步操作,率先完成四子連線的一方,會(huì)有燈光提示,搭配趣味游戲...

    石子方格游戲怎么玩
    石子棋又叫“四子棋”,顧名思義,下棋的雙方各有四顆棋子,為便于區(qū)分各方棋子的材質(zhì)應(yīng)不相同,棋盤是由四條橫線、四條豎線垂直交叉組成的方格。開始布棋時(shí)各方將四個(gè)棋子都擺在自己一邊的底線交點(diǎn)上即可。游戲規(guī)則是:1、棋子橫豎都可以走,從同一個(gè)方格的交叉點(diǎn)走到另一個(gè)交叉點(diǎn)為一步,每次...

    經(jīng)典四子棋操作指南
    記住,策略和布局在四子棋中至關(guān)重要。每一次的落子都需要深思熟慮,不僅要考慮當(dāng)前的棋局,還要預(yù)見到可能的發(fā)展趨勢(shì)。同時(shí),保持耐心,因?yàn)橛袝r(shí)候,看似簡(jiǎn)單的一步,可能就是扭轉(zhuǎn)戰(zhàn)局的關(guān)鍵。總的來說,經(jīng)典四子棋是一款需要技巧和策略的休閑游戲,通過不斷的練習(xí)和思考,你將逐漸成為游戲的高手。祝你...

    四子棋團(tuán)建游戲規(guī)則
    棋盤采用柱狀結(jié)構(gòu),立有4*4組合的棍子,共十六根。每棍子長(zhǎng)度最多可以串上四枚棋珠。二、棋珠上有洞可供棍子插入,以兩色區(qū)分?jǐn)澄遥糠饺w。 方垛式四子棋采用柱式結(jié)構(gòu),終局時(shí)全部棋子形成一個(gè)方形的堆垛。游戲規(guī)則 一、雙方必須輪流把一顆己方棋珠串在一根子,讓棋珠因地心引力落下在底部...

    相關(guān)評(píng)說:

  • 晏敬14774226947: ai的高手請(qǐng)進(jìn)!!! -
    南岔區(qū)圓形: ______ 你下的是ai的文件,而且應(yīng)該是圖案,想要編輯圖案的話,按以下步驟:首先當(dāng)然是用Illustrator 打開,選中圖案,點(diǎn)對(duì)象-擴(kuò)展,確定以后在圖上點(diǎn)右鍵,選擇取消編組,然后繼續(xù)點(diǎn)右鍵,選擇取消蒙版.之后繼續(xù)點(diǎn)右鍵取消編組,就可以選中底紋進(jìn)行編輯了.
  • 晏敬14774226947: 一位全減器的輸入端是減數(shù)Bi、被減數(shù)Ai和借位端Vi - 1,輸出端是差Di...
    南岔區(qū)圓形: ______ 2019年1月10日,紅米 Redmi Note 7正式發(fā)布.三款配置售價(jià)分別是:3GB+32GB版售價(jià)999元,4GB+64GB版售價(jià)1199元,6GB+64GB版售價(jià)1399元,該機(jī)將于1月15日10點(diǎn)正式現(xiàn)貨發(fā)售. 這款手機(jī)最大的賣點(diǎn)就是搭載了4800萬像素的后置...
  • 晏敬14774226947: AI高手進(jìn),怎么將圖行按照?qǐng)A形路徑排列,麻煩說點(diǎn)細(xì)一點(diǎn). -
    南岔區(qū)圓形: ______ 把圖案自定義為筆刷,然后畫個(gè)圓,線條設(shè)置為該筆刷.
  • 晏敬14774226947: 高手進(jìn)!~這種圖形用AI怎么做?
    南岔區(qū)圓形: ______ 提供一個(gè)大致的想法:①先不要想著透視和彎曲的效果,用很多長(zhǎng)方形排列出一個(gè)大長(zhǎng)方形;②效果>變形>膨脹;③用一個(gè)橢圓形與變形后的圖案進(jìn)行裁切或者封套扭曲;④如果不太滿意的話再用自由變換工具中的透視調(diào)一下(我用手寫板沒辦法做最后這一步,你用鼠標(biāo)的話可以用ctrl、shift、alt與鼠標(biāo)結(jié)合)
  • 晏敬14774226947: 在2.64gCu.Ag.Zn.Al的混合粉末中加入足量鹽酸,產(chǎn)生560ml的氫氣 -
    南岔區(qū)圓形: ______ 解析:4種金屬的氯化物中,只有AgCl是不溶于水的白色沉淀,所以把這些剩余金屬溶于硝酸中,并加入足量的NaCl溶液,產(chǎn)生1.435g的白色沉淀,說明AgCl質(zhì)量...
  • 晏敬14774226947: Oracle數(shù)據(jù)庫的導(dǎo)入/導(dǎo)出???
    南岔區(qū)圓形: ______ 導(dǎo)出的肯定不止用戶的表數(shù)據(jù),還有用戶的索引、視圖、序列等,使用數(shù)據(jù)庫管理員建立的用戶的SQL語句肯定沒有的啦,因?yàn)樵跀?shù)據(jù)庫中并不會(huì)保留這些建表語句撒;導(dǎo)入時(shí),不會(huì)自動(dòng)建立對(duì)應(yīng)的用戶和對(duì)應(yīng)的授權(quán),因?yàn)閷?dǎo)入的時(shí)候,需要寫要導(dǎo)入的用戶的用戶名和密碼,這樣導(dǎo)出的表呀什么的都會(huì)導(dǎo)入到這個(gè)用戶中,而不是建立相應(yīng)的用戶撒;至于具體的導(dǎo)入導(dǎo)出原理,樓主可以去百度搜搜撒,我剛搜了下,有好多的.
  • 晏敬14774226947: ai高手進(jìn)?
    南岔區(qū)圓形: ______ WMF不支持透明、漸變這些效果.你可以導(dǎo)出ai8版本,然后在CDR里導(dǎo)入試試.如果你的cdr版本高,你甚至可以嘗試直接打開ai.
  • 欧美日韩国产这里只有精品| gogogo免费高清在线观看 韩国| 99热门精品一区二区三区无码| 大地资源_高清在线播放| 无码专区一VA亚洲V专区| 国产精品无码久久久久| 少妇高潮久久久久久老司机苗族| 国精无码欧精品亚洲一区| 久久久久97国产精华液好用吗| Av网址免费观看网站|