1、创作想法:
根据线下课程,巩固所学知识,以及想着自己试着自己独立编写一个C语言程序。
(编译软件:VS_studio2022,编译语言:C语言)
2、学习框架:
1)绘制界面:棋盘绘制、棋子绘制(这里要使用graphics.h库,要下载easyx:https://easyx.cn/ 安装教程自行在CSDN中查找)
2)功能实现:鼠标消息的获取、根据鼠标消息,计算棋子下落的格子、
3)判断胜负
4)插入文字
-
绘制界面:
注意,坐标绘制,从左上角开始是坐标原点,沿着竖直方向向下,越往下,y的坐标越大。
背景绘制 :
贴图三部曲:
1、定义一个IMAGE类型的变量,作为贴图的载体;
2、使用loadimage加载图片到变量;
//1、初始化一个500*500的图形窗口
initgraph(500, 500);
//2、定义并加载图片"bk.jpg"
IMAGE img;
// 直接调用loadimage
loadimage(&img, "bk.jpg");
3、使用putimage显示输出图片;
//3、贴图,x,y就是图片显示的位置,显示的是图片的变量
putimage(0, 0, &img);
注意,这里在使用putimage,应该考虑背景图是否加载成功:
// 多重检查确保安全
if (img.getwidth() == 0 || img.getheight() == 0) {
printf("图片加载失败或尺寸异常!\n");
// 尝试获取错误码(如果函数存在)
#ifdef geterror
printf("错误码:%d\n", geterror());
#endif
closegraph();
return -1;
}
背景图完整代码:
//1、初始化一个500*500的图形窗口
initgraph(500, 500);
//2、定义并加载图片"bk.jpg"
IMAGE img;
// 直接调用loadimage
loadimage(&img, "bk.jpg");
// 多重检查确保安全
if (img.getwidth() == 0 || img.getheight() == 0) {
printf("图片加载失败或尺寸异常!\n");
// 尝试获取错误码(如果函数存在)
#ifdef geterror
printf("错误码:%d\n", geterror());
#endif
closegraph();
return -1;
}
//3、贴图,x,y就是图片显示的位置,显示的是图片的变量
putimage(0, 0, &img);
内容绘制:
思路:我们插入好贴图,就要开始进行具体内容的绘制,将棋盘的格子绘制,也就是横线竖线,
1、设置线条的颜色:
//1、设置线条颜色
setlinecolor(BLACK);
2、设置线条之间的间隔:
这里要使用line函数来进行设置,具体参数请使用大语言模型或者CSDN及其他地方查找学习,这里就不进行过多赘述了。
使用for循环设置它的行数和它的列数
//使用line函数划线:x1,y1点1,x2,y2点2
//这里是500/25=20列,这里的间隔设置的是25,所以棋盘格数就是20
for(int i = 0 ;i < 20; i++)
line(i * 25, 0, i * 25, 500);//x坐标从0到n-1,y的长度为500,数目为n-1
for (int i = 0; i < 20; i++)//这里的行是20行
line(0,i*25,500,i*25);//x的长度为500,数目为25
呈现结果如下:
3、增加一些文字提示在空白处:
1) 在使用设置文字的函数之前,应该将贴图的背景改为透明,防止文字不显示:
//设置背景的颜色深度为:透明
setbkmode(0);
2) 设置文字的颜色:
//设置文字
settextcolor(BLACK); // 设置文字颜色为黑色
3) 设置文字的插入位置
利用outtextxy库函数,设置插入文字的位置和文字内容:
//根据坐标插入文字 x,y就是文字显示的坐标
outtextxy(515, 60, "玩家1:黑棋");
outtextxy(515, 100, "玩家2:白棋");
总代码:
#include <graphics.h>
//注意,这里使用graphics.h文件需要.cpp后缀名
#include <stdio.h>
#include <conio.h>
void initGame() {
/*
贴图三部曲:
1、定义一个IMAGE类型的变量,作为贴图的载体;
2、使用loadimage加载图片到变量;
3、使用putimage显示输出图片;
*/
//1、初始化一个500*500的图形窗口
initgraph(600, 500, SHOWCONSOLE);
//2、定义并加载图片"bk.jpg"
IMAGE img;
// 直接调用loadimage
loadimage(&img, "bk.jpg");
// 多重检查确保安全
if (img.getwidth() == 0 || img.getheight() == 0) {
printf("图片加载失败或尺寸异常!\n");
// 尝试获取错误码(如果函数存在)
#ifdef geterror
printf("错误码:%d\n", geterror());
#endif
closegraph();
return;
}
//3、贴图,x,y就是图片显示的位置,显示的是图片的变量
putimage(0, 0, &img);
//设置线条颜色
setlinecolor(BLACK);
//使用line函数划线:x1,y1点1,x2,y2点2
for (int i = 0; i <= 20; i++)
{//这里的第列要保证密封,所以i<=20;
line(i * 25, 0, i * 25, 500);//x坐标从0——n-1,y的长度为500,数目为20列
line(0, i * 25, 500, i * 25);//x的长度为500,数目为25
}
setlinestyle(PS_SOLID, 2); // 设置线条样式为实线
//插入文字
//1、设置背景的颜色深度为:透明
setbkmode(0);
//2、设置文字颜色为黑色
settextcolor(BLACK);
//根据坐标插入文字 x,y就是文字显示的坐标
outtextxy(515, 20, "玩家1:黑棋");
outtextxy(515, 50, "玩家2:白棋");
}
int main() {
initGame();
// 使用getch()阻塞窗口关闭,不使用getchar(),是因为getch()不需要回车键
_getch();
closegraph(); // 关闭图形窗口,释放资源
return 0;
}
在绘制界面的过程中会调用一些在平时学习中不怎么使用的库函数,这些函数的基本用法通过查找CSDN以及一些大数据模型,了解这些函数的基本用法,根据自己的思路,将代码顺序梳理整齐。