樱花树盛开的季节,我用简单的C代码绘制了一棵樱花树向她表白~『C/C++图形库EasyX』

news2024/11/27 5:37:31

文章目录

  • 💐专栏导读
  • 💐文章导读
  • 绘制一根线条
  • 绘制一个简易的树干
  • 优化树干,使其更加细致
  • 绘制樱花树
  • 增加随机树形与渐变色效果
    • 如何设置随机数
  • 进阶——通过鼠标点击来控制生成樱花树
  • 进阶——生成樱花树并展示生长过程

💐专栏导读

🌸作者简介:花想云,在读本科生一枚,致力于 C/C++、Linux 学习。

🌸本文收录于 初学C语言必会的20个小游戏专栏,本专栏主要内容为利用C/C++与图形库EasyX实现各种有趣的小游戏。

🌸相关专栏推荐:C语言初阶系列C语言进阶系列数据结构与算法

💐文章导读

本文主要内容为,利用图形库与简单的C语言知识实现樱花树。文章涉及的C语言语法并不多,但要求了解简单的递归运用。每一小节都会附有完整代码与实现效果图,有需求的小伙伴也可以直接去复制使用~

特别声明——本文内容与代码全部参考书籍《C和C++趣味游戏编程》,当然我也非常推荐这本书。

在这里插入图片描述

绘制一根线条

  1. 初始化画板窗口;
  2. 设置画板背景颜色(白色);
  3. 绘制一个线条;
  4. 设置线条颜色(黑色);

2-1

#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include<math.h>

#define WIDTH 800 // 画面宽度
#define HEIGHT 600 // 画面高度

int main()
{
	initgraph(WIDTH, HEIGHT); // 初始化窗口
	setbkcolor(RGB(225, 225, 225)); //白色背景

	setlinecolor(RGB(0, 0, 0)); // 设定线条颜色为黑色
	setlinestyle(PS_SOLID, 3);  // 设定线宽

	cleardevice(); // 清屏

	BeginBatchDraw(); // 开始批量绘制

	line(WIDTH / 2, HEIGHT, WIDTH / 2,  150); //绘制线条
	
	FlushBatchDraw(); // 刷新画板
	_getch(); // 等待输入
	closegraph(); // 关闭画板
	return 0;
}

效果图
在这里插入图片描述

绘制一个简易的树干

  1. 使用函数递归来完成树干的绘制;
  2. 利用三角函数来改变每根线条的倾斜度;

2-2

#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include<math.h>

#define PI 3.1415926 // 圆周率
#define WIDTH 800 // 画面宽度
#define HEIGHT 600 // 画面高度

// 绘制树干的函数
void branch(float x_start, float y_start, float angle, int generation)
{
	// 利用三角函数求出当前树枝的终点坐标
	float x_end, y_end;
	x_end = x_start + 150 * cos(angle);
	y_end = y_start + 150 * sin(angle);

	line(x_start, y_start, x_end, y_end); // 画出当前枝干

	// 求出子枝干的代数
	int childGeneration = generation + 1;
	
	// 当子枝干的代数<=4,画出当前枝干,并递归调用产生子枝干
	if (childGeneration <= 4)
	{
		// 产生左右的子枝干
		branch(x_end, y_end,angle+PI/6,childGeneration);
		branch(x_end, y_end, angle - PI / 6, childGeneration);

	}
}

int main()
{
	initgraph(WIDTH, HEIGHT); // 初始化窗口
	setbkcolor(RGB(225, 225, 225)); // 白色背景

	setlinecolor(RGB(0, 0, 0)); // 设定线条颜色为黑色
	setlinestyle(PS_SOLID, 3);  // 设定线宽

	cleardevice(); // 清屏

	BeginBatchDraw(); // 开始批量绘制

	branch(WIDTH/2,HEIGHT,-PI/2,1); // 递归绘图

	FlushBatchDraw();
	_getch();
	closegraph();
	return 0;
}

效果图
在这里插入图片描述

优化树干,使其更加细致

  1. 使用比例来控制父枝干与子枝干的长度;
  2. 控制父枝干与子枝干的夹角变化;

2-3

