java魔塔游戏源代码 魔塔java源代码要写多久

@@会魔塔制作的高手请进,答对追加50分@@1.脚本:▲Scene_Title
这里面的紫色字体也就是我们可以改的地方 。有几行是:
#
生成命令窗口
s1
=
"新游戏"
s2
=
"继续"
s3
=
"退出"
S1后面引号是开始游戏选择的时候出现的文字,可以改一下,S2、S3以此类推 。
确定后按F12游戏测试
2.脚本:▲Scene_Menu
里面有如下几行:
#
生成命令窗口
#
s1
=
$data_system.words.item
#
s2
=
$data_system.words.skill
#
s3
=
$data_system.words.equip
#
s4
=
"状态"
s1
=
"敌物资料"
s2
=
"使用物品"
s3
=
"存档"
s4
=
"读档"
s5
=
"重新开始"
s6
=
"结束游戏"
前面不带#的S1~S6后面的文字可以改变,也就是游戏时按ESC开启画面的时候左边的一行了 。
3.脚本:▲Scene_Save
里面的这几行
#--------------------------------------------------------------------------
#

初始化对像
#--------------------------------------------------------------------------
def
initialize
super("要保存到这个文件吗?")
SUPER后括号中引号里面的“要保存到这个文件么?”是可以改的,存档的时候上面写的字就是改后的文字 。
4(两个脚本连说)脚本:①▲Scene_Load②■Scene_Load2
这两个脚本非常相似,一个是按ESC之后的读档显示文字,另一个是开始界面读取进度的文字,到底哪个是哪个我搞不清楚,先看代码:
#--------------------------------------------------------------------------
#

