手机小说阅读软件的源码 基于微信小程序的小说阅读器系统-计算机毕业设计源码+LW文档

用户投稿 15 0

基于微信小程序的小说阅读器系统-计算机毕业设计源码+LW文档

1.本课题的研究意义

在网络的市场越来越发达的背景下,许多电子商务的网站的出现,带动了我国的商业发展,让人们的商业活动更加的方便,选择的范围也更加广阔。但随之而来的问题就是范围太大,而某些特定需求的人们面对繁杂的商品,选择上来说就没那么有针对性了,比如大学生,往往大学的生活大同小异,生活、学习用品也都近似,学生们经常会出现很多闲置的物品,比如书籍、手机、电脑等其他日常生活用品。如何处理这些物品也成为了学生们日常关注的问题,尤其是学生毕业时有些同学会拿到二手物品交易市场进行廉价的交易,更有些人会因为麻烦等原因不愿意搬运而当作废品卖掉甚至扔掉。这不仅不利于环保,而且还造成了资源的浪费。因此,为了给学生用户提供一个便利的二手商品交易平台,结合微信系统的优势和普及,开发了本基于微信小程序的校园二手平台。

本基于微信小程序的校园二手平台的开发具有以下意义:

(1)更好的帮助有需要的人在最短时间内,找到自己需要二手物品,减少资源的浪费。

手机小说阅读软件的源码 基于微信小程序的小说阅读器系统-计算机毕业设计源码+LW文档

(2)通过本基于微信小程序的校园二手平台为用户提供大量的二手物品信息,用户不受时间、地点的限制,随时可进入系统查看、购买所需二手商品。

2.本课题的基本内容

2.1功能模块

二手平台小程序是一个运用微信开发者设计的二手物品交易平台,解决了用户闲置二手商品不方便交易的痛点。采用的JAVA开发技术,使用后端SSM框架和前端框架uni-app进行微信小程序开发,小程序端功能主要包括:用户密码登录、商品浏览、商品搜索、查看商品详情、联系商家、评论留言、收藏商家、发布商品、商品管理、收藏管理等功能。二手平台后台功能主要包括:管理员登陆、管理员管理、APP用户管理、留言评论管理、商品管理、商品发布等功能。

3.1重点:

1.UI界面设计:

作为一个小程序的门面一个简洁美观的UI界面会让用户更加的愉悦。

2.用户权限管理(后台的设计):

这个模块负责给予不同用户不同的权限务必简洁明了以便于更快的处理各种突发状况。

3.物品交易:前台用户需要上传真实物品并统计数量以及价格,后台用户需要对前台用户的操作进行确认管理。

3.2难点:

1.在数据库设计方面,数据表是系统实现的一个难点,用户登录如何区分管理员还是普通用户,多个物品的种类价格处理,这些在数据库的设计上都是需要仔细考虑的;

2.在系统功能实现方面,要满足用户二手商品交易的需求。

3.在系统的总体设计方面,如何实现前后端的分离也是一个很难的地方。以及前端使用什么框架,后端采用什么框架能够更高效地开发整个系统,使得整个系统的逻辑结构看起来更加清晰。

4.论文提纲

1绪论

1.1研究背景

1.2研究现状

1.3论文组织结构

2系统关键技术

2.1微信小程序

2.2微信Web开发者工具

2.3 WXML 、WXS、JS小程序编写语言

2.4微信小程序API接口

2.5 MYSQL数据库

3系统分析

3.1可行性分析

3.2系统性能分析

3.3系统功能分析

3.4系统用例建模分析

3.5系统流程分析

4系统设计

4.1系统开发流程设计

4.2系统结构设计

4.3系统数据库设计

5系统的实现

5.1用户功能模块的实现

5.2管理员功能模块的实现

6系统测试

6.1测试概述

6.2测试原则

6.3测试方法

6.4测试结果分析

7总结

参考文献

致谢

5.参考文献

[1] 段丽慧.微信二手交易平台在高校中的发展趋势,中国会议,2015.

[2] 苏震巍.微信开发深度解析[M],北京:电子工业出版社,2017.

[3] 苏玉慧.基于B/S架构的高校二手网络交易平台的设计与实现[D],2015.

[4] 李娜.高校微信二手交易平台构建研究—以齐鲁医学院为例,教育现代化,2017.

[5] 刘世鹏.微信时代传统媒体面对的新趋势[J]. 全国商情(理论研究). 2013(22)

[6] 苏震巍. 微信开发深度解析. 公众号、小程序高效开发秘籍[M]. 北京:电子工业出版社,2017.

[7] 宋思斯.微信营销发展现状及对策[J]. 合作经济与科技. 2014(19)

[8]腾讯.微信公众平台·小程序-开发-框架[EB/OL].(2016—09—21)[2017—09-251].

[9]易伟. 微信小程序快速开发[M]. 北京:人民邮电出版社,2017.

[10]王旭丽,于国龙,吴恋,等二手书交易系统的设计与实现[J].物联网技术, 2019(2):108- 109.

[11] 张剑明. 微信公众平台与小程序开发. 从零搭建整套系统[M]. 北京:人民邮电出版社,2017.

[12] 庄宝玉.微信的网络营销模式探究[J]. 西部广播电视. 2014(11)