#define PI 3.1415926 // 圆周率
#define WIDTH 800 // 画面宽度
#define HEIGHT 600 // 画面高度
float offsetAngle = PI / 6; // 左右枝干与父枝干偏离的角度
float shortenRate = 0.65; // 左右枝干长度与父枝干长度的比例


void branch(float x_start, float y_start, float length,float angle,float thickness, int generation)
{
	// 利用三角函数求出当前树枝的终点坐标
	float x_end, y_end;
	x_end = x_start + length * cos(angle);
	y_end = y_start + length * sin(angle);

	setlinestyle(PS_SOLID, thickness); //设置当前枝干的宽

	setlinecolor(RGB(0, 0, 0)); // 设置当前枝干的颜色

	line(x_start, y_start, x_end, y_end); // 画出当前枝干

	// 求出子枝干的代数
	int childGeneration = generation + 1;
	
	float childLength = shortenRate * length; // 生成的枝干的长度逐渐变短


	// 当子枝干的长度>=2,且当子枝干的代数<10,画出当前枝干,并递归调用产生子枝干
	if (childLength >= 2 && childGeneration <10)
	{
		// 生成子枝干的宽度逐渐变细
		float childThickness = thickness * 0.8;

		if (childThickness < 2)
		{
			childThickness = 2;
		}
		// 产生左右的子枝干
		branch(x_end, y_end, childLength, angle + offsetAngle, childThickness, childGeneration);
		branch(x_end, y_end, childLength, angle - offsetAngle, childThickness, childGeneration);
	}
}

int main()
{
	initgraph(WIDTH, HEIGHT); // 初始化窗口
	setbkcolor(RGB(225, 225, 225)); //白色背景

	setlinecolor(RGB(0, 0, 0)); //设定线条颜色为黑色
	setlinestyle(PS_SOLID, 3);  //设定线宽

	cleardevice(); // 清屏

	BeginBatchDraw(); // 开始批量绘制

	branch(WIDTH/2,HEIGHT,0.45*HEIGHT*shortenRate,-PI/2, 15 * shortenRate, 1); // 递归绘图

	FlushBatchDraw();
	_getch();
	closegraph();
	return 0;
}

在这里插入图片描述

绘制樱花树

  1. 修改树干颜色为褐色;
  2. 为末端的树干添上樱花(实际为粉色的小圆);

2-4

#define PI 3.1415926 // 圆周率
#define WIDTH 800 // 画面宽度
#define HEIGHT 600 // 画面高度
float offsetAngle = PI / 6; // 左右枝干与父枝干偏离的角度
float shortenRate = 0.65; // 左右枝干长度与父枝干长度的比例


// 枝干生成和绘制递归函数
// 输入参数:枝干起始x y坐标,枝干长度,枝干角度,枝干绘图线条宽度,第几代
void branch(float x_start, float y_start, float length, float angle, float thickness, int generation)
{
	// 利用三角函数求出当前枝干的终点x,y坐标
	float x_end, y_end;
	x_end = x_start + length * cos(angle);
	y_end = y_start + length * sin(angle);
	setlinestyle(PS_SOLID, thickness); // 设定当前枝干线宽
	setlinecolor(HSVtoRGB(15, 0.75, 0.5)); // 设定当前枝干颜色为褐色
	line(x_start, y_start, x_end, y_end); // 画出当前枝干

	// 求出子枝干的代数
	int childGeneration = generation + 1;
	// 生成子枝干的长度,逐渐变短
	float childLength = shortenRate * length;

	// 当子枝干长度大于等于2,并且代数小于等于10,递归调用产生子枝干
	if (childLength >= 2 && childGeneration <= 9)
	{
		// 生成子枝干的粗细,逐渐变细
		float childThickness = thickness * 0.8;
		if (childThickness < 2) // 枝干绘图最细的线宽为2
			childThickness = 2;

		// 产生左右的子枝干
		branch(x_end, y_end, childLength, angle + offsetAngle, childThickness, childGeneration);
		branch(x_end, y_end, childLength, angle - offsetAngle, childThickness, childGeneration);
		// 产生中间的子枝干
		branch(x_end, y_end, childLength, angle, childThickness, childGeneration);
	}
	else  // 画出最末端的樱花
	{
		setlinestyle(PS_SOLID, 1); // 线宽
		setlinecolor(HSVtoRGB(325, 0.3, 1)); // 设定线条颜色 粉色
		setfillcolor(HSVtoRGB(325, 0.3, 1)); // 设定填充颜色 粉色
		if (childLength <= 4) // 如果子枝干长度小于等于4
			fillcircle(x_end, y_end, 2); // 圆的半径为2(再小就看不清了)
		else
			fillcircle(x_end, y_end, childLength / 2); // 画一个圆,半径为子枝干长度的一半
	}
}

