C语言编写程序输出一下图形(程序用循环实现)

C语言编写程序输出一下图形(程序用循环实现),第1张

解决这类问题的思考方法:用循环控制输出行数,分析每行输出的符号个数与循环变量取值的对应关系,在每行还有前导空格个数需要考虑,每行的内容再用一个循环控制,循环次数采用前面总结出的关系公式,最后别忘了每行要输出一个换行。如此,程序设计步骤如下:

-总共输出5行:for ( i=0;i<5;i++ ),变量i的取值为:0,1,2,3,4

-每行星号前面没有前导空格,不处理

-每行输出星号个数:5,4,3,2,1,这个用i来算就是:5-i,for ( j=0;j<5-i;j++ )

那么程序就是:

int i,j;

for ( i=0;i<5;i++ ) //每一次循环实现输出一行

{

for ( j=0;j<5-i,j++ ) //每执行一次循环输出一个星号,循环次数就是星号个数

printf("");

printf("\n");

}

你的第一个问题容易解决。

第二个问题涉及到动画技术,所以比较麻烦,这里没有使用擦除技术,所以看起来就是吞噬者。

procedure TForm1Button1Click(Sender: TObject);

var

x: Integer;

y,a: Double;

ax,r:Integer;

ay,aa:Double;

begin

CanvasPenWidth:=1;

CanvasBrushColor := clBlack;

CanvasMoveTo(0,Trunc((selfClientHeight)/2));

for x := 10 to selfClientWidth-10 do begin

a := (x/selfClientWidth)  2  Pi;

y := Sin(a);

y := 10+(1-y)(selfClientHeight-20)/2;

CanvasLineTo(Trunc(x), Trunc(y));

end;

CanvasBrushColor := clRed;

for x := 10 to selfClientWidth-10 do begin

a := (x/selfClientWidth)  2  Pi;

y := Sin(a);

y := 10+(1-y)(selfClientHeight-20)/2;

CanvasBrushStyle := bsSolid;

r:=50;

SelfCanvasEllipse(Trunc(x)-r,Trunc(y)-r,Trunc(x)+r,Trunc(y)+r);

r:=10;

SelfCanvasEllipse(Trunc(x)-r,Trunc(y)-r,Trunc(x)+r,Trunc(y)+r);

r:=50;

for ax := x to x+r do begin

aa := (ax/selfClientWidth)  2  Pi;

ay := Sin(aa);

ay := 10+(1-ay)(selfClientHeight-20)/2;

CanvasPixels[Trunc(ax),Trunc(ay)]:= clBlack;

end;

Sleep(10);

ApplicationProcessMessages;

end;

end;

C做图形很不好使,效果也次。建议用turbo c , 它有个graphich 头文件 ,声明了很多图形函数,可以直接用,具体用法查资料慢慢看吧。 我给你一个例程吧(用turbo c 编译) :

#include <graphicsh>

#include <stdlibh>

#include <dosh>

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define ESC 0x011b

#define N 200

int i,key;

int score=0;/得分/

int gamespeed=50000;/游戏速度自己调整/

struct Food

{

int x;/食物的横坐标/

int y;/食物的纵坐标/

int yes;/判断是否要出现食物的变量/

}food;/食物的结构体/

struct Snake

{

int x[N];

int y[N];

int node;/蛇的节数/

int direction;/蛇移动方向/

int life;/ 蛇的生命,0活着,1死亡/

}snake;

void Init(void);/图形驱动/

void Close(void);/图形结束/

void DrawK(void);/开始画面/

void GameOver(void);/结束游戏/

void GamePlay(void);/玩游戏具体过程/

void PrScore(void);/输出成绩/

/主函数/

void main(void)

{

Init();/图形驱动/

DrawK();/开始画面/

GamePlay();/玩游戏具体过程/

Close();/图形结束/

}

/图形驱动/

void Init(void)

{

int gd=DETECT,gm;

initgraph(&gd,&gm,"c:\\tc");

cleardevice();

}

/开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙/

void DrawK(void)

{

/setbkcolor(LIGHTGREEN);/

setcolor(11);

setlinestyle(SOLID_LINE,0,THICK_WIDTH);/设置线型/

for(i=50;i<=600;i+=10)/画围墙/

{

rectangle(i,40,i+10,49); /上边/

rectangle(i,451,i+10,460);/下边/

}

for(i=40;i<=450;i+=10)

{

rectangle(50,i,59,i+10); /左边/

rectangle(601,i,610,i+10);/右边/

}

}