[13] 刘玉佳. 微信“小程序”开发的系统实现及前景分析[J]. 信息通信,2017(1):260- 261.

[14] 刘红卫. 微信小程序应用探析[J]. 无线互联科技,2016(23):11-12.

摘 要

科技的发展赋予了二手商品交易新的途径,电子商务名词的出现改变了消费者购物的习惯,同时也为用户打开了新的销售市场。电子商务也可以理解为利用互联网来进行商务贸易,这种方式可以打破时间和地点的限制,可以为消费者提供随时购物的平台,消费者可以在平台上随时处理自己的商品和了解商品详情。网上的二手交易系统将买方与卖方更加紧密的结合在一起,减少时间与地点的问题。

本基于微信小程序的校园二手平台采用java语言和mysql数据库进行设计,采用微信端+客户端的模式进行设计。本系统就是采用电子商务的理念进行开发,用户可以在网站上浏览不同分类的商品,当选择喜欢的商品后可以加入收藏进行同类商品的对比,还可以评价;用户也可以发布自己的闲置商品;同时本系统中加入了管理员,管理员可以审核商品,审核注册用户,实现销售与管理的一体化。为了更加方便用户的交易,用户可以在发布商品时填写自己的联系信息,同时本系统中设计了在线搜索的模块功能,可以使系统更加的灵活。本系统的实现可以帮助用户实现闲置物品的交易,非常符合大学生的生活需求。

关键词:收藏管理;商品信息;评价信息;商品配送

二手交易系统已成为消费者不可缺少的生活辅助工具,二手交易系统也是二手市场长远发展不可缺少的销售平台。从消费者角度来讲,网上二手交易系统解决了购物需要出门的问题,解决了地域、时间的限制,可以随时购物;从卖家角度来讲,网上二手交易系统解决了销售商品需要大量宣传的要求,解决了商品销售范围窄、时间要求高的问题,同时可以为卖家提供更为广泛的宣传途径。所以网上二手交易系统是非常需要的必须品。本系统是针对校园的二手交易系统,二手物品近几年成为校园生活中最多的资源,如果可以把二手物品换成其它需要的商品或者变现将会节省成本。

手机小说阅读软件的源码 基于微信小程序的小说阅读器系统-计算机毕业设计源码+LW文档 手机小说阅读软件的源码 基于微信小程序的小说阅读器系统-计算机毕业设计源码+LW文档 手机小说阅读软件的源码 基于微信小程序的小说阅读器系统-计算机毕业设计源码+LW文档 手机小说阅读软件的源码 基于微信小程序的小说阅读器系统-计算机毕业设计源码+LW文档

安卓APP源码和设计报告——Android小程序超级小猫

移动终端开发(Android)

结课报告

题目: Android小程序超级小猫

班级:

姓名:

成绩:

一、项目概述

1、设计背景与意义

1.1 手机游戏的设计背景

自上世纪80年代第一部手机诞生以来,随着计算机技术的进步,手机也经历了从模拟到GSM、2.5G再到今天的3G手机如此一个发展历程。特别是进入21世纪后手机的硬件性能得到很大的提高,当前主流手机普遍配有主频500MHZ的微处理器和500MB容量的存储器。与之同步发展的还有支持手机运行的手机操作系统,从当初的单片机系统到后来的专用嵌入式系统,到后来开始为智能手机设计开发出可以更高效管理手机软硬件资源的操作系统,其中有不少属于开源项目的手机操作系统。目前全球的智能手机操作系统主要以Google公司开发的Android系统、苹果公司开发的iPhone系统、诺基亚公司开发的Symbian系统、微软公司开发的WindowsMobile系统和Linux系统为代表。从图1.1为2011全球智能手机操作系统市场份额统计,Android仅仅经过两三年的发展就抢占了43%的市场份额,并保持着2%的增长速度。中国是最大的手机市场,2011年的统计数据表明,Android已取代了iPhone成为中国市场额最大的智能手机操作系统。

手机小说阅读软件的源码 基于微信小程序的小说阅读器系统-计算机毕业设计源码+LW文档

图1.1 2011全球智能手机操作系统市场份额统计

Android系统是Google公司于2007年推出的一款手机操作系统,目前能安装于HTC、摩托罗拉、联想、华为等知名品牌手机。它是基于Linux2.6.1内核的一个开源手机操作系统,目前最高版本为2.4,集成了GPS电子地图导航、重力感应器、多点触控等重要功能,开发者可以开发出丰富的运用。由于Android智能手机操作系统是一个开源项目,具有很强的开放性和可扩展性,吸引了大量的手机软件开发人员为这些手机系统开发应用软件及休闲游戏,极大的丰富了手机功能。为服务广大的开发人员与谷歌手机用户,谷歌公司在因特网搭建了一个应用软件商店。开发人员开发出的手机应用软件可以陈列于应用软件商店中供用户挑选购买,解决了软件工程师最薄弱的软件营销环节,作为目前广大手机软件工程师最大的创收途径而博得广泛的热衷。

