嗨玩手游网

C语言画一个 blingbling 的圣诞树!详细思路+源码分享

圣诞节马上来啦!看到很多小伙伴用各种语言画出了圣诞树,于是就想用 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、turtle画棵圣诞树吧

首先需要安装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了吗?