键盘小钢琴[C语言][自制]

大一上最喜欢的一个作品 。刚开始只是一个能自动发出小星星音乐的小程序XD

效果图:

代码如下:

/*This is a small piano.这是一个小钢琴哦~*/
#include<stdio.h>
#include<conio.h>    //非缓冲输入
#include<stdlib.h>
#include<Windows.h>
#pragma warning(disable:4996)  //to use getche() in VS needs it
#define TICK 450
#define DOH 523
#define RAY 587
#define MI 659
#define FA  698
#define SOH  784
#define LA   880
#define TEE   980
#define DOHH  1060
#define RAYH  1175
#define MIH   1318
#define FAH  1397
#define SOHH  1568
#define LAH   1760
#define TEEH  1976

void welcome(void);
void display(void);
void playmusic1(void);  //play music with color
void playmusic2(void);   //play music without color
void thanks(void);
void choose1(void);    //choose a type
void choose2(void);    //choose a song
void song1(void);
void song2(void);
char a;
int choice,choice2;

int main(void)
{
	welcome();
	if (choice == 2)
	{
		printf("Enter numbers to play music:('p' to quit)\n");
		while (1)
		{
			playmusic1();
			if (a == 'p')
				break;
		}
	}
	else
	{
		printf("Please choose the song you want to play:\n"
			"1.Castle In The Sky(天空之城)\n2.星の在り処(星之所在)\n");
		choose2();
	}
	thanks();
	return 0;
}

void welcome(void)
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
	printf("1-DOH  2-RAY   3-MI         数字1到7,字母Q\n"
		"4-FA   5-SOH   6-LA      WERTYU分别对应音阶\n"
		"7-TEE  Q-DOHH  W-RAYH\n"
		"E-MIH  R-FAH   T-SOH\n"
		"Y-LAH  U-TEEH\n");
	display();
	choose1();
}

void display(void)
{
	int i;
	for (i = 0; i < 80; i++)
		printf("=");
}

void choose1(void)
{
	printf("Choose a game type:\n1.play songs(弹奏模式)\t2.free play(自由模式)\n");
	while ((scanf("%d", &choice)) != 1)
	{
		while (getchar() != '\n');
		printf("Please enter a number ~");
	}
	display();
}

void choose2(void)
{
	while ((scanf("%d", &choice2)) != 1)
	{
		while (getchar() != '\n')
			printf("Please enter a number ~");
	}
	display();
	if (choice2 == 1)
		song1();
	else song2();
	printf("Enter numbers to play music:('p' to quit)\n");
	while (1)
	{
		playmusic2();
		if (a == 'p')
			break;
	}
}

void playmusic1(void) //发声并设置颜色
{
	a = getch();
	switch (a)
	{
	case '1':Beep(DOH, TICK); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 30); printf("DOH "); break;
	case '2':Beep(RAY, TICK); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 60); printf("RAY "); break;
	case '3':Beep(MI, TICK); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 90); printf("MI "); break;
	case '4':Beep(FA, TICK); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 120); printf("FA "); break;
	case '5':Beep(SOH, TICK); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 150); printf("SOH "); break;
	case '6':Beep(LA, TICK); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 180); printf("LA "); break;
	case '7':Beep(TEE, TICK); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 210); printf("TEE "); break;
	case 'q':Beep(DOHH, TICK); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 30); printf("DOHH "); break;
	case 'w':Beep(RAYH, TICK); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 60); printf("RAYH "); break;
	case 'e':Beep(MIH, TICK); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 90); printf("MIH "); break;
	case 'r':Beep(FAH, TICK); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 120); printf("FA "); break;
	case 't':Beep(SOHH, TICK); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 150); printf("SOH "); break;
	case 'y':Beep(LAH, TICK); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 180); printf("LA "); break;
	case 'u':Beep(TEEH, TICK); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 210); printf("TEE "); break;
	case '\n':break;
	default :break;
	}
}

void playmusic2(void) //发声
{
	a = getch();
	switch (a)
	{
	case '1':Beep(DOH, TICK);  break;
	case '2':Beep(RAY, TICK); break;
	case '3':Beep(MI, TICK);  break;
	case '4':Beep(FA, TICK);  break;
	case '5':Beep(SOH, TICK);  break;
	case '6':Beep(LA, TICK);  break;
	case '7':Beep(TEE, TICK);  break;
	case 'q':Beep(DOHH, TICK);  break;
	case 'w':Beep(RAYH, TICK);  break;
	case 'e':Beep(MIH, TICK);  break;
	case 'r':Beep(FAH, TICK);  break;
	case 't':Beep(SOHH, TICK);  break;
	case 'y':Beep(LAH, TICK); break;
	case 'u':Beep(TEEH, TICK); break;
	case '\n':break;
	default:break;
	}
}

