五子棋游戏C++源代码
#include <graphics.h>
#include <mmsystem.h> //播放音乐头文件
#include <Windows.h>
#include <cmath>
#include <memory.h>
#pragma comment (lib,"winmm.lib")
int flag = 0; //表示下次次数
int board[20][20] = {0};
int judge(int a, int b);
//游戏首页
void gamefirst()
{
MOUSEMSG m;
int i=1;
initgraph(600, 500);
loadimage(NULL, L"3.jpg"); //贴图
mciSendString(TEXT("open 2.mp3 alias mysong"), NULL, 0, NULL);
mciSendString(TEXT("play MySong"), NULL, 0, NULL);
while (i)
{
m = GetMouseMsg();
if (m.uMsg == WM_LBUTTONDOWN)
{
i = 0;
}
}
}
void initgame()
{
memset(board, 0, 20 * 20 * sizeof(int));
//绘制棋盘20x20
initgraph(600, 500);
loadimage(NULL, L"1.jpg"); //贴图
mciSendString(TEXT("open 2.mp3 alias mysong"), NULL, 0, NULL);
mciSendString(TEXT("play MySong"), NULL, 0, NULL);
setlinecolor(BLACK);
for (int i = 25; i < 500; i = i + 25)
{
line(i, 0, i, 500);
line(0, i, 500, i);
}
line(500, 0, 500, 500);
outtextxy(510, 100, L"玩家1:黑棋");
outtextxy(510, 150, L"玩家2:白棋");
}
void playgame()
{
//鼠标消息
MOUSEMSG m;
int x=0, y=0;
int a=0, b=0;
HWND hwnd = GetHWnd();
while (1)
{
m = GetMouseMsg();
//让棋在线的交叉点上
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)
{
x = i * 25;
y = j * 25;
a = i;
b = j;
}
}
}
if (m.uMsg == WM_LBUTTONDOWN)
{
//解决冲突
if (board[a][b] != 0)
{
MessageBox(NULL,L"这里已经有棋子了请重新选择",L"提示", MB_OK);
continue; //退出循环
}
//黑白交替进行
if (flag % 2 == 0)
{
outtextxy(510, 250, L"请白棋落子");
setfillcolor(BLACK);
solidcircle(x, y, 10);
board[a][b] = 1;
}
else
{
outtextxy(510, 250, L"请黑棋落子");
setfillcolor(WHITE);
solidcircle(x, y, 10);
board[a][b] = 2;
}
flag++;
}
if (judge(a, b)==1)
{
if (flag % 2 == 0)
{
MessageBox(hwnd, L"白棋获胜", L"游戏结束", MB_OK);
break;
}
else
{
MessageBox(hwnd, L"黑棋获胜", L"游戏结束", MB_OK);
break;
}
}
}
}
//判断输赢
int judge(int a, int b)
{
int i = 0, j=0;
int t = 2 - flag % 2;
for (i = a - 4, j = b; i <= a; i++)
{
if (i >= 0 && 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 >= 0 && 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 >= 0 && i < 16 &&j >= 0 && 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 >= 1; i++, j--)
{
if (i >= 0 && i < 16 && j >= 0 && 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;
}
int main()
{
int i = 1;
while (i)
{
gamefirst();
initgame();
playgame();
int ret = MessageBox(NULL, L"是否重新开始游戏", L"游戏结束", MB_YESNO);
if (ret == IDNO)i = 0;
}
return 0;
}
这个代码还需要两张照片和一个音乐作为外部资源才会有效果
需要的可以给我留言。谢谢大家的支持!