圣诞节马上来啦!看到很多小伙伴用各种语言画出了圣诞树,于是就想用 C 语言来画一颗圣诞树,下面先来看一下效果图吧!
全部效果的话这个树是会有颜色闪烁的哦!只是这个截图并没有显示出来,大家不妨看看下面的源码哦~
源码示例:(后面附带代码分析)
#include <math.h>#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <windows.h>#include <stdbool.h> #define N 15char str[] = {'*', ' ', '@', ' ', '#', ' ', '\'', ' ', '$', ' ', '%', ' ', '&', ' ', '!'}; void color(int a){ SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), a);} void getCoord(double y, double x){ COORD pos = { x,y }; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);} void hideCursor(){ CONSOLE_CURSOR_INFO cursor= { 1, 0 }; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor);} void layer(int x, int y, int num, int col) { color(col); getCoord(x, y); int idx = rand()%N; printf("%c", str[idx]); for(int k = 1; k <= num; ++k) { idx = rand()%N; getCoord(x + k - 1, y); printf("%c", str[idx]); for(int i = 1; i <= (k*2-1)/2; i++) { getCoord(x + k - 1, y - i); idx = rand()%N; printf("%c", str[idx]); getCoord(x + k - 1, y + i); idx = rand()%N; printf("%c", str[idx]); } } } void (int x, int y, int num, int col) { getCoord(x, y); color(col); printf("*"); for(int i = 1; i <= num; ++i) { int x1 = x + i; int y1 = y - i; for(int j = 0; j < i * 2 + 1; ++j) { getCoord(x1, y1 + j); printf("*"); } }} void Right(double x, double y, double num, double col) { getCoord(x, y*2); color(col); printf("*"); for(int i = 1; i <= num; ++i) { double x1 = x - i; double y1 = y - i; for(int j = 0; j < i * 2 + 1; ++j) { getCoord(x1 + j, y1 * 2); printf("*"); } }} void Left(double x, double y, double num, double col) { getCoord(x, y*2); color(col); printf("*"); for(int i = 1; i <= num; ++i) { double x1 = x - i; double y1 = y + i; for(int j = 0; j < i * 2 + 1; ++j) { getCoord(x1 + j, y1 * 2); printf("*"); } }} void rectangle(int x, int y, int h, int w, int col1, int col2) { color(col1); for(int i = 0; i <= h; ++i) { for(int j = 0; j <= w/2; ++j) { getCoord(x + i, y - j); if(i % 3 || j % 2) printf("*"); else { color(col2); printf("!"); color(col1); } getCoord(x + i, y + j); if(i % 3 || j % 2) printf("*"); else { color(col2); printf("!"); color(col1); } } }} int main() { hideCursor(); int colTop = 4; int colMid = 4; int colEnd = 13; while(true) { colTop = colTop == 4 ? 9 : 4; Left(5, 27.8, 2, colTop); Right(5, 27.8, 2, colTop); Sleep(100); layer(5, 55, 10, 2); layer(9, 55, 16, 2); layer(14, 55, 26, 2); colMid = colMid == 4 ? 5 : 4; (11, 55, 3, colMid); (19, 60, 3, colMid); (29, 42, 3, colMid); (31, 57, 3, colMid); colEnd = colEnd == 13 ? 1 : 13; rectangle(40, 55, 15, 18, 6, colEnd); Sleep(200); } return 0;}
上面便是圣诞树的简单实现,下面来说下原理:
函数 layer 画出树的层次,根据坐标来输出位置;
void layer(int x, int y, int num, int col)
函数 画出小三角形,作为点缀;
void (int x, int y, int num, int col)
函数 Right 和 Left 画出圣诞树顶部的蝴蝶结;
void Right(double x, double y, double num, double col);void Left(double x, double y, double num, double col);
函数 hideCursor 负责隐藏光标;
void hideCursor()
函数 getCoord 负责确定输出字符的位置;
void getCoord(double y, double x)
函数 color 负责设置输出的颜色;
void color(int a)
主函数的原理如下:
void color(int a)
主函数通过一个 while 循环,不断刷新圣诞树和圣诞树点缀的颜色。
希望对大家有帮助!
此外,我也给大家分享我收集的其他资源,从最零基础开始的教程到C语言C++项目案例,帮助大家在学习C语言的道路上披荆斩棘!
编程学习书籍分享:
编程学习视频分享:
整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)最重要的是你可以在群里面交流提问编程问题哦!
对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!
首先需要安装python环境,如果是新手建议百度一下,有很详细的教程哦,根据电脑的情况去下载对应的python安装包,使用的是python3.7.0的版本,除此之外还有python2 ,和python3是有区别的,但是本人对python2的了解不够深。
安装完环境后,建议大家安装一个python编译器,使用的是pycharm,免费版本的,网上也都有安装教程,挺简单的,而且官方出了汉化插件,可以在file-setting中搜索安装。
编译器也安装完毕后,请打开pycharm,然后我们创建一个project,在project下创建一个python file,建议取名字不要使用中文,创建成功后把代码复制过去,然后在该页面右键-运行(run),按理就可以跑了。
代码如下:import turtle as t #as就是取个别名,后续调用的t都是turtle
from turtle import *
import random as r
import time
n = 100.0
speed("fastest") #定义速度
screensize(bg='black') #定义背景颜色,可以自己换颜色
left(90)
forward(3*n)
color("orange", "yellow")#定义最上端星星的颜色,外圈是orange,内部是yellow
begin_fill()
left(126)
for i in range(5): #画五角星
forward(n/5)
right(144) #五角星的角度
forward(n/5)
left(72) #继续换角度
end_fill()
right(126)
def drawlight():#定义画彩灯的方法
if r.randint(0, 30) == 0:#如果觉得彩灯太多,可以把取值范围加大一些,对应的灯就会少一些
color('tomato')#定义第一种颜色
circle(6)#定义彩灯大小
elif r.randint(0,30) == 1:
color('orange')#定义第二种颜色
circle(3)#定义彩灯大小
else:
color('dark green')#其余的随机数情况下画空的树枝
color("dark green")#定义树枝的颜色
backward(n*4.8)
def tree(d, s):#开始画树
if d <= 0: return
forward(s)
tree(d-1, s*.8)
right(120)
tree(d-3, s*.5)
drawlight()#同时调用小彩灯的方法
right(120)
tree(d-3, s*.5)
right(120)
backward(s)
tree(15, n)
backward(n/2)
for i in range(200):#循环画最底端的小装饰
a = 200 - 400 * r.random()
b = 10 - 20 * r.random()
up()
forward(b)
left(90)
forward(a)
down()
if r.randint(0, 1) == 0:
color('tomato')
else:
color('wheat')
circle(2)
up()
backward(a)
right(90)
backward(b)
tlor("dark red","red")#定义字体颜色
t.write("Merry Christmas",align ="center",font=("Comic Sans MS",40,"bold"))#定义文字、位置、字体、大小
def drawsnow():#定义画雪花的方法
t.ht() #隐藏笔头,ht=hideturtle
t.pensize(2) #定义笔头大小
for i in range(200): #画多少雪花
t.pencolor("white") #定义画笔颜色为白色,其实就是雪花为白色
t.pu() #提笔,pu=penup
t.setx(r.randint(-350,350)) #定义x坐标,随机从-350到350之间选择
t.sety(r.randint(-100,350)) #定义y坐标,注意雪花一般在地上不会落下,所以不会从太小的纵座轴开始
t.pd() #落笔,pd=pendown
dens = 6 #雪花瓣数设为6
snowsize = r.randint(1,10) #定义雪花大小
for j in range(dens): #就是6,那就是画5次,也就是一个雪花五角星
#t.forward(int(snowsize)) #int()取整数
t.fd(int(snowsize))
t.backward(int(snowsize))
#t.bd(int(snowsize)) #注意没有bd=backward,但有fd=forward,小bug
t.right(int(360/dens)) #转动角度
drawsnow()#调用画雪花的方法
t.done() # 完成,否则会直接关闭
转载:CSDN博主「Ding2langdang」https://blog.csdn/Ding2langdang/article/details/121491593
再过几天就是圣诞节啦,大家都搭好圣诞树了吗?今天再和大家分享下各种不同的圣诞树画法,这次的画法比较详细但也很简单,保证一看就会!一画就对!
我们先画一个五角星,作为圣诞树顶端的装饰品,然后就开始画不同的圣诞树躯干了。
第一种是画连续l的方法,但是是倒过来,从小到大一气呵成,有点像那种蚊香的样子,不知道你们有没有见过。
最后画上树桩和彩色的小灯,是不是很容易呢?
第二种是画w的方式,连续画n个,注意边角可以稍稍翘起
而且每一层都比上一层要大哦,这样画起来才好看哦
是不是很像那么回事~
第三种是画连续三角锯齿状的样子,也是每一层都比上一层更大,边缘稍微翘起的样子
是不是很简单呢~
第四种比较简单,就是我们最常规见到的这种,有点像三角形,但是是叠加且无闭合的那种
第五种是连续画8的方式,倒过来画,也要注意每一层都比上一层大
以上,你都get了吗?