學習qt的過程中,為了加深自己的一些基礎操作,也為了想裝x,就自己寫了乙個五子棋小遊戲,目前介面沒寫完整,遊戲主題部分可以玩。
五子棋遊戲主要的操作有三個。
第一:
void mainwindow::paintevent(qpaintevent *) //使用繪圖事件時需要新增時間函式在**件下面
for(int i=0;i<=13;i++) //橫線
brush.setstyle(qt::solidpattern);
if(chess_x>=0&&click_x<24&&chess_y>=0&&chess_y<14) //繪製下子標記點
/*繪製棋子 */
for(int i=0;i<=23;i++)
for(int j=0;j<=13;j++)
if((game->gamemapvec[i][j]==-1)) //繪製棋子}}
上述函式實現的功能就是繪製棋盤,棋子,和下棋標記。
當滑鼠移動時,座標會跟著移動,判斷滑鼠當前座標,動態繪製除下棋標記,當滑鼠出發按壓事件後,在此處繪製乙個棋子。
第二:
void mainwindow::mousemoveevent(qmouseevent *event) //滑鼠按壓事件
else
}
上述**實現了如下功能:
1,捕獲滑鼠移動時的座標,並判斷是否在棋盤內。
2,若果在棋盤內,就同過處理,讓滑鼠在某乙個棋盤十字附近的時候,讓座標直接等於棋盤的格仔相應的座標。比如左上角第乙個就是(0,0),這樣,棋盤在我們眼裡相當於乙個二維陣列。具體處理過程,程式裡面有注釋。
第三:
int gamemode::jude_win()
, ,,
,};int situ_2[5][5]= ,,,
,};int situ_3[5][5]= ,,,
,};int situ_4[5][5]= ,,,
,};int situ_5[5][5]= ,,,
,};int situ_6[5][5]= ,,,
,};for(int i=0;i<=19;i++)
for(int j=0;j<=9;j++)
if(cnt==-5)
}cnt=0;
for(int x=0;x<=4;x++)
for(int y=0;y<=4;y++)
if(cnt==-5)
}cnt=0;
for(int x=0;x<=4;x++)
for(int y=0;y<=4;y++)
if(cnt==-5)
}cnt=0;
for(int x=0;x<=4;x++)
for(int y=0;y<=4;y++)
if(cnt==-5)
}cnt=0;
for(int x=0;x<=4;x++)
for(int y=0;y<=4;y++)
if(cnt==-5)
}cnt=0;
for(int x=0;x<=4;x++)
for(int y=0;y<=4;y++)
if(cnt==-5)
}cnt=0;
}return 0;
}
上述**是用來判斷輸贏的。學過影象處理的都知道卷積操作。五子連珠就是相當於用乙個5x5的模板去掃瞄整個棋盤。
在這之前,我用和乙個二維陣列儲存下棋的情況。初始化陣列為0.(沒有棋子),當觸發滑鼠按壓事件的的時候,如果黑色,標記為1,白色為-1.那麼用上述六中情況可以包括所有五子連一起的情況。
ps:剛開始用了四中情況。公尺子一樣的四個模板。但是這樣,邊界就掃瞄不到。
五子棋的小遊戲
感想 終於寫出人生中第乙個小遊戲來了 include include include include using namespace std const int x 21 棋盤行數 const int y 21 棋盤列數 char p x y 定義棋盤 int m 0 定義臨時點,儲存輸入座標 in...
python五子棋小遊戲
話不多說,直接上 全部工程檔案,在github 五子棋 效果預覽 判斷上下左右左上右上左下右下8個方向 i x 1 while i 0 if darray i y 1 num1 1 i 1 else break i x 1 while i 19 if darray i y 1 num1 1 i 1 ...
c 小遊戲 五子棋
include include includeusing namespace std const int x 21 棋盤行數 const int y 21 棋盤列數 char p x y 定義棋盤 int m 0 定義臨時點,儲存輸入座標 int n 0 void display 輸出棋盤 else...