十步万度 C语言作业

分享19级同学大一上学期用C语言实现的十步万度,可从码云下载:

期末作业/十步万度

摘要

本组设计并编写的游戏《十步万度》,是我们仿照原有的《十步万度》游戏,用自身现所掌握的C语言知识来编写的一款休闲益智类的小游戏。你只能点击十次,但却要引发蝴蝶效应最后达到10000度,一个微小的差别可能就会造成很大的不同。这款游戏的设计思路和编写过程如下。

一、设计思路

在一开始选取游戏题材的时候,我们曾考虑过自己设计并编写出一款自己的游戏,但是后来因为意见不统一以及我们现掌握的知识水平有限便放弃了。最后我们决定仿照一款游戏进行编写,于是就有了现在的这款《十步万度》游戏。

想想万事万物,每个人的每一步选择都有可能会产生意想不到的影响,这就是蝴蝶效应,也是这款游戏的设计理念。我们所设计的游戏通关难点就在于每一次的点击都需要考虑到后续所带来的效应,为了取得更高数量的度数,自然是效应越大越好。这便使得游戏不会局限于单纯通关刷分的套路,它具有一定的挑战性和趣味性,也为玩家留有思考空间,让玩家可以充分发挥自己的思维能力。为了增加游戏的可玩性,我们决定设计四个通关模式,从第一关到第四关难度依次增加,相对应的目标度数也随之增大;在每一种模式下玩家都可以不断尝试和挑战新的玩法,以达到更高的度数。简而言之,这是一款既可以比智力,又可以比运气的一款游戏。

在游戏整体设计思路大概确定下来之后,我们便开始考虑到游戏的具体框架设计过程。经过在一番简单的讨论,我们决定先初步编写并实现游戏的核心功能部分,然后在实现核心功能的基础上陆续编写游戏的其他辅助功能。

二、功能描述

《十步万度》的玩法十分简单,不过想要通关并不容易。玩家需要在规定的十步之内进行游戏,游戏中相应的圆圈每次旋转只转90度,但却要引发蝴蝶效应并达到目标度数,才能算是游戏成功,如在十步之内没能达到目标度数,则算游戏失败。以下是游戏部分的功能。

2.1 页面显示

游戏页面可谓是游戏的一个重要组成部分。我们使用EasyX图形库来进行绘图,由于在网上找不到我们所需要的大部分素材,我们便自己制作了素材图来使用。变化的数字输出是一个难点,因为在新的数字输出之前旧的数字不会被清除掉,而是覆盖在了旧的数字之上;后来我们利用了EasyX中的clearrectangle函数对数字输出的位置进行局部清除,再对被清除的局部背景重新绘制,最后实现新的数字的输出,这样也就解决了上文提到的数字覆盖问题。

2.2 旋转过程

圆圈的旋转也是利用了EasyX中的MosesHit和MOUSEMSG函数来进行获取鼠标信息,然后再根据鼠标左键按下时鼠标的坐标对当下圆圈包含的信息进行判断;我们给每个圆圈都定义了记录它指针的指向(pointer.dir)和指针的坐标(pointer.ptr_x, pointer.ptr_y)的参数,当圆圈旋转结束之后记录下它的指针指向和指针坐标的改变,这样可以通过指针的指向来判断指针的旋转方向,以及通过指针的坐标来判断被指向的圆圈,使其进行下一步的旋转。

2.3 关卡选择

关卡选择首先是选择页面的绘制,其次是通过参数choice的数值来判断用户所选择的关卡,选择到不同的关卡时则将进入到不同的游戏场景进行游戏。

2.4 判断输赢

这个部分首先定义了Step来限制点击次数,然后再判断次数用尽之后玩家是否达到目标度数,若是则游戏胜利,否则游戏失败。

三、 分步骤实现

游戏实现步骤主要分为以下几块:

(1)页面显示

(2)鼠标点击后圆圈旋转

(3)实现圆圈连续旋转

(4)记录旋转度数并限制步骤

(5)判断输赢

(6)分成四个关卡

(7)不同页面的处理

我主要负责游戏素材的制作和(2)、(4)、(5)、(7)四个部分的内容编写。

3.1 素材制作

因为之前从未接触过PS和别的图片处理软件,再加上那会儿对EasyX的使用还不是很熟练,所以走了不少弯路;自己照葫芦画瓢做出来的图片要么是背景部分实现不了透明化,要么是图片在绘制时会有重影……后来我在我的搭档和其他同学的帮助下,对素材图的制作方法和putimage函数的使用有了更深入的理解,便成功地制作出需要的素材了。

3.2 实现(2)鼠标点击后圆圈旋转部分

我通过在课堂上所学过鼠标交互功能来获取鼠标的坐标信息,通过鼠标和圆圈的坐标来判断所点击到的圆圈,然后对这个圆圈的信息进行更新,使其旋转。

3.3 实现(4)实现旋转度数的输出并限制点击次数

数字变量的输出也是我所遇到的难点之一,因为要在不破坏背景的前提下输出时时更新数字这个是我不会的,后来在老师的指点下我使用了局部清除函数clearrectangle();但却又不知道重新绘制背景,最后是在搭档的帮助下用了getimage()函数获取原来的背景,再重新绘制,才实现了最终完美的效果。

3.4 实现(5)判断输赢和步数的限制

判断输赢和限制步数这部分并不难处理,就是定义了一个Step=10来记录游戏步数,鼠标每点击一次step减一;在游戏的次数用完之后加了一个判断,达到目标度数便成功,否则就算失败。

3.5 实现(7)不同页面处理

菜单以及输赢页面的绘制也都是使用putimage把准备好的素材放上去,然后再在MouseHit()中进行判断和变量更新。

