五子棋c语言代码详解 源码分享C五子棋简易小游戏
编码过程
- 定义函数和变量
- 游戏初始化,绘制界面
- 游戏过程函数,绘制鼠标点击位置的棋子
- 判断鼠标点击位置是否超出边界
效果展示
03
代码分享
#include <graphics.h>
#include <stdio.h>
#include <math.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")
void initGame();//函数声明
void playChess();
int judge(int a, int b);
int flag = 0;//标记轮到谁下棋
int board[20][20] = { 0 };//0表示没有下棋的状态
int main()
{
initGame();//函数调用,不加返回值类型和参数类型
playChess();
closegraph();
return 0;
}
void initGame()
{
initgraph(600, 500);//绘图环境
loadimage(NULL, "背景.jpg"); //背景图片
mciSendString("open G弦之歌.mp3", 0, 0, 0);//打开音乐
mciSendString("play G弦之歌.mp3", 0, 0, 0);//播放音乐
//绘制棋盘
setlinecolor(BLACK);//设置线条颜色为黑色
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);//设置线条为实线,宽度为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;//定义鼠标消息
HWND 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)
{
a = i;
b = j;
x = i * 25;
y = j * 25;
}
}
}
if (m.uMsg == WM_LBUTTONDOWN)//判断当前鼠标消息是不是鼠标左键按下
{
if (board[a][b] != 0)
{
MessageBox(hwnd, "这里已经有棋子了,请重新选择.", "五子棋", 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胜利", "游戏结束", MB_OK);
return; //修复BUG
}
else
{
MessageBox(hwnd, "玩家2胜利", "游戏结束", MB_OK);
return; //修复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;
}
更多有关C语言和C 的知识和学习资料,欢迎关注C语言学习基地!
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com