吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1289|回复: 0
收起左侧

[C&C++ 转载] C和easyx实现的弹球,请大佬指教

  [复制链接]
关山月明 发表于 2020-7-23 11:59
本帖最后由 关山月明 于 2020-7-23 12:06 编辑

[C] 纯文本查看 复制代码
#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[5];
char         input;//用户操作  A  D


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;
}


因为这是之间写的了,有些图片和声音文件被清理了,所以就没有背景图和音乐了。第二个问题就是图像刷新太快了,这个我不清楚应该怎么解决,大佬知道的可以指点一二。

由于写得很拙劣,中间实现还不是很完美,所以希望大家指点指点。

免费评分

参与人数 3吾爱币 +2 热心值 +3 收起 理由
weiguamg + 1 用心讨论,共获提升!
windover + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
qianmo2001 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 03:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表