电脑游戏是很多人不可或缺的娱乐活动,八九十年达的“贪吃蛇”和“超级玛丽”给大家留下了欢乐的欢乐记忆,也为游戏创作者带来了巨额财富。近二十年来,随着计算机硬件性能的提升及软件开发者的努力,游戏作品不论是创意还是视听感觉都有飞跃的发展。当前电脑游戏行业非常繁荣,竞争也非常激烈,随着智能手机的问世并普及,越来越多的游戏开发人员把目光转向了手机游戏这个新兴的行业。

手机通常重量轻,随身携带方便,现代人们压力大,非常希望在工作之余,上下班途中可以通过娱乐来放松自己,此时,手机游戏便能发挥出它轻松休闲的特点。受手机性能的制约,以往运行于手机之上的游戏一般较为简单,但随着微电子技术的发展,手机性能越来越优良,现在已经可以开发出类似于PC机上的游戏。特别是随着3G移动网络的迅猛发展,可以预料在十年之内目前如火如荼的网络游戏也将转战至手机平台。

1.2 国内外手机游戏的研究现状

在手机应用开发领域当前较为火热的有J2ME语言、Object C语言和Android SDK。J2ME 作为Java2的一个组成部分,以其发展时间长而成为较为普遍的技术。其最大的优势在于移植性强,使用J2ME技术开发的程序,可以经过简单的修改以后,能在不同厂商的手机上运行。同时由于Java语言的普及从而开发周期大大缩短。但是,也因为兼顾移植性,导致其开发出的功能受到一定的限制,又因为其运行于JVM上并受手机性能的影响所以运行速度普遍较慢。Object C语言基于标准的ANSI C,其语法源于Smalltalk消息传递风格,作为iPhone手机上的标准开发语言而受到青睐。相对于J2ME最大特点是软件运行效率高速度快,界面也继承了苹果的华丽风格,遗憾的是开发出的应用软件只能运行于iPhone手机上。谷歌与开发手机联盟合作开发的Android SDK是近两年诞生的充满活力和生命力的手机开发语言,是一个标准的、开放的移动电话软件平台,不存在任何以往那种阻碍移动产业创新的专有权障碍。相对于其他开发语言,Android最大的优点就是开放性,吸引了众多的开发者的支持,短短两年时间开发出大量的手机应用软件,丰富了手机的应用功能。另外对网络友好,支持大部分网络功能,并与Google应用无缝结合,可以轻松获取Google服务。

手机小说阅读软件的源码 基于微信小程序的小说阅读器系统-计算机毕业设计源码+LW文档

图1.2 2011年中国移动应用超市各类手机软件下载比例

Android和手机应用市场正处于起步阶段,市场和消费者需要个接受的过程,众多开发者也都在积极探索盈利模式。Android开发者实现盈利主要依赖两方面因素,一是全球Android手机终端的爆发,另外就是海外付费应用程序的模式逐渐形成。目前Android应用开发个人或团体虽未取得规模盈利,但也开始逐渐向盈利模式转移,获得不错收益。图1.2是中国移动应用软件超市2011年的统计数据,消费者下载量最高的依然是应用开发,其次便是游戏开发,占据39%的下载量,而传统的增值业务则只占5%,在移动互联网时代,开发者纷纷逃离营运商的束缚,转向利润较为丰厚的应用程序和游戏开发。由此图也可以看出手机游戏软件在消费者中的受欢迎程度,如果想在未来手机应用程序开发中实现规模则需要加大手机游戏方面的开发力度。

目前在手机上开发出较为成功的游戏主要有FTG格斗游戏、PUZ益智类游戏、RPG角色扮演游戏、SLG模拟/战棋式战略游戏以及体感游戏和宠物养成游戏六类。其中格斗游戏诞生于街机,曾经的“街霸”是其典型代表。FTG系统的核心是对战斗部分进行碰撞检测计算。益智游戏最大的创意是其游戏规则,玩家需要以自己的智慧对游戏规则进行思考,判断从而通关以获得成就感。PUZ游戏对玩家操作要求不高是手机游戏中受众面最广的游戏,最具代表是“推箱子”。角色扮演游戏是最能与用户共鸣的游戏,开启了一扇通往虚拟现实的大门,可以让玩家沉浸于打怪升级的快乐之中,“仙剑奇侠传”是其经典代表。RPG游戏的核心是代表玩家角色成长的升级系统,游戏都贯穿一个故事情节,所以其创意是多元的、立体的,让开发者有更广阔的创作空间。战棋类游戏是玩家在虚拟地图上指挥一定角色与敌方展开战斗,典型的有“地雷战”。体感游戏主要依赖手机中的重力感应等装置开发出的新型游戏,玩家可以通过摇晃、旋转、移动等动作来操作游戏。宠物养成游戏则因为其人性化游戏情节而吸引人们注意力。

手机游戏研发的重点是游戏情节和游戏界面。游戏情节的创作依赖人的想象力和创造力,主题及素材可以来源于热门小说也可来古老传说,例如中国的经典名著“三国志”被日本光荣公司搬去后创作出名噪一时的经典同名游戏。还有著名网络小说“诛仙”也被创作为当前流行的同名网络游戏。这些文学作品为手机游戏的开发提供了大量的可创作素材。同时,行业竞争的激烈也导致雷同的不少游戏情节出现,这就要求创作人员不断发挥才能,构思出更加丰富的游戏主题。游戏界面方面随着手机性能不断提高的影响,也愈加华丽。从当初粗糙单色的俄罗斯方块到后来颜色丰富的2D游戏,再到现在开始流行的极具立体效果的3D游戏。游戏的操纵方面也有革命性发展,从最初按键操纵到后来的屏幕多点触控再发展到重力感应操纵。