int main()
{
	initgraph(WIDTH, HEIGHT); // 初始化窗口
	setbkcolor(RGB(225, 225, 225)); //白色背景

	setlinecolor(RGB(0, 0, 0)); // 设定线条颜色为黑色
	setlinestyle(PS_SOLID, 3);  // 设定线宽

	cleardevice(); // 清屏
	BeginBatchDraw(); // 开始批量绘制

	branch(WIDTH/2,HEIGHT,0.45*HEIGHT*shortenRate,-PI/2, 15 * shortenRate, 1); // 递归绘图

	FlushBatchDraw();
	_getch();
	closegraph();
	return 0;
}

效果图
在这里插入图片描述

增加随机树形与渐变色效果

将樱花树的各个参数修改为随机数,生成各种形态不同的樱花树;

  1. 控制树干的颜色渐变(越往上枝干越亮);
  2. 设置花瓣的随机颜色;
  3. 控制树干的长度与比例具有随机性;

如何设置随机数

  • 使用rand函数来生成随机数;
  • 定义mapvalue函数来将生成的随机数映射到某一区间;
float mapValue(float input, float inputMin, float inputMax, float outputMin, float outputMax)
{
	float output;
	if (abs((float)(input - inputMin) < 0.000001)) // 防止除以零的bug
		output = outputMin;
	else
		output = (input - inputMin) * (outputMax - outputMin) / (inputMax - inputMin) + outputMin;
	return output;
}

// 生成[min,max]之间的随机小数
float randBetween(float min, float max)
{
	float t = rand() / double(RAND_MAX); // 生成[0,1]的随机小数
	// 调用mapValue函数,把值范围从[0,1]映射到[min,max]
	float r = mapValue(t, 0, 1, min, max);
	return r;
}

2-5

#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include<math.h>
#include <time.h>

#define  PI 3.1415926
#define  WIDTH 800   // 画面宽度
#define  HEIGHT 600  // 画面高度度

float offsetAngle = PI / 6; // 左右枝干和父枝干偏离的角度
float shortenRate = 0.65;  // 子枝干比父枝干变短的倍数

// 把[inputMin,inputMax]范围的input变量,映射为[outputMin,outputMax]范围的output变量
float mapValue(float input, float inputMin, float inputMax, float outputMin, float outputMax)
{
	float output;
	if (abs((float)(input - inputMin) < 0.000001)) // 防止除以零的bug
		output = outputMin;
	else
		output = (input - inputMin) * (outputMax - outputMin) / (inputMax - inputMin) + outputMin;
	return output;
}

// 生成[min,max]之间的随机小数
float randBetween(float min, float max)
{
	float t = rand() / double(RAND_MAX); // 生成[0,1]的随机小数
	// 调用mapValue函数,把值范围从[0,1]映射到[min,max]
	float r = mapValue(t, 0, 1, min, max);
	return r;
}

