22.01.21总结

讲个故事: 今天看到一个扫雷题。

想起了很久之前的一个图形程序,把文件夹翻出来看了看

下面不需要解释了吧,看参数就知道是什么

最上面是图形库加载

库内函数

#include<graphics.h>
#include<MMSystem.h>
#include<stdlib.h>
//有很奇怪的bug  第一个头文件要放MMS前面

#pragma comment(lib,"winmm.lib")
int main() {

	initgraph(529, 576);

	loadimage(0, "007.jpg");//加载窗口上

	mciSendString("play 123.mp3 ", 0, 0, 0);
//循环播放加上repeat
//  mciSendString("play 123.mp3 repeat", 0, 0, 0);
	
	system("pause");

	closegraph();

	return 0;

}

可以复制一下试一试,如果你试了,恭喜你,基本上你会失败

1.去装一个easyX图形库

需要可以自行下载,也可以私信

2.关闭STL检查/或者百度一下报错函数的格式

注:1.图片大小不能过大,会直接黑屏

    2.转成jpg 不是改后缀!!!

    3.歌曲图片不能用汉字命名

演示:

 文件夹:

补充几个函数,图形程序经常用到

随机数种子

#include<time.h>

srand(time(0))  要随机写下这个就好了直接rand是一个伪随机

在0-->n-1(n为任意数)随机        rand()%n

对结果在加上常数k就可以实现在任意区间进行随机取数

是否随机?看数据

    srand(time(0));
    int n=100000;
    while(n--)
    {
        int num;
        num=rand()%5+5;
        a[num]++;
        cout<<num<<endl;
        //Sleep(500);
    }
    for(int i=5;i<=9;i++)
    {
        cout<<a[i]<<" \t";
    }

 

perfect!!! 

实现扫雷的话,操作

生成图形界面

initgraph(10 * 50, 10 * 50);//行10  宽50  列10  宽50

输出image

putimage((j - 1) * 50, (i - 1) * 50, &img[0]);

在(j-1,i-1)处输出图片  值得注意 此处顺序与数组相反

图形操作基本都是这样

获取鼠标信息(照写就好)

目标数组:

IMAGE img[100];  //图像类数组

  存入图片:

loadimage(&img[0], L"100.jpg", 50, 50);

你以为成功了,只是个半成品(doge)

演示效果:(虽然说勉勉强强能VAN……)

 调试代码:

#include<iostream>
#include<algorithm>
#include<string.h>
#include<string>
#include<cstdio>
#include<time.h>
#include<graphics.h>
using namespace std;

const int LINE = 12;
const int  COL= 12;
//10*10
#define NUM 10;//雷的数量
#define SIZE 50;

int map[LINE][COL];
IMAGE img[100];

int i, j, k;
//初始化
void initiative()
{
	srand(time(0));//保证每次随机
	fill(map[0], map[0] + 12 * 12, 0);
	//随机取雷
	int n = NUM;
	while (n)
	{
		int x = rand() % 10+1;
		int y = rand() % 10+1;

		if (!map[i][j])//避免重复
		{
			map[x][y] = -1;
			n--;
		}	
	}
	//遍历数组附近的雷的数量
	//(i,j)周围坐标(i-1,j-1) (i-1,  j)  (i-1)(j+1)
	//			   (  i,j-1) (  i,  j)  (  i)(j+1)
	//             (i+1,j-1) (i+1,  j)  (i+1)(j+1)
	for (i = 1; i <=10; i++)
	{
		for (j = 1; j <=10; j++)
		{
			if (map[i][j] != -1)//本格不是雷
			{
				int sum = 0;//越界没有关系  扩大数组就能解决
				//用if写太lowl
				for (int x = i - 1;x <= i + 1; x++)
				{
					for (int y = j - 1;y <= j + 1; y++)
					{
						if (map[x][y] == -1)
							sum++;
					}
				}
				map[i][j] = sum;
			}
		}
	}
	for (i = 1; i <= 10; i++)
	{
		for (j = 1; j <= 10; j++)
		{
			map[i][j] += 20;
		}
	}
}