/玩游戏具体过程/

void GamePlay(void)

{

randomize();/随机数发生器/

foodyes=1;/1表示需要出现新食物,0表示已经存在食物/

snakelife=0;/活着/

snakedirection=1;/方向往右/

snakex[0]=100;snakey[0]=100;/蛇头/

snakex[1]=110;snakey[1]=100;

snakenode=2;/节数/

PrScore();/输出得分/

while(1)/可以重复玩游戏,压ESC键结束/

{

while(!kbhit())/在没有按键的情况下,蛇自己移动身体/

{

if(foodyes==1)/需要出现新食物/

{

foodx=rand()%400+60;

foody=rand()%350+60;

while(foodx%10!=0)/食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到/

foodx++;

while(foody%10!=0)

foody++;

foodyes=0;/画面上有食物了/

}

if(foodyes==0)/画面上有食物了就要显示/

{

setcolor(GREEN);

rectangle(foodx,foody,foodx+10,foody-10);

}

for(i=snakenode-1;i>0;i--)/蛇的每个环节往前移动,也就是贪吃蛇的关键算法/

{

snakex[i]=snakex[i-1];

snakey[i]=snakey[i-1];

}

/1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头/

switch(snakedirection)

{

case 1:snakex[0]+=10;break;

case 2: snakex[0]-=10;break;

case 3: snakey[0]-=10;break;

case 4: snakey[0]+=10;break;

}

for(i=3;i<snakenode;i++)/从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来/

{

if(snakex[i]==snakex[0]&&snakey[i]==snakey[0])

{

GameOver();/显示失败/

snakelife=1;

break;

}

}

if(snakex[0]<55||snakex[0]>595||snakey[0]<55||

snakey[0]>455)/蛇是否撞到墙壁/

{

GameOver();/本次游戏结束/

snakelife=1; /蛇死/

}

if(snakelife==1)/以上两种判断以后,如果蛇死就跳出内循环,重新开始/

break;

if(snakex[0]==foodx&&snakey[0]==foody)/吃到食物以后/

{

setcolor(0);/把画面上的食物东西去掉/

rectangle(foodx,foody,foodx+10,foody-10);

snakex[snakenode]=-20;snakey[snakenode]=-20;

/新的一节先放在看不见的位置,下次循环就取前一节的位置/

snakenode++;/蛇的身体长一节/

foodyes=1;/画面上需要出现新的食物/

score+=10;

PrScore();/输出新得分/

}

setcolor(4);/画出蛇/

for(i=0;i<snakenode;i++)

rectangle(snakex[i],snakey[i],snakex[i]+10,

snakey[i]-10);

delay(gamespeed);

setcolor(0);/用黑色去除蛇的的最后一节/

rectangle(snakex[snakenode-1],snakey[snakenode-1],

snakex[snakenode-1]+10,snakey[snakenode-1]-10);

} /endwhile(!kbhit)/

if(snakelife==1)/如果蛇死就跳出循环/

break;

key=bioskey(0);/接收按键/

if(key==ESC)/按ESC键退出/

break;

else

if(key==UP&&snakedirection!=4)

/判断是否往相反的方向移动/

snakedirection=3;

else

if(key==RIGHT&&snakedirection!=2)

snakedirection=1;

else

if(key==LEFT&&snakedirection!=1)

snakedirection=2;

else

if(key==DOWN&&snakedirection!=3)

snakedirection=4;

}/endwhile(1)/

}

/游戏结束/

void GameOver(void)

{

cleardevice();

PrScore();

setcolor(RED);

settextstyle(0,0,4);

outtextxy(200,200,"GAME OVER");

getch();

}

/输出成绩/

void PrScore(void)

{

char str[10];

setfillstyle(SOLID_FILL,YELLOW);

bar(50,15,220,35);

setcolor(6);

settextstyle(0,0,2);

sprintf(str,"score:%d",score);

outtextxy(55,20,str);

}

/图形结束/

void Close(void)

{

getch();

closegraph();

}

1 抽象形状类

package com;

//抽象的形状类

public abstract class Shape{

}

2 显示接口

package com;

//接口

public interface IDisplay{

void display(); //显示图形的基本信息

double getArea(); //计算面积

double getGirth(); //计算周长

}

3 三角形

package comtri;

import com;

//三角形类

