C# -写个可可图片播放器
效果
程序分析
- 资源准备
- 准备两组图,一组汽车图(5张);一组动物图(5张)
- 将图片都添加到项目的资源文件中;项目右侧有个Resources.resx文件,点击出现左侧界面,选中添加资源,选则添加现有文件,从本地文件中选则下载好的两组图片。 添加完成后,项目中会自动生成一个文件夹里面都是刚添加的图片文件
- 准备一个背景音乐(.wav 格式的)
- 添加到项目的资源文件中(与添加图片一样的操作方法)
- 添加一个PictureBox控件,区域拉大点,用来播放图片
- 左侧添加两个按钮,接入动物、接入汽车
- 接入动物:生成一个动物图片对象,用来播放动物相关图片
- 接入汽车:生成一个汽车图片对象,用来播放汽车相关图片
- 下面需要三个Button 按钮,上一张、开始/停止、下一张;代码逻辑如下
- 上一张:将上一张图片赋值给pictureBox控件,并判断如果当前是第一张,则上一张是最后一张
- 下一张:将上一张图片赋值给pictureBox控件,并判断如果当前是最后一张,则下一张是第一张
- 开始/停止:点击开始则进行自动播放(打开定时器开关);点击停止则关闭自动播放(关掉定时器开关)
- 以上按钮都需要自动生成点击事件
- 主窗体添加一个load事件,用来初始化窗体,代码逻辑如下
- 加载背景音乐
- 设置窗体启动默认播放的图片
- 定义一个 图片的接口,接口拥有上一张、下一张、播放的功能,再建立一个动物图和汽车图来实现这个接口,这样一来接口中的几个方法都会复写一下
直接上代码
主窗体类, 初始化窗体
- 加载背景音乐
- 设置窗体启动默认播放的图片
// 图片资源
IPicture pic;
private void Form1_Load(object sender, EventArgs e)
{
// 加载背景音乐
SoundPlayer backBgm = new SoundPlayer();
backBgm.Stream = Properties.Resources._02__远辰落身旁;
backBgm.PlayLooping();
// 默认接入动物图片
pic = new Animal();
}
播放按钮逻辑
- 点击开始则进行自动播放(打开定时器开关)
- 点击停止则关闭自动播放(关掉定时器开关)
private void button1_Click(object sender, EventArgs e)
{
// 退出自动播放,关闭定时任务
bool result = this.timer1.Enabled;
if (result)
{
this.timer1.Enabled = false;
this.button1.Text = "开始";
}
else
{
this.timer1.Enabled = true;
this.button1.Text = "停止";
}
}
定时器
private void timer1_Tick(object sender, EventArgs e)
{
// 播放图片
this.pictureBox1.Image = pic.PlayPic();
}
上一张、下一张图片逻辑
- 将上一张图片赋值给pictureBox控件,并判断如果当前是第一张,则上一张是最后一张
- 将下一张图片赋值给pictureBox控件,并判断如果当前是最后一张,则下一张是第一张
private void button2_Click(object sender, EventArgs e)
{
//如果当前是最后一张图,下一张就是第一张图
this.pictureBox1.Image = pic.NextPic();
}
private void button3_Click(object sender, EventArgs e)
{
//如果当前是第一张图,上一张就是最后一张图
this.pictureBox1.Image = pic.PrePic();
}
接入动物和接入车辆图片按钮
- 生成一个动物图片对象,用来播放动物相关图片
- 生成一个汽车图片对象,用来播放汽车相关图片
private void button4_Click(object sender, EventArgs e)
{
// 接入动物
pic = new Animal();
}
private void button5_Click(object sender, EventArgs e)
{
// 接入汽车
pic = new CarPic();
}
}
IPicture 接口
接口拥有上一张、下一张、播放的功能,再建立一个动物图和汽车图来实现这个接口,这样一来接口中的几个方法都会复写一下
namespace 可可图片播放器
{
interface IPicture
{
// 图片初始化
void InitPic();
//播放图片
Image PlayPic();
// 上一张图片
Image PrePic();
// 下一张图片
Image NextPic();
}
}
Animal动物图片类
namespace 可可图片播放器
{
class Animal : IPicture
{
// 图片资源
Image[] imgArray = new Image[5];
int index = 0;
public Animal()
{
// 初始化图片
InitPic();
}
public void InitPic()
{
// 加载图片资源
imgArray[0] = Properties.Resources._1;
imgArray[1] = Properties.Resources._2;
imgArray[2] = Properties.Resources._3;
imgArray[3] = Properties.Resources._4;
imgArray[4] = Properties.Resources._5;
}
public Image NextPic()
{
//如果当前是最后一张图,下一张就是第一张图
if (index == imgArray.Length - 1)
{
index = 0;
}
else
{
// 播放下一张图片
index = index + 1;
}
return imgArray[index];
}
public Image PlayPic()
{
// 播放图片
Image image = imgArray[index];
index++;
// 如果播放到最后了,就重新开始播放
if (index >= imgArray.Length)
{
index = 0;
}
return image;
}
public Image PrePic()
{
//如果当前是第一张图,上一张就是最后一张图
if (index == 0)
{
index = imgArray.Length - 1;
}
else
{
// 播放上一张图片
index = index - 1;
}
return imgArray[index];
}
}
}
CarPic类
namespace 可可图片播放器
{
class CarPic : IPicture
{
// 图片资源
Image[] imgArray = new Image[5];
int index = 0;
public CarPic()
{
// 初始化图片
InitPic();
}
public void InitPic()
{
// 加载图片资源
imgArray[0] = Properties.Resources.c1;
imgArray[1] = Properties.Resources.c2;
imgArray[2] = Properties.Resources.c3;
imgArray[3] = Properties.Resources.c4;
imgArray[4] = Properties.Resources.c5;
}
public Image NextPic()
{
//如果当前是最后一张图,下一张就是第一张图
if (index == imgArray.Length - 1)
{
index = 0;
}
else
{
// 播放下一张图片
index = index + 1;
}
return imgArray[index];
}
public Image PlayPic()
{
// 播放图片
Image image = imgArray[index];
index++;
// 如果播放到最后了,就重新开始播放
if (index >= imgArray.Length)
{
index = 0;
}
return image;
}
public Image PrePic()
{
//如果当前是第一张图,上一张就是最后一张图
if (index == 0)
{
index = imgArray.Length - 1;
}
else
{
// 播放上一张图片
index = index - 1;
}
return imgArray[index];
}
}
}
微信公众号同名