//绘图
void paint()
{
	//打印
	//格子 
	//数字
	// 旗帜
	//雷
	for (i = 1; i <= 10; i++)
	{
		for (j = 1; j <= 10; j++)
		{
			if (map[i][j] >= 0 && map[i][j] <= 8)
				putimage((j - 1) * 50, (i - 1) * 50, &img[map[i][j]]);
			else if (map[i][j] == -1)
				putimage((j - 1) * 50, (i - 1) * 50, &img[9]);
			else if (map[i][j] >=19&& map[i][j] <=28)
				putimage((j - 1) * 50, (i - 1) * 50, &img[11]);
			else //标记
			{
				putimage((j - 1) * 50, (i - 1) * 50, &img[10]);
			}
		}
		//cout << endl;
	}
	
}
//操作与规则
int op()
{
	MOUSEMSG msg = { 0 };
	int x, y;
	msg = GetMouseMsg();
	x = msg.x / 50 + 1;
	y = msg.y / 50 + 1;
	if (msg.uMsg == WM_LBUTTONDOWN)//左键
	{
		
		// cout << x << " " << y << "" << endl;
		if(map[y][x]>=19&&map[y][x]<=28)
		map[y][x] -= 20;
		return map[x][y];
	}
	else if (msg.uMsg == WM_RBUTTONDOWN)
	{
		//旗帜标记
		//连点取消
		if (map[y][x] >= 19 && map[y][x] <= 28)
			map[y][x] += 100;
		else if (map[y][x] > 40)
			map[y][x] -= 100;
		return map[x][y];
	}
	
	

}
void load()
{
	loadimage(&img[0], L"100.jpg", 50, 50);
	loadimage(&img[1], L"1.jpg", 50, 50);
	loadimage(&img[2], L"2.jpg", 50, 50);
	loadimage(&img[3], L"3.jpg", 50, 50);
	loadimage(&img[4], L"4.jpg", 50, 50);
	loadimage(&img[5], L"5.jpg", 50, 50);
	loadimage(&img[6], L"6.jpg", 50, 50);
	loadimage(&img[7], L"7.jpg", 50, 50);
	loadimage(&img[8], L"8.jpg", 50, 50);
	loadimage(&img[9], L"9.jpg", 50, 50);//雷
	loadimage(&img[10], L"10.jpg", 50, 50);//旗帜
	loadimage(&img[11], L"0.jpg", 50, 50);//未解开
	

}
int main()
{
	initgraph(10 * 50, 10 * 50);
	putimage((j - 1) * 50, (i - 1) * 50, &img[0]);
	//测试用
	//system("pause");
	load();
	initiative();
	while (1)
	{
		paint();
		int t=op();
		if (t == -1)
			break;
	}
}

图片资源及教程:

在这里右键点开文件夹进入

 把图片放进去就好了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我来为您解答这个问题。 首先,我们需要将数据整理成R可处理的格式。这里,我将数据手动输入到R中,并将其保存为data.frame对象: ```R transportation <- data.frame( year = 2002:2021, railway = c(366.34, 375.14, 401.82, 419.16, 436.38, 447.02, 471.85, 487.8, 503.12, 518.25, 516.16, 522.77, 516.81, 532.08, 531.9, 527, 524.47, 511.09, 492, 476), highway = c(71.31, 67.32, 68.07, 67.88, 67.03, 66.3, 66.35, 63.34, 60.7, 51.92, 51, 49.2, 48.62, 46.52, 56.11, 54.45, 54.74, 54, 53, 45), water = c(20.27, 22.01, 29.42, 28.44, 27.44, 26.56, 27, 28.27, 29.03, 30.09, 30.35, 32.27, 31.09, 29.1, 34.06, 33.38, 33.5, 34.8, 37, 39), air = c(1482.14, 1510.68, 1773.71, 1751.13, 1724.75, 1716.97, 1669.62, 1616.08, 1598.11, 1573.69, 1547.57, 1508.83, 1464.21, 1497.47, 1502.85, 1484.65, 1479, 1470, 1442, 1432) ) ``` 接下来,我们可以使用ggplot2库绘制各种图形来更好地理解数据。 首先,我们可以使用ggplot2库绘制各种运输方式的时间序列折线图,代码如下: ```R library(ggplot2) ggplot(melt(transportation, id.vars = "year"), aes(x = year, y = value, color = variable)) + geom_line() + xlab("Year") + ylab("Passenger Distance") + ggtitle("Passenger Distance by Transportation Type") + theme(legend.position = "bottom") ``` 运行上面的代码,可以得到一个绘制了四种运输方式的时间序列折线图。 接着,我们可以使用ggplot2库绘制各种运输方式的密度图,代码如下: ```R ggplot(melt(transportation, id.vars = "year"), aes(x = value, fill = variable)) + geom_density(alpha = 0.5) + xlab("Passenger Distance") + ylab("Density") + ggtitle("Passenger Distance Density by Transportation Type") ``` 运行上面的代码,可以得到一个绘制了四种运输方式的密度图。 最后,我们可以使用ggplot2库绘制各种运输方式的箱线图,代码如下: ```R ggplot(melt(transportation, id.vars = "year"), aes(x = variable, y = value, fill = variable)) + geom_boxplot() + xlab("Transportation Type") + ylab("Passenger Distance") + ggtitle("Passenger Distance by Transportation Type") ``` 运行上面的代码,可以得到一个绘制了四种运输方式的箱线图。 以上是本次数据分析的R代码和图形,希望能够帮到您。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值