// 枝干生成和绘制递归函数
// 输入参数:枝干起始x y坐标,枝干长度,枝干角度,枝干绘图线条宽度,第几代
void branch(float x_start, float y_start, float length, float angle, float thickness, int generation)
{
	// 利用三角函数求出当前枝干的终点x,y坐标
	float x_end, y_end;
	x_end = x_start + length * cos(angle);
	y_end = y_start + length * sin(angle);

	// 画线条枝干
	setlinestyle(PS_SOLID, thickness); // 设定当前枝干线宽
	// 设置枝干为灰褐色,主树干最黑,子枝干逐渐变亮
	COLORREF  color = HSVtoRGB(15, 0.75, 0.4 + generation * 0.05);
	setlinecolor(color); // 设定当前枝干颜色

	line(x_start, y_start, x_end, y_end); // 画出当前枝干(画线)

	// 求出子枝干的代数
	int childGeneration = generation + 1;
	// 生成左、右、中间三个子枝干的长度,逐渐变短,并有一定随机性
	float childLength = shortenRate * length;
	float leftChildLength = childLength * randBetween(0.9, 1.1);
	float rightChildLength = childLength * randBetween(0.9, 1.1);
	float centerChildLength = childLength * randBetween(0.8, 1.1);

	// 当子枝干长度大于2,并且代数小于等于10,递归调用产生子枝干
	if (childLength >= 2 && childGeneration <= 9)
	{
		// 生成子枝干的粗细,逐渐变细
		float childThickness = thickness * 0.8;
		if (childThickness < 2) // 枝干绘图最细的线宽为2
			childThickness = 2;

		// 一定概率产生左、右、中子枝干
		if (randBetween(0, 1) < 0.95)
			branch(x_end, y_end, leftChildLength, angle + offsetAngle * randBetween(0.5, 1), childThickness, childGeneration);
		if (randBetween(0, 1) < 0.95)
			branch(x_end, y_end, rightChildLength, angle - offsetAngle * randBetween(0.5, 1), childThickness, childGeneration);
		if (randBetween(0, 1) < 0.85)
			branch(x_end, y_end, centerChildLength, angle + offsetAngle / 5 * randBetween(-1, 1), childThickness, childGeneration);
	}
	else // 最末端绘制樱花,画一个粉色填充圆
	{
		setlinestyle(PS_SOLID, 1); // 线宽
		// 樱花粉色HSVtoRGB(325,0.3,1),有一定随机性
		COLORREF  color = HSVtoRGB(randBetween(300, 350), randBetween(0.2, 0.3), 1);
		setlinecolor(color); // 设定线条颜色
		setfillcolor(color); // 设定填充颜色
		if (childLength <= 4) // 如果子枝干长度小于等于4
			fillcircle(x_end, y_end, 2); // 圆的半径为2(再小就看不清了)
		else
			fillcircle(x_end, y_end, childLength / 2); // 画一个圆,半径为子枝干长度的一半
	}
}

void startup()  // 初始化
{
	srand(time(0)); // 随机初始化
	initgraph(WIDTH, HEIGHT); // 新开一个画面
	setbkcolor(RGB(255, 255, 255)); // 白色背景
	cleardevice(); // 清屏
	BeginBatchDraw(); // 开始批量绘制
	brunch(WIDTH / 2, HEIGHT, 0.45 * HEIGHT * shortenRate, -PI / 2, 15 * shortenRate, 1); // 递归函数调用
	FlushBatchDraw(); // 批量绘制
}

void update()  // 每帧更新
{
	offsetAngle = randBetween(PI/10,PI/6);
	shortenRate = randBetween(0.7, 0.3);

	cleardevice(); // 清屏
	branch(WIDTH / 2, HEIGHT, 0.45 * HEIGHT * shortenRate, -PI / 2, 15 * shortenRate, 1); // 递归调用
}

int main() // 主函数
{
	startup();  // 初始化 	
	while (1)  // 重复循环
		update();  // 每帧更新
	return 0;
}

效果图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

进阶——通过鼠标点击来控制生成樱花树

2-5版本缺点在于每次运行程序只能生成一棵樱花树。我们还可以引进鼠标点击的功能来实现每次鼠标点击生成不同的樱花树。

  • 检测鼠标是否发生移动,从而更新递归函数的参数;

2-6

if (m.uMsg == WM_MOUSEMOVE) // 当鼠标移动时,设定递归函数的参数
		{
			// 鼠标从左到右,左右子枝干偏离父枝干的角度逐渐变大
			offsetAngle = mapValue(m.x, 0, WIDTH, PI / 10, PI / 4);
			// 鼠标从上到下,子枝干比父枝干的长度缩短的更快
			shortenRate = mapValue(m.y, 0, HEIGHT, 0.7, 0.3);
		}
  • 检测鼠标是否发生点击动作,若点击则开始绘制;
f (m.uMsg == WM_LBUTTONDOWN) // 当鼠标左键点击时,以当前参数开始绘制一棵新数
		{
			cleardevice(); // 清屏
			branch(WIDTH / 2, HEIGHT, 0.45 * HEIGHT * shortenRate, -PI / 2, 15 * shortenRate, 1); // 递归调用
			FlushBatchDraw(); // 批量绘制
		}

