//动态内存分配头文件
#include//加入音乐的头文件
#pragma comment(lib,"winmm.lib")//加入音乐的库
//主函数--》程序入口
int main(){
//随机数种子
srand((unsigned int)time(NULL));
Welcome();//欢迎界面
//GamePlay01();//开始游戏--》单个字母
GamePlay02();//开始游戏--》多个字母
getchar();
return 0;
}
```
## 3. 欢迎界面
```c
void Welcome(){
//功能:打开一个窗口
initgraph(640, 480);//宽:640,高:480 (单位:像素)
//添加背景音乐
//MCI-->media contorl interface 多媒体设备接口
//打开音乐并给音乐取别名
mciSendString(L"open 亿万星辰不及你.mp3 alias BGM", 0, 0, 0);
//播放音乐
mciSendString(L"play BGM", 0, 0, 0);
//创建背景图片
//定义图片对象
IMAGE img;
//加载图片(L表示宽字符,是Unicode 字符编码集)
loadimage(&img, L"bg.png", 640, 480);//图片对象+图片文件路径+图片大小(宽+高)
//输出图片
putimage(0, 0, &img);//窗体坐标+图片对象
//输出文字信息
//设置文字背景模式-->透明
//TRANSPARENT:代表透明,或着直接写【0】,也表示透明
setbkmode(TRANSPARENT);
//设置文本颜色
settextcolor(YELLOW);
//设置文本样式
settextstyle(50, 0, L"黑体");//字体的宽+字体的高+字体的风格
//输出文本信息
outtextxy(175, 50, L"打字练习系统");//文本坐标+文本内容
//设置文本颜色
settextcolor(WHITE);
//设置文本样式
settextstyle(20, 0, L"宋体");//字体的宽+字体的高+字体的风格
//输出文本信息
outtextxy(60, 200, L"* C语言项目实战");//文本坐标+文本内容
outtextxy(60, 240, L"* 版本:1.0");//文本坐标+文本内容
outtextxy(60, 280, L"* 作者:冥冥之中立刻有");//文本坐标+文本内容
//让下面文字颜色不断发生变化
int colorR = 255;
int colorG = 0;
int speed = 5;
//_kbhit()-->判断是否有按键按下
//有按键按下--》true
//无按键按下--》false
while(!_kbhit()){
settextcolor(RGB(colorR, colorG, 150));
outtextxy(250, 430, L"按任意键继续...");
colorR -= speed;
colorG += speed;
if (colorR <= 0 || colorR >= 255){
speed = -speed;
}
Sleep(20);//延时函数
}
cleardevice();//清屏,不会关闭音乐,只会清除图片,文字等。
}
```
## 4. 开始游戏(单个字母掉落)
```c
//开始游戏--》单个字母
void GamePlay01(){
//设置文字颜色
settextcolor(WHITE);
//设置文本样式
settextstyle(50, 0, L"宋体");
char tagLetter;//目标字母
int tagX, tagY;//目标字母的 x 和 y
char keyLetter;//键盘输入的字母
while (1){
//随机得到大写字母
tagLetter = rand() % 26 + 'A';
tagX = rand() % 640;
for (tagY = 0; tagY <= 480; tagY++){
cleardevice();//清屏
outtextxy(tagX, tagY, tagLetter);//输出文字
//检测键盘输入
if (kbhit()){
//getch()-->接收键盘数据,但不显示键盘数据
keyLetter = getch();
//判断是否与目标字母相等
if (keyLetter == tagLetter){
break;
}
}
Sleep(50);//延时 (单位:毫秒)
}
}
getchar();
}
```
## 5. 开始游戏(多个字母掉落)
### 5.1 使用的知识
- 结构体
- 指针
- 数据结构--》链表
### 5.2 代码展示
#### 5.2.1 链表的创建
```c
typedef struct Node{
char ch;//字母
int x;//字母的横坐标
int y;//字母的纵坐标
struct Node *pnext;
}LETTER;
LETTER *pLetter = NULL;//链表的头指针
//创建链表
void CreateList(){
//头节点不保存数据
//为指针开辟一块内存
pLetter = (LETTER*)malloc(sizeof(LETTER));
pLetter->pnext = NULL;
}
//添加字母结点
void AddLetterNode(){
LETTER *pTemp = NULL;//临时指针
LETTER *pNew = NULL;//新指针
pTemp = pLetter;//备份头指针
//让pTemp永远指向链表的最后一个节点
while (pTemp->pnext != NULL){
pTemp = pTemp->pnext;
}
//为新结点开辟内存
pNew = (LETTER*)malloc(sizeof(LETTER));
//为新结点赋值
pNew->ch = rand() % 26 + 'A';
pNew->x = rand() % 620 + 10;//将字母的横坐标控制在:[10,620]
pNew->y = 0;
//将新结点添加到链表的末尾
pNew->pnext = NULL;
pTemp->pnext = pNew;
}
```
#### 5.2.2 开始游戏
```c
//获取时间的变量
DWORD t1, t2;
//开始游戏--》多个字母
void GamePlay02(){
//设置文字颜色
settextcolor(WHITE);
//设置文本样式
settextstyle(30, 0, L"宋体");
char keyLetter;//目标字母
LETTER *pTemp = NULL;
CreateList();
//获取系统的时间
t1 = GetTickCount();
while (1){
//获取系统的时间
t2 = GetTickCount();
//每一秒产生一个结点
if (t2 - t1 > 1000){
//添加结点
AddLetterNode();
//更新t1的数据
t1 = t2;
}
Sleep(25);//延时整个程序25毫秒
pTemp = pLetter->pnext;//保存头结点的下一个结点
cleardevice();//清屏
while (pTemp != NULL){
outtextxy(pTemp->x, pTemp->y, pTemp->ch);
pTemp->y++;//字母向下移动
pTemp = pTemp->pnext;//移动指针
}
if (kbhit()){
//getch()-->接收键盘数据,但不显示键盘数据
keyLetter = getch();
//销毁的结点
LETTER*pDes = pLetter->pnext;//头节点的下一个结点
//当前结点(销毁结点的前一个)
LETTER*pPre = pLetter;//头节点
while (pDes != NULL){
if (pDes->ch == keyLetter){//找到相同的字母
pPre->pnext = pDes->pnext;//保存销毁结点的下一个结点
free(pDes);//销毁结点
break;
}else{
//指针移动
pDes = pDes->pnext;
pPre = pPre->pnext;
}
}
}
}
}
```
## 6. 成果展示
### 6.1 欢迎界面
用cmd进入bios
转载文章标签 用cmd进入bios c语言作业做出金山打字功能 结点 链表 数据 文章分类 iOS 移动开发
上一篇:Mybatis技术架构图
-
Ubuntu怎么开机进入bios
在重装系统之后,开机启动界面的ubuntu引导不见了。下面是如何恢复ubuntu引导的方法以usb设备启动盘为例: 1)准备一个usb启动盘(u盘、移动硬盘); 2)将ubuntu系统usb启动设备接入电脑,重新启动计算机,进入BI
Ubuntu怎么开机进入bios ubuntu 双系统引导 ubuntu系统 linux