今天带来一个小游戏——五子棋,C语言搭建,里面涉及的知识点不多。数组循环图形库函数调用注意:不要忘记安装图形库。
更不用说,让我们来一场激动人心的五子棋游戏吧!有兴趣的同学可以加入C语言C++学习交流群496926338,群里有很多项目开发和新手教学视频!
/*-------------------------------------------- 图形库五个儿子
棋 - - - - - - - - - - - - - - - - - - - - - - - - - --------------
早上和晚上
---------------------------------------------- ------------------------------------------
------------------------------*/
#包括
#包括
/*
想法:
一、内部运作
构造数组赋值黑白棋
扫描数组判断
2.外部绘图接收用户输入
绘图输入
游戏过程
1.绘制棋盘
2.一次性获取用户
3.判断输赢
*/
结构国际象棋{
诠释 x;
诠释y;
}ch, *pch;
#define M 10 //五子棋的大小
void game();//游戏函数
国际象棋结构*游戏(int map[][M+2],国际象棋结构*pch);
int scan(int map[][M+2], int x, int y, int num);
主函数()
{
initgraph(640, 480);//界面大小
而 (1){
游戏();
if (MessageBox(0, L"Replay?", L"AGAIN", MB_OKCANCEL) == IDCANCEL)
休息;
}
关闭图();
返回 0;
}
无效游戏()
{
pch = &ch;
int map[M+2][M+2] = { 0 };//初始化地图数组
// 黑色为-1,白色为1
//绘图函数根据数组绘制棋盘
设置填充颜色(浅灰色);
//画棋盘
填充矩形(0、0、480、480);
对于 (int i = 40; ix;
j = pch->y;
fillcircle(40*i, 40*j, 15);
地图[i][j] = 1;
{
MessageBox(0, L"白方胜", L"胜", MB_OK);
休息;
}
设置填充颜色(黑色);
播放(地图,PCH);
i = pch->x;
j = pch->y;
fillcircle( 40 * i, 40 * j, 15);
地图[i][j] = -1;
扫描(地图,我,j,-1);
如果(扫描(地图黑白棋游戏素材,我,j,-1))
{
MessageBox(0, L"黑胜", L"胜", MB_OK);
休息;
}
}
// 扫描点
//int i, j;
//设置填充颜色(白色);
//for (i = 0; i < 10; i++)
//{
//for (j = 0; j < 10; j++)
//{
//如果(地图[i][j] == 1)
//{
//填充圆圈(40 + 40 * i, 40 + 40 * j, 15);
//}
//}
//}
//设置填充颜色(黑色);
//for (i = 0; i < 10; i++)
//{
//for (j = 0; j < 10; j++)
//{
//如果(地图[i][j] == -1)
//{
//填充圆圈(40 + 40 * i, 40 + 40 * j, 15);
//}
//}
//}
}
//获取用户点的信息
国际象棋结构*游戏(int map[][M+2],国际象棋结构*pch)
{
MOUSEMSG 消息;
而 (1)
{
msg = GetMouseMsg();
开关(msg.uMsg)
{
案例 WM_LBUTTONDOWN:
//适当的鼠标信息
//1。没有走法 2. 在棋盘上
如果 (msg.x = 20)
{
//在棋盘中,需要判断是否转换为对应的坐标
如果 (地图[(msg.x - 20) / 40+1][(msg.y - 20) / 40+1] == 0)
{
//返回对应xy的值
pch->x= (msg.x - 20) / 40+1;
pch->y = (msg.y - 20) / 40+1;
返回个人电脑;
}
}
休息;
}
}
}
//判断输赢 1为赢
//两种思路每次扫描一次或者直接扫描新点的部分
//这个地方有bug需要调试
int scan(int map[][M+2], int x, int y, int num)//scan函数直接扫描新点xy作为坐标
{
//只扫描上下左右四个方向,外圈为0
int i,win1=1,win2=1,win3=1,win4=1;
//水平判断
for (i = 1; map[x][y - i] == num; i++, win1++);
for (i = 1; map[x][y + i] == num; i++, win1++);
//垂直判断
for (i = 1; map[xi][y] == num; i++, win2++);
for (i = 1; map[x+i][y] == num; i++, win2++);
//左斜
for (i = 1; map[xi][y - i] == num; i++, win3++);
for (i = 1; map[x+i][y +i] == num; i++, win3++);
//右斜
for (i = 1; map[x+i][y - i] == num; i++, win4++);
for (i = 1; map[xi][y +i] == num; i++, win4++);
如果(win1 >= 5 || win2 >= 5 || win3 >= 5 || win4 >= 5)
{
//韩元
返回 1;
}
否则返回 0;
}
//int scanfun(int map[][M], int num)
//{
//int i, j;
////三个区域扫描
////左上
//for (i = 0; i < M - 5; i++)
//{
//for (j = 0; j < M - 5; j++)
//{
////
//}
//}
////左下方
//for (i = M-5; i < M; i++)
//{
//for (j = 0; j < M - 5; j++)
//{
//
//}
//}
////右上方
//for (i = 0; i < M - 5; i++)
//{
//for (j = M-5; j < M; j++)
//{
//
//}
//}
////右下不用勾选
//}
图片为网络图示例,以实际操作为准!
有兴趣的同学可以加入C语言C++学习交流群496926338游戏评测,群里有很多项目开发和新手教学视频!