void thanks(void)
{
	putchar('\n');
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
	display();
	printf("Thanks for playing~~~\n");
	system("pause");
}

void song1(void) //天空之城
{
	printf("67Q7QE7 3656Q5 3434Q3 \n");
}

void song2(void) //星之所在
{
	printf("Q7QE7 656Q5 434Q75 67QEW Q7QE75 67QWE REWQ7E\n");
}

版权声明:欢迎转载(^ω^)~不过转载请注明原文出处:http://blog.csdn.net/catglory ?(????)

时间: 2024-10-15 01:43:00

键盘小钢琴[C语言][自制]的相关文章

C#控制台小钢琴

 控制台钢琴小程序 static void Main(string[] args) { WindowsMediaPlayer wmp = new WindowsMediaPlayer(); [email protected]"f:\all of musics\kukuku\hisaishi joe - ballade.mp3"; while (true) { ConsoleKeyInfo cki = Console.ReadKey(true); int c = cki.KeyCha

Android UI设计之&lt;十一&gt;自定义ViewGroup,打造通用的关闭键盘小控件ImeObserverLayout

转载请注明出处:http://blog.csdn.net/llew2011/article/details/51598682 我们平时开发中总会遇见一些奇葩的需求,为了实现这些需求我们往往绞尽脑汁有时候还茶不思饭不香的,有点夸张了(*^__^*)--我印象最深的一个需求是在一段文字中对部分词语进行加粗显示.当时费了不少劲,不过还好,这个问题最终解决了,有兴趣的童靴可以看一下:Android UI设计之<六>使用HTML标签,实现在TextView中对部分文字进行加粗显示. 之前产品那边提了这样

JAVA学习之Ecplise IDE 使用技巧(2)第二章:键盘小快手,代码辅助

上一篇:JAVA学习之Ecplise IDE 使用技巧(1)第一章:我的地盘我做主,工作空间 第二章:键盘小快手,代码辅助 内容包括: 第一:显示行号 如何设置行号:Ecplice菜单Windows>Preferences>General>Editors>Text Editors>勾掉Show Line Numbers 第二:打造更强大的代码提示 一般.笨的方法是:输入几个字母后按住Alt+/ 如何设置自动提示: 默认配置是: Ecplice菜单Windows>Pref

小程序脚本语言WXS详解

WXS脚本语言是 Weixin Script脚本的简称,是JS.JSON.WXML.WXSS之后又一大小程序内部文件类型.截至到目前小程序已经提供了5种文件类型. 解构小程序的几种方式,其中一种方式就是通过文件类型:JS.JSON.WXML.WXSS.WXS.前面四种之前已经介绍过,今天主要是介绍WXS这种文件类型.如果你是PHP.JAVA.C#程序员的话写过服务端代码的话,就很好理解WXS这种脚本语言了.能够更加方便的动态实现页面上的一些基本逻辑判断,而不用全部的依赖后台实现,再通过接口返回.

Android 软键盘小知识点

chatText = (EditText) findViewById(R.id.chatText); chatText.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER))

安卓键盘小工具

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); //隐藏软键盘 //                imm.hideSoftInputFromWindow(tv.getWindowToken(), 0); //显示软键盘 //                imm.showSoftInputFromInputMethod(tv.getWindowToken()

2048小游戏4X4C语言

不好意思,不知道怎样添加附件,原本想将写的源代码(.c)文件上传的. 找了半天没有找到,只能将源程序写到一个文件中,粘贴到这里. 有感兴趣的朋友们,可以拷贝下面的代码运行一下,格式需要自己调整. 也可以访问百度云盘http://pan.baidu.com/s/1hsa675M下载源文件. /*2048*/ #include<stdio.h>#include<stdlib.h>#include<conio.h>#include<time.h> void pri

七牛上传小工具-Go语言版本

运行环境: Mac os X and Linux 现在当前目录下创建qiniu.json文件: { "AK":"XXX" , "SK":"XXX", "BN":"xx" } package main import ( "encoding/json" "fmt" "io/ioutil" "os" "p

WinCE6.0多国语言软键盘

N久以前写过一篇<WinCE下自定义的大软键盘>,这个自定义软键盘就是为RM905a+项目来做的.RM905a+的系统分辨率是640*480,WinCE原生键盘小的太小,大的又太大.所以就去除了大软键盘其中很多没必要的按键,既满足了使用需求,又提高了用户体验,不至于一个软键盘就占了大半个屏幕.当然那时候没有美工可以帮忙,图片处理都是自己搞的,所以RM905a+的界面也都是一抹黑,其实就是用的最简单的MFC+高对比黑色的主题,虽然不太好看,但反而很像专业仪器. 后来做车载导航设备,在国外卖的不错