初始化对像
#--------------------------------------------------------------------------
def
initialize
#
再生成临时对像
$game_temp
=
Game_Temp.new
#
选择存档时间最新的文件
$game_temp.last_file_index
=
latest_time
=
Time.at(0)
for
i
in
0..3
filename
=
make_filename(i)
if
FileTest.exist?(filename)
file
=
File.open(filename,
"r")
if
file.mtime
latest_time
latest_time
=
file.mtime
$game_temp.last_file_index
=
i
end
file.close
end
end
super("要载入哪个文件?")
end
SUPER后“要载入哪个文件?”是要改的,与存档近似 。
@@@@@最重要的@@@@@
5.脚本:■Window_PlayerDate
这个脚本应该是最有用的,显示了玩游戏的时候左面的攻击防御等一系列东西!脚本也要复制很长,所以我分开来讲:
self.contents.font.color
=
text_color(3)
#
self.contents.draw_text(4,
0,
70,
45,
"第",
2)
self.contents.draw_text(4,
0,
125,
45,
"层",
2)
这一段代码 , 是最前面显示XX层的界面,如果想在前面加上“第”(也就是第XX层)的话就要把#符号去掉,如果想改变字体的颜色就要看前面的color后面小括号里显示的数字了,每一个数字代表的颜色都不同,一共有7个颜色 , 就是1~7,可以换颜色 。
self.contents.draw_text(4,
0,
40,
142,
"等级",
2)
self.contents.draw_text(4,
0,
40,
208,
"生命",
2)
self.contents.draw_text(4,
0,
40,
263,
"攻击",
2)
self.contents.draw_text(4,
0,
40,
318,
"防御",
2)
self.contents.draw_text(4,
0,
40,
373,
"魔防",
2)
if
$game_switches[Playerdate_magicdef]
self.contents.draw_text(4,
0,
40,
439,
"经验",
2)
self.contents.draw_text(4,
0,
40,
494,
"金币",
2)
self.contents.font.color
=
text_color(6)
self.contents.draw_text(4,
0,
60,
576,
"黄钥匙",
2)
self.contents.font.color
=
text_color(4)
self.contents.draw_text(4,
0,
60,
640,
"蓝钥匙",
2)
self.contents.font.color
=
text_color(2)
self.contents.draw_text(4,
0,
60,
【java魔塔游戏源代码 魔塔java源代码要写多久】704,
"红钥匙",
2)
这一段代码,是显示等级生命等东西的了,这里面好多我都没研究明白,以红钥匙那行的代码来说,4,0,60 , 704中的704代表上下,如果输入704以前的数字,“红钥匙”这三个字就会往上挪 。不改变是正常的 , 要不就会里出外进了 。如果要想等级一个颜色,生命一个颜色等,就要加脚本了,先给你们看加了颜色的代码,再给你们讲:
self.contents.font.color
=
text_color(1)
self.contents.draw_text(4,
0,
40,
142,
"等级",
2)
self.contents.font.color
=
text_color(2)
self.contents.draw_text(4,
0,
40,
208,
"生命",
2)
self.contents.font.color
=
text_color(3)
self.contents.draw_text(4,
0,
40,
263,
"攻击",
2)
self.contents.font.color
=
text_color(4)
self.contents.draw_text(4,
0,
40,
318,
"防御",
2)
self.contents.font.color
=
text_color(5)
self.contents.draw_text(4,
0,
40,
373,
"魔防",
2)
if
$game_switches[Playerdate_magicdef]
self.contents.font.color
=
text_color(6)
self.contents.draw_text(4,
0,
40,
439,
"经验",
2)
self.contents.font.color
=
text_color(7)
self.contents.draw_text(4,
0,
40,
494,
"金币",
2)
self.contents.font.color
=
text_color(6)
self.contents.draw_text(4,
0,
60,
576,
"黄钥匙",
2)
self.contents.font.color
=
text_color(4)
self.contents.draw_text(4,
0,
60,
640,
"蓝钥匙",
2)
self.contents.font.color
=
text_color(2)
self.contents.draw_text(4,
0,
60,
704,
"红钥匙",
2)
self.contents.font.color
=
text_color(3)
self.contents.draw_text(4,
0,
60,
768,
"绿钥匙",
2)
就是在每个代码前面加了self.contents.font.color
=
text_color(n)(n代表颜色代码)
就让每个字活灵活现了~~如果没改,将跟第XX层显示的颜色一样!
再继续说:下一段代码:
self.contents.font.color
=
text_color(3)
self.contents.draw_text(4,
0,
60,
770,
"中毒".to_s,
2)
if
$game_switches[13]
self.contents.font.color
=
text_color(5)
self.contents.draw_text(4,
0,
110,
770,
"衰弱".to_s,
2)
if
$game_switches[15]
self.contents.font.color
=
text_color(1)
self.contents.draw_text(4,
0,
60,
820,
"迟缓".to_s,
2)
if
$game_switches[12]
这就是中毒、衰弱、迟缓加到勇士身上后在左边显示的字了 , 如果不喜欢可以换哦!~~
6.脚本:■Window_EnemyDate
里面有得到怪物手册后可以显示怪物资料的东西了(镜子怪物在样板0729中没有,在0808样板中有了)
self.contents.font.color
=
text_color(0)
@pro="普
通"
case
skill.maxsp
when
self.contents.font.color
=
text_color(0)
@pro="普
通"
when
1
self.contents.font.color
=
text_color(3)
@pro="中
毒"
when
2
self.contents.font.color
=
text_color(5)
@pro="衰
弱"
when
4
self.contents.font.color
=
text_color(2)
作者:
藕色猫
2006-8-13
18:26
回复此发言
--------------------------------------------------------------------------------
3
【分析】魔塔样板脚本分析(绝对原创 , 申精)
@pro="吸
血"
@vampire=($game_actors[$game_variables[1] 1].hp*0.2).to_i
when
16
self.contents.font.color
=
text_color(11)
@pro="先
攻"
@first=1
when
32
self.contents.font.color
=
text_color(1)
@pro="迟
缓"
when
64
self.contents.font.color
=
text_color(12)
@pro="魔
攻"
@magicatk=@md
when
128
self.contents.font.color
=
text_color(6)
@pro=skill.eva.to_s "连击"
@turnatk=skill.eva
when
256
self.contents.font.color
=
text_color(4)
@pro="领
域"
when
512
self.contents.font.color
=
text_color(9)
@pro="爆
击"
@edam=1.2
when
1024
self.contents.font.color
=
text_color(10)
@pro="隐
形"
when
2048
self.contents.font.color
=
text_color(8)
@pro="无
敌"
when
4096
self.contents.font.color
=
text_color(9)
@pro="削
血"
when
8192
self.contents.font.color
=
text_color(7)
@pro="镜
子"
if
skill.atk$game_actors[$game_variables[1] 1].str
skill.atk=($game_actors[$game_variables[1] 1].str).to_i
end#只有怪物基础防御小于勇士攻击后才使它的防御等于勇士攻击-1
when
8
self.contents.font.color
=
text_color(4)
@pro="坚
固"
if
skill.pdef$game_actors[$game_variables[1] 1].str
skill.pdef=($game_actors[$game_variables[1] 1].str 1).to_i
end#只有怪物基础防御小于勇士攻击后才使它的防御等于勇士攻击-1
end
普通、中毒、衰弱、吸血、先攻、迟缓、魔攻、连击、领域、暴击、隐形、无敌、削血、镜子、坚固 。这些文字都可以改,比如在颠峰魔塔中就改了部分文字,领域改成怪异者……这些如果改了,在怪物属性中也会显示的到!
下一段代码:
self.contents.draw_text(120,
y,
a,
32,
"生命",
0)
self.contents.draw_text(230,
y,a,
32,
"攻击",0)
self.contents.draw_text(340,
y,
a,
32,
"防御",0)
self.contents.draw_text(230,
y 32,
a,
32,
"经验",
0)
self.contents.draw_text(120,
y 32,a,
32,
"金币",
0)
self.contents.draw_text(340,
y 32,
a,
32,
"损失",
0)
这上面千万不要以为是你的生命攻击防御,而是怪物的 , 如果改一下会很好哦!在样板0808中把金币改成了魔塔币,经验改成经验点,感觉不错!
7.脚本:▲Window_Gold
这段脚本本来我不想说,因为做魔塔样板的人都会把这个写到里面,如果改了,魔塔样板的作者不会高兴的!就是按ESC后的左下角的东西 , 样板0729中显示Ver0729
,这些如果不征求样板作者同意不要改 , 除非在魔塔中绘制了样板资料 。
#--------------------------------------------------------------------------
#

