噢噢噢噢噢格 2019-06-27 09:44 采纳率: 0%
浏览 1002

编程绘制小球的动态碰撞轨迹?

编程绘制小球的动态碰撞轨迹。在屏幕的同一水平线上(设备坐标系)有两个小球,当第一个小球撞击另一个小球后,前者静止,后者将沿前一个小球的运动方向继续运动。

//程序名称:printf()动画—运动的小球 
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<conio.h>

//定义延时时间,运动区的宽度和高度
#define DELAY 100
#define WIDTH 80
#define HEIGHT 24
//定义全局变量,位置和速度
int X1 = 0, Y1 =10,X2=40,Y2=10;
int Vx1 = 1, Vy1 = 0,Vx2=1,Vy2=0;
int t,i=0;
//函数声明
void Ball();
void HideCursor();
void GotoXy(int x, int y);
int main(void)
{
//接收键盘数据的变量
char ch = '\0';
system("color 2C");
system("title 运动的小球-动量守恒");
//隐藏光标
HideCursor();
//ESC退出
while(ch != 27)
{
Ball();
if(kbhit())
ch = getch();
}
system("cls");
//结束程序
return 0;
}

//计算球的轨迹

void Ball()

{
//画球

GotoXy(X1, Y1);
printf("●");
GotoXy(X2,Y2);
printf("●");

//延时

Sleep(DELAY);

//擦球

GotoXy(X1, Y1);
printf(" ");
GotoXy(X2,Y2);
printf("");
//触界反弹
if(0==X1&&Vx1<0)
{putchar('\007');
}
if((WIDTH - 2) == X2 && Vx2 > 0)
{Vx2 *= -1;
putchar('\007');}
if(X1=X2-2)
{t=Vx1;
Vx1=Vx2;
Vx2=t;
i*=-1;
putchar('\007');
}

//计算下一个周期的位置
switch(i)
{
case 1:
X1 += 2 * Vx1;break;
case -1:
X2 += 2 * Vx2;break;
}
}


//隐藏光标,头文件<windows.h>

void HideCursor()

{
CONSOLE_CURSOR_INFO cursor_info = {1, 0}; //后边的0代表光标不可见

SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),
&cursor_info);

}

//光标移动,头文件<windows.h>

void GotoXy(int x, int y)
{
HANDLE hout; //定义句柄变量hout
COORD coord; //定义结构体coord
coord.X = x;
coord.Y = y;
hout = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出(屏幕)句柄
SetConsoleCursorPosition(hout, coord); //移动光标
}
  • 写回答

2条回答 默认 最新

  • 良月澪二 2019-06-30 09:41
    关注

    里面有一个

    if(X1=X2-2)
    

    先把这个等号改过来吧

    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况