在 C++ 中使用嵌套 for 循环的更复杂的形状
More complex shapes using nested for loops in C++
我看到一些他们做 X 或三角形或菱形等简单示例的地方。我想知道如何制作像这样的复杂形状:
# #
## ##
### ###
#### ####
###########
###########
#### ####
### ###
## ##
# #
我是编程新手,不知道代码本身的基本功能
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
int spaces = 4;
int hashes = 1;
for(int row=0;row<10;row++)
{
for(int spaces=0;spaces<4;spaces++)
{
cout<<" ";
}
for(int hashes=0;hashes<1;hashes++)
{
cout<<"#";
}
cout<<endl;
if(row<5&&row>6)
{
spaces--;
hashes+=2;
}
else
{
spaces++;
hashes-=2;
}
}
return 0;
}
一种简单的方法是使用 "raytracing" 方法;即
for (int y=0; y<rows; y++) {
for (int x=0; x<cols; x++) {
if (func(x, y)) {
std::cout << "#";
} else {
std::cout << " ";
}
}
std::cout << "\n";
}
例如 rows = cols = 20
和 func
定义为
bool func(int x, int y) {
return (x-10)*(x-10) + (y-10)*(y-10) < 8*8;
}
你会得到一个圆圈
许多绘制像您这样的形状的作业都是基于水平和垂直方向的对称性。例如,在水平方向上,从左到中的字符在中心点之后进行镜像。
绘制形状的老式方法是将它们存储在二维数组中,然后打印出该数组:
unsigned char letter_E[7][5] =
{
{'*', '*', '*', '*', '*'},
{'*', ' ', ' ', ' ', ' '},
{'*', ' ', ' ', ' ', ' '},
{'*', '*', '*', '*', '*'},
{'*', ' ', ' ', ' ', ' '},
{'*', ' ', ' ', ' ', ' '},
{'*', '*', '*', '*', '*'},
};
for (unsigned int row = 0; row < 7; ++row)
{
for (unsigned int column = 0; column < 5; ++column)
{
std::cout << letter_E[row][column];
}
std::cout << '\n';
}
此外,在互联网上搜索 "ASCII art"。
我看到一些他们做 X 或三角形或菱形等简单示例的地方。我想知道如何制作像这样的复杂形状:
# #
## ##
### ###
#### ####
###########
###########
#### ####
### ###
## ##
# #
我是编程新手,不知道代码本身的基本功能
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{
int spaces = 4;
int hashes = 1;
for(int row=0;row<10;row++)
{
for(int spaces=0;spaces<4;spaces++)
{
cout<<" ";
}
for(int hashes=0;hashes<1;hashes++)
{
cout<<"#";
}
cout<<endl;
if(row<5&&row>6)
{
spaces--;
hashes+=2;
}
else
{
spaces++;
hashes-=2;
}
}
return 0;
}
一种简单的方法是使用 "raytracing" 方法;即
for (int y=0; y<rows; y++) {
for (int x=0; x<cols; x++) {
if (func(x, y)) {
std::cout << "#";
} else {
std::cout << " ";
}
}
std::cout << "\n";
}
例如 rows = cols = 20
和 func
定义为
bool func(int x, int y) {
return (x-10)*(x-10) + (y-10)*(y-10) < 8*8;
}
你会得到一个圆圈
许多绘制像您这样的形状的作业都是基于水平和垂直方向的对称性。例如,在水平方向上,从左到中的字符在中心点之后进行镜像。
绘制形状的老式方法是将它们存储在二维数组中,然后打印出该数组:
unsigned char letter_E[7][5] =
{
{'*', '*', '*', '*', '*'},
{'*', ' ', ' ', ' ', ' '},
{'*', ' ', ' ', ' ', ' '},
{'*', '*', '*', '*', '*'},
{'*', ' ', ' ', ' ', ' '},
{'*', ' ', ' ', ' ', ' '},
{'*', '*', '*', '*', '*'},
};
for (unsigned int row = 0; row < 7; ++row)
{
for (unsigned int column = 0; column < 5; ++column)
{
std::cout << letter_E[row][column];
}
std::cout << '\n';
}
此外,在互联网上搜索 "ASCII art"。