四、 体会和感受

我在整个游戏的编写过程中收获了很多,也看到了自身能力的不足之处;与队友的合作更是让我感受到,准确的语言表达、沟通交流以及团队协作的重要性,有时候自己反反复复查看代码却找不出bug在哪里,或是面对不知该如何处理的问题的时候,与搭档或者其他同学进行交流总能得到许多帮助。虽然游戏最终的实现效果并不如一开始设想的那样理想,在写的过程中我也感觉非常的痛苦煎熬,但是在游戏完成的那一刹那心里还是充满了喜悦。

这次的游戏都是用C语言知识和EaxyX库来实现的,通过这次的编写,我对C语言和EasyX的理解运用更加深入了,同时还学会PS的一些简单操作,这对我来说无疑是一个很大的进步。这也让我认识到自己的知识储备的稀缺,因此,在以后的学习中我会更加注重知识的积累,并培养自己通过不同渠道收集和学习新知识的能力。

最后希望自己以后能够做出更好的作品来。

2019级C语言大作业 - 十步万度相关推荐

  1. c语言输出数字漏斗图形_2019级C语言大作业 - 十步万度

    分享19级同学大一上学期用C语言实现的十步万度,可从码云下载: 期末作业/十步万度​gitee.com C语言大作业 - 十步万度https://www.zhihu.com/video/1215683 ...

  2. C语言实现:十步万度游戏,代码思路+源码分享

    你只能点十次, 但却要引发蝴蝶效应最后达到10000度.六种模式可选,每种模式都可以不断挑战极限达到最高的度数.数十种精美的蝴蝶扇动着翅膀向你展示蝴蝶效应的奇妙,一个微小的差别可能就会造成很大的不同. ...

  3. 2019级C语言大作业 - 火柴人试炼之地

    火柴人试炼之地 C语言大作业 分享19级同学大一上学期用C语言实现的火柴人试炼之地.分步骤代码.图片音乐素材.可执行程序可以从百度网盘下载: 链接:https://pan.baidu.com/s/1X ...

  4. 2019级C语言大作业 - 泡泡龙

    分享19级同学大一上学期用C语言实现的泡泡龙.分步骤代码.可执行程序可从百度网盘下载: 链接:https://pan.baidu.com/s/1r5S3oH54hM3OQeIQuwnjjQ 提取码:j ...

  5. 2019级C语言大作业 - HP1的勇者

    分享19级同学大一上学期用C语言实现的HP1的勇者.分步骤代码.图片音乐素材.可执行程序可以从百度网盘下载: 链接:https://pan.baidu.com/s/1ox12uOVHsqO-dL8lS ...

  6. 2019级C语言大作业 - 冷冻双侠

    冷冻双侠 C语言作业 分享19级同学大一上学期用C语言实现的冷冻双侠,可从码云下载: https://gitee.com/xingguiweichen/frozen_couple 一. 游戏介绍 程序 ...

  7. 2019级C语言大作业 - BrickMansions

    BrickMansions 运行演示 C语言作业 分享19级同学大一上学期用C语言实现的BrickMansions,可从码云下载: https://gitee.com/Brick_Mansions/B ...

  8. 2019级C语言大作业 - 三国杀

    三国杀19年 C语言演示视频 分享19级同学大一上学期用C语言实现的三国杀游戏.分步骤代码.图片音乐素材.可执行程序可以从百度网盘下载: https://pan.baidu.com/s/1K3ANkU ...

  9. 《C和C++游戏趣味编程》 第8章 十步万度

    没想到前几天新书预告中(童晶:<C和C++游戏趣味编程>新书预告),有这么多朋友对实现十步万度游戏感兴趣,下面提前开源最终代码. 这个案例使用VS 2010 + EasyX开发,感兴趣的朋 ...

最新文章

  1. R语言dplyr包使用select函数通过索引查询或者排除数据列实战(Select Columns by Index)
  2. 前端界面的rem适配换算
  3. 变量置换方式linux,Shell变量测试与内容置换
  4. 服务化实战之 dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型
  5. 关于ttk的使用与安装
  6. java返回链表的中间结点_876. 链表的中间结点
  7. CCF201412-1 门禁系统(100分)
  8. ROS kinetic + Ubuntu16.04编译LSD-SLAM
  9. FlashFXP v5.3.0.3932中文版
  10. CH7511BeDP转LVDS显示屏转接板CS5211电路图
  11. sql语句中左连接查询的使用
  12. 用C语言编写的骂人的软件,“骂人软件”再智能 暴力永远是暴力
  13. 【Office】wps表格如何让后面的单元格随着下拉选项自动填充
  14. initialization of _pywrap_tensorflow raised unreported exception 解决方法
  15. charles+Proxifier实现抓包pc端(exe程序)
  16. 数字图像处理第三版冈萨雷斯笔记第二章
  17. 谷歌中国发布年度热榜 iPhone成全球最流行词
  18. 【微信小程序开发】第 1 节 - 小程序简介
  19. 新手Web前八道题训练
  20. 大数据相关术语(1)

热门文章

  1. conda 命令 直接安装 OpenCV[Anaconda]
  2. 手机端网页开发的两个重要设置
  3. tensorflow代码中的一个bug
  4. 栈的效率为什么比堆高?为什么栈的运行速度比堆快?
  5. 敏捷开发用户故事系列之三:用户建模
  6. javascript函数参数的传递问题
  7. 【转】Hbase之shell命令的使用
  8. 2018-2019-2 20165312《网络攻防技术》Exp7 网络欺诈防范
  9. 使用pt-query-digest进行日志分析
  10. MySQL5.7 编译安装