| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 774 人关注过本帖
标题:请高手帮忙设计C语言程序
只看楼主 加入收藏
crazymm
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-1-15
收藏
 问题点数:0 回复次数:6 
请高手帮忙设计C语言程序
C语言程序设计
开始小球位于屏幕中央,然后以一定的方向运动,当小球碰到边缘时,被反弹回来
相关函数:getimage()函数    putimage()函数

[此贴子已经被作者于2007-1-15 16:15:20编辑过]

搜索更多相关主题的帖子: C语言程序 小球 函数 屏幕 
2007-01-15 16:11
神秘失恋
Rank: 1
等 级:新手上路
帖 子:663
专家分:0
注 册:2007-1-6
收藏
得分:0 
这应该属于图形了吧...

上帝之手.........
2007-01-16 00:51
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 

/******************************************************************************/
/* 关于小球碰到边缘后反弹回来的动画演示 */
/* 主要过程位于 Draw()函数中 */
/* 作者:cdmalcl 日期:1.16 */
/******************************************************************************/
#include <graphics.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>

#define PI 3.14

#define Cr 7 /* 圆球半径 */
#define Clc 5 /* 圆球边线颜色 */
#define Cc 4 /* 圆球颜色 */
#define BKC 1 /* 方框背景颜色参数 */
#define BKC_O 1 /* 外框背景颜色 */
#define OUT_W 5 /* 外框宽度 */
#define BKLC_O 3 /* 外框边线颜色 */
#define LA_W 10 /* 栅格宽度 */
#define SIDE_RX 30 /* 框右下角X轴值 */
#define SIDE_RY 30 /* 框右下角Y轴值 */
#define SIDE_LX 30 /* 框左上角X轴值 */
#define SIDE_LY 30 /* 框左上角Y轴值 */

void Init(); /* 初始化操作 */
void View(); /* 动画演示入口 */
void InitView(); /* 动画初始化 */
void DrawBK(); /* 绘制背景 */
int GetView(); /* 获取圆球图案 */
int GetBKview(int x ,int y); /* 获取圆球经过的背景图案 */
int DrawView(int x ,int y); /* 绘制圆球 */
int ClearView(int x ,int y); /* 绘制圆球经过的背景图案 */
void Draw(); /* 动画过程 */

int GMaxX,GMaxY; /* 此图形模式下的X和Y轴的最大值 */
unsigned CBKview[2*Cr][2*Cr]; /* 圆球背景图案 */
unsigned Cview[2*Cr][2*Cr]; /* 圆球图案 */
float Ca; /* 圆球初始发射角度 */

int main(void)
{
Init();
View();

getch();
}

/*******************初始化操作*************************************************/
void Init()
{
int gd = DETECT,gm = 0;

initgraph(&gd ,&gm ,"");
GMaxX = getmaxx();
GMaxY = getmaxy();

srand((unsigned)time(NULL));
}

/*******************动画演示入口***********************************************/
void View()
{
int r ,i ,j;

InitView();
Draw();
}

/*******************动画初始化*************************************************/
void InitView()
{
Ca=random(360);

GetView();

DrawBK();
GetBKview(GMaxX/2 ,GMaxY/2);

ClearView(GMaxX/2 ,GMaxY/2);
DrawView(GMaxX/2 ,GMaxY/2);
getch();
}

/*******************绘制背景***************************************************/
void DrawBK()
{
int i ,j;
int sx ,sy;

sx = (GMaxX-SIDE_RX-SIDE_LX)/LA_W;
sy = (GMaxY-SIDE_RY-SIDE_LY)/LA_W;

setcolor(BKLC_O);
setfillstyle(1 ,BKC_O);
rectangle(SIDE_LX-OUT_W ,SIDE_LY-OUT_W ,GMaxX-SIDE_RX+OUT_W ,GMaxY-SIDE_RY+OUT_W);
floodfill(SIDE_LX-OUT_W+1 ,SIDE_LY-OUT_W+1, getcolor());

setcolor(BKC+1);
setfillstyle(1 ,BKC+4);
rectangle(SIDE_LX ,SIDE_LY ,GMaxX-SIDE_RX ,GMaxY-SIDE_RY);
floodfill(SIDE_LX+1 ,SIDE_LY+1, getcolor());

setcolor(BKC);
for(i = 1;i<=sx;i++)
{
line(SIDE_LX+2+i*10 ,SIDE_LY+1 ,SIDE_LX+2+i*10 ,GMaxY-SIDE_RY-1);
}
for(i = 1;i<=sy;i++)
{
line(SIDE_LX+1 ,SIDE_LY+2+i*10 ,GMaxX-SIDE_RX-1 ,SIDE_LY+2+i*10);
}
setcolor(BKC+6);
for(i = 1;i<=sx;i++)
{
line(SIDE_LX+1+i*10 ,SIDE_LY+1 ,SIDE_LX+1+i*10 ,GMaxY-SIDE_RY-1);
}
for(i = 1;i<=sy;i++)
{
line(SIDE_LX+1 ,SIDE_LY+1+i*10 ,GMaxX-SIDE_RX-1 ,SIDE_LY+1+i*10);
}
}