1.3 本课题研究的目的、意义及研究内容

由于本人对游戏的酷爱、对代码的敏感和对童年红白机时代游戏的怀念,在Android平台下通过掌握的Java语言基础和对Android知识的深入学习,研究并开发了一款益智闯关类游戏“超级小猫”,并通过整个学习、设计和实现的过程,能提高自己的代码量和读写代码能力,为以后步入Android应用开发工作打下基础。

设计功能

2.1.1 需求

功能:实现主人公小猫的前进、跳跃、顶金币、顶砖块、踩敌人、吃道具等功能并有关卡设置。

操作:设置屏幕虚拟键,使玩家通过触控虚拟键对小猫的操作。

音效:游戏有背景音乐,按钮、跳跃和死亡音效。

动画效果:主人公和敌人的移动过程、死亡后的效果,砖块及问号被顶后的效果。

2.1.2开发环境

硬件:Microsoft Windows 7操作系统

IDE: Eclipse

版本:Android2.2

2.1.3游戏设计思想和模块划分

本游戏采用Java面向对象思想,将游戏中所有的对象通过划分模块进而创建各自的类。设计初期,通过对程序需求的分析,划分了游戏背景模块、游戏控制模块,游戏地图模块、道具模块、特效模块、玩家模块和敌人模块主要几个模块。而后,通过几大模块,对游戏中的对象归类,通过不断的补充各个类的属性,完善程序。

道具模块

背景模块

特效模块

控制模块

地图模块

敌人模块

玩家模块

图3.2程序模块图

2.1.4游戏具体设计

1.游戏背景模块

该模块主要实现了游戏公共背景,包括天空不断漂浮的白云,主程序显示的分数、金币个数、时间、小山和大山,虚拟键左、右、上、音乐开、音乐关、退出游戏。由BG类和JOY类实现。

BG类

该类负责画出分数、金币个数、时间、小山、大山和不断漂浮的3朵白云,之所以要把这些对象放入一个bg类中,是由于它们都是一旦绘制出来就成系统本身的了,不受玩家控制而影响。而把受玩家控制的公共背景对象写入其他类中。金币图片是一个帧动画播放位图,大、小山是用for循环有规律的画入画布中,白云的绘入是静态的,但通过让其横坐标变化和for语句判断来实现循环在页面漂浮的效果。实现代码如下:

public void upData()

{//分别以1和2的速度循环移动

yunX1-=2;

if(yunX1<-50)

{

yunX1=490;

}

yunX2-=1;

if(yunX2<-50)

{

yunX2=490;

}

yunX3-=2;

if(yunX3<-50)

{

yunX3=490;

}

}

JOY类

在此类中画出虚拟键左、右、上、音乐开、音乐关,并加入触屏监听方法。触屏的监听是一个难点,要精确计算出所绘图片宽高像素大小和玩家点击屏幕范围,这样才能准确监听到玩家所需的操作。

2.游戏控制模块

该模块主要实现了让游戏能按照预期的顺序播放画面,综合了游戏用到的所有类,根据状态执行各个类的线程。由MC类实现。

MC类

该类继承了Android中的SurfaceView绘图类,实现Runnable接口。该类引用了整个程序的所有类。创建初期,定义状态标识线程执行顺序即页面切换,是通过后续类的完成进而对MC类的补充完成。

3.游戏地图模块

该模块实现了游戏地图信息的保存,增加了游戏的扩展性。由map类和TiledMap类实现,地图信息保存在一个二维数组中位图大小经过处理为16*16,屏幕宽为480,高为320,即地图信息为20行,列根据关卡的长度自定。

4.道具模块

该模块中实现了游戏中道具毒蘑菇的控制。由类DJ类实现,主要控制毒蘑菇的移动方法和碰撞检测。

5.特效模块

该模块实现了公共图片金币的动画效果、游戏主人公死亡后显示图片效果、碰到毒蘑菇显示图片效果、杀死敌人后敌人消失效果、碰撞普通砖块后的爆炸效果、碰撞问号砖块后弹出金币效果。主要由TX、TX1、TX2、TX3、TX4、TX5、TXManager几个类分别实现。

6.玩家模块

该模块实现了游戏主人公在场景中根据玩家的控制自由移动的功能。由Player类实现。是游戏设计的难点。

7.敌人模块

该模块实现了游戏中所有敌人的控制。由NPC、NPC01、NPC02、NPC03、NPC04_guike、NPCManager几个类分别实现。

2.2游戏设计过程中遇到的问题和技术难点

2.2.1图片问题

为了游戏美观和地图设计的方便,要把图片处理成跟屏幕分辨率宽高都成比例,借助Batch Image Resizer和PS图片处理工具分别对游戏素材进行缩放和去除图片背景的操作。游戏中的主人公是位图播放,Android中提供给我们播放帧动画的方法。在绘图中,Android中的绘图类SurfaceView,默认采用双缓冲技术,保证了屏幕不出现闪烁现象。

2.2.2控制问题

