2009年8月1日 星期六

井字圈叉遊戲



此程式是在伊莉論壇的daviddr大大所寫的
雖然看起來簡單,不過程式碼跟畫面顯示方式還蠻不一樣的
因為在console模式還能用滑鼠操控...蠻特別...
加上程式碼很短,不到30行
有在練C/C++程式滴大大們,加減參考看看囉~

以下為程式碼:
#include <windows.h>
#include <stdio.h>
extern "C" WINBASEAPI HWND WINAPI GetConsoleWindow();
int main()
{
    short pos, x, y, ch = 0, rnd = 0, c[11] = {0};
    short win[] = {7,56,73,84,146,273,292,448,0}, *w;
    char  map[] = "□ □ □\n□ □ □\n□ □ □\n";
    COORD o = {0,0};       
    POINT p; puts (map);   
    while (rnd < 9) {
        GetCursorPos (&p);
        ScreenToClient (GetConsoleWindow(), &p);
        pos = (x=p.x-2)/21 + ((y=p.y-2)/15)*3;
        if (x<0 || x>60 || y<0 || y>42 || c[pos] ||
            GetAsyncKeyState (1)>=0) continue;
        SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE),o);
        map[pos*3]   = "○╳"[ch*2];
        map[pos*3+1] = "○╳"[ch*2+1];
        puts (map);
        c[ch+9] |= (c[pos] = 1) << pos;
        for (w=win; *w; *w==(c[ch+9]&*w)? rnd=99, w=win+8: w++);
        if (rnd != 99) ch = !ch, rnd++;
    }
    system ("pause"+!printf (9==rnd? "平手":"%c 獲勝","OX"[ch]));
}

此文章來自這裡
沒有編譯器來編譯程式碼的朋友,可以點我下載執行檔跑跑看。

沒有留言:

張貼留言