鱼C论坛

 找回密码
 立即注册
查看: 534|回复: 1

为什么打印不出各个棋子

[复制链接]
发表于 2024-1-2 20:24:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdlib.h>
#include <Windows.h>
#include<easyx.h>
#include <graphics.h>
#include <conio.h>
#define ROW 10
#define COL 9

#define geziwidth 80//棋盘中一个格子的宽度
#define sxzywidth 80//棋盘上下左右距边界的距离


static int type = RED;//          设置先手后手
static int g = 1; //          记录判断先后手

struct chess
{
        int x;                 //位于窗口的x,y轴坐标
        int y;
        int id;               //棋子名称
        int type;             //所属类型
        int river = 0;        //是否过河
};
enum piece
{
        SPACE = -1,                     //表示无棋子
        車, 馬, 象, 士, 将, 砲, 卒,
        俥, 马, 相, 仕, 帥, 炮, 兵,
        BEGIN, END                     //起子还是落子

};
struct START     //鼠标点击坐标
{
        int x;
        int y;
};

//定义基本数据

struct chess map[ROW][COL];         //棋盘每一个点,每点都对应了一个棋子属性
struct START begin = { -1, -1 };    //起子坐标
struct START end = { -1, -1 };      //落子坐标
int start = BEGIN;                  //鼠标状态
enum piece blackpiece[] = { 車, 馬, 象, 士, 将, 砲, 卒 };     //黑棋
enum piece redpiece[] = { 俥, 马, 相, 仕, 帥, 炮, 兵 };       //红棋
const char* chessname[] = { "車", "馬", "象", "士", "将", "砲", "卒", "俥", "马", "相", "仕", "帥", "炮", "兵" };    //用于后面打印名称

void printfchess()       //打印棋子
{
        for (int i = 0; i < ROW; i++)
        {
                for (int j = 0; j < COL; j++)
                {
                        enum piece chessid = SPACE;
                        int chesstype;
                        if (i <= 4)//打印黑子,赋属性
                        {
                                chesstype = BLACK;
                                if (i == 0)//设置最下面一排
                                {
                                        if (j <= 4)
                                        {
                                                chessid = blackpiece[j];
                                        }
                                        else
                                        {
                                                chessid = blackpiece[8 - j];
                                        }
                                }

                                if (i == 2)//设置炮
                                {
                                        if (j == 1 || j == 7)
                                        {
                                                chessid = blackpiece[5];
                                        }
                                }
                                if (i == 3)//   设置兵
                                {
                                        if ((j + 1) % 2 == 1)
                                        {
                                                chessid = blackpiece[6];
                                        }
                                }
                        }
                        else
                        {
                                chesstype = RED;//打印红子,附属性
                                if (9 - i == 0)
                                {
                                        if (j <= 4)
                                        {
                                                chessid = redpiece[j];
                                        }
                                        else
                                        {
                                                chessid = redpiece[8 - j];
                                        }
                                }
                                if (9 - i == 2)
                                {
                                        if (j == 1 || j == 7)
                                        {
                                                chessid = redpiece[5];
                                        }
                                }
                                if (9 - i == 3)
                                {
                                        if ((j + 1) % 2 == 1)
                                        {
                                                chessid = redpiece[6];
                                        }
                                }
                        }
                        map[i][j].river = 0;//赋值各点位属性
                        map[i][j].id = chessid;
                        map[i][j].type = chesstype;
                        map[i][j].x = j *geziwidth + sxzywidth;
                        map[i][j].y = i * geziwidth  + sxzywidth;
                }
        }


}
void printfboard()
{
        initgraph(800, 880);
        setbkcolor(RGB(219, 121, 93));
        setlinecolor(BLACK);
        cleardevice();
        //rectangle(80, 80, 720, 800);//内正方形
        //rectangle(75, 35, 725, 765);//外正方形
        for (int i = 0; i <= 800; i += 80)//绘制横线
                line(80, i, 720, i);
        for (int i = 80; i <=720; i += 80)//绘制竖线
        {
                line(i, 80, i, 400);//黑方竖线
                line(i, 480, i, 800);//红方竖线
        }
        line(80, 400, 80, 480);
        line(720, 400, 720, 480);
        line(320, 80, 480, 240);//画四条线,即两个叉叉
        line(320, 240, 480, 80);
        line(320, 800, 480, 640);
        line(320, 640, 480, 800);

        settextcolor(BLACK);
        settextstyle(60, 0, _T("楷体"));
        outtextxy(180, 410, _T("楚"));
        outtextxy(260, 410, _T("河"));
        outtextxy(480, 410, _T("汉"));
        outtextxy(560, 410, _T("界"));

        ////下棋方显示
        //if (g % 2 == 1)
        //{
        //        settextcolor(RED);
        //        settextstyle(40, 0, "楷体");
        //        outtextxy(640, 600, "红方落子");
        //}
        //if (g % 2 == 0)
        //{
        //        settextcolor(BLACK);
        //        settextstyle(40, 0, "楷体");
        //        outtextxy(640, 110, "黑方落子");
        //}
        for (int i = 0; i < ROW; i++)
        {
                for (int j = 0; j < COL; j++)
                {
                        if (map[i][j].id != SPACE)
                        {
                                fillcircle(map[i][j].x, map[i][j].y, 50);
                                fillcircle(map[i][j].x, map[i][j].y, 35);
                                settextstyle(30, 10, "黑体");
                                setbkmode(TRANSPARENT);
                                settextcolor(map[i][j].type);
                                outtextxy(map[i][j].x , map[i][j].y , chessname[map[i][j].id]);
                        }
                }
        }
        printfchess();
        system("pause");
    closegraph();
}