/*******************获取圆球图案***********************************************/
int GetView()
{
int i ,j;

setcolor(Clc);
setfillstyle(1,Cc);

fillellipse(GMaxX/2+Cr ,GMaxY/2+Cr ,Cr-1 ,Cr-1);
for(i = 0;i<Cr*2;i++)
for(j = 0;j<Cr*2;j++)
{
Cview[j][i] = getpixel(GMaxX/2+j ,GMaxY/2+i);
}
cleardevice();
}

/*******************获取圆球经过的背景图案*************************************/
int GetBKview(int x ,int y)
{
int i ,j;

for(i = 0;i<Cr*2;i++)
for(j = 0;j<Cr*2;j++)
{
CBKview[j][i] = getpixel(j+x ,i+y);
}
}

/*******************绘制圆球***************************************************/
int DrawView(int x ,int y)
{
int i ,j;

for(i = 0;i<Cr*2;i++)
for(j = 0;j<Cr*2;j++)
{
if(Cview[j][i])
putpixel(j+x ,i+y ,Cview[j][i]);
}
}

/*******************绘制圆球经过的背景图案*************************************/
int ClearView(int x ,int y)
{
int i ,j;

for(i = 0;i<Cr*2;i++)
for(j = 0;j<Cr*2;j++)
{
putpixel(j+x ,i+y ,CBKview[j][i]);
}
}

/******************************************************************************/
/* 动画过程 */
/* 1↑0 */
/* Cd ← → */
/* 2↓3 */
/******************************************************************************/
void Draw()
{
int i ,j;
int x ,y ,xr ,yr ,Space = 8;
int MaxX ,MaxY ,MinX = SIDE_LX ,MinY = SIDE_LY ,flag = 0;
int Cd;
float Car , xs, ys;

Cd = Ca/90;
Car= (Ca-Cd*90)*PI/180;

xs = Space*cos(Car);
ys = Space*sin(Car);

MaxX = GMaxX-SIDE_RX-2*Cr;
MaxY = GMaxY-SIDE_RY-2*Cr;

x = GMaxX/2;
y = GMaxY/2;

while(!kbhit())
{
xr += ((Cd == 1)||(Cd == 2))? (-1)*xs: xs;
yr += ((Cd == 1)||(Cd == 0))? (-1)*ys: ys;

ClearView(x ,y);

/* 判断是否碰撞: */
if(xr < MinX)
{
Cd = (Cd == 1)? 0: 3;
}
else
{
if(xr > MaxX)
{
Cd = (Cd == 0)? 1: 2;
}
}

if(yr < MinY)
{
Cd = (Cd == 1)? 2: 3;
}
else
{
if(yr > MaxY)
{
Cd = (Cd == 2)? 1: 0;
}
}
/* 。 */
x += ((Cd == 1)||(Cd == 2))? (-1)*xs: xs;
y += ((Cd == 1)||(Cd == 0))? (-1)*ys: ys;
xr = x;
yr = y;

GetBKview(x ,y);
DrawView(x ,y);

delay(1000);
}
}

2007-01-16 02:58
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
以下是引用crazymm在2007-1-15 16:11:48的发言:
C语言程序设计
开始小球位于屏幕中央,然后以一定的方向运动,当小球碰到边缘时,被反弹回来
相关函数:getimage()函数    putimage()函数

不是很喜欢用 getimage()函数 和 putimage()函数
如果实在有这个要求你也应该知道在哪里改!

还有初始角度是随机

2007-01-16 03:00
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
背景画的比较恶心
要好点的就自己画吧
2007-01-16 03:02
crazymm
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-1-15
收藏
得分:0 
大哥,你好厉害

我在百度贴吧上也贴了,也有人回复,用的是我们老师要求的函数,不过我觉得你比较强

2007-01-16 19:33
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
哦?
把那个 程序拿出来看看
2007-01-16 19:38
快速回复:请高手帮忙设计C语言程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019313 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved