easyx五子棋

#include<iostream>
#include<easyx.h>
using namespace std;
#define q 30      //像素间隔30
#define spx 490   //棋盘左上角点x坐标
#define spy 90    //左上角y坐标
#define W 15      //宽
#define L 15      //长
//map[i][j]表示坐标(i,j)的值 0表示空地 1表示黑子 2表示白子
//flash表示回合,初始为2,黑色先手

int map[W][L] = { {0},{0} };
int flash = 2;
struct point
{
    int x;
    int y;
    bool isture;
}p;
void background()//背景

    IMAGE bk;//背景
    loadimage(&bk, "tu/kunkun.jpg", 1000, 600);    //加载图片棋盘
    putimage(0, 0, &bk);

}
void draw()                     //绘制
{       
    
    IMAGE bk;                   //背景
    loadimage(&bk, "tu/kunkun.jpg", 1000, 600);   //获取棋盘背景
    putimage(0, 0, &bk);                          //加载棋盘背景
    //绘制棋盘
    outtextxy(665, 45, "坤坤五子棋");
    setlinecolor(BLACK);
    for (int k = 0; k < 15; k++)                      //棋盘线格
    {
        line(spx, spy + k * q, spx+q*14, spy + k * q);//横线
        line(spx + k * q, spy, spx + k * q, spy+14*q);//竖线
    }
    setfillcolor(BLACK);                              //黑点
    //棋盘标志点
    solidcircle(580, 180, 8);
    solidcircle(820, 180, 8);
    solidcircle(580, 420, 8);
    solidcircle(820, 420, 8);
    solidcircle(700, 300, 8);
    //绘制棋子,1表示绘制黑色棋子,2表示绘制白色棋子
    for (int i = 0; i < W; i++)
    {
        for (int j = 0; j < L; j++)
        {
            if (map[i][j] == 1)
            {
                setfillcolor(BLACK);
                solidcircle(spx + q * i, spy + q * j, 12);
            }
            else if (map[i][j] == 2)
            {
                setfillcolor(WHITE);
                solidcircle(spx + q * i, spy + q * j, 12);
            }
            
        }

    }
    //绘制虚拟棋子的位置
    if (p.y>=0&&p.x>=0&&p.y<=14&&p.x<=14)
    {
        circle(p.x*30+490, p.y*30+90, 12);
    }

}
   void mouseMove(ExMessage* msg)//鼠标移动操作,获取棋盘坐标
   {
       p.x =(msg->x-475)/30;
       p.y = (msg->y-75)/30;
       p.isture = 1;

    }
   void init()//鼠标左按下操作
   {
       if (map[p.x][p.y] != 1 && map[p.x][p.y] != 2)
       {
           if (p.y >= 0 && p.x >= 0 && p.y <= 14 && p.x <= 14)//保证鼠标下表在棋盘内给map[][]赋值
           {
               if (flash == 2)
               {
                   map[p.x][p.y] = 1;//黑色
                   flash = 1;       //下次棋子改为白色,表示黑子获胜
               }
               else
               {
                   map[p.x][p.y] = 2;//白色
                   flash = 2;//下次棋子改为黑色,表示白子获胜
               }
           }
       }

   }
    
        
int main()
{
    initgraph(1000, 600);  //创建窗口
    background();  //加载开始背景板
    while (true)
    {
        //处理消息
        ExMessage msg;
        if (peekmessage(&msg, WH_MOUSE))
        {
            switch (msg.message)//消息类型
            {
            case WM_MOUSEMOVE://鼠标移动消息
                mouseMove(&msg);
                break;
            case WM_LBUTTONDOWN://鼠标左按下消息
                //如果map[x][y]是空地则修改map[x][y]的值
                 init();
                 break;
            default:
                break;
             }
        }
        //解决闪频,使用双缓冲绘图
        BeginBatchDraw();
        draw();
        EndBatchDraw();
    }
    getchar();
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值