刷新
#--------------------------------------------------------------------------
def
refresh
self.contents.clear
self.contents.font.color
=
system_color
self.contents.draw_text(0,
0,
130,
32,
"Ver0816",
1)
end
end
这段代码中“Ver0816”(0816是我最近要弄的样板)是可以改的 , 在颠峰魔塔中就改成颠峰魔塔,如果字多了会发现字体小了 , 不好看!
8.脚本:Window_PlayTime
里面显示的是游戏时间的脚本,脚本部分代码如下:
#--------------------------------------------------------------------------
#

刷新
#--------------------------------------------------------------------------
def
refresh
self.contents.clear
self.contents.font.color
=
system_color
self.contents.draw_text(4,
0,
120,
32,
"游戏时间")
游戏时间是可以改的,最好是4个字的,要不字会?。梢愿某勺芬涫奔? ,回忆时间等
9.脚本:Window_Steps
显示的是走过的步数,代码如下:
#--------------------------------------------------------------------------
#

刷新
#--------------------------------------------------------------------------
def
refresh
self.contents.clear
self.contents.font.color
=
system_color
self.contents.draw_text(4,
0,
120,
32,
"步数")
步数是可以改的,我就不多说了 。
魔塔制作.~第一章:术语详解
1.开关:相当于数学中的二进制,只有“开”和“关”两种选择 。游戏一开始所有开关都是OFF的,玩魔塔时部分开关一开始就是开的,那是人为因素 。(详见公共事件:初始化)制作工具中可以随意创建开关,并可以将其命名 。(制作时最好写上具体名称,如:控制60层的门开的开关,可以叫:60层门开)工具中开关操作又称SWITCH,Playerdate_SWITCH = 1:当1号开关打开 , 本脚本才开始工作 。$game_SWITCH[1]=ON:1号开关开启 。
2.变量:变量是一个数据,它使用来储存数据的空位(数据可以使中文或英文或其他文本),同开关,变量也可以随便创建,变量的默认数值为0 。以下使其中术语意思 。
代入:把原数据变为所输入数据 。
剩余:把原数据乘上一个百分数 。
操作数中:
常用:就是直接输入的数 。
变量:另一个变量的目前数据 。
随机数:从A到B不等 。(A:前面的空 。B:后面的空 。)
物品:就是一个物品你所拥有的数量 。
角色:一个角色的某项值 。
敌人:不必去管,魔塔样板涉及不到 。
角色(下面的):同上面的角色意思 。
其他:没什么可说的,自行选择吧 。
大家注意到呢个统一了吗?就是几号到几号开关或变量都等于一个选项或一个数值,也就是统一操作 。
3.图层:大致就是把画面分为三个层,一般地形放1层方快内有白色区域的一般为了美观都放第二层.在图层里,3层的东西会覆在2层上,2层会覆在1层上,样板图块中的数字就是个最好的例子,样板0层也有些在2或3层的地形 .
样板里有种特殊的情况,就是2层的地形都可以被破墙镐和地震卷轴破坏,并不一定得是墙,玩玩夏令营2的70余层就知道.
4.事件:如果说脚本编辑器是心脏,那么,事件就是肌肉.没有事件,就不能拿宝物,对话,战斗............
事件栏的最上方有个"ID:XXX",这个是自动生成的,表示这个地图中他是第几个事件,事件ID必须连续,规格为三位数,不够三位就拿0占位(非常重要!编辑新楼层和怪物事件编号必须要这样~!)
每层的事件ID一旦不连续,就会引起脚本错误,打个比方:事件ID不连续就像1户人家有3个孩子,被称为老大老二老四,这怎么行?
以上情况通常出现在中途删除部分事件上.
5.显示文章:
$game_temp.message_text= ""
显示引号中的文章 。
更改文章选项:
$game_system.message_position =0,1,2
表示上、中、下 , 三个位置
$game_system.message_frame = 0,1
0表示不透明,其他的话就透明
等待:
@wait_count = X
等待X帧
中断事件处理:
command_end
把某一个事件暂时消除
$game_map.events[X].erase
其中X表示把X号事件暂时消除,如果是消除本事件X = @event_id
执行公共事件:
$game_temp.common_event_id = 编号
执行编号的公共事件 。注意,这个执行和直接在事件中的公共事件有微妙区别 。
开关操作:
$game_switches[编号] = true / false
true是打开,false是关闭
变量操作:
$game_variables[编号] = 数值
这里有一些常用的内容:
rand(100):返回0-99的随机数
rand(100) 10000:返回10000-10099的随机数
$game_party.item_number(编号):编号物品的个数
角色相关:以下为某编号的角色的相关属性
生命:$game_actors[编号].hp
精神:$game_actors[编号].sp
经验:$game_actors[编号].exp
等级:$game_actors[编号].level
最大生命:$game_actors[编号].maxhp
最大精神:$game_actors[编号].maxsp
力量:$game_actors[编号].str
灵巧:$game_actors[编号].dex
速度:$game_actors[编号].agi
魔力:$game_actors[编号].int
攻击力:$game_actors[编号].atk
物理防御:$game_actors[编号].pdef
魔法防御:$game_actors[编号].mdef
回避修正:$game_actors[编号].eva
姓名:$game_actors[编号].name
职业编号:$game_actors[编号].class_id
职业名称:$game_actors[编号].class_name
武器编号:$game_actors[编号].weapon_id
防具1编号:$game_actors[编号].armor1_id
防具2编号:$game_actors[编号].armor2_id
防具3编号:$game_actors[编号].armor3_id
防具4编号:$game_actors[编号].armor4_id
完全回复:$game_actors[编号].recover_all
领悟特技:$game_actors[编号].learn_skill(编号)
遗忘特技:$game_actors[编号].forget_skill(编号)
位置(前卫返回0 , 中卫返回1,后卫返回2):$data_classes[$game_actors[编号].class_id].position
学会特技总数:$game_actors[编号].skills.size
敌人:$game_troop.enemies[编号]
敌人拥有角色的部分功能,包括.hp,.sp,.maxhp,.maxsp , .str,.dex,.agi,.int,.atk,.pdef,.mdef , .eva
地图的事件属性:
$game_map.events[编号].x,$game_map.events[编号].y
编号事件的x,y坐标
$game_map.events[编号].screen_x,$game_map.events[编号].screen_y
编号事件的屏幕x,y坐标
$game_map.events[编号].direction
编号事件的朝向
$game_map.events[编号].terrain_tag
编号事件所处的地形标志
$game_map.events[编号].moveto(x,y)
把事件扔到(x,y)
——————————————————以上几个事件的,如果要求为角色,则为“$game_player.x”等
地图ID:$game_map.map_id
同伴总人数:$game_party.actors.size
步数:$game_party.steps
金钱:$game_party.gold
游戏总时间(秒数):Graphics.frame_count / Graphics.frame_rate
游戏总帧数:Graphics.frame_count
游戏帧速率(可直接=n调整):Graphics.frame_rate
计时器剩余秒数:$game_system.timer / Graphics.frame_rate
存档次数:$game_system.save_count
独立开关操作:
$game_self_switches[[地图编号,事件编号,"A"]] = true/false
把地图编号的地图上的事件编号的事件的A开关打开 。其实不光ABCD , 还可以建立更多独立开关,不过调用也得用同样脚本 。
计时器打开:
$game_system.timer = 需要的秒数;$game_system.timer_working = true
计时器关闭:
$game_system.timer_working = false
增减金钱:
$game_party.gain_gold(金钱量)
增减物品:
$game_party.gain_item(物品编号,数量)
举例:
$game_party.gain_item(rand(10),rand(10)):随机获得0-9号中某一物品 , 数量为0-9随机 。
增减武器:
$game_party.gain_weapon(物品编号,数量)
增减防具:
$game_party.gain_armor(物品编号,数量)
清空现有所有物品:
$game_party.items.clear
清空所有武器:
$game_party.weapons.clear
清空所有防具:
$game_party.armors.clear
角色替换:
加入角色:$game_party.add_actor(编号)
删除角色:$game_party.remove_actor(编号)
初始化角色:$game_party[编号].setup(编号)
更改窗口外观:
$game_system.windowskin_name = 文件名
更改禁止存档
$game_system.save_disabled = true/false
更改禁止菜单:
$game_system.menu_disabled = true/false
更改禁止遇敌:
$game_system.encounter_disabled = true/false
地图卷动:
$game_map.start_scroll(方向 , 距离,速度)
地图某角色显示动画:
$game_map.events[id].animation_id = 动画编号
角色透明:
$game_player.transparent = true/false
等待移动结束:
@move_route_waiting = true
开始更改色调:
$game_screen.start_tone_change(Tone.new(R,G,B,A),帧数)
画面闪烁:
$game_screen.start_flash(Color.new(R,G,B,A),帧数)
画面振动:
$game_screen.start_shake(力度 , 速度,帧数)
显示图片:
$game_screen.pictures[number].show(name, origin, x, y, zoom_x, zoom_y, opacity, blend_type)
移动图片:
$game_screen.pictures[number].move(duration, origin, x, y, zoom_x, zoom_y, opacity, blend_type)
其中:
# name : 文件名
# origin : 原点
# x : X 坐标
# y : Y 坐标
# zoom_x : X 方向放大率
# zoom_y : Y 方向放大率
# opacity : 不透明度
# blend_type : 合成方式
# duration : 时间
旋转图片:
$game_screen.pictures[number].rotate(速度)
删除图片:
$game_screen.pictures[number].erase
显示动画(战斗中)
battler.animation_id = 动画编号
battler可以是敌人或者自己人,请先定义 。
显示伤害:
battler.damage = 伤害值
battler.damage_pop = true
注意 , 这个显示伤害可以让伤害值为字符串!并不会真的减血,减血用battler.hp -= 数值
battler.criticle = true 这个还可以打开会心一击标志
战斗中断:
$game_temp.battle_abort = true
调用菜单:
$game_temp.menu_calling = true
调用存档画面:
$game_temp.save_calling = true
游戏结束:
$game_temp.gameover = true
返回标题画面:
$game_temp.to_title = true
强行启动事件:
$game_map.events[编号].start
通行判定:
$game_player.passable?(x,y,方向)
用来判断地图某处是否在某个方向可通行
正在移动判定:
$game_player.moving?
$game_map.events[编号].moving?
播放效果:
Audio.bgm_play("文件名",音量,节奏速度)
Audio.bgs_play("文件名",音量,节奏速度)
Audio.me_play("文件名",音量,节奏速度)
Audio.se_play("文件名",音量,节奏速度)
播放bgm,bgs,me,se
Audio.bgm_stop
Audio.bgs_stop
Audio.me_stop
Audio.se_stop
停止播放bgm,bgs,me,se
$game_system.playing_bgm,$game_system.playing_bgs
获得演奏中的bgm,bgs
game_system.bgm_memorize,game_system.bgm_restore
game_system.bgs_memorize,game_system.bgs_restore
记忆、还原bgm,bgs
判断某角色在队伍中:$game_party.actors.include?($game_actors[编号])
判断是否学过某特技:$game_actors[编号].skill_learn?(特技编号)
以上选自66RPG,是比较重要的,新手最好记记,这样以后学习脚本会轻松些
变量,开关和事件都是基本功,一定要熟知这些,了解其中的原理.
第二章.怪物
1.能力:打开工具栏-数据库-敌人,就可以对怪物进行编辑了.
名字:...........
MAXSP:原本是法术值,可样板用不找,不用管他了(不是最新样板的请参考其他怪物的)
MAXHP:就是生命的意思啦!
力量:攻击
灵巧:防御
魔法防御:领域怪物的控制范围由这项能力决定
金币:...........
EXP:经验(如果每个怪都是1的话,建议把角色状态栏里的"经验"从脚本编辑器里改为杀怪数)
其他的就不用管了.
怪物中有特殊能力,可以查看.
数值 属性 说明
0 普通
1 中毒 战斗后,角色每行动一格,减生命10点(变量25决定)
2 衰弱 战斗后,角色攻防衰减为正常的75%(变量52决定)
4 吸血 战斗前,怪物首先吸取角色34%的生命加到自身(变量53决定)
8 坚固 怪物的防御至少等于角色攻击-1(变量54决定)
16 先攻 战斗时,怪物首先攻击1次(变量55决定)
32 迟缓 战斗后,勇士行走速度降低到3.3(变量56决定,正常4.3)
64 魔攻 战斗时,怪物的攻击无视角色的防御*1(变量57决定)
128 连击 战斗时,怪物每回合攻击2次(数据库敌人回避修正决定)
256 领域 经过怪物周围Y格时自动减生命X点(X由数据库敌人maxsp决定 , Y由数据库敌人魔法防御决定 , 0为十字领域范围)
512 爆击 战斗前 , 怪物附加角色防御的X点作为伤害(X等于角色防御的90%,变量58决定百分比)
1024 潜伏 角色看不到怪物,除非拥有物品40-探知器并距离怪物x格(变量79决定物品id , 变量84决定x的大?。?
2048 无敌 角色无法击败怪物,除非拥有物品10-圣十字架(变量71决定)
4096 模仿 怪物的攻防等于角色的攻防*1(变量60决定)
8192 诅咒 战斗后,角色再次战斗无法获得金币经验,本次可以获得
9900 反弹 战斗时,怪物附加角色攻击的10%作为伤害(变量70决定)
9910 重生 怪物被击败后,角色转换楼层则怪物再次出现
9920 净化 战斗前,怪物附加勇士魔防的3倍作为伤害(变量104决定)
9930 神偷 战斗后,勇士所持的4种血瓶数量减半
以上属性中提到的数值不是最新样板的在MAXSP里输入,是最新样板的在怪物名字后面加":"再加数值(多重属性就是:N:N)N的意思:数值.
2.编辑:很简单,把事件的名称改为怪物XXX(这里要用到那个1章,4节说哪个规则了)(加上"BOSS"就无法被炸弹和圣锤消灭了.),在设置区域,公共时间-战斗,在固定朝向和停止时动画上打勾,在与事件接触(也可以与主角接触)打勾,就OK了!~
攻防超过999用$game_enemies[怪物编号].某项能力=XXX(如果是名字 , 要把XXX拿双引号引上)
第三章.物品
1.普通物品
如何设图什么的我就不说了 。
这类物品一般是不能使用的 。
2.特殊物品
像楼层传送器,破墙镐都属于,具体如何制作见公共事件的使用物品处理 。
做可以使用的物品也要选个公共事件(自己创建也行) 。
具体的自己做吧 , 这时要研究下脚本编辑器,学点语言,对做物品很有帮助
有用java编写“魔塔”的吗学习内容大致可分为以下10点,但也要跟上技术发展的步伐,实时更新 。
1、Java语言
Java语言体系比较庞大 , 包括多个模块 。从WEB项目应用角度讲有JSP、Servlet、JDBC、JavaBean(Application)四部分技术 。
(1)、Java Database Connectivity(JDBC)技术
在Java Web应用开发中,数据库管理系统(RDBMS)的使用是不可缺少的 。JDBC(Java Database Connectivity) 是一种用于执行SQL 语句的 Java API 。它由一组用 Java 编程语言编写的类和接口组成 。JDBC 为工具/数据库开发人员提供了一个标准的API,使他们能够用纯Java API 来编写数据库应用程序 。
简单地说,JDBC 可做三件事:
l与数据库建立连接,
l发送SQL 语句,
l处理结果 。
(2)、Servlet技术
Servlet是运行在服务器端的程序,可以被认为是服务器端的applet 。servlet被Web服务器(例如Tomcat)加载和执行,就如同applet被浏览器加载和执行一样 。servlet从客户端(通过Web服务器)接收请求,执行某种操作,然后返回结果 。
求一个简单RPG游戏的代码,JAva编写的package com.lxi;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Rpg {
@SuppressWarnings("unchecked")
public static void main(String[] args) throws Exception {
System.out.println("在这里输入两个人物进行PK,以英文逗号分隔: [BM , DH,MK]");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
ClassPerson c1;
ClassPerson c2;
try {
String temp = br.readLine();
String[] str = temp.split(",");
if (str.length != 2) {
throw new Exception("输入格式有误,按默认PK");
}
c1 = (ClassPerson) Class.forName("com.lxi."
str[0].toUpperCase());
c2 = (ClassPerson) Class.forName("com.lxi."
str[1].toUpperCase());
} catch (Exception e) {
// TODO Auto-generated catch block
c1 = (ClassPerson) Class.forName("com.lxi.BM");
c2 = (ClassPerson) Class.forName("com.lxi.DH");
}
try {
Person p1 = c1.newInstance();
Person p2 = c2.newInstance();
long time = System.currentTimeMillis();
long nextTime1 = (long) (timep1.coldTime*1000); //
long nextTime2 = (long) (timep2.coldTime*1000); //发动攻击的时间
System.out.println("---游戏开始---");
while (true) {
long currenTime = System.currentTimeMillis();
if (nextTime1currenTime) {//时间到则发动攻击
p1.hit(p2);
nextTime1= p1.coldTime*1000p1.waitTime*1000; //下次攻击时间=冷却时间 被晕眩时间
p1.waitTime = 0;//回合结束,重置被晕眩时间为0
}
if (nextTime2currenTime) {
p2.hit(p1);
nextTime2= p2.coldTime*1000p2.waitTime*1000;
p2.waitTime = 0;
}
}
} catch (ClassCastException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
package com.lxi;
import java.util.Random;
class BM extends Person {
public BM() {
val = 650;
coldTime = 1.5;
fight = 40;
chanceHit = 3;
chanceDefense = 3;
waitTime = 0;
}
int count = 0;//防御技能发动的次数
int temp = 40;//攻击力,值同fight
boolean hitFlag = false;
boolean defenseFlag = false;
Random rand = new Random();
public void hit(Person p) {
if (rand.nextInt(10)chanceHit) {
fight = fight * 2;//发动双倍攻击
hitFlag = true;
}
int hurt = p.defense(this);
p.val = p.val - hurt;
fight = temp;//还原为单倍攻击
if (p.val = 0) {
System.out.println(this.getClass().getSimpleName()"胜出!");
System.exit(0);
}
System.out.println(this.getClass().getSimpleName()"攻击"
p.getClass().getSimpleName()","
this.getClass().getSimpleName()
(this.hitFlag ? "发动攻击技能" : "未发动攻击技能")
p.getClass().getSimpleName()
(this.defenseFlag ? "发动防御技能" : "未发动防御技能")
this.getClass().getSimpleName()":"this.val","
p.getClass().getSimpleName()":"p.val);
hitFlag = false;
defenseFlag = false;
}
public int defense(Person p) {
if (rand.nextInt(10)chanceDefense) {
if (count != 0) {
p.val = p.val - p.fight;
count;
defenseFlag = true;
if (p.val = 0) {
System.out.println(this.getClass().getSimpleName()"胜出!");
System.exit(0);
}
}
}
return p.fight;
}
}
class MK extends Person {
public MK() {
val = 700;
coldTime = 2.5;
fight = 50;
chanceDefense = 6;
chanceHit = 3;
waitTime = 0;
}
boolean hitFlag = false;
boolean defenseFlag = false;
Random rand = new Random();
public void hit(Person p) {
if (rand.nextInt(10)chanceHit) {
p.waitTime = 3;//使对方晕眩3s
hitFlag = true;
}
int hurt = p.defense(this);
p.val = p.val - hurt;
if (p.val = 0) {
System.out.println(this.getClass().getSimpleName()"胜出!");
System.exit(0);
}
System.out.println(this.getClass().getSimpleName()"攻击"
p.getClass().getSimpleName()","
this.getClass().getSimpleName()
(this.hitFlag ? "发动攻击技能" : "未发动攻击技能")
p.getClass().getSimpleName()
(this.defenseFlag ? "发动防御技能" : "未发动防御技能")
this.getClass().getSimpleName()":"this.val","
p.getClass().getSimpleName()":"p.val);
hitFlag = false;
defenseFlag = false;
}
public int defense(Person p) {
if (rand.nextInt(10)chanceDefense) {
defenseFlag = true;
return p.fight / 2;//防御技能发动 , 伤害减半
}
return p.fight;
}
}
package com.lxi;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Random;
//三个人物的基类
abstract class Person {
int val;//生命值
double coldTime;//冷却时间
int waitTime;//晕眩时间
int fight;//攻击力
int chanceHit;//发起主动技能的概率
int chanceDefense;//发起防御技能的概率
abstract void hit(Person p);//攻击技能
abstract int defense(Person p); //防御技能,返回被伤害点数
}
class DH extends Person {
public DH() {
val = 600;
coldTime = 1.0;
fight = 30;
chanceHit = 3;//表示30%的概率
chanceDefense = 3;
waitTime = 0;
}
Random rand = new Random();
boolean hitFlag = false;//主动技能发动的标识
boolean defenseFlag = false;//防御技能发动的标识
public void hit(Person p) {
if (rand.nextInt(10)chanceHit) {//发动主动技能
int hurt = p.defense(this);
p.val = p.val - hurt;
if (p.val = 0) {
System.out.println(this.getClass().getSimpleName()"胜出!");
System.exit(0);
}
val = valhurt;
if (val600)
val = 600;
hitFlag = true;//标记主动技能已经发动
} else {//进行普通攻击
int hurt = p.defense(this);
p.val = p.val - hurt;
if (p.val = 0) {
System.out.println(this.getClass().getSimpleName()"胜出!");
System.exit(0);
}
}
System.out.println(this.getClass().getSimpleName()"攻击"
p.getClass().getSimpleName()","
this.getClass().getSimpleName()
(this.hitFlag ? "发动攻击技能" : "未发动攻击技能")
p.getClass().getSimpleName()
(this.defenseFlag ? "发动防御技能" : "未发动防御技能")
this.getClass().getSimpleName()":"this.val","
p.getClass().getSimpleName()":"p.val);
hitFlag = false;//
defenseFlag = false; //重置标记,下次重用
}
public int defense(Person p) {
if (rand.nextInt(10)chanceDefense) {
defenseFlag = true;//标记防御技能已经发动
return 0;
} else {
return p.fight;
}
}
}
java魔塔游戏源代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于魔塔java源代码要写多久、java魔塔游戏源代码的信息别忘了在本站进行查找喔 。

    推荐阅读