目录
一、写代码的过程
-
编辑器:程序员写代码的过程(记事本、vc6.0、vim)(让程序员看懂)
-
编译器:查看代码的语法错误,生成汇编语言。
-
汇编器:将生成好汇编语言 生成 二进制语言(目标文件)
-
连接器:将生成好 二进制语言+用到的库+启动代码 ==>可执行文件
二、完整的c代码分析
-
主函数参数记得写---int main(int argc,char *argv[])
-
再输入输出前需要有适当的描述语句,方便客户理解输入的是什么,输出的是什么
-
浮点型变量初始化赋值(0.0f)
-
编写程序时要按段落来写,适当的隔开不同功能的函数语句
#include<stdio.h>
// 定义一个宏 建议大写 和普通变量区分开
#define PI 3.14
int main(int argc,char *argv[])
{
float r=0.0f; // 定义一个r变量 系统给r开辟4字节空间
float area = 0.0f; // 定义一个面积变量
// 获得半径 从键盘获得scanf
printf("请输入圆的半径r:");
scanf("%f", &r); // 带阻塞
// 算法:计算面积area = 3.14 * r * r
area = PI*r*r;
// 将面积输出%.2f中的.2表示小数部分保留两位
printf("area = %.2f\n",area);
return 0;
}
三、图像库
(一)图形库基本概念
1、颜色
-
预定义颜色常量
-
16进制颜色表示
-
RGB宏合成颜色
-
色彩模型转换的RGB颜色
2、坐标
-
物理坐标:X轴向右为正,Y轴向下为正,单位是像素
-
逻辑坐标:方向同物理坐标,单位是点,逻辑点=像素点
3、设备
-
默认的图形绘画窗口
-
IMAGE对象
-
函数功能参考EasyX_Hel软件
#define _CRT_SECURE_NO_WARNINGS // 关闭安全检查
#include<stdio.h> // 输入输出头文件
#include<stdlib.h> // system("pause")头文件
#include"graphics.h" // 图形库头文件
int main()
{
initgraph(666, 666); // 打开一个画图窗口,长宽
// initgraph(666, 666, SHOWCONSOLE);画图的时候一般不用SHOWCONSOLE保留原控制台窗口,界面有两个窗口
// 划直线 画直线前要设置图像颜色、线形
setlinecolor(GREEN); // 设置划线颜色
setlinestyle(0, 5); // 设置划线样式为实线,划线宽度为5像素
// 0是实线 1是虚线,具体线形看图形库
line(100, 100, 300, 300); // 两个端点坐标
画填充矩形
setlinecolor(GREEN); // 设置划线颜色
setlinestyle(0, 3); // 设置划线样式为实线,划线宽度为3像素
setfillcolor(BLUE); // 设置填充颜色
setfillstyle(2, 1); // 设置填充图案
fillrectangle(400, 400, 600, 600); // 画填充矩形,左上角、右下角端点坐标
fillcircle(400, 100, 50); // 画填充圆,圆心坐标与半径
system("pause");
closegraph(); // 关闭画图窗口
return 0;
}
(二)批量贴图
-
图片存放在.c文件的文档里
-
图片文件名报错,项目-属性-配置属性-常规-字符集-使用多字节字符集
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include"graphics.h" // 图形库头文件
int main()
{
initgraph(666, 666); // 打开一个画图窗口,长宽666X666
// 贴图
IMAGE img; // 图片对象img:用于保存图片
loadimage(&img, "1.jpg", 200, 300); // 加载图片:给定图片对象、图片路径和图片大小
putimage(50, 50, &img); // 在给定位置绘制图片
// 输出文本
settextcolor(RED); // 设置字体颜色
settextstyle(16, 0, ("宋体")); // 设置当前字体为高16像素的“宋体”,宽度为 0,则比例自适应
outtextxy(500, 300, "宝宝"); // 头字母坐标值500,300
system("pause");
closegraph(); // 关闭画图窗口
return 0;
}
(三)鼠标消息
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include"graphics.h" // 图形库头文件
int main()
{
initgraph(666, 666); // 打开画图窗口
IMAGE img; // 定义图片对象
loadimage(&img, "1.jpg", 200, 300); // 加载图片
// 鼠标消息
MOUSEMSG msg; // 定义鼠标消息变量
while (1) // 用while语句重复获取鼠标消息,重复贴图
{
msg = GetMouseMsg(); // 使用鼠标消息变量获取鼠标消息
if (msg.uMsg == WM_LBUTTONUP) // 鼠标左键弹起就贴图
{
cleardevice(); // 用当前背景颜色清空绘图窗口
putimage(msg.x, msg.y, &img); // 根据鼠标坐标绘制图片
}
}
system("pause");
closegraph(); // 关闭画图窗口
return 0;
}
-
当前鼠标消息:鼠标消息变量名.uMsg;
-
当前鼠标消息可以用于条件判断
鼠标消息变量名.uMsg==WM_LBUTTONDOWN // 如果鼠标左键按下
鼠标消息变量名.uMsg==WM_RBUTTONDOWN // 如果鼠标右键按下
(四)小游戏—五子棋
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include "graphics.h"
void game() // 五子棋
{
initgraph(600, 600); // 打开图形库窗口
// 画棋盘
fillrectangle(20, 20, 580, 580); // 画填充矩形
setlinecolor(BLACK); // 设置画线样式为黑色
setlinestyle(0, 2); // 设置画线宽度为2像素,画线样式为实线
for (int i = 50; i <= 550; i += 50) // 画棋盘的线
{
line(50, i, 550, i); // 画横线
line(i, 50, i, 550); // 画竖线
}
// 鼠标消息
MOUSEMSG msg; // 定义鼠标消息变量
int i = 0;
while (1) // 使用while循环重复获取鼠标消息,重复贴图
{
// 实现黑白棋子
if (i % 2 == 0)
{
setfillcolor(BLACK); // 设置填充颜色为黑色
}
else
{
setfillcolor(WHITE); // 设置填充颜色为白色
}
// 放置棋子
msg = GetMouseMsg(); // 使用鼠标消息变量获取鼠标消息
if (msg.uMsg == WM_LBUTTONUP) // 如果鼠标左键弹起就贴图
{
// 四舍五入加强版:49舍50进
int x = (msg.x + 25) / 50 * 50; // 整50的个数
int y = (msg.y + 25) / 50 * 50;
fillcircle(x, y, 25); // 画圆
i++; // 黑白棋子交替
}
}
system("pause");
closegraph(); // 关闭图形库窗口
}
// 主函数
int main()
{
game();
system("pause");
return 0;
}