幼儿在游戏中的角色扮演游戏为什么都偏爱正派向上的角色,教师应该怎么办?

电子游戏与中小学生心理健康相关的调查报告
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
电子游戏与中小学生心理健康相关的调查报告
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口好玩的安卓角色扮演游戏下载_安卓角色扮演游戏推荐
您的位置:
&&好玩的安卓角色扮演游戏
不良人是一款RPG游戏,游戏不仅真实还原了李星云、姬如雪、张子凡、黑白无常等众多人物形象,同时还根据动画原著经典桥段,铺设...
金庸群侠传X一款RPG类游戏,剧情由金庸笔下的十四部小说改编及创造。游戏里包含时间系统,天赋属性等元素,在战斗场景,是战棋...
酒剑仙是一款纯正修仙题材、真仙侠手游,游戏不分性别,不看等级,唯最强者可一统天下!经典的PVE、PVP再续战场争霸,团战玩...
刀剑神域:代码寄存器(ソードアート?オンライン コード?レジスタ)是一款融合了策略与动作元素的正统RPG。游戏以动漫版刀剑...
繁殖战争2破解版安卓版一款策略类RPG动作游戏!该游戏在20余个国家名列榜首,累计下载700万的全球人气游戏 ,繁殖战争的...
克鲁赛德战记(Crusaders Quest)是一款经典RPG手游。美术风格采用了网游比较少见的像素风格,操作也很简单直观...
血之荣耀2破解版是一款角色扮演的手机游戏,游戏中我们将将如伟大的古罗马角斗场,与强大的对手进行殊死决斗,见证自己的实力和勇...
鬼泣4是一款角色扮演类游戏。在游戏画面中可以看到尼禄用布裹着他的右手,这实际上是寄宿着恶魔之力的手。尼禄最初并不知道其潜力...
宠物小精灵xy是一款经典动漫宠物小精灵的改编作品,玩家可以在游戏中收集各种小精灵进行培养升级,在各种模式挑战下战胜对手赢得奖励。
精灵使的剑舞:梦幻决斗(精霊使いの剣舞 DayDreamDuel)是一款以动漫精灵使的剑舞世界观为原型的3D动作RPG游戏...
《二次元幻想》是一款日系风格的卡牌RPG手游,游戏特约画师,力图为玩家重现经典日系动漫角色,独创二次元动漫人物大乱斗,画工...
东京喰种(東京喰種 carnaval)是一款RPG游戏,画面采用3D场景,并设置高、中、低三个视角。游戏中玩家可以操控喰种...
监狱生活RPG是一款以监狱生活为题材的养成游戏,游戏中加入了丰富的元素等你来享,你能在这个监狱中活的风生水起么?赶快加入进...
在异世界活下去中文版是一款冒险RPG类手机游戏,自由度超高的一款游戏,有关剑与魔法的异世界故事终于要开始了,这是以废土世界...
地牢猎手5是一款大热动作RPG手游系列的最新续作。最近流出了疑似地牢猎手5的预告片,点开视频,我们能看到在高清精致的画面里...
杀神逆苍天是一款角色扮演类卡牌手游。《杀神》由中国金牌网络作家逆苍天唯一正版授权改编,100%还原杀神小说原型人物和剧情,...
魔剑镇魂曲英雄之泪一款动作角色扮演类游戏,魔剑镇魂曲游戏背景在浑沌不明的年代中,以传统战棋玩法的设计基础,新增加了acti...
武林群英传是一款十分有趣的角色扮演武侠游戏,随着故事的进程,玩家可以训练各式各样的技能和武功,以创造出自己心目中的武林英雄...
穿越之姻缘劫 一款角色扮演游戏,只因命格星君那老糊涂写错了一笔,让本该出生在古代的你出生在了现代,现在那个老糊涂发现了这个...
西游降魔篇动作版是有星爷的同名电影改变而来,游戏邀请了电影特效团队参与手游产品特效画面指导,游戏画面十分精致,采用经典的西...
黑暗传说单机RPG是一款半放置类的独立单机RPG游戏,游戏中玩家可以刷怪升级,强化,附魔,打造装备,大量副本,隐藏BOSS...
骑士经理是一款回合制的像素游戏,来源于老式纸笔式的RPG,玩家控制骑士进行学习和战斗,可以自由放置怪物,选择战斗方式,并得...
战斗之心:遗产(Battleheart Legacy)是一款角色扮演游戏。游戏沿袭了之前的游戏基因,但延续并不等同于照搬,...
屠仙战神是一款修仙传奇题材的角色扮演类手游。游戏拥有华丽唯美的画面场景,悠扬悦耳的背景音乐,精致清新的角色造型。并且富有多...
重装机兵3是一款大型角色扮演单机游戏,主人公通过不断的磨练,寻找更厉害的战车、装备、伙伴,游戏延续了重装机兵的经典模式,更...
我的世界城市猎人(Block Cube Gun War)是一款像素风格的角色扮演的手游,欢迎来到广阔的我的世界,在游戏中你...
武林群侠传是一款十分有趣的养成型的角色扮演武侠游戏,主角东方未明丝毫不懂武功,却一心想要成为天下第一的侠客。武林群侠传手机...
十万个冷笑话是一款非常有趣的手机游戏,这款游戏根据同名网络原创漫画《十万个冷笑话》改编而来,十万个冷笑话大电影将会在明年上...
主神空间4是一款文字RPG游戏,这款游戏是专为无限恐怖的粉丝做的文字游戏,犹如小说般的剧情,一切都由你来决定剧情发展,不知...
天天射手修改版是一款RPG手机游戏,游戏版本为修改版,无限金币使用!你将选择弓箭手角色进入游戏,强化角色能力,学习更多的技...
梦幻西游是一款角色扮演类回合制游戏,梦幻西游游戏里三大种族任你选择,十二派相互克制,每个门派都有一招必杀技来克制另外一个门...
烈火裁决是一款重度MMORPG传奇类手机游戏,游戏延续了传统的MMORPG游戏核心玩法,打怪刷宝,升级、PK等。游戏前期主...
炎龙骑士团2怀旧版是一款延续经典的游戏名作的角色扮演类游戏,故事依旧发生在马拉大陆,前座主角的样子索尔和伙伴亚雷斯,护送美...
传奇挂机是一款自动挂机战斗的传奇RPG游戏。在这里打怪都是自动的,从你创建人物开始,就会不停的自动打怪,获得经验、金币和掉...
美少女梦工厂手机版由韩国MGAME获得日本赤井孝美授予的正版版权,采用UNITY 3D引擎制作开发而成。产品以模拟经营养成...
方块黑帮:生存之战(Block Clans - Gun Survival PE)是一个射击游戏。进入方块黑帮的世界,你可以...
江湖武侠是一款角色扮演的手游,江湖武侠游戏内容丰富,玩法新颖。奇妙的仙侠世界,令人紧张的冒险之旅现在开始!
奇塔利亚英雄是一款以西方魔幻世界为背景的RPG游戏,游戏在延续传统RPG玩法的基础上,加入了丰富的游戏剧情等你来体验!流畅...
困境求生(Stranded Survival)是一款开放的像素风格的角色扮演游戏。游戏中,主角被困在一个神秘的荒岛,玩家需...
盗圣传前世情缘一款武侠角色扮演手游,在这个爱恨交织的江湖,每时每刻都上演着血腥与杀戮!为了一件神兵利器,多少人为之惨死!唯...
小小军团2是一款以三国魏背景,采用Unity3D引擎制作,拥有精美画面,欧美Q版画风,人物鲜明的策略类卡牌游戏。游戏的核心...
剑灵联盟是一款仙侠风格的横版RPG手游,在游戏中玩家可以骑着宠物到处遨游还可以渡劫,更有强大的属性,独特的游戏世界观,唯美...
西游传奇是一款充满3D暗黑风格的中轻度RPG手游,主打公会系统,独创转生玩法,还会有大家喜爱的魔宠!神将、灵猴、妖姬三大战...
三国大时代4霸王立志是一款扮演游戏,从独特的视角切入,更丰富多线的剧情,更多数量的武将,更细致的内政,更激烈的战斗,带给你...
天天格斗是一款动作游戏,优秀团队倾心打造,回味原汁原味的RPG! 随机障碍,隐藏掉落,还原街机体验! 水墨风格,精致画面,...
口袋精灵王是以宠物小精灵为题材的游戏,游戏除了副本推图、宠物收集、竞技PK、阵法收集等经典玩法,还有宠物升品、进化、交配,...
符文重生是一款角色扮演类游戏,游戏在角色扮演的基础上加入了QTE的玩法,更有多种策略,配置符石,才能在这个神奇的魔幻大陆里探险!
火影忍者之佐助复仇是一款角色扮演的动作类单机游戏 ,讲述火影最具人气角色佐助,因家族一夜之间被神秘人物灭门,而踏上复仇不归...
勇士的黎明:混沌之战是一款像素风格画面的RPG手机游戏!游戏中丰富的英雄角色可以选择!游戏中解锁更多的伙伴和你一起战斗,类...
讨妖传:妖玉奇谭是一款以中国古代仙侠为题材的手机游戏。游戏画面精美,剧情跌宕起伏。该作采用经典的回合制战斗方式,游戏主角从...
口袋妖怪:金中文版是一款角色扮演游戏,玩家作为一位精灵训练家前往各地旅行,完成各种交付的任务,沿途不断挑战其他精灵训练家以...
暗黑挂机是一款暗黑风格的RPG手机游戏,而该游戏以休闲放置类挂机为玩法,全自动离线挂机战斗让你轻松休闲游戏!丰富的职业和装...
无尽之光是一款挂机类角色扮演手游。无尽之光有三大职业、数十种技能,胜利最终是属于那些敢于尝试和战术多变的强者!在天空塔中,...
剑灵无双(单机版)是首款ARPG的横版动作类双角色扮演游戏,游戏一改传统ARPG单一角色的通关模式,游戏采用控制两位角色进...
新全民西游是一款萌系RPG游戏,无尽闯关乐趣无穷,试试看你的极限在哪里! 画面精美绚丽,音乐紧张刺激,玩法简单粗暴!想跟妖...
OUTER是一款角色扮演游戏。哥哥的死亡,觉醒了 Corona 无限力量,她封印了她的父亲,黑暗巨龙 Ira calico...
新东游记是一款根据民间传说八仙过海改编而成的文字RPG游戏!游戏中为你讲述了精彩八仙的故事!游戏中你将扮演主角何秀姑去经历...
血族萝莉(bloodline)首款吸血鬼动漫卡牌RPG大作,!游戏故事原汁原味的还原了漫画原作,根据漫画剧情分为五大篇章,...
魔塔物语(MagicTower)是一款经典的角色扮演游戏,游戏中抛除了烦琐的任务、老套的剧情,小清新冒险解密RPG重磅上演...
仙剑续缘一款经典的仙剑系类rpg游戏,本游戏画面优美,动作流畅,你可以通过杀死怪物获得金钱,购买各种装备,是你的闯关更加容...
战斗之心:遗产(Battleheart Legacy)是一款已经制作了两年多的策略 RPG 新作,也是《战斗之心》的续作。...
狮鹫模拟器(Griffin Sim)是一款非常独特的角色扮演类游戏,游戏中玩家将会扮演成为一只狮鹫,你没看错,就是狮鹫!在...
全民闯天下是一款集武将收集、养成、PVE、PVP于一体,包含丰富活动玩法的策略RPG游戏。全民闯天下画面精美,内容丰富多样...
傲剑江湖独孤求败一款角色扮演手游。年度武侠巨献,逍遥游精英团队呕心沥血倾心奉献。超过150小时跌宕起伏的超长剧情演义了一个...
侠盗猎车手血战唐人街修改版是一款角色扮演类游戏。游戏画面展示方式与该系列以往的作品有很大不同,有部分与初代相类似(详见侠盗...
天命幻想是一款大型3D多人在线角色扮演类手游,天命幻想游戏让你体验波澜壮阔的大陆争霸,宏伟的主城,超华丽3D战斗特效,开放...
熹妃传是一款角色扮演类游戏。后宫争斗看倦了?宫廷游戏泛滥了?不要紧!看熹妃传分分钟刷新你的双眼!经典畅销宫斗小说清宫熹妃传...
武林群英传是一款十分有趣的角色扮演武侠游戏,随着故事的进程,玩家可以训练各式各样的技能和武功,以创造出自己心目中的武林英雄...
Dokuro安卓版是一款目前非常火爆的动作冒险游戏!该游戏是一款由智龙迷城开发商GungHo制作的动作游戏!游戏中玩家扮演...
仙剑问情是是一款全新rpg的游戏,游戏背景讲述的是仙剑复出,谁与争锋,修道成仙,为求哪许?集神器、救红颜,快意恩仇,统一三界。
少侠来战是一款角色扮演类游戏。是2014年度最佳武侠巨作少侠来战,最热血最爽快的格斗体验;最萌最Q的游戏画面,带你穿越搞趣...
仙魔双修之红尘决绝是一款RPG手机游戏,游戏加入了精彩的剧情内容,让你体验最刺激的仙侠游戏内容!让你更好体验精彩修真成仙之旅!
超级矿工3安卓版是一款动作冒险类角色扮演游戏!在这款游戏中,有三种不同的环境,熔岩,泥浆和草地,你需要战胜大量的怪物,避开...
神父的游戏是一款日系像素风格的角色扮演手游,游戏中玩家将扮演一名腹黑神父,你要做的就是到处搜到村民的钱财,还要培育勇士作为...
霹雳江湖是一款改编自霹雳神州的网络游戏。霹雳江湖拥有大霹雳国际集团授权,游戏中也将霹雳场景完整精彩呈现,经典剧情更是让玩家...
女神出任务是一款结合卡牌元素的美少女冒险RPG游戏,游戏中玩家将在被融合的世界中与美少女们对抗最邪恶的军团,恢复世界和平。
热血之刃是一款精心打造的MMORPG类传奇手游,游戏继承了传奇的核心玩法。尤其重视PK的极致体验,注重战斗的打击感和流畅度...
暗黑之光是一款魔幻题材的RPG手机游戏!游戏加入了丰富的职业系统,精彩的剧情内容等你体验,讲述黑暗之神重现大陆,你将扮演主...
刀剑降魔录是一款中国风横板动作角色扮演游戏。两大职业,五大华丽场景,数十种技能,上百个不同关卡,完全不会重复的装备属性,身...
古剑奇缘是一款以上古神话时代为背景的仙侠魔幻手游巨作, 整个游戏体现了玩家从一名初级修仙弟子,历尽艰辛修复上古仙剑-紫青双...
叫我妖怪是一款以西游题材为背景的华丽手游之作,自上手伊始就能让你沉浸其中:扑朔迷离的剧情演绎、变化迭出的智能卡组、相生相克...
怪兽蛋小岛(モンスターエッグアイランド)是一款冒险益智角色扮演游戏,讲述了主人公亚卢克是一位可以变为星星形态的少年,为了救...
少年西游是一款西游题材的回合制MMORPG手游。萌将助阵,好友随行,西行之旅即将启程!快来下载《少年西游》与你的小伙伴们一...
堕落城市(Exsilium)是一款动作RPG游戏,游戏讲述了这样一个故事,由于人类动力科技的发明成功,出现了一个名叫VEP...
厄灾之血(厄灾の血)是一款硬派和风的幻想角色扮演游戏。游戏以被4个大家族统治的邦州和秦国为舞台,讲述了其中一个大家族刀月家...
SD高达战争之地是一款非常有趣的结合了育成收集元素的动作RPG游戏。玩家可以组建强大战队与敌人展开酣畅淋漓的战斗。
天剑外传是一款以仙侠题材为故事背景的3D回合制RPG手游,其顶级品质丝毫不逊色于端游体验。全方位的自由视角,强大的3D战斗...
神魔西游百难成仙一款西游题材类动作游戏。全新西游大作,个性鲜明的伙伴,造型迥异的妖怪;爽快的打斗,精美的画面;全新的伙伴系...
吞噬天地修改版是一款有趣的角色扮演类游戏,超萌人设,犀利曲折的剧情,丰富的怪物及场景!30余种华丽的技能,7种转职职业,丰...
骑士9号是一款充满魅力动作效果的新概念RPG游戏,本作可以通过简单的操作来体验逼真的冒险之旅。可雇佣并养成总计18名的人物...
走向深渊(Down In The Deep)是一款角色扮演类游戏。游戏整体共有40个大型的随机自动生成的地牢场景,并有白天...
封神猛将托塔天王是一款以神话人物托塔天王李靖为题材的手机RPG游戏!封神猛将讲的是托塔天王李靖在机缘巧合下被女娲娘娘点化并...
死亡地下城一款冒险角色扮演游戏,游戏算是一般般,大家可以尝试下!古老而邪恶的力量已经被从地下释放出来了,你需要扮演一个人类...
魔灵召唤天空之役是一款超越经典之RPG大作!!魔灵召唤!顶级乐趣,震撼享受!超大规模,制作绝对精良的RPG! 围绕魔力水晶...
黑暗崛起(Rise of Darkness)是一款角色扮演游戏。地下世界的恶魔入侵,世界陷入混乱,和平的唯一希望被寄托在一...
村民A是一款日系的非主流RPG游戏。说起日本游戏,首先想到的就是2次元。还有日本开发者切入游戏的角度总是略微引人注目。此款...
咒灵诞生(Wraithborne)是一款RPG游戏。游戏的故事发生在一个即将崩塌的魔法世界,古老的幽灵、地精、狼人不断侵袭...
终极一班是一款角色大乱斗的游戏世界!女性化的英雄角色,你将穿越到不同的时代来招募这些美女英雄,如:西游世界、神雕侠侣世界等...
勇士试炼修改版是一款动作类的角色扮演游戏。游戏需要实时网络连接,游戏画面效果非常绚丽。游戏有6种职业可以选。体验爽快的战斗...
侠盗猎车手:血战唐人街(GTA: Chinatown Wars)是Rockstar Games, Inc.开发的一款角色扮...
最新软件应用合集
CopyRight2004年-年
游迅网 All Rights Reserved
备案编号:沪ICP备号-6 | 沪网文[2号为什么面向对象的编程是有用的?(以一个角色扮演游戏为例) - 博客 - 伯乐在线
& 为什么面向对象的编程是有用的?(以一个角色扮演游戏为例)
& 7.0K 阅读
本文面向的是那些刚刚接触编程,可能已经听说过”面向对象编程”,”OOP”,”类”,”继承/封装/多态”,以及其他计算机科学术语的,但是仍然没有真正明白如何使用OOP的朋友。在本文中,我将解释为什么使用OOP和如何轻松编码。这篇文章使用Python 3代码,但其概念适用于任何编程语言。
有两个关键的非面向对象编程概念需要马上理解:
重复的代码是一件坏事。
代码永远都在改变。
除了一些单任务和只运行一次的微小的”用完即弃”的程序,你几乎总是需要为了解决bug或增加新功能而更新你的代码。大部分编写良好的软件是那种可读性高,易于修改的软件。
如果你经常在你的程序中复制/黏贴代码,那么当你修改它的时候,就需要在很多地方做出同样的改动。这是棘手的。如果在某些地方遗漏了修改,你将到处修改bug或者实现的新功能有不一致性。重复的代码是一件坏事。程序中重复的代码将会把你置于bug和头痛之中。
函数让你摆脱重复的代码。你只需要将代码写到函数中一次,就可以在程序中的任何需要运行代码的地方调用它就可以。更新函数的代码就可以自动更新调用函数的地方。正如函数使得更新代码变得容易,使用面向对象编程技术也会组织你的代码使它更容易改变。记住代码总是在改变的。
一个角色扮演游戏栗子
大多数OOP教程都是令人作恶的。它们有”汽车”类和”鸣笛”方法,其他一些例子与新手写的或者之前接触过的实际程序都是不相关的。因此本博文将使用一个RPG类视频游戏(回忆下魔兽,宠物小精灵,或龙与地下城的世界)。我们已经习惯于将游戏中的事物想象成一些整数与字符的集合。看看Diablo(暗黑破坏神)角色屏幕或D&D角色表单上的数字:
从这些RPG视频游戏中去除图片,角色,装甲,其他对象只是变量形式的一个整数或者字符值的集合。不使用面向对象概念,你可以在Python中这样实现这些事物:
name = 'Elsa'
health = 50
magicPoints = 80
inventory = {'gold': 40, 'healing potion': 2, 'key': 1}
print('The hero %s has %s health.' % (name, health))
以上变量名都是非常通用的。为了在游戏中增加怪兽,你需要重命名玩家角色变量,并且增加一个怪兽角色:
heroName = 'Elsa'
heroHealth = 50
heroMagicPoints = 80
heroInventory = {'gold': 40, 'healing potion': 2, 'key': 1}
monsterName = 'Goblin'
monsterHealth = 20
monsterMagicPoints = 0
monsterInventory = {'gold': 12, 'dagger': 1}
print('The hero %s has %s health.' % (heroName, heroHealth))
当然你希望有更多的怪物,接着你会有类似monster1Name, monster2Name等等的变量。这不是一种好的编码方法,因此你可能会使用怪物变量列表:
monsterName = ['Goblin', 'Dragon', 'Goblin']
monsterHealth = [20, 300, 18]
monsterMagicPoints = [0, 200, 0]
monsterInventory = [{'gold': 12, 'dagger': 1}, {'gold': 890, 'magic amulet': 1}, {'gold': 15, 'dagger': 1}]
然后列表索引0处是第一个哥布林的状态,龙的状态在索引1处,另一个哥布林在索引2处。这样你可以在这些变量中存放很多怪物。
但是,这种代码容易导致错误。如果你的列表不同步,程序将无法正常工作。例如玩家击败了索引0处的哥布林,程序调用了vanquishMonster()函数。但这个函数有一个bug,它会(意外的)删除列表中的所有值除了monsterInventory:
def vanquishMonster(monsterIndex):
del monsterName[monsterIndex]
del monsterHealth[monsterIndex]
del monsterMagicPoints[monsterIndex]
# Note there is no del for monsterInventory
vanquishMonster(0)
怪兽列表最后看起来像这样:
monsterName = ['Dragon', 'Goblin']
monsterHealth = [300, 18]
monsterMagicPoints = [200, 0]
monsterInventory = [{'gold': 12, 'dagger': 1}, {'gold': 890, 'magic amulet': 1}, {'gold': 15, 'dagger': 1}]
现在龙的道具看起来跟之前哥布林的道具一样。第二个哥布林的道具是之前龙的道具。游戏迅速失控了。问题是你把一个怪物的数据散布在多个变量中。解决这个问题的方法是将一个怪物的数据放入一个字典里,然后使用一个字典列表:
monsters = [{'name': 'Goblin', 'health': 20, 'magic points': 0, 'inventory': {'gold': 12, 'dagger': 1}},
{'name': 'Dragon', 'health': 300, 'magic points': 200, 'inventory': {'gold': 890, 'magic amulet': 1}},
{'name': 'Goblin', 'health': 18, 'magic points': 0, 'inventory': {'gold': 15, 'dagger': 1}}]
啊哈!这段代码变得更加复杂了。例如,一个怪兽的状态是一个字典列表中的字典项。假如咒语或者道具栏也有它们自己的属性,且需要放到字典该怎么办?假如一个道具栏中的物品是一个背包,它本身包含了其他道具该怎么办?这个怪物列表会变得紧张。
这点是面向对象程序设计通过创建一个新的数据类型就可以解决的。
类是你程序中新数据类型的蓝图。面向对象编程对装甲,怪物等建模提供了新的方法,该方法比列表和字典的大杂烩好得多。虽然需要花些时间来熟悉OOP的概念。
事实上,因为英雄角色与怪兽们拥有相同的属性(健康值,状态值等等),我们只需要一个英雄与怪兽共享的通用的LivingThing类。你的代码可以变为:
class LivingThing():
def __init__(self, name, health, magicPoints, inventory):
self.name = name
self.health = health
self.magicPoints = magicPoints
self.inventory = inventory
# Create the LivingThing object for the hero.
hero = LivingThing('Elsa', 50, 80, {})
monsters = []
monsters.append(LivingThing('Goblin', 20, 0, {'gold': 12, 'dagger': 1}))
monsters.append(LivingThing('Dragon', 300, 200, {'gold': 890, 'magic amulet': 1}))
print('The hero %s has %s health.' % (hero.name, hero.health))
嘿,瞧瞧,使用类已经把我们的代码削减了一半,因为我们可以对玩家角色和怪兽使用同样的代码。
在上面的代码中,你可以定义新的数据类型/类(除了学院派,但是这两个术语基本上是一样的。参见)名为LivingThing。你可以实例化LivingThing变量/对象(重复一次,这两个术语基本上也是相同的)就好像你可以拥有整形值,字符值或布尔值一样。
上面代码特定于Python的细节:
class LivingThing():
上面class声明定义了一个新类,就像def声明定义一个新函数。该类名是LivingThing。
def __init__(self, name, health, magicPoints, inventory):
上面代码为LivingThing类定义了一个方法。”方法“只是命名属于这个类的函数。(参考)
这个方法很特别。__init__()用于类的构造函数(或者称为”构造方法”,”构造函数”,简写为”ctor”)。而一个类是一个新数据类型的蓝图,你还需要创建这个数据类型的值,以便于存储到变量或者使用函数传递。
当调用构造器创建新对象时,执行构造器中的代码,并返回一个新对象。这就是
hero = LivingThing('Elsa', 50, 80, {})
这行的意思。无论类名是什么,构造器总是被命名为__init__。
如果类没有__init__()方法,Python会为类提供通用的构造方法,该方法什么都不做。但是__init__()是初始化建立一个新对象的绝佳地方。
在Python语言中,方法中的第一个变量是self。self变量用于创建成员变量,后面会做解释。
构造函数体:
self.name = name
self.health = health
self.magicPoints = magicPoints
self.inventory = inventory
这看上去有点重复,但这段代码所作的就是对由构造函数创建的对象的成员变量赋值。成员变量开头是self.表示这些成员变量属于创建的对象,且不是函数中的普通局部变量。
调用构造器
# Create the LivingThing object for the hero.
hero = LivingThing('Elsa', 50, 80, {})
monsters = [LivingThing('Goblin', 20, 0, {'gold': 12, 'dagger': 1}),
LivingThing('Dragon', 300, 200, {'gold': 890, 'magic amulet': 1}),
LivingThing('Goblin', 18, 0, {'gold': 15, 'dagger': 1})]
print('The hero %s has %s health.' % (hero.name, hero.health))
Python中调用构造器就像是一个函数调用,该函数名为类名。因此LivingThing()就是调用LivingThing类的__init__()构造器。
LivingThing('Elsa', 50, 80, {})
调用创建了一个新的LivingThing对象,并保存在到hero变量里。以上代码还创建了3个怪兽LivingThing对象并保存在monsters列表中。
至此我们开始看到了面向对象编程的好处。如果其他程序员读了你的代码,当他们看到LivingThing()调用,他们知道他们可以搜索LivingThing类,然后从LivingThing类中找出所有他们想知道的细节。
但一个更大的好处是当你试图更新LivingThing类时才能体会的。
假如你想给你的RPG增加”饥饿”度属性。如果一个英雄或怪兽的饥饿度为0,他们一点也不饿。但如果他们的饥饿度超过100,那么他们将受到伤害并且健康值每天递减。你可以这样改变__init__()函数:
def __init__(self, name, health, magicPoints, inventory):
self.name = name
self.health = health
self.magicPoints = magicPoints
self.inventory = inventory
self.hunger = 0 # all living things start with hunger level 0
不需要修改其他任何代码行,你游戏中所有LivingThing对象现在都有了饥饿度。你不需要担心某些LivingThing对象有hunger成员变量,而有些没有:所有LivingThing对象都更新了。
你也不需要改变任何构造器调用,因为你没有在__init__()函数的参数列表总中增加一个新的饥饿度参数。这是因为队一个新的LivingThing对象的饥饿度来说0是一个很好的默认值。如果你在__init__()函数的参数列表总中增加一个新的饥饿度参数,那么你需要更新所有调用构造器的代码。但这对其他函数也是一样的。
如果你的RPG有很多类似的默认值,通过使用类的构造器进行默认值赋值,就可以避免当量的”样板”代码。
方法具有执行代码来影响对象本身的用途。例如,你可以编码来直接修改LivingThing对象的健康度:
hero = LivingThing('Elsa', 50, {})
hero.health -= 10 # Elsa takes 10 points of damage
但这样处理伤害不是一个非常健壮的方式。每当有什么东西受到伤害时就需要检查很多其他的游戏逻辑。例如,假设你想要检查一个角色在受到伤害后,它是否死亡。你需要这样的代码:
hero = LivingThing('Elsa', 50, {})
hero.health -= 10 # Elsa takes 10 points of damage
if hero.health & 0:
print(hero.name + ' has died!')
以上方法的问题是你需要检查各处代码来减少LivingThing对象的健康值。但是重复的代码是一件坏事。阻止重复的代码的非OOP方式可能是把以上方法放入一个函数中:
def takeDamage(livingThingObject, dmgAmount):
livingThingObject.health = self.health - dmgAmount
if livingThingObject.health & 0:
print(livingThingObject.name + ' is dead!')
hero = LivingThing('Elsa', 50, {})
takeDamage(hero, 10) # Elsa takes 10 points of damage
这是一个更好的解决方案,因为任何更新takeDamage()(例如装甲防护,保护性法术,增益效果等)只需要增加到takeDamage()函数中。
然而,不利的一面是,当您的程序规模增长,takeDamage()函数很容易迷失在其中。takeDamage()函数与LivingThing类的关系并不明显。如果你的程序有成百上千的函数,它将很难指出哪一个函数与LivingThing类有关系。
解决的方法是将这个函数变成LivingThing类的方法:
class LivingThing():
# ...other code in the class...
def takeDamage(self, dmgAmount):
self.health = self.health - dmgAmount
if self.health == 0:
print(self.name + ' is dead!')
# ...other code in the class...
hero = LivingThing('Elsa', 50, {})
hero.takeDamage(10) # Elsa takes 10 points of damage
一旦你的程序有很多类,每个类有许多方法和成员变量,你将开始看到OOP可以帮助组织你的程序而使他更易于管理。
公共与私有方法
方法与成员变量可以被标示为public或private。公共方法可以和公共成员变量可以在类内部或外部的任何代码调用和赋值。私有方法和私有成员变量只能在对象自己的类内部被调用和赋值。
在某些语言中,例如Java,这种”可以被调用/赋值”由编译器严格的保证。而Python,却没有”私有”和”公共”的概念。所有方法和成员变量都是”公共”的。然而,语言规定如果一个方法名开头是下划线,它就被认为是一个私有方法。这就是为什么你将看到_takeDamage()等方法了。你可以方便的编写代码从对象的类的外部调用私有函数或者设置私有成员变量,但你已经被彻底警告不要去这样做了。
公共/私有的区别的原因是为了解释类如何与外部代码进行交互的。(参考)类的程序员期望其他人不会编写代码调用私有方法或设置私有成员变量。
例如,takeDamage()方法包括健康值低于0就检查死亡。你可能想要在代码中添加各种各样的其他检查。护甲、敏捷性和防护法术来减少伤害的可能因素。LivingThing对象可能穿着一件魔法斗篷,通过增加抗损害值,而不是减少它们的健康值来进行治疗。这个游戏的所有逻辑都可以放入takeDamage()方法中。
如果你偶然的把代码放到那里,所有的OOP结构就毫无意义了
class LivingThing():
# ...code in the class...
hero = LivingThing('Elsa', 50, {})
# ...some more code...
if someCondition:
hero.health -= 50
语句hero.health -= 50会减少50点健康值,而不会考虑Elsa穿着哪种装甲,或者她有防护法术,或者她穿着魔法治疗披风。这段代码将直截了当的减少50点健康值。
很容易忘掉takeDamage()方法并且偶尔写出这样的代码。它不会检查英雄对象的健康值是否低于0。游戏继续运行好像Elsa还活着,及时她的健康值是负数!我们可以使用公共/私有成员和方法来避免这个bug。
如果你重命名health成员变量为_health且标记为私有的,那么当你写成这样就很容易捕获这个bug:
hero = LivingThing('Elsa', 50, {})
# ...some more code...
if someCondition:
hero._health -= 50 # WAIT! This code is outside the hero object's class but modifying a private member variable! This must be a bug!
在一种语言中如Java,如果编译器确保私有/公共访问,它就不可能编写非法访问自由成员和方法的程序。面向对象编程帮助我们防止这种bug。
使用LivingThing类表示龙是不错的,但是除了LivingThing类提供的属性外,龙有很多其他的属性。因此你想创建一个新的Dragon类,它包含如airSpeed和breathType(可以使用 'fire','blizzard', 'lightning', 'poison gas'等字符串表示)等成员变量。
因为Dragon对象也包含health,magicPoints,inventory和其他LivingThing对象的属性,你可以创建一个新的Dragon类,并且从LivingThing类复制/黏贴所有代码。但这将导致重复的代码这一坏习惯。
相反,可以使Dragon类作为LivingThing类的子类:
class LivingThing():
# ...other code in the class...
class Dragon(LivingThing):
# ...Dragon-specific code in the class...
实际上是说,”一个龙也是一种LivingThing,还有一些附加的方法和成员变量”。当你创建龙对象时,它会自动的拥有LivingThing的方法和成员变量(拯救我们脱离重复的代码)。但它也有龙特有的方法和成员变量。进一步说,任何处理LivingThing对象的代码都可以自动的操作龙对象,因为龙对象已经拥有了LivingThing成员变量和方法。这个原则被称为子类型多态性。
然而在实践中,继承是容易滥用的。你必须确保任何对LivingThing类做出的改变和更新都适用于Dragon类和所有其他LivingThing的子类。这可能不总是那么简单直接。
例如,如果你创建了LivingThing类的Monster和Hero子类,接着创建了Monster类的 FlyingMonster 和MagicalMonster子类,新的Dragon类继承自FlyingMonster 类还是MagicalMonster类?或者可能它只是Monster类的子类
这就是继承和OOP开始变得棘手且严谨的争论哪种是”正确”设计类的方式之所在。我希望报纸这篇博文简短而简单,因此我要把这些问题留给读者作为练习来调查。(参考
我讨厌由面向对象编程开始的面向初学者的程序教程。OOP是十分抽象的概念。有一些经验和编写过大型程序之前,你不会理解为什么使用类和对象使编程更容易。相反,它会给初学者留下一条陡峭的学习曲线去爬,他们不知道为什么攀登它。我希望这个RPG例子至少让你领略了为什么OOP是有帮助的。有更多的OOP。如果你想了解更多,试试搜索 和 。
如果你仍然对OOP概念感到迷惑,放心大胆的编写没有类的程序。你不需要它们,它们将导致过度设计的代码。但是一旦你已经有了一些编码经验,面向对象编程的好处会变得更加明显。祝你好运!
关于作者:
为作者带来更多读者;为读者筛选优质内容;专注IT互联网。
最新评论(期待您也参与评论)
汇集优质的Python技术文章和资源。人生苦短,我用Python!
JavaScript, CSS, HTML5 这里有前端的技术干货!
关注安卓移动开发业界动态,分享技术文章和优秀工具资源。
关注iOS移动开发业界动态,分享技术文章和优秀工具资源。
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线博客团队正试图以我们微薄的力量,把优秀的原创/译文分享给读者,做一个小而精的精选博客,为“快餐”添加一些“营养”元素。
欢迎关注更多频道
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选博客文章
– JavaScript, HTML5, CSS
– 专注Android技术分享
– 专注iOS技术分享
– 专注Java技术分享
– 专注Python技术分享
(加好友请注明来意)
网站使用问题
请在询问或者反馈
& 2015 伯乐在线
赞助云主机

我要回帖

更多关于 角色扮演游戏 的文章

 

随机推荐