900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > c语言作业做出金山打字功能 C语言小游戏之金山打字

c语言作业做出金山打字功能 C语言小游戏之金山打字

时间:2021-10-08 01:14:42

相关推荐

c语言作业做出金山打字功能 C语言小游戏之金山打字

//动态内存分配头文件

#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 欢迎界面

![](/image_editor_upload/073122_42306.png)

### 6.2 单个字母掉落

![](/image_editor_upload/073110_49619.png)

### 6.3 多个字母掉落

![](/image_editor_upload/073056_39507.png)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。