效果图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

进阶——生成樱花树并展示生长过程

  • 使用sleep函数与FlushBatchDraw将每次绘制的结果间隔一秒刷新,形成樱花树生长的动画。

2-7

void branch(float x_start, float y_start, float length, float angle, float thickness, int generation)
{
	//....

	if (isShowAnimation) // 如果为1,绘制樱花树生成的过程动画
	{
		FlushBatchDraw(); // 批量绘制
		Sleep(1); // 暂停
	}
}

效果图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

快去向你喜欢的人展示樱花树叭~
在这里插入图片描述
点击下方个人名片,可添加博主的个人QQ,交流会更方便哦~
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/429029.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过阿里云函数计算解决ChatGPT API的调用问题

ChatGPT系列文章 与其被ChatGPT取代&#xff0c;不如征服ChatGPT&#xff0c;做它的主人&#xff01; 文章目录ChatGPT系列文章前言命令行部署准备工作两行命令实现部署应用中心部署使用代理访问API总结前言 自2022年11月30日 OpenAI 发布 ChatGPT 以来&#xff0c;虽然时有唱…

最新版本VSCode配置Python、PyQt5、QtDesigner环境并创建一个ui界面测试

参考链接&#xff1a;最新版本VSCode配置Python、PyQt5、QtDesigner环境并创建一个ui界面测试 一、安装Python3 PyQt5所支持的python版本是从3.5开始的&#xff0c;因此安装的Python3版本必须大于3.5。 我安装的位置是C:\Python\Python38。 参见真小白入门Pyhton的安装 二、安…

图-文多模态,大模型,预训练

参考老师的无敌课程 多模态任务是指需要同时处理两种或多种不同类型的数据&#xff08;如图像、文本、音频等&#xff09;的任务。例如&#xff0c;图像描述&#xff08;image captioning&#xff09;就是一种典型的多模态任务&#xff0c;它需要根据给定的图像生成相应的文本描…

XO08R2 1SBP260109R1001接地系统能够为dcs提供屏蔽层,消除电子噪声干扰

​ XO08R2 1SBP260109R1001接地系统能够为dcs提供屏蔽层&#xff0c;消除电子噪声干扰 dcs合理、可靠的系统接地&#xff0c;是dcs系统非常重要的内容。为了保证dcs系统的监测控制精度和安全、可靠运行&#xff0c;必须对系统接地方式、接地要求、信号屏蔽、接地线截面选择、接…

【C++学习】map和set的封装

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《C学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; map和set的封装&#x1f349;map和set中的红黑树&#x1f34c;set中的键值和map中的键值&#x1f349…

CTF杂项提纲

CTF的杂项是涉及编码&#xff0c;图片隐写&#xff0c;音频隐写&#xff0c;压缩包分析的方向&#xff0c;本文对MISC的知识点做了一个简单列举 常见编码 ASCII 0-9,48-57 A-Z 65-90 a-z 97-122 URL url编码又叫百分号编码&#xff0c;是统一资源定位的编码方式 base16/…

ModStartCMS v6.2.0 VIP权益配置功能,界面UI优化升级

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 功能特性 丰富的模块市…

【初识数据库】数据库简介及MySQL安装

目录 数据库基本概念&#xff1a; 主流的关系型数据库&#xff1a; 下载并安装数据库 我们选择的是&#xff1a;MySQL Community Server 8.0.26 卸载老版本MySQL 数据库基本概念&#xff1a; 数据库&#xff1a;是数据的仓库&#xff0c;存储数据的地方 数据库管理系统&am…

RK3568平台开发系列讲解(调试篇)debugfs 分析手段

🚀返回专栏总目录 文章目录 一、enable debugfs二、debugfs API三、使用示例沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Linux 上有一些典型的问题分析手段,从这些基本的分析方法入手,你可以一步步判断出问题根因。这些分析手段,可以简单地归纳为下图: 从这…

进程虚拟地址空间的划分