游戏的控制分为系统控制和玩家控制,由系统控制的只需设置其相应的方法,在需要的时候执行相应的线程。由玩家控制的主要是对主人公的移动控制,在编写代码的过程中,左、右移动相对简单,让它跳起来一度用了不少时间学习,对跳跃加入重力引擎方法 成功解决了实现跳跃高度一定,速度变化,有真实感的跳跃动作。

2.2.3碰撞检测

游戏的核心重点在于碰撞检测方法的编写,即使绘图再美,玩家控制的再好,到了不该过去的地方照样过去,失去了游戏的规则。碰撞检测包括,游戏主人公与敌人的碰撞、主人公与障碍物的碰撞、敌人与障碍物的碰撞、道具与主人公的碰撞

16*16 16*16

障碍物

② ③

图3.3碰撞检测示意图

由图3.3表示,主人公与障碍物的碰撞,当在范围①时,表示在障碍物上面,可以站在上面进行跳的动作,否则就是在空中,进行下降的动作。当跳到④的范围时,表示玩家与障碍物碰撞,障碍物执行自己的方法(消失或者变化),玩家自由下落。主人公与敌人的碰撞中,当主人公在范围①—④时出于碰撞的临界点,碰撞后玩家和敌人执行自己的方法(死亡图片或者爆炸消失)。敌人与主人公的碰撞与主人公与障碍物的碰撞类似,道具与主人公的碰撞与主人公与敌人碰撞类似。

2.2.4音效控制

在本程序中对主人公的跳跃,死亡,点击主菜单按钮都加入了音效,此外游戏中还有背景音乐。这个功能的实现用了Android中的SoundPool和MediaPlayer,前者控制音效,后者控制背景音乐。部分代码如下:

主控制类MC中声明

//声明SoundPool

static SoundPool sp;

//记录背景音乐文件id

static int soundId_long;

//记录死亡音乐文件id

static int death;

//记录点击菜单音乐文件id

static int press;

//声明一个音乐播放器

private static MediaPlayer mediaplayer;

主方法中

//实例SoundPool播放器

setSp(new SoundPool(4, AudioManager.STREAM_MUSIC, 100));

//加载音乐文件获取其数据ID

//跳跃音效的初始化

setSoundId_long(getSp().load(context, R.raw.jump, 1));

//死亡音效的初始化

death = sp.load(context, R.raw.dead, 1);

//点击音效的初始化

press = sp.load(context, R.raw.coin, 1);

//背景音乐的初始化

setMediaplayer(MediaPlayer.create(context, R.raw.mario));

//设置循环播放

getMediaplayer().setLooping(true);

(new Thread(this)).start() ;

然后分别在事件响应中加入响应方法。

//点击音乐开时

if(joy.music1down==true)

{

MC.getMediaplayer().start();}

//点击音乐关时

if(joy.music2down==true){

MC.getMediaplayer().pause();

}

在Player类中加入

//当点击跳跃键时

if(joy.up_down==true){

m=1;

vy=-18;

//状态为跳跃

changeFS(2);

//此时加入点击音效

MC.sp.play(MC.getSoundId_long(), 1f, 1f, 0, 0, 1); }

2.2.5页面控制

为了实现能按照流程执行,在主控制类MC中用

switch(CanvasIndex){ case:

Berak;}语句对页面进行的切换控制。根据各个页面时时反馈的CanvasIndex值确定跳入哪一个页面。CanvasIndex值设置为0、5、10、15、20、25、30、35、40分别代表帮助页面 、logo页面、主页面、加载页面、主程序页面、结束页面、第二关切换页面、第二关加载页面、第二关主页面。用switch控制能简单有效的切换到下一个页面而退出上一个页面。

2.3 开发过程简述

游戏的开发不同于应用开发,游戏里面更多的用了绘图方法和游戏算法,所涉及的类不是分步一个一个写出来的,很多都是同时创建的,并且经过无数次的调试 。类中的属性也是时时根据需要添加进去的,使其功能逐步完善。在次过程中通过学习相关内容,阅读相关代码,不断的尝试和失败中找到属于自己的编写风格,应用到实例开发中。

二、项目设计

要求:描述设计的设计思路与设计过程,例如,界面包括什么布局、组件;功能实现如果操作:哪个组件什么事件、事件处理是什么响应

1、程序分析和具体实现

1.1游戏Logo页面

程序中有个logo类,该类负责绘制logo页面,页面状态为5,程序主控制类MC默认设置状态为5即打开程序后就显示logo页面。在这个类中加入了渐变效果。如图1.1:

手机小说阅读软件的源码 基于微信小程序的小说阅读器系统-计算机毕业设计源码+LW文档

图1.1

public void render(Canvas g)

{

Paint paint=new Paint();

paint.setColor(0xff000000);

g.drawRect(0,0,480,320, paint);

paint.setAlpha(a);

g.drawBitmap(im, 30,0, paint);

}

public void upData()

