本人刚学c语言没多久,利用一点闲暇时间编了一个挺有意思的小程序,
使用了easyx图形库,可以通过按键控制球的重力方向。
有一些bug与不足之处,还望大家指点。
#include <graphics.h>
#include <time.h>
#include <conio.h>
#include <stdio.h>
#include <windows.h>
int initball();
int process();
int move(int g);
int drawball();
int delball();
int point(int g);
int up();
int left();
int down();
int right();
struct ball
{
int x;
int y;
int speedx = 0;
int speedy = 0;
};
ball b[20];
int g=0;
int i=0;
int count = 0;
int n = 0;
MOUSEMSG m;
int main()
{
initgraph(800, 800);
setbkcolor(WHITE);
cleardevice();
settextstyle(30, 0, L"微软雅黑");
settextcolor(RED);
outtextxy(0, 0, L"鼠标点击产生小球(不超过20个),空格开始");
outtextxy(0, 31, L"wasd控制重力方向");
outtextxy(0, 62, L"空格使小球不受重力");
setlinecolor(BLACK);
up();
down();
left();
right();
rectangle(98, 98, 702, 702);
initball();
while (1)
{
process();
for (i = 0; i < n; i++)
{
move(process());
}
point(process());
rectangle(98, 98, 702, 702);
Sleep(20);
}
return 0;
}
int initball()
{
setlinecolor(GREEN);
while (1)
{
m = GetMouseMsg();
switch (m.uMsg)
{
case WM_LBUTTONDOWN:
b[i].x = m.x;
b[i].y = m.y;
circle(b[i].x, b[i].y, 20);
i++;
n++;
break;
}
if (_kbhit())
{
if (_getch() == ' ')
{
return 0;
}
}
if (n > 19)
{
return 0;
}
}
return 0;
}
int process()
{
char i;
if (_kbhit())
{
i = _getch();
switch (i)
{
case('w') :
g = 2;
break;
case('a') :
g = 3;
break;
case('s') :
g = 1;
break;
case('d') :
g = 4;
break;
case(' ') :
g = 0;
break;
}
}
return g;
}
int move(int g)
{
delball();
if (g == 0)
{
if (b[i].y < 679 && b[i].y>121)
{
b[i].x += b[i].speedx;
b[i].y += b[i].speedy;
}
if (b[i].y >= 679)
{
b[i].y = 679;
b[i].speedy = -b[i].speedy;
b[i].x += b[i].speedx;
b[i].y += b[i].speedy;
}
if (b[i].y <= 121)
{
b[i].y = 121;
b[i].speedy = -b[i].speedy;
b[i].x += b[i].speedx;
b[i].y += b[i].speedy;
}
if (b[i].x >= 679)
{
b[i].x = 679;
b[i].speedx = -b[i].speedx;
b[i].x += b[i].speedx;
b[i].y += b[i].speedy;
}
if (b[i].x <= 121)
{
b[i].x = 121;
b[i].speedx = -b[i].speedx;
b[i].x += b[i].speedx;
b[i].y += b[i].speedy;
}
drawball();
}
if (g == 1)
{
if (b[i].y < 679 && b[i].y>121)
{
b[i].speedy++;
b[i].x += b[i].speedx;
b[i].y += b[i].speedy;
}
if (b[i].y>=679)
{
b[i].y = 679;
b[i].speedy = -b[i].speedy;
b[i].speedy++;
b[i].x += b[i].speedx;
b[i].y += b[i].speedy;
}
if (b[i].y<=121)
{
b[i].y = 121;
b[i].speedy = -b[i].speedy;
b[i].speedy++;
b[i].x += b[i].speedx;
b[i].y += b[i].speedy;
}
if (b[i].x>=679)
{
b[i].x = 679;
b[i].speedx = -b[i].speedx;
b[i].speedy++;
b[i].x += b[i].speedx;
b[i].y += b[i].speedy;
}
if (b[i].x<=121)
{
b[i].x = 121;
b[i].speedx = -b[i].speedx;
b[i].speedy++;
b[i].x += b[i].speedx;
b[i].y += b[i].speedy;
}
drawball();
}
if (g == 2)
{
if (b[i].y < 679 && b[i].y>121)
{
b[i].speedy++;
b[i].x += b[i].speedx;
b[i].y -= b[i].speedy;
}
if (b[i].y >= 679)
{
b[i].y = 679;
b[i].speedy = -b[i].speedy;
b[i].speedy++;
b[i].x += b[i].speedx;
b[i].y -= b[i].speedy;
}
if (b[i].y <= 121)
{
b[i].y = 121;
b[i].speedy = -b[i].speedy;
b[i].speedy++;
b[i].x += b[i].speedx;
b[i].y -= b[i].speedy;
}
if (b[i].x >= 679)
{
b[i].x = 679;
b[i].speedx = -b[i].speedx;
b[i].speedy++;
b[i].x += b[i].speedx;
b[i].y -= b[i].speedy;
}
if (b[i].x <= 121)
{
b[i].x = 121;
b[i].speedx = -b[i].speedx;
b[i].speedy++;
b[i].x += b[i].speedx;
b[i].y -= b[i].speedy;
}
drawball();
}
if (g == 4)
{
if (b[i].x < 679 && b[i].x>121)
{
b[i].speedx++;
b[i].x += b[i].speedx;
b[i].y += b[i].speedy;
}
if (b[i].x >= 679)
{
b[i].x = 679;
b[i].speedx = -b[i].speedx;
b[i].speedx++;
b[i].x += b[i].speedx;
b[i].y += b[i].speedy;
}
if (b[i].x <= 121)
{
b[i].x = 121;
b[i].speedx = -b[i].speedx;
b[i].speedx++;
b[i].x += b[i].speedx;
b[i].y += b[i].speedy;
}
if (b[i].y >= 679)
{
b[i].y = 679;
b[i].speedy = -b[i].speedy;
b[i].speedx++;
b[i].x += b[i].speedx;
b[i].y += b[i].speedy;
}
if (b[i].y <= 121)
{
b[i].y = 121;
b[i].speedy = -b[i].speedy;
b[i].speedx++;
b[i].x += b[i].speedx;
b[i].y += b[i].speedy;
}
drawball();
}
if (g == 3)
{
if (b[i].x < 679 && b[i].x>121)
{
b[i].speedx++;
b[i].x -= b[i].speedx;
b[i].y += b[i].speedy;
}
if (b[i].x >= 679)
{
b[i].x = 679;
b[i].speedx = -b[i].speedx;
b[i].speedx++;
b[i].x -= b[i].speedx;
b[i].y += b[i].speedy;
}
if (b[i].x <= 121)
{
b[i].x = 121;
b[i].speedx = -b[i].speedx;
b[i].speedx++;
b[i].x -= b[i].speedx;
b[i].y += b[i].speedy;
}
if (b[i].y >= 679)
{
b[i].y = 679;
b[i].speedy = -b[i].speedy;
b[i].speedx++;
b[i].x -= b[i].speedx;
b[i].y += b[i].speedy;
}
if (b[i].y <= 121)
{
b[i].y = 121;
b[i].speedy = -b[i].speedy;
b[i].speedx++;
b[i].x -= b[i].speedx;
b[i].y += b[i].speedy;
}
drawball();
}
return 0;
}
int drawball()
{
setlinecolor(GREEN);
circle(b[i].x, b[i].y, 20);
return 0;
}
int delball()
{
setlinecolor(WHITE);
circle(b[i].x, b[i].y, 20);
return 0;
}
int point(int g)
{
switch (g)
{
case(0) :
setlinecolor(BLACK);
up();
down();
left();
right();
break;
case(1):
setlinecolor(BLACK);
up();
setlinecolor(GREEN);
down();
setlinecolor(BLACK);
left();
right();
break;
case(2):
setlinecolor(GREEN);
up();
setlinecolor(BLACK);
down();
left();
right();
break;
case(3):
setlinecolor(BLACK);
up();
setlinecolor(GREEN);
left();
setlinecolor(BLACK);
down();
right();
break;
case(4):
setlinecolor(BLACK);
up();
setlinecolor(GREEN);
right();
setlinecolor(BLACK);
left();
down();
break;
}
return 0;
}
int up()
{
line(400, 80, 400, 20);
line(400, 20, 350, 50);
line(400, 20, 450, 50);//上键
return 0;
}
int down()
{
line(400, 720, 400, 780);
line(400, 780, 350, 750);
line(400, 780, 450, 750);//下键
return 0;
}
int left()
{
line(20, 400, 80, 400);
line(20, 400, 50, 350);
line(20, 400, 50, 450);//左键
return 0;
}
int right()
{
line(780, 400, 720, 400);
line(780, 400, 750, 350);
line(780, 400, 750, 450);//右键
return 0;
}