2021.03.17 pokémon小游戏开发记录与周总结
2021.03.17 pokémon小游戏开发记录与周总结
此篇仅包含部分项目代码,只是个人的学习总结。
文章目录
- 2021.03.17 pokémon小游戏开发记录与周总结
- 前言
- 一、前期准备
- 二、开发总结
- 1.分类建包
- 2.定义与调用属性
- ==Getter&Setter方法快速建立==
- 3.类的建立与整合
- 4.多态的适当使用会事半功倍
- 三、项目中的小收获
- 总结
前言
昨天结束了老师布置的小游戏项目,今天又听了老师自己开发这类项目的流程与思路,使我受益良多。
在本次项目中,我们小组以《pokémon》为原型,模拟实现了这个经典游戏的新手章节。虽然实现了最基础的几个功能,但还是有很多功能没有能实现,也对面向对象的编程思想不够了解。今天在老师与同学的帮助下对这类语言的了解又多了一些,大致也理解了一部分继承、封装、多态的功能与用法。学到了就应该记下来,趁热打铁,万一我哪天又忘了,这不白瞎了嘛。
声明:这篇文章中包含我们组的小游戏——《pokémon》项目,也包含老师教学讲解的小游戏框架——《伏魔录》项目。
一、前期准备
当接到一个新项目的时候,首先要在团队中落实每个人的工作任务,选定项目负责人,个人处理好个人的事情,在有余力的情况下帮助其他人更快的完成。其次要做好需求分析与调研(我们这种就是查查背景资料),做好前期的策划方案,可以明确项目的大致方向。接着做好流程设计,明确细节,有助于理清思绪,更便于分工合作。一定不能在接到项目后就急于动手编写代码,欲速则不达!
二、开发总结
这里我主要只阐述我在这次项目中所学到的一些知识和一些改进我代码编写方式的小技巧,我已经搞懂的、熟悉的、在使用的就没有写在里面。
1.分类建包
在开始编写类之前,先把大致的包分好类,做好文件管理。这里不需要考虑的特别全面,在编写代码的过程中有想到建立新的包,或者之前分包方式有不方便的地方可以再适当添加修改。在我们这个《pokémon》项目里新建的包有:
1)存放地图类的 map包
2)存放NPC、商店的 npc包
3)存放玩家数据与战斗方法的 player包
4)存放宝可梦与宝可梦技能的 pokemon包
5)存放流程逻辑主函数的 pokemonmain包
2.定义与调用属性
这方面我们组内的小游戏项目还有着很大的问题,没有充分利用JAVA语言面向对象的优势,大都还在使用面向过程的编写逻辑,导致组内的分工合作经常无法开展下去。这里使用老师建立的教学项目《伏魔录》来描述;
老师在新建类时先建立的玩家类Player,在其中定义各种玩家属性,代码如下:
public class Player {//名字private String name="张三";//攻击力private int attack = 10;//当前血量private int health = 50;//最大血量private int maxHealth = 50;//当前蓝量private int mana = 100;//最大蓝量private int maxMana = 100;//当前经验值private int exp = 0;//最大经验值private int maxExp = 10;//最大经验值的增长private int maxExpGrowth = 10;//防御力private int defense = 10;//当前金钱private int gold = 100;//等级private int level = 1;//物品栏private Item[] items = new Item[10];//技能栏private Skill[] skills = new Skill[5];//职业private Profession profession;}
这里玩家的属性都将访问修饰符设置为私有private,并使用getter&setter方法来读取或者写入这些属性。这里主要说一下getter&setter方法的快速建立方法:
Getter&Setter方法快速建立
在创建好私有属性后可以通过右键找到并打开Generate选项,或者通过Alt+Insert来实现同样的功能:
打开后可以在Generate选项中找到getter and setter
选择getter and setter后,在裂变中选择需要使用getter&setter方法的属性,在点击OK按钮即可完成建立
3.类的建立与整合
完成类中属性与方法的定义后,就要开始按照流程设置一些类了。我们这个《pokémon》项目中,“御三家”以及后续 宝可梦 都是通过继承的方式来进行一些属性及方法的定义,这样便于整合同一类代码,减少了代码的冗余,有利于拓展功能
其中父类pokemon的代码如下:
//父类
public class Pokemon {public String pokemonName;// 生命值public int pokemonHp;public int pokemonhp;// 攻击值public int pokemonAttack;// 防御public int pokemonDefend;//状态public boolean pokemonStatus=true;// 每个精灵均有4个技能,但是每个技能不一样// 攻击技能1 ,攻击技能所对应的技能值public String attackSkill1;public int attackSkill1Value;public int proficiency1;// 攻击技能2 ,攻击技能所对应的技能值public String attackSkill2;public int attackSkill2Value;public int proficiency2;// 攻击技能2 ,攻击技能所对应的技能值public String attackSkill3;public int attackSkill3Value;public int proficiency3;// 特殊技能 ,特殊技能技能所对应的技能值public String specSkill;public int specSkillValue;public int proficiency4;// 初始化各项属性,第一级public Pokemon() {// 生命值 开始初始化的值随机数(50,70)this.pokemonHp= (int) (Math.random()*20)+70;this.pokemonhp=this.pokemonHp;
// 攻击值 随机数(10,30)this.pokemonAttack=(int) (Math.random()*20)+10;
// 防御值 随机数(10,30)this.pokemonDefend=(int) (Math.random()*20)+10;}public void elfSkills(){ }public void upgrade(){ }public void upgradeattribute(){ }//public void show() {System.out.println("@@@@@@@@@^@^@@@@@@@@@@");System.out.println("+===" + this.pokemonName + "===+");System.out.println("@|生命值:" + this.pokemonHp);System.out.println("@|\t技能\t技能值");System.out.println("@|\t"+this.attackSkill1+this.attackSkill1Value);System.out.println("@|\t"+this.attackSkill2+this.attackSkill2Value);System.out.println("@|\t"+this.attackSkill3+this.attackSkill3Value);System.out.println("@|\t"+this.specSkill+this.specSkillValue);System.out.println("@|防御力:" + this.pokemonDefend);System.out.println("@@@@@@@@@^@^@@@@@@@@@@");}
其中之一的子类Hitokage的代码如下:
//小火龙
public class Hitokage extends Pokemon {// 宝可梦的名称public Hitokage(){this.pokemonName="小火龙";this.attackSkill1="撞击";this.attackSkill1Value=40;this.proficiency1=0;this.attackSkill2="火花";this.attackSkill2Value=45;this.proficiency2=0;this.attackSkill3="火焰牙";this.attackSkill3Value=65;this.proficiency3=0;this.specSkill="龙息";this.specSkillValue=70;this.proficiency4=0;}//升级public void upgrade(){if (this.proficiency1>=10){//熟练度清零this.proficiency1-=10;//伤害值提升this.attackSkill1Value+=5;upgradeattribute();}else if (this.proficiency2>=10){//熟练度清零this.proficiency2-=10;//伤害值提升this.attackSkill1Value+=5;}else if (this.proficiency3>=10){//熟练度清零this.proficiency3-=10;//伤害值提升this.attackSkill1Value+=5;}else if (this.proficiency4>=10){//熟练度清零this.proficiency4-=10;//伤害值提升this.specSkillValue+=5;}upgradeattribute();}//属性面板升级public void upgradeattribute(){this.pokemonHp+=20;this.pokemonAttack+=4;this.pokemonDefend+=1;}
而在老师建立的教学项目《伏魔录》中,老师更是大量使用了继承的方式,在职业技能、物品设定、地图设定、NPC设定及野怪设定中都有很多的运用。
4.多态的适当使用会事半功倍
老师在地图的设定中,使用了多态性这个概念,将地图传入的选择放到共同父类里面,在后续的方法中选择使用可以减少很多没必要的语句
//玩家类中
public boolean wander(Field nowhere, Scanner scanner) {int i = (int)Math.floor(Math.random()*9);System.out.println("遇到怪物 " + nowhere.enemies[i].enemyName);boolean flag = this.attack(nowhere.enemies[i],scanner);if(flag){System.out.println("胜利");this.addExp(nowhere.enemies[i].exp);this.addGold(nowhere.enemies[i].gold);return true;}else {System.out.println("失败");return false;}}
…………
//游戏运行流程类,主方法
if (choice > 0 && choice < 3) {if (choice == 1) {Nowhere nowhere = new Nowhere();boolean state = player.wander(nowhere, scanner);if(!state){System.out.println("英雄十八年后又是一条好汉");return;}} else if (choice == 2) {Mountain mountain = new Mountain();boolean state = player.wander(mountain, scanner);if(!state){System.out.println("英雄十八年后又是一条好汉");return;}} else if (choice == 3){continue;}}
三、项目中的小收获
注释!注释!注释!!! 重要的事情讲三遍!写代码一定要加注释!这句话是我对自己的要求!但我饿希望各位也这样做!真的,写注释的好处太多太多了,我也就不哔哔了,缺点可能就是有点麻烦,但我真的看没有注释的代码看到头秃,可太难为我这种小白了,夺笋啊!
写代码的时候一定要按照一定的一思路,有序的写,可别东一句,西一句,整到后面自己都忘了哪儿写了哪儿没写,最后还要找好久,报几次错,才找得到问题在哪里。
最后就是在合作项目时,一定要经常沟通,在保证自己进度的前提下多帮助其他人,这是一个小组的项目,不是某个人自己的项目,与其一个人累死累活的弄,不如齐心协力,携手并进。
总结
在本次项目中,由于组内大多数成员是JAVA语言的初学者,对面向对象的语言十分陌生,所以开发进度十分缓慢,还有很多功能由于能力与时间的原因无法实现。并且我们现在也只是第二次开展合作性质的项目,不论是组员间的分工合作还是代码的统一整合都挺陌生的,急需改进。对我来说,本次项目是一堂非常好的课,只有在实践中才能真正找到自己所欠缺的地方,找到基础的问题才能更快的学习上层知识。目前,我需要的是尽快梳理清晰基础知识要点,尽快熟悉这种面向对象编程的方式。
在本周所学的知识点中,包装类与单例模式的学习还有所欠缺,在同学的讲解下对概念有了了解。但让我在实际中运用,我可能根本就不会用,可能还是以一种面向过程的方式去编写。现在要继续改进,尽快复习搞懂这些不扎实的基础。
2021.03.17 pokémon小游戏开发记录与周总结相关推荐
- 微信小游戏开发学习记录2
接上一篇:微信小游戏开发学习记录_寂静流年韶华舞的博客-CSDN博客_微信小游戏开发学习 目录 一.UI系统 1.基础渲染组件-精灵组件 (1)操作: (2)Sprite 属性 (3)渲染模式 2.L ...
- 【开发记录】微信小游戏开发入门——俄罗斯方块
叨叨 我在前一阵子,打算做一个微信小游戏,当然是单机的,只是为了了解小游戏开发的过程,最终选择了俄罗斯方块这一经典小游戏作为demo,源代码已托管值github,当然,这个游戏demo对用不并不友好, ...
- HTML5游戏_基于DOM平台跳跃小游戏开发_9.按键监听
HTML5游戏_基于DOM平台跳跃小游戏开发 按键监听 视频讲解 HTML5游戏 效果图 本章知识点: 对象自定义名称属性,可以用变量来命名属性名称 //这段代码把多个属性(品牌, 型号, 排量)赋给 ...
- 动态加载子节点_微信小游戏开发之场景切换和常驻节点传递数据
主题 场景切换 场景间数据传递方式 小游戏全局背景音效 特别说明 CocosCreator微信小游戏开发系列文章,是我在逐步开发过程中,基于官方文档之上,记录一些重点内容,以及对官方文档中有些知识点的 ...
- Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第二篇)
Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第二篇) 代码实现 窗口类 小车类 玩家类 电脑类 赛道类 小树类 打字类 Python 打字小游戏开发,来体验不一样的打字游戏乐趣(第一篇) ...
- 微信小游戏开发实战教程15-关卡编辑器的制作以及关卡分享功能的实现
微信小游戏开发实战系列的第15篇. 本节主要内容有游戏中的关卡编辑器的实现思路以及如何利用分享功能将自己制作的关卡与好友分享. 如果你没有任何的游戏开发经验,欢迎阅读我的"人人都能做游戏&q ...
- 微信小游戏开发实战教程2-使用表格处理数据
**这是小蚂蚁游戏开发公众号原创的第36篇. 本篇内容包括微信小游戏开发工具中的表格的使用.重点学习表格中的数据的设置,遍历和查找操作,以及如何使用"调试场景"来验证游戏中的逻辑是 ...
- 我的小游戏开发之路|腾讯TGideas周桂华(花叔)
作者:云加社区(QcloudCommunity) Cocos 经授权进行转载! 在8月17日,"小程序·云开发"系列沙龙(小游戏专场)的现场,周桂华老师(花叔)从个人学习路径构建出 ...
- 微信小游戏开发实战教程8-消除处理
这是小蚂蚁游戏开发公众号原创的第42篇,微信小游戏开发实战系列的第8篇,点击上方的#微信小游戏开发实战话题可以查看本系列的所有内容. 本篇主要内容包括如何对网格上满足消除条件的方块进行消除处理. 如果 ...
最新文章
- 关于HtmlAgilityPack解析页面中数据乱码问题
- 如何用C语音实现传递函数?
- python之setdefault()和defaultdict()处理缺失值的键
- 程序员怎么看待C语言?最伟大?最落后?
- IPv4和IPv6有什么异同?
- mysql binlog 增量备份
- python装饰器有几种_Python装饰器使用你可能不知道的几种姿势
- 一个简单的获取时间的程序
- C++父类和子类同名函数及继承关系---多态
- JavaScript中的数据类型及数据类型转换(附实例)
- 网页抽奖程序(年会,开幕式等)
- 欺骗的艺术from凯文•米特尼克
- 缺省路由(默认路由)实验
- 失物招领小程序_可查询失物、可了解换乘,京港地铁今日上线微信小程序
- vue路由传参 params传参不能传对象
- python random模块中seed函数的详解_random.seed()函数理解
- 初级安全测试工程师的工资一般多少?
- linux 互斥机制
- Firefox火狐浏览器主密码暴力破解
- ps安装程序检测到计算机重启过程,photoshop cs6安装过程中安装程序遇到错误:请重启计算机,解决办法...
热门文章
- 你觉得八部金刚功、八段锦、太极拳这种中国传统养生功法有效吗,请从科学与实践的角度详细阐述...
- VUE报错:Avoid mutating a prop directly since the value will be overwwritten whenever the parent及解决方案
- VMware发布Linux虚拟桌面技术预览版
- 使用Python进行同期群分析(Cohort Analysis)
- 小米随身wif linux平台配置
- 表妹也录取了计算机专业,作为过来人要给她领好路!
- 解决QQ小游戏、微信小游戏 getLaunchOptionsSync()获取的数据为旧数据
- 核心项目:高并发秒杀系统(项目介绍,项目搭建,数据库,DAO)
- 特斯拉将粉丝创意注册为商标 包括电动皮卡版书包
- 提高效率必备,EdrawMax亿图图示教你快速制作图表!