function DrawBoard() for k = 1:2 for r = 1:nRowNum+1 x = [(k-1)*5 4+(k-1)*5]; y = [(r-1) (r-1)]; plot(x,y,'b-','LineWidth',2); end for c = 1:nColNum+1 x = [(c-1) (c-1)]; y = [0 nRowNum]; plot(x,y,'b-','LineWidth',2); end x = [0 2] + (k-1)*7; y = [3 5]; plot(x,y,'b-','LineWidth',2); x = [0 2] + (k-1)*7; y = [5 3]; plot(x,y,'b-','LineWidth',2); end end
时间: 2024-04-27 16:25:03 浏览: 47
这是一段 MATLAB 代码,用于绘制一个井字棋游戏的棋盘。具体来说,该函数名为 DrawBoard,其主要功能是绘制井字棋游戏的棋盘,其中包括横向和纵向的线条以及四个角上的斜线。该函数使用了两个嵌套的 for 循环来遍历棋盘上的所有行和列,对于每一行和每一列,使用 plot() 函数绘制一条蓝色的线条,线条的粗细为 2。最后,使用 plot() 函数绘制四条斜线,表示棋盘的四个角。
相关问题
你刚刚给出的代码出现报错,D:/桌面/Red Panda Dev C++/RedPanda-CPP/projects/五子棋/main.cpp 0 -1 In function 'void drawboard()': D:/桌面/Red Panda Dev C++/RedPanda-CPP/projects/五子棋/main.cpp 78 9 [错误] 'delimage' was not declared in this scope; did you mean 'getimage'? D:/桌面/Red Panda Dev C++/RedPanda-CPP/projects/五子棋/main.cpp 0 -1 In function 'void drawboard()': D:/桌面/Red Panda Dev C++/RedPanda-CPP/projects/五子棋/main.cpp 78 2 [错误] 'delimage' was not declared in this scope; did you mean 'getimage'?
很抱歉,我犯了一个错误,delimage函数应该改为DeleteObject函数,这是Windows API中释放图像资源的函数。请将代码中的delimage(&bgimg)改为DeleteObject(bgimg.getHBITMAP()),然后重新编译运行程序。
修改后的代码如下:
```
void drawboard() {
COLORREF bg = RGB(255 * .9, 255 * .8, 255 * .5);
IMAGE bgimg;
loadimage(&bgimg, _T("C:\\bg.jpg")); // 加载背景图片
setbkmode(TRANSPARENT);
setfillcolor(TRANSPARENT);
setlinecolor(bg);
fillrectangle(0, 0, 900, 800); // 绘制透明矩形
putimage(0, 0, &bgimg); // 绘制背景图片
setlinecolor(BLACK);
setlinestyle(PS_SOLID, 2);
rectangle(50 + 700, 50, 150 + 700, 100);
setbkmode(TRANSPARENT);
settextcolor(BLACK);
settextstyle(30, 0, _T("Consolas"));
outtextxy(765, 60, "reset");
rectangle(750, 150, 850, 200);
outtextxy(770, 160, "save");
rectangle(750, 250, 850, 300);
outtextxy(770, 260, "read");
for_(i, 0, 14) {
line(X0, Y0 + i * step, X0 + step * 14, Y0 + i * step);
line(X0 + i * step, Y0, X0 + i * step, Y0 + step * 14 );
}
DeleteObject(bgimg.getHBITMAP()); // 释放图片资源
}
```
int rank_t() { typedef struct node_t{ char ch_x[1024];//数据域 char ch_y[1024]; }Node_T; FILE *fp = fopen("node_htl.txt", "r"); if (fp == NULL) { printf("Failed to open the file.\n"); return -1; } // 处理每一行数据,将成绩记录到 buf_score 数组中 char buf[1024] = {0}; Node_T ch_buf[5]; int count = 0; // 提取姓名 int i, j; while (fgets(buf, sizeof(buf), fp)) { char buf2[4] = {0}; char buf3[7] = {0}; for(;buf[j] != ' ';j++) { buf2[j] = buf[j]; } while(buf[++j] == '\n') { if(buf[j] == ' ') { for(;buf[++j] == '\n';) { buf3[j-4] = buf[j]; } } } strcpy(ch_buf[count].ch_x, buf2); strcpy(ch_buf[count].ch_y, buf3); } for(i = 0; i<count-1;i++) { for(j=0;j<count-1-i; j++) { if(strcmp(ch_buf[j].ch_y,ch_buf[j+1].ch_y) < 0) { int ch_buf1[1024]; int ch_buf2[1024]; strcpy(ch_buf1, ch_buf[j].ch_x); strcpy(ch_buf2, ch_buf[j].ch_y); strcpy(ch_buf[j].ch_x, ch_buf[j+1].ch_x); strcpy(ch_buf[j].ch_y, ch_buf[j+1].ch_y); strcpy(ch_buf[j+1].ch_x, ch_buf1); strcpy(ch_buf[j+1].ch_y, ch_buf2); } } } int buf_y = 50; for(j=0;j<count;j++) { fprintf(buf, "%s %s", ch_buf[j].ch_x,ch_buf[j].ch_y); drawboard(buf,200,buf_y, 0x00ffffff); buf_y += 50; } fclose(fp); return 0; }为什么不行
这段代码中存在一些问题:
1. 在排序时,将 `ch_buf1` 和 `ch_buf2` 声明为了 `int` 类型数组,但实际上应该是字符数组,应该使用 `char` 类型数组来保存字符串。
2. 在排序时,将 `ch_buf1` 和 `ch_buf2` 中的字符串内容复制到了 `ch_buf[j].ch_x` 和 `ch_buf[j].ch_y` 中,而实际上应该是互换两个结构体中的 `ch_x` 和 `ch_y`。
3. 在输出排好序的字符串时,将输出结果写入了一个 `buf` 变量中,但是 `buf` 变量在前面已经被用来保存读取文件的每一行数据了,应该使用另外一个变量来保存输出结果。
修改后的代码如下:
```
int rank_t() {
typedef struct node_t {
char ch_x[1024];//数据域
char ch_y[1024];
} Node_T;
FILE *fp = fopen("node_htl.txt", "r");
if (fp == NULL) {
printf("Failed to open the file.\n");
return -1;
}
// 处理每一行数据,将成绩记录到 buf_score 数组中
char buf[1024] = {0};
Node_T ch_buf[5];
int count = 0;
// 提取姓名
int i, j;
while (fgets(buf, sizeof(buf), fp)) {
char buf2[1024] = {0};
char buf3[1024] = {0};
for (j = 0; buf[j] != ' '; j++) {
buf2[j] = buf[j];
}
while (buf[++j] == '\n') {
if (buf[j] == ' ') {
for (; buf[++j] == '\n';) {
buf3[j - 4] = buf[j];
}
}
}
strcpy(ch_buf[count].ch_x, buf2);
strcpy(ch_buf[count].ch_y, buf3);
count++;
}
for (i = 0; i < count - 1; i++) {
for (j = 0; j < count - 1 - i; j++) {
if (strcmp(ch_buf[j].ch_y, ch_buf[j + 1].ch_y) < 0) {
char ch_buf1[1024] = {0};
char ch_buf2[1024] = {0};
strcpy(ch_buf1, ch_buf[j].ch_x);
strcpy(ch_buf2, ch_buf[j].ch_y);
strcpy(ch_buf[j].ch_x, ch_buf[j + 1].ch_x);
strcpy(ch_buf[j].ch_y, ch_buf[j + 1].ch_y);
strcpy(ch_buf[j + 1].ch_x, ch_buf1);
strcpy(ch_buf[j + 1].ch_y, ch_buf2);
}
}
}
int buf_y = 50;
FILE *fp_out = fopen("out.txt", "w");
for (j = 0; j < count; j++) {
fprintf(fp_out, "%s %s\n", ch_buf[j].ch_x, ch_buf[j].ch_y);
drawboard(buf, 200, buf_y, 0x00ffffff);
buf_y += 50;
}
fclose(fp);
fclose(fp_out);
return 0;
}
```
注意,这里将输出结果保存到了 `out.txt` 文件中,如果需要在程序中进行显示,需要将 `drawboard` 函数的参数改为 `fp_out`。
阅读全文