?01
編碼過程
定義函數(shù)和變量
游戲初始化,繪制界面
游戲過程函數(shù),繪制鼠標(biāo)點擊位置的棋子
判斷鼠標(biāo)點擊位置是否超出邊界
02
效果展示
03
代碼分享
#include <graphics.h>
#include <stdio.h>
#include <math.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")
void initGame();//函數(shù)聲明
void playChess();
int judge(int a, int b);
int flag = 0;//標(biāo)記輪到誰下棋
int board[20][20] = { 0 };//0表示沒有下棋的狀態(tài)
int main()
{
initGame();//函數(shù)調(diào)用,不加返回值類型和參數(shù)類型
playChess();
closegraph();
return 0;
}
void initGame()
{
initgraph(600, 500);//繪圖環(huán)境
loadimage(NULL, "背景.jpg"); //背景圖片
mciSendString("open G弦之歌.mp3", 0, 0, 0);//打開音樂
mciSendString("play G弦之歌.mp3", 0, 0, 0);//播放音樂
//繪制棋盤
setlinecolor(BLACK);//設(shè)置線條顏色為黑色
for (int i = 1; i < 20; i++)
{
line(0, i * 25, 500, i * 25);//繪制線條
line(i * 25, 0, i * 25, 500);
}
setlinestyle(PS_SOLID, 2);//設(shè)置線條為實線,寬度為2
line(500, 0, 500, 500);//邊界線
outtextxy(512, 60, "玩家1:黑棋");
outtextxy(512, 100, "玩家2:白棋");
}
void playChess()
{
int x=0, y=0;
int a=0, b=0;
MOUSEMSG m;//定義鼠標(biāo)消息
HWND hwnd;
hwnd = GetHWnd();
while (1)//實現(xiàn)不斷下棋
{
m = GetMouseMsg();//獲取一個鼠標(biāo)消息
//求距離絕對值
for (int i = 1; i < 20; i++)
{
for (int j = 1; j < 20; j++)
{
if (abs(m.x - i * 25) < 12 && abs(m.y - j * 25) < 12)
{
a = i;
b = j;
x = i * 25;
y = j * 25;
}
}
}
if (m.uMsg == WM_LBUTTONDOWN)//判斷當(dāng)前鼠標(biāo)消息是不是鼠標(biāo)左鍵按下
{
if (board[a][b] != 0)
{
MessageBox(hwnd, "這里已經(jīng)有棋子了,請重新選擇.", "五子棋", MB_OK);
continue;
}
if (flag % 2 == 0)
{
setfillcolor(BLACK);
solidcircle(x, y, 10);
board[a][b] = 1;
}
else
{
setfillcolor(WHITE);
solidcircle(x, y, 10);
board[a][b] = 2;
}
flag++;
}
if (judge(a, b))
{
if (1 == flag % 2)
{
MessageBox(hwnd, "玩家1勝利", "游戲結(jié)束", MB_OK);
return; //修復(fù)BUG
}
else
{
MessageBox(hwnd, "玩家2勝利", "游戲結(jié)束", MB_OK);
return; //修復(fù)BUG
}
}
}
}
int judge(int a, int b)
{
int i, j;
int t = 2 - flag % 2;
for (i = a - 4, j = b; i <= a; i++)
{
if (i >= 1 && i < 16 && t == board[i][j] && t == board[i + 1][j] && t == board[i + 2][j]
&& t == board[i + 3][j] && t == board[i + 4][j])
return 1;
}
for (i = a, j = b - 4; j <= b; j++)
{
if (j >= 1 && j < 16 && t == board[i][j] && t == board[i][j + 1]
&& t == board[i][j + 2] && t == board[i][j + 3] && t == board[i][j + 4])
return 1;
}
for (i = a - 4, j = b - 4; i <= a, j <= b; i++, j++)
{
if (i >= 1 && i < 16 && j >= 1 && j < 16 && t == board[i][j] && t == board[i + 1][j + 1] &&
t == board[i + 2][j + 2] && t == board[i + 3][j + 3] && t == board[i + 4][j + 4])
return 1;
}
for (i = a - 4, j = b + 4; i <= a, j >= b; i++, j--)
{
if (i >= 1 && i < 16 && j >= 1 && j < 16 && t == board[i][j] && t == board[i + 1][j - 1] &&
t == board[i + 2][j - 2] && t == board[i + 3][j - 3] && t == board[i + 4][j - 4])
return 1;
}
return 0;
}
更多有關(guān)C語言和C++的知識和學(xué)習(xí)資料第股,歡迎關(guān)注微信公眾號:C語言學(xué)習(xí)基地!