简单的象棋开发

我们需要准备的知识是c语言基础和easyx图形:

easyx官网:

https://easyx.cn/

首先头文件少不了:

#include<stdio.h>(c语言的头文件)
#include<graphics.h>(easyx的)
#include<mmsystem.h>(音乐播放的)
#pragma comment(lib,"winmm.lib")(链接上音乐播放器的库)

 

然后老套路了:

int main(int argc,char *argv[])
{
​
}

创建图形窗口(这里不创建会听到熟悉的声音):

int main(int argc,char *argv[])
{
    initgraph(WIN_WIDTH, WIN_HEIGHT);// (第三个参数SHOWCONSOLE控制控制台窗口的显示与否)
​
}

 

还有个问题图形窗口会闪退:

  • 所以我们需要阻塞窗口

     
       
    while (1)
    {
        ;
    }
     
       
     
       

    或者:

    getchar();


象棋的属性和一些初始化:

 

#define INTERVAL 50 //前面的间隔
#define CHESS_GRID_SIZE 70//格子宽度
#define ROW 10
#define COL 9
#define WIN_WIDTH ((COL-1)*CHESS_GRID_SIZE+INTERVAL*2+250)
//窗口宽度计算得出
#define WIN_HEIGHT ((ROW-1)*CHESS_GRID_SIZE+INTERVAL*2)
//窗口高度计算得出
IMAGE img_chessBoard;(定义背景图)
void loadImg()(加载背景图)
{
    loadimage(&img_chessBoard, "./res/Chess.jpg", 650, 700);
}
​
enum Pieces //棋子
{
    SPACE = -1,
    車, 馬, 象, 士, 将, 砲, 卒,
    俥, 马, 相, 仕, 帥, 炮, 兵,
    BEGIN, END,
};
//给id赋值
int redChess[] = { 車, 馬, 象, 士, 将, 砲, 卒 };
int blackChess[] = { 俥, 马, 相, 仕, 帥, 炮, 兵 };
//绘制时转化成字符串
const char* ChessName[] = { "車","馬","象","士","将","砲","卒","俥", "马", "相", "仕", "帥", "炮", "兵" };
struct Chess
{
    int id;//棋子名称
    int type;//棋子类型,红棋,还是黑棋
    int x;//坐标
    int y;
    bool river;//是否过了河
}map[ROW][COL];

鼠标的点击初始化:

POINT begin = { -1, -1 }, end = { -1, -1 };//记录前后两次点击的下标
int state = BEGIN;
int whereMove = RED;

 

游戏开始初始化:

void GameInit()
{
    loadImg();
    //遍历二维数组
    for (int i = 0; i < ROW; i++)
    {
        int temp = 0, temp1 = 0, temp2 = 1;
        for (int k = 0; k < COL; k++)
        {
            int chessname = SPACE;
            int mcolor = BLACK;//black黑色
            //黑棋初始化
            if (i <= 4)
            {
                mcolor = BLACK;
                if (i == 0)//第1行
                {
                    if (temp <= 4)
                    {
                        temp++;
                    }
                    else
                    {
                        temp1 = 4 - temp2;
                        temp2++;
                    }
                    chessname = blackChess[temp1];
                    temp1++;
                }
                //设置炮
                if (i == 2 && (k == 1 || k == 7))
                {
                    chessname = blackChess[5];
                }
                //设置小兵
                if (i == 3 && k % 2 == 0)
                {
                    chessname = blackChess[6];
                }
​
            }
            else//红旗初始化
            {
                mcolor = RED;
                if (i == 9)//最后一行
                {
                    if (temp <= 4)
                    {
                        temp++;
                    }
                    else
                    {
                        temp1 = 4 - temp2;
                        temp2++
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值