65.9K
CodeProject 正在变化。 阅读更多。
Home

控制台的乐趣,美国国旗动画(Visual C++ 6.0)

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.70/5 (9投票s)

2010年6月1日

CPOL

2分钟阅读

viewsIcon

31845

downloadIcon

498

在控制台上玩得开心,制作美国国旗的动画

请最大化控制台窗口,以纠正运行 EXE 时可能出现的过度绘制。

引言

这是你做的一个项目,只是因为你认为这样做会很有趣,而且你还有一些空闲时间。 好了,让我们给一些旗帜做动画,好吗...

首先我们创建一个新项目和类,我们将我们的类命名为CFunWithConsole,并在其中放入一些变量和函数。

项目文件是

CManCFunWithConsole_main.cpp 主文件
CFunWithConsole.cpp 类定义和方法体文件
CFunWithConsole.h 类声明文件
CTextMode.h 控制台文本模式图形类

CFunWithConsole 类

好的,我们的类CFunWithConsole将从类CTextMode继承一些图形函数方法,比如绘制线条、盒子和圆形,所以我们需要包含这个语法

CMandelzoom::CMandelzoom( int i) : CTextMode()

现在,在继承之后,CTextMode.h中的函数方法已经与我们的类CMandelzoom中的函数方法“合二为一”。 我们现在可以像对待CFunWithConsole的原生方法一样对待这些方法。 现在我们可以绘制线条、盒子和圆形了。
我们还将希望在启动时初始化的变量放在构造函数中,这样当我们的类被实例化时,这些变量就会被初始化。

类头文件 CFunWithConsole.h

现在是应用程序本身。 我们选择不在头文件中定义和体现我们的成员函数,我们将只把原型放在CFunWithConsole.h中。

#ifndef CFunWithConsole_H
#define CFunWithConsole_H

#include "CTextMode.h"

class CFunWithConsole: public  CTextMode
{
	public:

		int shiftX[9];
		int shiftY[8];
		int addX[9];
		int addY[8];

		CFunWithConsole();
		CFunWithConsole( int i);
		~CFunWithConsole();
		void animateFlag(void);
		void VersionInfo(void);

};

#endif CFunWithConsole_H

类定义文件 CFunWithConsole.cpp

CFunWithConsole.cpp中,我们将使用函数调用、语法和语句来定义和体现我们的成员函数。 我们的类CFunWithConsole从类CTextMode继承函数方法,所以我们需要包含这个语法

CFunWithConsole::CFunWithConsole( int i) : CTextMode() 

构造函数

我们已经把希望在启动时初始化的函数调用放在了构造函数中,这样当我们的类被实例化时,这些函数方法就会被调用和执行。 我们还放置了一个永不退出的while(true)循环,这样我们的旗帜就会无限期地动起来。

// CFunWithConsole.cpp

CFunWithConsole::CFunWithConsole( int i) :  CTextMode()   
{       //variables to be initialized
	shiftX[0]=50;shiftX[1]=51;shiftX[2]=52;shiftX[3]=52; //curved alignment for flag
	shiftX[4]=52;shiftX[5]=52;shiftX[6]=51;shiftX[7]=50;
	shiftX[8]=53;

	shiftY[0]=15;shiftY[1]=16;shiftY[2]=17;shiftY[3]=18;
	shiftY[4]=19;shiftY[5]=20;shiftY[6]=21;shiftY[7]=21;

	addX[0]=1;addX[1]=1;addX[2]=1;addX[3]=1;
	addX[4]=1;addX[5]=1;addX[6]=1;addX[7]=1;
	addX[8]=1;

	addY[0]=1;addY[1]=1;addY[2]=1;addY[3]=1;
	addY[4]=1;addY[5]=1;addY[6]=1;addY[7]=1;

	 while(true)          //eternity loop
        {           
           animateFlag(); 
        }
   }

animateFlag() 方法

animateFlag()方法通过简单地来回移动一个字节块来动画旗帜。 在此函数调用之前,这些正在移动的字节已经在构造函数中以弯曲的方式对齐。 这些块也已经接收到一个配色方案,这个配色方案与旗帜的颜色方案相同。

void CFunWithConsole::animateFlag(void)
{
	  for (int ii=0;ii<9;ii++)
	  {
		  shiftX[ii]=shiftX[ii]+addX[ii];
		  if (shiftX[ii]<50 || shiftX[ii]>52) addX[ii]=-addX[ii];
	  }

           txtLine(50,5,50 ,22,15);     //draw flag pole

	   txtLine(1,22,78,22,10);      //draw green grass
	   txtLine(1,23,78,23,10);

	   clrbox(shiftX[0],shiftY[0],shiftX[0]+20,shiftY[0]+1,79);
	   clrbox(shiftX[1],shiftY[1],shiftX[1]+20,shiftY[1]+1,254);
	   clrbox(shiftX[2],shiftY[2],shiftX[2]+20,shiftY[2]+1,79);
	   clrbox(shiftX[3],shiftY[3],shiftX[3]+20,shiftY[3]+1,254);
	   clrbox(shiftX[4],shiftY[4],shiftX[4]+20,shiftY[4]+1,79);
 	   clrbox(shiftX[5],shiftY[5],shiftX[5]+20,shiftY[5]+1,254);
 	   clrbox(shiftX[6],shiftY[6],shiftX[6]+20,shiftY[6]+1,79);

	   clrbox(shiftX[0]+0,shiftY[0],shiftX[0]+6,shiftY[0]+1,31);
	   clrbox(shiftX[1]+0,shiftY[1],shiftX[1]+6,shiftY[1]+1,31);
	   clrbox(shiftX[2]+0,shiftY[2],shiftX[2]+6,shiftY[2]+1,31);
	   clrbox(shiftX[3]+0,shiftY[3],shiftX[3]+6,shiftY[3]+1,254);
	   clrbox(shiftX[4]+0,shiftY[4],shiftX[4]+6,shiftY[4]+1,79);
	   clrbox(shiftX[5]+0,shiftY[5],shiftX[5]+6,shiftY[5]+1,254);
	   clrbox(shiftX[6]+0,shiftY[6],shiftX[6]+6,shiftY[6]+1,79);

	   clrbox(shiftX[0]+3,shiftY[0],shiftX[0]+4,shiftY[0]+1,31);
	   clrbox(shiftX[1]+3,shiftY[1],shiftX[1]+4,shiftY[1]+1,31);
	   clrbox(shiftX[2]+3,shiftY[2],shiftX[2]+4,shiftY[2]+1,31);
	   clrbox(shiftX[3]+3,shiftY[3],shiftX[3]+4,shiftY[3]+1,254);
	   clrbox(shiftX[4]+3,shiftY[4],shiftX[4]+4,shiftY[4]+1,79);
	   clrbox(shiftX[5]+3,shiftY[5],shiftX[5]+4,shiftY[5]+1,254);
	   clrbox(shiftX[6]+3,shiftY[6],shiftX[6]+4,shiftY[6]+1,79);

	   delay(50);
	   setcolor(15);

           clrscr();
}

主文件

最后,文件CFunWithConsole_main.cpp是我们创建类的实例并运行我们的应用程序的地方。

#include "CFunWithConsole.h"

int main()
{
  CFunWithConsole *animateFlag = new CFunWithConsole(1);

  return 0;
}

控制台的颜色代码如下

黑色 0
蓝色 1
绿色 2
青色 3
红色 4
品红色 5
黄色 6
白色 7
Gray 8
浅蓝色 9
浅绿色 10
浅青色 11
浅红色 12
浅洋红色 13
浅黄色 14
亮白色 15

感谢阅读。

© . All rights reserved.