1、自扩展切水果基本功能有炸弹切到炸弹GameOver精确判定鼠标十分划过水果结合解析几何知识切水果光影效果切到水果生成光影效果水果碎片生成切到水果会生成碎片,而且碎片分布满足基本物理公式模拟物理引擎重力与动量守恒等基础物理定律满足连击加分连击水果会获得加分完美一击加分如果水果切割完美,切成均匀的两瓣则有额外加分多种类的水果有多种颜色的水果精确的分数记录最高分的记录如果获得当前最高分,则在游戏结束后会显示HighScore并且在游戏开始屏幕上有显示二、 用户手册1. 安装手册I将“FruitNinja切水果.zip”解压缩到桌面。II.打开“FruitNinja切水果”运行“Turbo C 2.0
2、.vbs”脚本文件,出现TC2.0界面。III点击Alt+F打开File目录,在Load选项下点击回车键。IV点击回车,下键,回车,打开test目录,在该目录中找到F_MAIN.c,点击回车打开该C文件,Alt+R开始运行。2. 使用手册切水果是最近几年流行发展的休闲娱乐小游戏,由于其操作简单,画面精美,受到人们的广泛欢迎。我们游戏的操作方法与手机版水果忍者类似,点击鼠标左键然后划向水果,像忍者一样的去砍水果吧!但是请记住,游戏里红色的圆为炸弹,千万不要切炸弹哦,否则T_T,还不快点击开始?进入水果忍者的世界吧!三程序结构和总体流程1. 数据结构介绍游戏的重要常数数据被分为五类,其中第一类是固
3、定常数,这类常数用大写表示,一般情况下这类常数不做更改,如屏幕大小设定,TRUE,FALSE的布尔值定义。#define WID 600#define HIG 450#define F_AMOUNT 15#define B_AMOUNT 15#define P_AMOUNT 100#define L_AMOUNT 4#define DELAY 15#define TRUE 1#define FALSE 0第二类是游戏运行常数,这类常数在游戏的各种调整中会经常改变,并在不断测试后找到合适值,如物理常数G的设定,水果的刷新概率,水果的初始速度范围等等。#define c_least 2#defin
4、e phy_g 1#define act_spe 25#define fru_r 30#define fru_tottype 3#define fru_frq 2#define fru_perfect 7#define fru_max_spe_x 8#define fru_max_spe_y 30#define fru_max_spe_w 10#define pat_amt 6#define pat_arr 15#define bkc WHITE#define time_perfect 25#define time_combo 25#define light_len 200#define li
5、ght_c LIGHTRED#define light_time 10#define bla_c RED#define bla_r 30#define bla_tra 0第三类是全局控制变量,由于本游戏实行完全鼠标操控,故全局控制变量均与鼠标有关,其中有鼠标坐标,鼠标速度,鼠标加速度等等。int mou_x;int mou_y;int mou_dx;int mou_dy;int mou_k;int mou_s;int mou_v;int mou_a;第四类是结构体数组,用于定义游戏里大量出现的游戏数据,例如水果的各类数据被定义为struct fruit,刀刃闪光的情况被定义为struct bl
6、ade。struct Lightint exi;int x1;int x2;int y1;int y2;int timer;lightL_AMOUNT;struct Fruitint type;int x;int y;int dx;int dy;int w;fruitF_AMOUNT;struct Bladeint hx;int hy;bladeB_AMOUNT;struct PatchpatchP_AMOUNT;第五类是函数里面的各类变量,这类变量与普通使用方式相差不多,如int i,j,k,temp;等等,在此不赘述。程序全数据分配表格见附表01.数据分配表。2. 程序函数介绍我们的辅助函
7、数分为三大类其中第一类是数学类,包括利用解析几何做图形分析的函数ptl(点到直线距离),ltl(直线间距)等等,这类函数在切割水果判定里起到了极大作用float ptl(float k,float b,float x,float y)return ( abs(k*x-y+b)/sqrt(k*k+1) ) ;还如随机数生成函数,通过时间随机种子来产生随机数,本游戏的随机部分均靠本函数实现,本函数实用性很强。int ran_int(int min,int max)int ret;ret=rand()%(max-min+1)+min;return ret;第二类是图形输出类,例如。void vis_
8、patch(struct Patch patch)int i;for(i=0;i激活最低速度),当active=TRUE时再进行几何判定,几何判定的方法是蓝色球体为水果,其中心点为P0,半径r,左边的线段为L1,右边线段为L2,中间线段为L3,并且L1,L3交点为P1,L2,L3的交点为P2。P1为上次记录时鼠标位置,P2为当前鼠标位置,两点连线得到P3,分别作两条垂线得到L1,与L2.判定方式为:P0到L3的距离小于等于r。判定水果被切到。P0到L3距离小于常数perfect。判定水果被完美切到。3)(L1到P0的距离+L2到P0的距离)=L1到L2的距离,即判定水果在L1,L2中间。如果1
9、)And3),即切割成功,如果2)And3),即完美切割,至此,问题圆满解决。除此难题外我们在鼠标操控,动画的流畅度处理,物理引擎方面也做了不少的努力,在此由于时间原因就不赘述了。仅供个人用于学习、研究;不得用于商业用途。For personal use only in study and research; not for commercial use.Nur fr den persnlichen fr Studien, Forschung, zu kommerziellen Zwecken verwendet werden.Pour l tude et la recherche uniquement des fins personnelles; pas des fins commerciales. , , . 以下无正文
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1