C语言-00如何学习C语言与图形库的使用

目录

一、写代码的过程

二、完整的c代码分析

三、图像库

(一)图形库基本概念

1、颜色

2、坐标

3、设备

(二)批量贴图

(三)鼠标消息

(四)小游戏—五子棋


一、写代码的过程

  • 编辑器:程序员写代码的过程(记事本、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;
 }

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盾山狂热粉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值