{

t++;

if(t>150)

{a-=10}

if(a<=0)

{ a=0;

MC.CanvasIndex=10;

t=0;

}

在480*320的画布上面绘制logo页面背景图片,由a值控制显示,下面的线程方法中,用for语句控制a值,t++直到150,这个是图片渐渐出现的效果,当t>150时,a-=10,这个是图片渐渐消失的效果,整个过程大约有5秒钟,然后自动跳转到游戏主菜单。

1.2游戏主菜单分析

程序中CanvasMain类实现了主菜单的功能。有开始游戏按钮和游戏帮助按钮,开始游戏按钮使用了图片闪烁播放效果。效果如图1.2所示:

手机小说阅读软件的源码 基于微信小程序的小说阅读器系统-计算机毕业设计源码+LW文档

图1.2

if(t%5==0)

{g.drawBitmap(im1,185,180,paint);

}

public void upData()

{t++;

if(t>5){

t=0;}}

用了if语句判断,使图片交替出现,达到闪烁效果,增加美感。对按钮的监听是用了Android中的触屏监听方法,监听玩家点到屏幕的范围判断操作。

//按键监听

public void penDown(float _x,float _y)

{ //判断是否点击图片区域坐标

if(Math.abs(240-_x)<40&&Math.abs(193-_y)<40){

//游戏开始,初始化游戏数据

CanvasUI.jinbiCount=0;

CanvasUI.life=3;

CanvasUI.score=0;

CanvasUI.time=0;

//跳转页面到Loading

MC.CanvasIndex=15;

}

if(Math.abs(240-_x)<40&&Math.abs(280-_y)<40)

{//播放音效

MC.sp.play(MC.press, 1f, 1f, 0, 0, 1);

MC.CanvasIndex=0;

}

}}

其中if(Math.abs(240-_x)<40&&Math.abs(193-_y)<40)

和if(Math.abs(240-_x)<40&&Math.abs(280-_y)<40)

两个if语句经过仔细计算后得出的,即在按钮大小的范围内,方便能准确监听到用户操作。当点击开始游戏时,初始化游戏数据,设定状态变量MC.CanvasIndex=15,传给MC,告诉MC应该显示开始游戏的页面了。同理,点击 游戏帮助时,由MC控制显示帮助页面。效果如图1.3所示:

手机小说阅读软件的源码 基于微信小程序的小说阅读器系统-计算机毕业设计源码+LW文档

图1.3

1.3 开始游戏过程的后台逻辑

当玩家点击开始游戏后,玩家看到的只有一个载入页面,显示的是玩家现在人数,而后台要经过迅速的线程加载。在MC类中实现。首先,响应的是Loading类,如下图1.4所示:

图 1.4

初始化地图信息、人物信息、敌人信息、道具信息,随后修改状态变量CanvasIndex值为20,传给MC,

case 20:

if(joy.music1down==true)

{

//开始背景音乐

MC.getMediaplayer().start();

}

if(joy.music2down==true)

{

//暂停背景音乐

MC.getMediaplayer().pause();

} //执行公共图片绘制

joy.upData();

//执行Player线程

p.upData(this,joy,mp,tm,dm,nm);

//执行地图线程

mp.upData(p, cx, cy);

//执行背景线程

bg.upData();

//执行地图线程

btm.upData(p, cx, cy,mp,nm,tm);

//执行道具线程

dm.upData(mp,p, tm);

//执行特效线程

tm.upData(mp,tm,p);

//执行胜利线程

win.upData(p, cx, cy);

//执行敌人线程

nm.upData(mp,cx,p,tm);

//执行主页面线程

cui.upData(p,tm);

//跳出

break;

效果如图1.5所示:

手机小说阅读软件的源码 基于微信小程序的小说阅读器系统-计算机毕业设计源码+LW文档

图 1.5

三、项目代码

要求:项目的核心代码:并在相关功能模块处添加功能说明及注释

布局文件代码

//开始游戏布局文件

<?xml version=”1.0″ encoding=”utf-8″?>

<RelativeLayout xmlns:android=”http://schemas.android.com/apk/res/android”

xmlns:dlc=”http://schemas.android.com/apk/res/com.dlc.finaldesign”

xmlns:tools=”http://schemas.android.com/tools”

android:id=”@+id/rl_gamecenter_main”

android:layout_width=”fill_parent”

android:layout_height=”fill_parent”

android:background=”@drawable/bg_gradient_color_lightblue”

android:orientation=”vertical” >

<!– 底部工具栏,里面有四个图片按钮 –>

<LinearLayout

android:id=”@+id/rl_gamecenter_bottom”

android:layout_width=”match_parent”

android:layout_height=”60dp”

android:layout_alignParentBottom=”true”

android:background=”@drawable/bg_gradient_color_blue”

android:orientation=”horizontal” >

<com.dlc.finaldesign.ui.view.ChangeColorIconWithTextView

android:id=”@+id/ccitv_gamecenter_indicator_notify”

android:layout_width=”0dp”

android:layout_height=”fill_parent”

android:layout_weight=”1″

android:padding=”5dp”

dlc:icon=”@drawable/tab_mygames”

dlc:text=”我的游戏”

dlc:text_size=”12sp” />

<com.dlc.finaldesign.ui.view.ChangeColorIconWithTextView

android:id=”@+id/ccitv_gamecenter_indicator_games”

android:layout_width=”0dp”

android:layout_height=”fill_parent”

android:layout_weight=”1″

android:padding=”5dp”

dlc:icon=”@drawable/tab_gamehome”

dlc:text=”游戏首页”

