五子棋小案例

这篇博客分享了作者使用ege图形库完成五子棋小案例的心得,学习到新知识的同时,也意识到没有添加开始游戏的动态gif和人机对战功能的不足,计划在未来学习人机算法后进行完善。感谢老师的题目设计,促使了作者主动学习。
摘要由CSDN通过智能技术生成
#include<graphics.h>
#include<windows.h>
#include<iostream>
#define MAX 20
using namespace std;
bool flag=true;
int temp=1;  // 为了实现黑白棋子的交替,使用全局变量
void qizi(int array2[][MAX],int array3[][MAX],int array1[][MAX]);
void huaqizi1(int array2[][MAX],int array3[][MAX],int array1[][MAX],mouse_msg msg);
void huaqizi2(int array2[][MAX],int array3[][MAX],int array1[][MAX],mouse_msg msg);
void huaqizi3(int array2[][MAX],int array3[][MAX],int array1[][MAX],mouse_msg msg);
void huaqizi4(int array2[][MAX],int array3[][MAX],int array1[][MAX],mouse_msg msg);


void PanDuanBaiZi1(int array2[][MAX],int a,int b);
void PanDuanBaiZi2(int array2[][MAX],int a,int b);
void PanDuanBaiZi3(int array2[][MAX],int a,int b);
void PanDuanBaiZi4(int array2[][MAX],int a,int b);

void PanDuanHeiZi1(int array3[][MAX],int a,int b);
void PanDuanHeiZi2(int array3[][MAX],int a,int b);
void PanDuanHeiZi3(int array3[][MAX],int a,int b);
void PanDuanHeiZi4(int array3[][MAX],int a,int b);
int main(void)
{
    //储存白子,只要交叉点的坐标下了白子,就将该坐标置为2
    int array2[MAX][MAX]={0};
    //储存黑子,只要交叉点的坐标下了黑子,就将该坐标置为3
    int array3[MAX][MAX]={0};
    //储存棋子,只要该坐标下了棋子,就置为1,则该点不能被重新下棋子
    int array1[MAX][MAX]={0};
    int k;
    //接下来的几个循环是将棋盘外面的区域置为1,表明不可被下棋子
    for(k=0;k<MAX;k++)
    {
        array1[0][k]=1;
    }
    int q;
    for(q=0;q<MAX;q++)
    {
        array1[q][0]=1;
    }
    int w;
    for(w=0;w<MAX;w++)
    {
        array1[15][w]=1;
    }
    int h,m;
    for(m=15;m<MAX;m++)
    {
        for(h=0;h<15;h++)
        {
            array1[h][m]=1;
        }
    }


    initgraph(800,600);
    setcolor(GREEN);
    //画棋盘,横有十四条线,纵有十四条线
    int i;
    for(i=40;i<=560;i=i+40)
    {
        line(i,40,i,560);
    }
    int j;
    for(j=40;j<=560;j=j+40)
    {
        line(40,j,560,j);
    }
    //接下来是对棋子的操作
    qizi(array2,array3,array1);
    getch();
    closegraph();
    return 0;
}


void qizi(int array2[][MAX],int array3[][MAX],int array1[][MAX])
{
    //鼠标函数实现
    mouse_msg msg={0};
    for(; is_run()&&temp==1; delay_fps(60))
    {
        while(mousemsg())
        {
            msg=getmouse();
        }
        //接下来四个区域,要实现当鼠标点击时,离该点最近的交叉点画圆,
        //确保每个棋子都落在交叉点上
        //以下四个函数是对该思路的算法实现
        if(msg.x%40<=18&&msg.y%40<=18)
        {
            huaqizi1(array2,array3,array1,msg);
        }
        else if(msg.x%40<18&&msg.y%40>18)
        {
            huaqizi2(array2,array3,array1,msg);
        }
        else if(msg.x%40>18&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值