C和easyx实现的弹球,请大佬指教
本帖最后由 关山月明 于 2020-7-23 12:06 编辑#include<graphics.h>
#include<conio.h>
#include<Windows.h>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<tchar.h>
#include"mmsystem.h"//导入声音头文件
#pragma comment(lib,"winmm.lib")
#define High 480
#define Width 640
short int circle_x, circle_y;//移动圆的坐标位置
short int circle_vx, circle_vy;//移动圆移动速度
short int radius = 15;//移动半径
short int rectangle_left, rectangle_top, rectangle_right, rectangle_bottom;//矩形坐标
short int rectangle_left_v, rectangle_top_v,rectangle_right_v, rectangle_bottom_v;//矩形移动速度
short int static_circle_x, static_circle_y;//目标圆的坐标位置
short int static_circle_radius;
short int scores_t;//击中目标圆后的得分
TCHAR scores;
char input;//用户操作AD
int main()
{
PlaySound(L"D:\\FFOutput\\阿南亮子 - Refrain.wav", NULL, SND_FILENAME | SND_ASYNC);//B播放音乐文件
initgraph(Width, High, NULL);//初始化图形
IMAGE Background;//背景图形
IMAGE img;//填充图形
IMAGE Endimg;//结束画面
srand((unsigned)time(NULL));//时间随机数
circle_x = Width / 2;
circle_y = High / 2;
circle_vx = 1;
circle_vy = 1;
rectangle_left = 450;
rectangle_top = 440;
rectangle_right = 550;
rectangle_bottom = 460;
rectangle_left_v = 30;
rectangle_right_v = 30;
rectangle_top_v = 30;
rectangle_bottom_v = 30;
static_circle_x = 100;
static_circle_radius = 15;
static_circle_y = rand() % 350;//随机生成目标圆的y坐标来控制圆
while (true)
{
BeginBatchDraw();
setcolor(YELLOW);
setfillcolor(GREEN);
fillcircle(circle_x, circle_y, radius);
//画第一个圆
setcolor(YELLOW);
setfillcolor(CYAN);
fillcircle(static_circle_x, static_circle_y, static_circle_radius);
//生成目标圆
setcolor(RED);
setfillcolor(RED);
fillrectangle(rectangle_left, rectangle_top, rectangle_right, rectangle_bottom);
//生成移动矩形
settextcolor(LIGHTMAGENTA);
outtextxy(0, 460, L"您的得分:");
_stprintf_s(scores, _T("%d"), scores_t);
outtextxy(100, 460, scores);
settextcolor(LIGHTBLUE);
outtextxy(0, 0, L"著作权拥有者:小唐");
EndBatchDraw();
//基本文字信息输出
setcolor(BLACK);
setfillcolor(BLACK);
fillcircle(circle_x, circle_y, radius);
//用背景色擦除画出的圆
setcolor(BLACK);
setfillcolor(BLACK);
fillrectangle(rectangle_left, rectangle_top, rectangle_right, rectangle_bottom);
//用背景色擦除画出的矩形
//loadimage(&Background, _T("E:\\开发程序\\小小弹球\\2.jpg"), Width, High);
putimage(0, 0, &Background);
//用背景图不断填充
circle_x = circle_x + circle_vx;
circle_y = circle_y + circle_vy;
//移动圆
Sleep(5);
if (_kbhit())
{
input = _getch();
if (input == 'd')
{
rectangle_left += rectangle_left_v;
rectangle_right += rectangle_right_v;
}
else if (input == 'a')
{
rectangle_left -= rectangle_left_v;
rectangle_right -= rectangle_right_v;
}
}//移动矩形
if (circle_x<radius || circle_x>Width - radius)
{
circle_vx = -circle_vx;
}
if ((circle_y > High - 40 - radius) && ((circle_x + radius) > rectangle_left && (circle_x + radius < rectangle_right)) || circle_y < radius)
{
circle_vy = -circle_vy;
}
//边界碰撞检查
if (circle_y + radius >= High)
{
loadimage(&Endimg, _T("E:\\C和C++开发程序\\小小弹球\\1.jpg"), Width, High);
putimage(0, 0, &Endimg);
settextcolor(LIGHTMAGENTA);
outtextxy(Width / 2 - 80, High / 2, L"GAME OVER得分:");
outtextxy(Width / 2 + 50, High / 2, scores);
break;
}
//结束游戏并输出得分
else if ((circle_x > (static_circle_x - static_circle_radius)) && (circle_x < (static_circle_x + static_circle_radius)) && ((circle_y - radius == static_circle_y
+ static_circle_radius) || circle_y + radius == static_circle_y - static_circle_radius))
{
printf("\a");
static_circle_y = rand() % 200;//随机生成目标圆的y坐标来控制圆
scores_t += 1;
setcolor(BLACK);
setfillcolor(BLACK);
fillcircle(static_circle_x, static_circle_y, static_circle_radius);
}
}
_getch();
closegraph();
return 0;
}
因为这是之间写的了,有些图片和声音文件被清理了,所以就没有背景图和音乐了。第二个问题就是图像刷新太快了,这个我不清楚应该怎么解决,大佬知道的可以指点一二。:Dweeqw
由于写得很拙劣,中间实现还不是很完美,所以希望大家指点指点。
页:
[1]