进程虚拟地址空间划分是操作系统中的一个核心概念&#xff0c;它决定了进程可以访问的内存范围和方式。在本文中&#xff0c;我们将介绍进程虚拟地址空间的划分方法和各个部分的作用。 进程虚拟地址空间的划分方法 在操作系统中&#xff0c;每个进程都有自己的虚拟地址空间&am…

到底还是留不住!库克“中国行”后火速变脸,3000亿产能转向印度?

以国家的层面来制衡一家科技企业&#xff0c;这种事或许只有老美干得出来。当看到华为即将崛起之时&#xff0c;美一意孤行&#xff0c;修改了大量关乎芯片和商贸的政策。层层围堵之下&#xff0c;华为如今的市场份额大幅缩水&#xff0c;腾出来的高端市场基本被苹果占据。相关…

2023年数据挖掘与知识发现国际会议(DMKD 2023) | IOP JPCS独立出版

会议简介 Brief Introduction 2023年数据挖掘与知识发现国际会议(DMKD 2023) 会议时间&#xff1a;2023年6月24日-26日 召开地点&#xff1a;中国重庆 大会官网&#xff1a;DMKD 2023-2023 International Conference on Data Mining and Knowledge Discovery 由重庆邮电大学、重…

找工作吗?50道Python面试题集锦【附答案】

嗨害大家好鸭&#xff01;我是爱摸鱼的芝士~ 希望能够帮助你在今年的求职面试中脱颖而出&#xff0c; 找到一份高薪工作~ 这些面试题涉及Python基础知识、Python编程、数据分析以及Python函数库等多个方面。 提前预祝给这篇文章点赞收藏的友友们~ 拿到心中最满意的那一份OF…

PHP快速入门13-MySQL数据库与Redis操作

文章目录前言一、PHP连接MySQL1.1 建立数据库链接1.2 插入数据1.3 更新数据1.4 删除数据1.5 查询数据并输出结果1.6 查询数据并返回结果1.7 获取查询结果的行数1.8 获取查询结果的列数1.9 获取查询结果的字段名1.10 获取查询结果的字段类型1.11 获取上一次操作影响的行数1.12 开…

PsExec流量分析

PsExec远程连接服务器 psexec是sysinternals提供的众多windows工具中的一个&#xff0c;这款工具的初衷是帮助管理员管理大量的机器的&#xff0c;后来被攻击者用来做横向渗透。 下载地址&#xff1a; https://docs.microsoft.com/en-us/sysinternals/downloads/psexec使用Ps…

d2l 里面GRU与Lstm实现

此二者的本质都是对rnn进行改良&#xff1a;关注当前多还是关注之前多。 在此详细讲一下。 目录 1.GRU门循环控制单元 1.1理论&#xff1a; 1.2初始化参数 1.3定义网络 1.4训练命令行 1.5简洁实现 2.Lstm长短期记忆网络 2.1理论 2.2加载参数 2.3定义lstm计算 2.4定义…

iTOP4412开发板Qt程序打包和部署

因为我们要把写好的程序发给用户来用&#xff0c;写好的源码也不方便给别人看&#xff0c;所以要把程序进行打包部署。 步骤一&#xff1a;点击左下角的电脑图标将 Debug 模式切换到 Release 模式。 release 模式&#xff1a;发布版本&#xff0c;不对源代码进行调试&#xff…

微信小程序:表格中更改输入框的值,实时获取表格全部数据,点击按钮更改数据库指定项数据

样例&#xff1a; 样式展示 数据库中原始第一条数据 修改表格第一行的数量&#xff1a; 数据库结果 核心代码 wxml ①wx:for:执行循环将数组数据展示出来 ②在某一单元格加上input样式 ③在input中绑定&#xff1a;文本框改变事件&#xff0c;并且绑定data-index便于知道…

网络编程,IO流

网络编程 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统&#xff0c;网络管理软件及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算机系统。 1.网络通信的要素 通信…

程序环境和预处理(下)——“C”

各位CSDN的uu们你们好呀&#xff0c;今天小雅兰的内容是程序环境和预处理的下篇知识点&#xff0c;那么&#xff0c;这篇博客写完后&#xff0c;C语言的知识点就到这里就结束啦&#xff0c;后续会专注于刷题和读书&#xff0c;也是关于C语言的&#xff0c;会写一些数据结构和C的…