C语言 - 祖玛https://www.zhihu.com/video/1226223520021295104

分享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,学会了抠图和加遮罩层。学习是相通的,要善于联想。

在编写游戏的时候也遇到过一些困难,需要一步一步的慢慢去找错误,有时候改对了一个又会出现另一个,所以要耐下心,仔细的找,不能急功近利。

这次做游戏,让我收获了一个好的队友,通过她我学到了许多知识,这次也让我学会了获取知识的许多途经,让我知道要敢于尝试,敢于去想象,要动手去做,要有目标,要用于实现。

c语言变长数组_2018级C语言大作业 - 祖玛相关推荐

  1. C语言变长数组data[0]【总结】

    C语言变长数组data[0][总结] 1.前言 今天在看代码中遇到一个结构中包含char data[0],第一次见到时感觉很奇怪,数组的长度怎么可以为零呢?于是上网搜索一下这样的用法的目的,发现在li ...

  2. C语言变长数组 struct中char data[0]的用法

    摘要:在实际的编程中,我们经常需要使用变长数组,但是C语言并不支持变长的数组.此时,我们可以使用结构体的方法实现C语言变长数组. struct MyData  {  int nLen;  char d ...

  3. 第六章 C语言数组_C语言变长数组:使用变量指明数组的长度

    在<C语言的三套标准:C89.C99和C11>一节中我们讲到,目前经常使用的C语言有三个版本,分别是 C89.C99 和 C11.C89(也称 ANSI C)是较早的版本,也是最经典的版本 ...

  4. c语言变长数组参数,使用gdb跟踪C语言中变长数组的实现

    项目的代码中出现的一个问题,问题的表现是,在一个函数中使用到了变长数组,而对超过这个数组 范围的一个赋值,导致了数组首地址为空. 我把这个问题抽出来形成了一个示例函数,在i386下也出现类似的问题,代 ...

  5. C语言变长数组(柔性数组)

    变长数组(柔性数组) C99支持变长数组,定义时可以不指定数组长度,分配时再根据实际长度进行分配. 变长数组一般只能放在结构体的最后一个成员, 在变长数组之前至少得有一个结构体成员 且一个结构体只能有 ...

  6. c99变长数组_C语言变长数组使用详解

    看如下代码: #include typedef struct { int len; int array[]; }SoftArray; int main() { int len = 10; printf ...

  7. c语言不定长数组_学习C语言这三块“硬骨头”不搞定学了也是白学

    C语: C语言在嵌入式学习中是必备的知识,审核大部分操作都要围绕C语言进行,而其中有三块"难啃的硬骨头"几乎是公认级别的. 01指针 C语言 指针公认最难理解的概念,也是让很多初学 ...

  8. C语言,变长数组的用法

    ​ 在我的<C语言,结构体成员的地址>文章中,定义了一个demo_node结构体,其中用到变长数组char addr[0].本文以此为例,对C语言变长数组的基本用法展开介绍. #pragm ...

  9. c++什么时候数组溢出_C语言,营养丰富的C语言五,变长数组不是动态数组

    大家好,感谢朋友的支持阅读和关注,虽然我提出的这些小知识点看得人很少,但是每涨一个阅读和关注,都能让我开心很久,所以再次感谢一起学习的朋友们. 查余补漏: 在前几次的讲解中,有朋友提出C语言的内存分配 ...

最新文章

  1. 目标检测中的anchor-based 和anchor free
  2. awk rand函数问题
  3. mysql安装教程8.3,Summary_虚拟机安装centos8.3Linux系统_安装Mysql
  4. 【leetcode】937. Reorder Log Files
  5. input高级限制级用法
  6. Fleury (弗罗莱) 算法通俗解释
  7. 具有SmartFilterBar 的 SAP Fiori Elements 自动触发的搜索操作
  8. 深入理解javascript
  9. PHP开发中涉及到emoji表情的几种处理方法
  10. 小程序入门学习07--动态设置标题、转发
  11. 构建前端Mock Server的利器/Json-Server
  12. matlab求解数学题,MATLABR2013a求解数学问题
  13. 怎样转移计算机系统用户文件,巧用“个人文件转移工具”一键转移系统盘的用户文件夹...
  14. 如何用计算机打开苹果手机,苹果手机如何投屏到电脑
  15. HTTPS网络流量分析方法简介
  16. python-求两个数的最小公倍数
  17. jQ知识补全(供已经入门jq开发者)
  18. php上传文件时报错:only variables should be passed by reference
  19. 6个步骤教你用Python解数独!(含实例代码)
  20. vue和layUi对比

热门文章

  1. leetcode 551. 学生出勤记录 I(Java版)
  2. 高并发负载均衡(三):LVS的DR模型试验搭建
  3. 【PAT甲级 前导0,排序】1069 The Black Hole of Numbers (20 分) C++ 全部AC
  4. MySQL分区表概念以及优缺点
  5. 【代码+解析】有理数的类封装
  6. C语言满分代码:1018 锤子剪刀布 (20分)(解题报告)
  7. 0820-拼多多二面
  8. Python数据结构学习笔记——搜索与排序算法
  9. spring 扫描所有_从Spring的几个阶段理解其工作过程
  10. 深入理解linux文件系统( 理解inode与block,理解硬链接软链接,掌握恢复误删文件及其分析方法,掌握用户日志及其查询命令 )