int main()
{
        printfboard();
        printfchess();
       
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-2 20:24:19 | 显示全部楼层
你好,代码中有一些问题导致无法打印出棋子。首先,在定义chess结构体时,不能在结构体内部为变量赋初始值,需要在初始化时进行赋值。其次,在定义枚举类型时,不能直接使用中文字符作为枚举变量的值,建议使用英文字符或数字代替。

以下是修正后的代码:
#include <iostream>
#include <string>
using namespace std;

const int ROW = 10;
const int COL = 9;

struct Chess {
    int x;
    int y;
    string id;
    string type;
    bool river;
};

enum Piece {
    SPACE = -1,
    R, XIANG, SHI, JIANG, MA, PAO, ZU
};

Chess map[ROW][COL];

void printChess() {
    for (int i = 0; i < ROW; i++) {
        for (int j = 0; j < COL; j++) {
            if (map[i][j].id == "") {
                cout << "  ";
            } else {
                cout << map[i][j].id;
            }
            cout << " ";
        }
        cout << endl;
    }
}

int main() {
    // 初始化棋盘
    for (int i = 0; i < ROW; i++) {
        for (int j = 0; j < COL; j++) {
            map[i][j].x = i;
            map[i][j].y = j;
            map[i][j].id = "";
            map[i][j].type = "";
            map[i][j].river = false;
        }
    }

    // 初始化棋子
    map[0][0].id = "車";
    map[0][1].id = "馬";
    map[0][2].id = "相";
    map[0][3].id = "仕";
    map[0][4].id = "將";
    map[0][5].id = "仕";
    map[0][6].id = "相";
    map[0][7].id = "馬";
    map[0][8].id = "車";
    map[2][1].id = "炮";
    map[2][7].id = "炮";
    map[3][0].id = "兵";
    map[3][2].id = "兵";
    map[3][4].id = "兵";
    map[3][6].id = "兵";
    map[3][8].id = "兵";
    map[9][0].id = "車";
    map[9][1].id = "馬";
    map[9][2].id = "象";
    map[9][3].id = "士";
    map[9][4].id = "將";
    map[9][5].id = "士";
    map[9][6].id = "象";
    map[9][7].id = "馬";
    map[9][8].id = "車";
    map[7][1].id = "炮";
    map[7][7].id = "炮";
    map[6][0].id = "卒";
    map[6][2].id = "卒";
    map[6][4].id = "卒";
    map[6][6].id = "卒";
    map[6][8].id = "卒";

    printChess();

    return 0;
}

运行该代码即可打印出棋盘上的各个棋子。注意,我将棋子名称改为了中文,并使用了二维数组来表示棋盘。

希望能帮到你,如果还有其他问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 00:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表