dlc:text_size=”12sp” />

<com.dlc.finaldesign.ui.view.ChangeColorIconWithTextView

android:id=”@+id/ccitv_gamecenter_indicator_more”

android:layout_width=”0dp”

android:layout_height=”fill_parent”

android:layout_weight=”1″

android:padding=”5dp”

dlc:icon=”@drawable/tab_moregame”

dlc:text=”更多”

dlc:text_size=”12sp” />

</LinearLayout>

<!– ViewPager –>

<!– 计算相对位置时,需要定位的布局需要计算好高度 –>

<RelativeLayout

android:layout_width=”fill_parent”

android:layout_height=”fill_parent”

android:layout_above=”@id/rl_gamecenter_bottom”

android:layout_alignParentTop=”true”

android:orientation=”vertical” >

<com.dlc.finaldesign.ui.view.MyViewPager

android:id=”@+id/mvp_gamecenter_main”

android:layout_width=”fill_parent”

android:layout_height=”fill_parent”

android:layout_gravity=”center”

android:background=”#eee” >

</com.dlc.finaldesign.ui.view.MyViewPager>

</RelativeLayout>

</RelativeLayout>

2、类文件代码

//Player类(核心类)

public class Player extends MySprite {

public static final int SPEED = 5;

// 定义水平移动速度,和垂直速度

float vx, vy;

float vy1; // 优化碰撞检测

int m;

// 定义玛丽死亡,默认为不死

boolean PlayerIsDead = false;

boolean ishitUp; // 碰撞金币砖块

boolean isDead; // 死亡判断

// 定义是否创建对象,包括敌人,障碍物等

boolean HaveCreate;

// 定义判断是否过关

boolean nextLevel;

// 为玛丽的状态定义二维数组

static int[][] fsData = new int[][] { { 0 },// 等待

{ 0, 0, 1, 1 },// 行走

{ 2 },// 跳跃

{ 3 } // 死亡

};

// 根据玛丽的状态绘图

public Player(Bitmap im, float x, float y) {

super(im, fsData, 0, 0, x, y, 31, 37, -15, -37);

// 默认初始移动速度为0

vx = vy = 0;

m = 0;

vy1 = 0;

// 定义默认值

PlayerIsDead = false;

ishitUp = false;

isDead = false;

HaveCreate = false;

nextLevel = false;

}

// 创建游戏逻辑方法

public void upData(MC mc, JOY joy, map mp, TXManager tm, DJManager dm,

NPCManager nm) {

this.nextFream();

// 接收参数m判断

if (m < 3) {

x += vx;

// 定义玛丽移动的前提

if (m == 0 || isDead == false || PlayerIsDead == false) {

// 左箭头被点的时候

if (joy.leftdown == true) {

this.f = true;

x -= SPEED;

// 碰撞检测方法

if (mp.isHit(x – 7, y – 18) > 0

|| mp.isHit(x – 7, y – 26) > 0

|| mp.isHit(x – 7, y – 10) > 0) {

x += SPEED;

}

if (x – mc.cx < 0) {

x += SPEED;

}

}

// 右箭头被点

if (joy.rightdown == true) {

this.f = false;

x += SPEED;

// 碰撞检测方法

if (mp.isHit(x + 7, y – 18) > 0

|| mp.isHit(x + 7, y – 26) > 0

|| mp.isHit(x – 7, y – 10) > 0) {

x -= SPEED;

}

if (x – mc.cx > 250 && mc.cx – 480 < 4318) {

mc.cx += SPEED;

}

}

// 点击退出的方法

// if(joy.quit_down==true)

// {

// // 关闭程序的方法,0是关闭

// System.exit(0);

// }

// 接收参数m的值判断

if (m == 0) {

// 点击上箭头的方法

if (joy.up_down == true) {

m = 1;

vy = -18;

// 状态为跳跃

changeFS(2);

// 此时加入点击音效

MC.sp.play(MC.getSoundId_long(), 1f, 1f, 0, 0, 1);

// 判断是否把位图置反

if (f == false) {

vx = 3;

} else {

vx = -3;

}

}

}

if (x – mc.cx > 250) {

mc.cx += 3;

}

}

}

switch (m) {

case 0:

if (mp.isHit(x, y) <= 0 || mp.isHit(x + 5, y) <= 0

|| mp.isHit(x – 5, y) <= 0) {

m = 1;

// 状态为跳跃

this.changeFS(2);

vy = 0;

}

break;

case 1: // 跳跃 重力引擎

y += vy;

vy += 2;

if (vy >= 15) {

vy = 15;

}

if (isDead == false) {

if (y > 400) {

tm.create(1, x + 25, 236, 30);

isDead = true;

vx = 0;

}

}

if (vy > 0) {

if (mp.isHit(x, y) > 0 || mp.isHit(x – 5, y) > 0

|| mp.isHit(x + 5, y) > 0) {

m = 0;

vx = 0;

// 状态为行走

this.changeFS(1);

y = ((int) y / mp.h) * mp.h + 1;

}

} else {

// 与问号碰撞检测的方法

if (mp.isHit(x, y – 37) > 0 || mp.isHit(x – 5, y – 37) > 0

|| mp.isHit(x + 5, y – 37) > 0) {

if (mp.isHit(x, y – 37) == 2) {

mp.map[((int) y – 37) / mp.h][(int) x / mp.w] = 0;

tm.create(4, ((int) x / mp.w) * mp.w + 8,

(((int) y – 37) / mp.h) * mp.h – 8, 6);// 生成金币特效

tm.create(

3, // 在玩家顶到的位置放置特效砖

((int) x / mp.w) * mp.w + 8,

(((int) y – 37) / mp.h) * mp.h + 8, 5);

}

// 与砖块碰撞检测方法

if (mp.isHit(x, y – 37) == 3) {

mp.map[((int) y – 37) / mp.h][(int) x / mp.w] = 0;

tm.create(5, ((int) x / mp.w) * mp.w + 8,

(((int) y – 37) / mp.h) * mp.h + 8, 5);// 生成砖块爆炸碎片

}

// 与有毒的蘑菇碰撞检测方法

if (mp.isHit(x, y – 37) == 13) {

mp.map[((int) y – 37) / mp.h][(int) x / mp.w] = 0;

dm.create(1, ((int) x / mp.w) * mp.w + 8,

(((int) y – 37) / mp.h) * mp.h – 16);// 生成毒蘑菇

tm.create(

3, // 在玩家顶到的位置放置特效砖

((int) x / mp.w) * mp.w + 8,

(((int) y – 37) / mp.h) * mp.h + 8, 5);

}

y -= vy;

y = (((int) y – 37) / 16) * 16 + 37;

vy = 0;

}

}

break;

case 3:

// 自由下落方法

y += vy;

vy += 2;

// 定义状态为死亡

this.changeFS(3);

if (vy >= 0) {

vy = 0;

m = 4;

}

break;

case 4:

vy += 2;

y += vy;

// 判断并状态为死亡

this.changeFS(3);

if (y > 380) {

isDead = true;

vx = 0;

// 根据第几关判断死亡后该回到第几关

if (MC.CanvasIndex == 40) {

MC.CanvasIndex = 35;

}

if (MC.CanvasIndex == 20) {

MC.CanvasIndex = 15;

}

}

break;

case 5:

break;

}

// 判断是否过关

if (x + mc.cx > 4800 && y > 320)

// if(x+mc.cx>900)

{

nextLevel = true;

if (nextLevel == true) {

MC.CanvasIndex = 30;

}

}

}

// 碰撞的逻辑

public boolean isHit(float _x, float _y) {

if (Math.abs(x – _x) < 10 && Math.abs(y – _y) < 10) {

return true;

}

return false;

}

}

