![4c2586f776f5c2c4d504c4d27ea844c9.png](https://i-blog.csdnimg.cn/blog_migrate/13b9352b8120a914f7d41d63413a4057.jpeg)
![9815c3a32e6c8ff316b21568f42a7511.png](https://i-blog.csdnimg.cn/blog_migrate/fe1bd1b5c17889ec872773cdb64e2bb2.png)
分享18级同学大一上学期用C语言实现的祖玛。分步骤代码、图片音乐素材、可执行程序可从百度网盘下载:
链接:https://pan.baidu.com/s/1klPi-7s7a60dI71ddlOmYw
提取码:8qr5
一.游戏介绍
游戏的主角是佩奇,佩奇会吐出各种颜色的珠子,环绕着石青蛙的是承载珠子的轨道,各种颜色的珠子沿着轨道往前滑动,佩奇必需遏止珠子滚进轨道终点的房顶。佩奇吐出的珠子与轨道上的珠子相结合,连续三颗颜色相同即可消失得分,当轨道上的所有珠子被消除干净时即取得游戏的胜利。当珠子碰到房顶游戏失败。
你可以:按下鼠标左键发射小球;按下鼠标右键更换小球颜色;按下ESC键暂停游戏;游戏结束后你也可以选择再来一局或是退出。
二.设计思路
整个祖玛游戏我们首先分为两大部分,第一部分是素材,第二部分是功能。
1.素材里面分为四大部分:中间的佩奇,背景,小球、房子和音乐。小球共五种颜色,用EasyX实现。音乐分背景音乐、失败音乐、成功音乐和吐球的音乐。
2.功能分为两大部分:中间的佩奇的旋转和小球的处理。
1) 中间的佩奇和即将吐出的球利用EasyX实现随鼠标转向。
2) 行进中的小球需要实现出洞、沿路线前进、进洞游戏失败。首先利用数组实现球链的路径,之后利用结构体和链表代替数组。实现时定好出洞和进洞的位置,路径先定为简单的矩形。
3) 利用链表实现小球的插入、消除和对速度的处理。
三.分步骤实现方法
1. 球链的路径和颜色
球链的路径定为矩形,第一步采用坐标位置改变实现,但由于想让结束时小球速度为0,第二步采用坐标位置加速度实现球链移动。
实现颜色的第一步利用rand()%255,但颜色种类太多,而且会出现每个球每秒钟颜色不一样的情况。因此第二步定义一个数组储存五种颜色,在初始化时给每个球随机赋予不同的颜色。第三步使用srand(time(NULL));设置随机种子数,使每次小球的颜色都不一样。
2. 利用三角函数实现佩奇和即将要吐的小球随鼠标旋转
3. 背景
利用EasyX绘制画面并放背景,采用HWND hwnd = GetHWnd();和SetWindowText(hwnd, "祖玛小猪");获取窗口句柄并设置窗口标题文字
4. 将数组变为链表,方便实现后面小球的插入与消除
第一步定义小球结构体。第二步定义新函数制作双向链表,使每个数据结点中都有两个指针,分别指向直接后继和直接前驱,这样从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。同时定义了首尾哨兵。
5. 吐球
利用鼠标交互左键发射小球、右键换小球颜色。并实现等吐出去的小球插入球链或超出画面边际后才能发射下一个小球。
6. 小球的插入及后续处理
定义函数,实现插入和更新链表长度。
后续处理时我们增加了几项功能:让插入的小球进入球链中,后面的小球位置依次后移;消除后前面的球链保持不动,等后面的球链跟进再一起前进。
7. 小球的消除
第一步判断吐出去的小球和球链中小球的距离,小于一定值时分别向前查重、向后查重,判断与它最近的小球的颜色是否与其相同,重复颜色的球大于等于三个时小球消除。第二步更新链表长度和分数。第三步重复上述步骤连环消球。
8. 开始界面、失败界面、成功界面、暂停界面
第一步定义一个变量为游戏状态(等于0为初始菜单界面,1为正常游戏,2为结束游戏状态,3为游戏暂停,4为游戏失败),初始化为0。第二步定义三个函数,分别利用settextcolor、settextstyle、outtextxy和鼠标交互实现界面互换。
9. 加入音乐
利用mciSendString加入音乐。
四.体会与总结
一开始选游戏内容的时候我们就想到了祖玛,看着代码一天天变长,功能一天天完善,真的很开心。从一开始球链的颜色闪来闪去,到最后背景音乐都可以配合着游戏进行,感到很开心,很有成就感,也学到了很多。
祖玛主要应该用链表实现,而我们决定一开始先用数组实现一部分,等到后面再将数组变为链表,这样以来实现球链的路径就容易了许多。球链的颜色这部分也一样,没有用较复杂的结构体,而是运用了简单的数组和rand实现。就像老师一开始就教我们用简单的代码做游戏一样,简单的函数也可以很好的实现强大的功能。做祖玛游戏也让我学会了PS,学会了抠图和加遮罩层。学习是相通的,要善于联想。
在编写游戏的时候也遇到过一些困难,需要一步一步的慢慢去找错误,有时候改对了一个又会出现另一个,所以要耐下心,仔细的找,不能急功近利。
这次做游戏,让我收获了一个好的队友,通过她我学到了许多知识,这次也让我学会了获取知识的许多途经,让我知道要敢于尝试,敢于去想象,要动手去做,要有目标,要用于实现。