自制KTV点歌系统经验

重唱与切歌

1.重唱

这个简单,会了播放,就会了这个;

我们用的数组下标来确定播放歌曲,自然如果下标没变的话,那播放的就还是这首了。所以只要确定了要执行的命令是重唱就行了。

那么问题来了,如何确定执行的命令是什么。

Song类:

我们可以自定义一个Song歌曲类,用来封装歌曲的姓名,路径,状态。

姓名:歌曲名

路径:用于播放

状态:确定执行的命令

在定义一个枚举来确定状态的取值范围

已播,未播,重唱,切歌

前边的所有Song类的对象的模板都是这个类的实例

这样只要在播放窗口的Tick事件中加个if判断来确定当前播放歌曲的状态是否为重唱,如是:

让当前播放歌曲为空,这样因为播放不为停止所以不会进入下一首的if判定,而因为歌曲为空,

一秒后Tick事件再次触发时,歌曲为空,就再次得到核心类的正在播放歌曲,而因为没有进入下一首的if

判定所以播放歌曲下标不变,自然播放的还是当前播放的歌曲。

2.切歌

同理与重唱,只要用歌曲的状态知道了要执行的是切歌命令,在播放窗体做出相应的判断就行了。

那切歌需要执行的操作有那些哪?

其实只有一个,那就是覆盖。

既然我们用的是数组,那只要让数组的下标的位置发生变化既循环让数组的下标i+1项把值赋给数组下标i项不就可以(当然要注意下标越界和空值等问题)当然要改变播放歌曲的状态为切歌。

播放类里,如播放歌曲的状态为切歌  那把播放歌曲的值赋为null(空)

我们伟大的Tick事件在漫偶长的1秒后从新触发时歌曲为null

得到核心类的正在播放歌曲,因为切歌是已循环覆盖了数组的值,所以自然就没有了已被切掉的歌曲。

2.2如要切指定的歌曲那?

同理,只要得到要切歌的歌曲在数组里的下标,然后同上操作。

1.首先既然要选就得有已点歌曲列表。如用ListView控件表示

2.得到所选的歌曲的下标,用SelectedItems得到

3.重复上边的步骤就可以了

KTV2的更多相关文章

  1. python全栈开发 * 线程锁 Thread 模块 其他 * 180730

    一,线程Thread模块1.效率更高(相对于进程) import time from multiprocessing import Process from threading import Thre ...

  2. Badboy - variable setter

    参考: http://leafwf.blog.51cto.com/872759/1117646 http://www.51testing.com/html/00/130600-1367743.html ...

随机推荐

  1. 从 mian 函数开始一步一步分析 nginx 执行流程(二)

    如不做特殊说明,本博客所使用的 nginx 源码版本是 1.0.14,[] 中是代码所在的文件! 上一个博客中我们将 main 函数执行流程分析完,到最后一步调用 ngx_master_process ...

  2. Coach(并查集)

    Description A programming coach has n students to teach. We know that n is divisible by 3. Let's ass ...

  3. WordPress 开放重定向漏洞

    漏洞名称: WordPress 开放重定向漏洞 CNNVD编号: CNNVD-201309-167 发布时间: 2013-09-13 更新时间: 2013-09-13 危害等级: 高危   漏洞类型: ...

  4. BZOJ2134: 单选错位

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2134 题解:因为每个答案之间是互不影响的,所以我们可以挨个计算. 假设当前在做 i 题目,如果 ...

  5. 查看Mysql执行计划

    使用navicat查看mysql执行计划: 打开profile分析工具: 查看是否生效:show variable like ‘%profil%’; 查看进程:show processlist; 选择 ...

  6. Light OJ 1032 - Fast Bit Calculations(数位DP)

    题目大意: 一个数字把他看成二进制数字,数字里又会一些相邻的1,问从0到n至间所有相邻1的总和是多少?   分解成2进制数字,然后数位DP就行了.   ======================== ...

  7. 【转】怎么在Foxmail回复/转发时使用签名?

    原文网址:http://kf.qq.com/faq/120322fu63YV130422yABZRZ.html Foxmail回复/转发时使用签名,可通过在模版中设置签名.如下版本操作方法: 一.fo ...

  8. JAVA中ProcessBuilder执行cmd命令找不到路径的解决方法

    今天遇到了一个很奇葩的问题,终于解决了,记一下,以做备忘. 前提条件:工程路径在D盘下 cmd要执行的可执行文件路径不在D盘下 然后...出事了............................ ...

  9. leetcode 最大矩形和

    1.枚举法(超时) public class Solution { public int largestRectangleArea(int[] height) { int max=-1; for(in ...

  10. ACM2096_小明A+B

    #include<iostream> int main() { using namespace std; int a,b,count; cin>>count; while(co ...