相关问答

网站小说源码有哪些?

目前比较不错的小说源码,老牌的有杰奇、奇文,这些比较不错,市面上超过80%的小说站都是这两种系统。另外还有新兴的比如WMCMS、帝国EmpireBookV7.5,这些都是...

微信读书的背景颜色代码-ZOL问答

看小说最舒服的背景颜色代码,以前人看小说是用书来看,现代人看小说是用手机、电脑或者阅读器来看,其中看书还可以调背景颜色,颜色对我们的眼睛也很重要,下面是看...

番茄小说背景颜色代码是多少-ZOL问答

该该软件的背景颜色是可以根据用户的不同品味来更换的,所以其相关的代码并不是固定的。番茄小说,是今日头条旗下的免费网文阅读APP。我推荐黑色,看上心宁静换...

为什么我的手机看不了TXT格式的小说,怎么打开全是代码式的?

手机阅读器乱码,我一般用这个工具能解决:TXT电子书编码检测、转码工具在手机、电脑上都能处理乱码问题。操作步骤:1、进入这个小工具的页面2、点击选择文...

有ASP小说网站的代码吗?

应该是有的但是使用率不高,目前最好的SEO友好的程序是PHP的杰奇cms小说程序。功能很强大。目前网上有2.3版本的。带有微信支付宝支付功能的程序。可以做网站...

懒猫小说如何导入书源?

要导入书源到懒猫小说中,首先需要找到可用的书源链接。在懒猫小说中,点击左上角的“我的”按钮,然后选择“导入书源”选项。在弹出的页面中,输入书源链接并...

怎么样下载全集手机TXT版本小说,去哪个网站更好??-ZOL问答

手机讨论回答(7)如果您想下载小说的TXT版本,我建议您前往专业的电子书网站,比如豆瓣读书、当当网等。在这些网站上,您可以找到丰富的电子书资源,并且通常会提...

让书旗小说小程序如何计算字数-邮局信封的回答-懂得

找个程序员写个代码就可以解决你的问题了。是按一章一章的计算字数还是按照普通人一般的翻页速度来计算。以防用户刷页数或者刷字数

【什么是文体意识】作业帮

[回答]文体意识:指人们在文本写作和欣赏中,对不同文体模式的自觉理解、熟练把握和独特感受,是对读写实践的一种能动的再认识.对作者来说,他会根据具体的主...

用手机网页看小说,突然提醒手机遭到恶意代码攻击,并且一直震动,退?

那是骗人的,之前十多年前就有的很老的骗人手段了,要么是病毒网站,要么是广告网站。小说网站为了赚钱就和很多乱七八糟的公司合作,帮它们打广告,而有些广告...

抱歉,评论功能暂时关闭!