public class Triangle extends Shape implements IDisplay{

protected double a;

protected double b;

protected double c;

public Triangle(double a, double b, double c){

thisa = a;

thisb = b;

thisc = c;

}

@Override

public double getArea() {

double s = (a + b + c) / 2;

return Mathsqrt(s(s-a)(s-b)(s-c));

}

@Override

public double getGirth() {

return thisa + thisb + thisc;

}

@Override

public void display() {

Systemoutprintln("三角形");

Systemoutprintln("边长:" + a + ", " + b + ", " + c);

}

}

4 矩形类

package comrec;

import com;

//矩形类

public class Rectangle extends Shape implements IDisplay {

protected double width;

protected double height;

public Rectangle(double width, double height){

thiswidth = width;

thisheight = height;

}

@Override

public double getArea() {

return thiswidth thisheight;

}

@Override

public double getGirth() {

return 2 ( thiswidth + thisheight);

}

@Override

public void display() {

Systemoutprintln("矩形");

Systemoutprintln("宽:" + thiswidth + ", 高:" + thisheight);

}

}

5 圆类

package comcir;

import com;

//圆类

public class Circle extends Shape implements IDisplay {

protected double radius;

public Circle(double radius){

thisradius = radius;

}

@Override

public double getArea() {

return MathPI thisradius thisradius;

}

@Override

public double getGirth() {

return 2 MathPI thisradius;

}

@Override

public void display() {

Systemoutprintln("圆");

Systemoutprintln("半径:" + thisradius);

}

}

6 正多边形

package commul;

import com;

//正多边形类

public class MulSide extends Shape implements IDisplay {

protected double side; //边长

protected int n; //边数

public MulSide(double side, int n){

thisside = side;

thisn = n;

}

@Override

public double getArea() {

return n side side Mathtan((n-2) MathPI / (2 n)) / 4;

}

@Override

public double getGirth() {

return thisside thisn;

}

@Override

public void display() {

Systemoutprintln("正多边形");

Systemoutprintln("连长:" + thisside + ", 边数:" + thisn);

}

}

7 主类(测试类)

package com;

import javautilScanner;

import comcirCircle;

import commulMulSide;

import comrecRectangle;

import comtriTriangle;

public class Test22 {

public static void main(String[] args) {

Scanner scan = new Scanner(Systemin);

double a, b, c;

double width, height;

double radius;

double side;

int n;

IDisplay s;

Systemoutprintln("请输入三角形的基本信息");

Systemoutprint("边长1:");

a = scannextDouble();

Systemoutprint("边长2:");

b = scannextDouble();

Systemoutprint("边长3:");

c = scannextDouble();

s = new Triangle(a, b, c);

sdisplay();

Systemoutprintln("三角形的面积:" + sgetArea());

Systemoutprintln("三角形的周长:" + sgetGirth());

Systemoutprintln("请输入矩形的基本信息");

Systemoutprint("宽:");

width = scannextDouble();

Systemoutprint("高:");

height = scannextDouble();

s = new Rectangle(width, height);

sdisplay();

Systemoutprintln("矩形的面积:" + sgetArea());

Systemoutprintln("矩的周长:" + sgetGirth());

Systemoutprintln("请输入圆的基本信息");

Systemoutprint("半径:");

radius = scannextDouble();

s = new Circle(radius);

sdisplay();

Systemoutprintln("圆的面积:" + sgetArea());

Systemoutprintln("圆的周长:" + sgetGirth());

Systemoutprintln("请输入正多边形的基本信息");

Systemoutprint("边长:");

side = scannextDouble();

Systemoutprint("边数:");

n = scannextInt();

s = new MulSide(side, n);

sdisplay();

Systemoutprintln("正多边形的面积:" + sgetArea());

Systemoutprintln("正多边形的周长:" + sgetGirth());

}

}

运行测试:

请输入三角形的基本信息

边长1:3

边长2:4

边长3:5

三角形

边长:30, 40, 50

三角形的面积:60

三角形的周长:120

请输入矩形的基本信息

宽:3

高:4

矩形

宽:30, 高:40

矩形的面积:120

矩的周长:140

请输入圆的基本信息

半径:2

半径:20

圆的面积:12566370614359172

圆的周长:12566370614359172

请输入正多边形的基本信息

边长:2

边数:6

正多边形

连长:20, 边数:6

正多边形的面积:1039230484541326

正多边形的周长:120

以上就是关于C语言编写程序输出一下图形(程序用循环实现)全部的内容,包括:C语言编写程序输出一下图形(程序用循环实现)、简单图形程序,用delphi编写、如何用C语言编写有图形动画类的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9766250.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存