程序员开发实例大全宝库

网站首页 > 编程文章 正文

C/C++打造温馨浪漫的表白程序(c+ 表白代码)

zazugpt 2024-09-07 01:56:09 编程文章 20 ℃ 0 评论

/***********************************************

文件名称:main.cpp

文件描述:实现一个表白程序

编译环境:VS2013 && EasyX

最后修改:

<2016年12月24日> <创建工程>

***********************************************/

//EasyX 图形界面库 C C++ ------>MFC Win32 QT duilib

//前期的学习会不会很枯燥?

//VIP 1、让大家有兴趣去深入的学习。

// 2、做很多小项目 贪吃蛇 推箱子 俄罗斯方块 连连看 提高大家的逻辑思维能力

#include <stdio.h> //标准的输入输出头文件

#include <math.h>

#include <graphics.h> //图形库头文件

#include <mmsystem.h>

#pragma comment(lib,"winmm.lib")

#include "resource.h"

#include <conio.h>

#define NUM 13

#define PI 3.1415926548

//烟花弹结构体

struct Jet

{

int x; //坐标

int y;

int hx; //最高的坐标 将赋值给烟花

int hy;

int height; //高度

bool shoot; //是否可以发射

DWORD t1, t2, dt;//烟花弹的上升速度

IMAGE img[2]; //一亮一暗两张图片

byte n : 1; //图片下标 0 1 //位段 一个二进制位 int 32 float 32 short 16

}jet[13];

//烟花结构体

struct Fire

{

int x, y;//坐标

int cen_x, cen_y;//中心坐标

int width,height;//图片的宽和高

int r;//半径 从小变大

int max_r;//最大的半径

int xy[240][240]; //像素点的集合

bool show;

bool draw;//输出像素点

DWORD t1, t2, dt;

}fire[NUM];

void Init(int i);

void welcome();

void Load();

void Chose(DWORD& t1);

void shoot();

void Show(DWORD* pMem);

//C 语言 条件选择 函数的使用 循环 数据类型

// 库函数 逻辑思维 了解库函数的时候 组装成一个程序。

int main() //在使用一些标准库函数的时候 需要添加头文件

{

initgraph(1200, 800); //打开一个界面

welcome();

DWORD t1 = timeGetTime();

DWORD *pMem = GetImageBuffer();

//循环初始化13次

for (int i = 0; i < NUM; i++)

{

Init(i);

}

Load();

BeginBatchDraw();

while (!_kbhit())

{

Sleep(10);

for (int clr = 0; clr < 1000; clr++)

{

for (int j = 0; j < 2; j++)

{

int px1 = rand() % 1200;

int py1 = rand() % 800;

if (py1 < 799)

{

pMem[py1 * 1200 + px1] = pMem[py1 * 1200 + px1 + 1] = BLACK;

}

}

}

Chose(t1);

shoot();

Show(pMem);

FlushBatchDraw(); //吧显存展示出来

}

getchar();

closegraph();//关闭界面

return 0;

}

void welcome()

{

//wav

//PlaySound((LPCTSTR)IDR_WAVE1, NULL, SND_RESOURCE | SND_LOOP | SND_ASYNC);

//MP3

mciSendString(L"open ./music/你还要我怎样.mp3 alias BGM", 0, 0, 0);

mciSendString(L"play BGM repeat", 0, 0, 0);

settextcolor(YELLOW);

//怎样得到一个圆的轨迹上的n个坐标。

for (int i = 0; i < 50; i++)

{

int x = 600 + int(180 * sin(PI * 2 * i / 60));

int y = 200 + int(180 * cos(PI * 2 * i / 60));

cleardevice(); //刷新 没有指定颜色 默认为黑色

settextstyle(i, 0, L"楷体");

outtextxy(x - 200, y, L"平安夜,谨献给:");

outtextxy(x + 50, y + 100, L"最爱的女神某某某");

Sleep(25);

}

getchar(); //卡住

cleardevice();

settextstyle(25, 0, L"楷体");

outtextxy(400,150,L"XXXXXXXXXXXXXXXXXXX");

outtextxy(400, 150, L"XXXXXXXXXX");

outtextxy(400, 200, L"XXXXXXXXX");

outtextxy(400, 250, L"XXXXXXXXXXXXXXXXXX");

outtextxy(400, 300, L"XXXXXXXXXXXXXXXXXXXXXXXXXXX");

outtextxy(400, 350, L"XXXXXXXXXXXXXXXXXX");

outtextxy(400, 400, L"XXXXXXXXX");

outtextxy(400, 450, L"XXXXXXXXXXXXXXXXXXXXXXXXXXX");

outtextxy(400, 500, L"XXXXXXXXXXXXXXXXXX");

outtextxy(650, 550, L"___by九夏");

getchar();

}

void Init(int i)

{

int r[13] = { 120, 120, 155, 123, 130, 147, 138, 138, 130, 135, 140, 132, 155 };

int x[13] = { 120, 120, 110, 117, 110, 93, 102, 102, 110, 105, 100, 108, 110 };

int y[13] = { 120, 120, 85, 118, 120, 103, 105, 110, 110, 120, 120, 104, 85 };

//初始化烟花

fire[i].x = 0;

fire[i].y = 0;

fire[i].width = 240;

fire[i].height = 240;

fire[i].max_r = r[i];

fire[i].cen_x = x[i];

fire[i].cen_y = y[i];

fire[i].show = false;

fire[i].dt = 5;

fire[i].t1 = timeGetTime();

fire[i].r = 0;

//初始化烟花弹

jet[i].x = 0;

jet[i].y = 0;

jet[i].hx = 0;

jet[i].hy = 0;

jet[i].height = 0;

jet[i].t1 = timeGetTime();

jet[i].dt = rand() % 10;

jet[i].n = 0;

jet[i].shoot = false;

}

void Load()

{

//加载烟花

IMAGE fm,gm;

loadimage(&fm, L"./images/flower.jpg");

for (int i = 0; i < NUM; i++)

{

SetWorkingImage(&fm); //工作---对象是一张图片

getimage(&gm, i * 240, 0, 240, 240);

SetWorkingImage(&gm); //工作---对象是一张图片

for (int a = 0; a < 240; a++)

{

for (int b = 0; b < 240; b++)

{

fire[i].xy[a][b] = getpixel(a, b);

}

}

}

//加载烟花弹

IMAGE jm;

loadimage(&jm, L"./images/shoot.jpg");

//jm 里面保存了一整张图片 分隔开来

for (int i = 0; i < NUM; i++)

{

SetWorkingImage(&jm); //工作---对象是一张图片

int n = rand() % 5; //0-4

getimage(&jet[i].img[0], n * 20, 0, 20, 50);

getimage(&jet[i].img[1], (n + 5) * 20, 0, 20, 50);

}

SetWorkingImage(NULL); //放弃掉刚才的工作区域。

//零基础 条件选择 循环。

}

//选出13个

void Chose(DWORD& t1)

{

DWORD t2 = timeGetTime();

if (t2 - t1 > 100)

{

int n = rand() % 20;

if (n < NUM&&jet[n].shoot == false&&fire[n].show==false)

{

jet[n].x = rand() % 1200;

jet[n].y = rand() % 100 + 600; //600-699

jet[n].hx = jet[n].x;

jet[n].hy = rand() % 400;

jet[n].height = jet[n].y - jet[n].hy;

jet[n].shoot = true;

putimage(jet[n].x, jet[n].y, &jet[n].img[jet[n].n], SRCINVERT);

}

t1 = t2;

}

}

void shoot()

{

for (int i = 0; i < NUM; i++)

{

jet[i].t2 = timeGetTime();

if (jet[i].t2 - jet[i].t1>jet[i].dt&&jet[i].shoot == true)

{

putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n], SRCINVERT);

if (jet[i].y > jet[i].hy)

{

jet[i].n++; //明暗交替的效果

jet[i].y -= 5;

}

putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n], SRCINVERT);

//

if (jet[i].y <= jet[i].hy)

{

putimage(jet[i].x, jet[i].y, &jet[i].img[jet[i].n], SRCINVERT);

fire[i].x = jet[i].hx + 10;

fire[i].y = jet[i].hy;

fire[i].show = true;

jet[i].shoot = false;

}

jet[i].t1 = jet[i].t2;

}

}

}

void Show(DWORD* pMem) //显存指针 像素 这里面所有的像素点的集合

{

//3D游戏 地形 天空 显存来做

int drt[16] = { 5, 5, 5, 5, 5, 5, 25, 25, 25, 25, 55, 55, 55, 55, 55, 55 };

for (int i = 0; i < NUM; i++)

{

fire[i].t2 = timeGetTime();

if (fire[i].t2 - fire[i].t1>fire[i].dt&&fire[i].show == true)

{

if (fire[i].r < fire[i].max_r)

{

fire[i].r++;

fire[i].dt = drt[fire[i].r / 10];

fire[i].draw = true;

}

if (fire[i].r >= fire[i].max_r-1)

{

fire[i].draw = false;

Init(i);

}

fire[i].t1 = fire[i].t2;

}

if (fire[i].draw)

{

for (double a = 0; a <= 6.28; a += 0.01)

{

int x1 = (int)(fire[i].cen_x + fire[i].r*cos(a));

int y1 = (int)(fire[i].cen_y + fire[i].r*sin(a));

if (x1 > 0 && x1<fire[i].width&&y1>0 && y1 < fire[i].height)

{

int b = fire[i].xy[x1][y1] & 0xff;

int g = (fire[i].xy[x1][y1] >> 8) & 0xff;

int r = (fire[i].xy[x1][y1] >> 16);

int xx = (int)(fire[i].x + fire[i].r*cos(a));

int yy = (int)(fire[i].y - fire[i].r*sin(a));

if (r>0x20 && g > 0x20 && b > 0x20 && xx > 0 && xx<1200 && yy>0 && yy < 800)

pMem[yy * 1200 + xx] = BGR(fire[i].xy[x1][y1]);

}

}

fire[i].draw = false;

}

}

}

//花样显示

//void ShowTime()

//{

//心形 苹果

//}

更多更好玩的程序尽在C语言C++学习交流 壹 496926338 教你做一个浪漫的程序员!俘获女神的芳心

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表