Project1
标题:
方向游戏~~-___-|||
[打印本页]
作者:
zhong
时间:
2007-7-8 08:54
标题:
方向游戏~~-___-|||
前几天kaze在水区介绍了一个测验动态视力的游戏,打了几次,怎么打都是8级70多分,郁闷之极,后来就产生了做个RM版的念头,本来想用事件做的,这是最简单直接的方法,后来RP有问题,就改用了脚本了~~不过我没有半点编程基础,是半个脚本盲,所以写的算法有点原始,别见怪~~~~{/gg}不过无论如何效果达到了,只是不知道有没有潜在bug,有的话通知我吧~~不知道以前有没人做过类似的~~{/gg}
脚本如下:
#===========================================================================
#★方向键游戏
#★作者:Zhong
#★联系方式: 论坛短信
#★个人论坛:god.5d6d.com
#★附:在下是半个脚本盲,,可能实现游戏效果的方法有点不科学,不过总算达到效果了!
#★ 有什么bug的话请提出来,能力范围内的,我会尽量更正~~~-__-|||
#===========================================================================
#==============================================================================
# ■ Window_point
#------------------------------------------------------------------------------
# ★ 记分窗口
#
#==============================================================================
class Window_point < Window_Base
#--------------------------------------------------------------------------
# ● 初始化窗口
#--------------------------------------------------------------------------
def initialize
super(0, 0, 400, 400)
self.contents = Bitmap.new(width - 32, height - 32)
self.opacity = 0
$p = 0 #初始分数
$l = $p/10 # 初始等级
refresh
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
self.contents.clear
$l = $p/10
#描绘等级,分数字样
self.contents.font.color = Color.new(0,0,0,200)
self.contents.font.size = 27
self.contents.draw_text(80,60,120,32,"Level")
self.contents.font.size = 25
self.contents.draw_text(150, 60, 120, 32, $l.to_s)
self.contents.font.size = 22
self.contents.draw_text(90,90,120,32,"分数")
self.contents.font.size = 20
self.contents.draw_text(150,90,120,32,$p.to_s)
end
end
#============================================================================
#=============================================================================
class Scene_zhong
#=============================================================================
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
def main
@max_l = 10 #最大等级,但达到这个等级时自动胜出
@f = false #用这个开关判断游戏是否刚运行,方便后面图的坐标排布
@a = [] #随机数组
@b = [] #玩家输入数组
@test = [] #显示图片用的数组
@t = -1 #次数
@n = 0 #分数参数
@se = 0 #判断se是否已播放,避免重播
$game_variables[45] = 0 #这个变量时判断失败与否的变量,亦可用开关,主要时方便事件操作
@sprite = [Sprite.new] #这个为了批量生成精灵的数组
for i in 0..6
@sprite[i] = Sprite.new
@sprite[i].y = 173
@sprite[i].z = 2
end
@sprite[5].bitmap = Bitmap.new("Graphics/pictures/前景图")
@sprite[5].opacity = 255
@sprite[5].y = 0
@sprite[5].x = 0
@sprite[5].z = 500
@sprite[6].bitmap = Bitmap.new("Graphics/pictures/背景图")
@sprite[6].y = 0
@sprite[6].x = 0
@sprite[6].z = 1
@point_window = Window_point.new
@point_window.z = 600
#演奏BGM
Audio.bgm_play("Audio/BGM/015-Theme04", 100, 100)
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新
update
# 如果等级为最大级或失败就中断循环
if $l == @max_l or $game_variables[45] == -1
break
end
end
# 准备过渡
Graphics.freeze
#停止播放bgm
Audio.bgm_stop
if $game_variables[45] == -1
#演奏失败Me
Audio.me_play("Audio/ME/005-Defeat01", 100, 100)
else
#演奏胜利乐章
Audio.me_play("Audio/ME/002-Victory02", 100, 100)
end
for i in 1..100
Graphics.update
end
#批量释放精灵和图片
for i in 0..6
@sprite[i].bitmap.dispose
@sprite[i].dispose
end
@point_window.dispose
$scene = Scene_Map.new
end
#--------------------------------------------------------------------------
#★刷新定义
#--------------------------------------------------------------------------
def update
#刷新积分窗口
@point_window.refresh
#以下就是传说中的核心算法,如果你是脚本达人就不要看下去了~~ 因为方法太原始了
if @t == 4
@n += 1
@t = -1
@se = 0
end
for j in 0..4
if @a[j] == nil
@a[j] = rand(4) + 1
@test[j] = @a[j].to_s
@sprite[j].bitmap = Bitmap.new("Graphics/pictures/E_#{@test[j]}")
if @f == false
@sprite[j].x = 530 + 100*j
else
@sprite[j].x = 530
end
end
end
#======================================================================
#========================================================================
for s in 0..4
if @sprite[s].x > 28 #图象的边缘坐标
@sprite[s].x -= 2 + $l*0.5 #计算移动数度的公式
end
end
#=========================================================================
input_zhong
if @sprite[@t].x > 30 and @sprite[@t].x < 530 #当图片进入这一区域时按键才有效
if @b[@t] != nil and @a[@t] != nil
if @a[@t] == @b[@t]
if @se == @t
# 演奏 SE
Audio.se_play("Audio/SE/056-Right02", 100, 100)
@se += 1
end
$p = @t+ 1+ @n*5
x = @sprite[@t].x
@sprite[@t].bitmap.dispose
@sprite[@t].bitmap = Bitmap.new("Graphics/pictures/h_#{@test[@t]}")
@sprite[@t].x = x
else
# 演奏冻结 SE
Audio.se_play("Audio/SE/011-System11", 100, 100)
$game_variables[45] = -1
end
end
end
for g in 0..4
if @sprite[g].x <= 30 #图片出了区域时
if @b[g] != nil
if @a[g] == @b[g]
@sprite[g].bitmap.dispose
@a[g] = nil
@b[g] = nil
@f = true
else
end
else
$game_variables[45] = -1
end
end
end
end
#---------------------------------------------------------------------------
#★ 按键输入判断
#---------------------------------------------------------------------------
def input_zhong
if Input.trigger?(Input::LEFT)
@t += 1
@b[@t] = 1
end
if Input.trigger?(Input::UP)
@t += 1
@b[@t] = 2
end
if Input.trigger?(Input::RIGHT)
@t += 1
@b[@t] = 3
end
if Input.trigger?(Input::DOWN)
@t += 1
@b[@t] = 4
end
end
#----------------------------------------------------------------------------
end
复制代码
建议参考范例看一下吧~~素材规格是方向图片100*100,前景图中间镂出一个400*100的透明区域~~具体看范例~~~
范例
:
http://rpg.blue/upload_program/files/方向游戏.rar
--------------------------------------------------------------------
大半个月前做的"美化"版,这段时间一直没机会上网,现在有点空,就发上来,其实很鸡肋~~~{/gg} 另:我把文件上传到ftp上时,才发现论坛附件最大可以上传5M的文件,晕~~~
http://rpg.blue/upload_program/files/美化_方向游戏.rar
作者:
zhong
时间:
2007-7-8 08:54
标题:
方向游戏~~-___-|||
前几天kaze在水区介绍了一个测验动态视力的游戏,打了几次,怎么打都是8级70多分,郁闷之极,后来就产生了做个RM版的念头,本来想用事件做的,这是最简单直接的方法,后来RP有问题,就改用了脚本了~~不过我没有半点编程基础,是半个脚本盲,所以写的算法有点原始,别见怪~~~~{/gg}不过无论如何效果达到了,只是不知道有没有潜在bug,有的话通知我吧~~不知道以前有没人做过类似的~~{/gg}
脚本如下:
#===========================================================================
#★方向键游戏
#★作者:Zhong
#★联系方式: 论坛短信
#★个人论坛:god.5d6d.com
#★附:在下是半个脚本盲,,可能实现游戏效果的方法有点不科学,不过总算达到效果了!
#★ 有什么bug的话请提出来,能力范围内的,我会尽量更正~~~-__-|||
#===========================================================================
#==============================================================================
# ■ Window_point
#------------------------------------------------------------------------------
# ★ 记分窗口
#
#==============================================================================
class Window_point < Window_Base
#--------------------------------------------------------------------------
# ● 初始化窗口
#--------------------------------------------------------------------------
def initialize
super(0, 0, 400, 400)
self.contents = Bitmap.new(width - 32, height - 32)
self.opacity = 0
$p = 0 #初始分数
$l = $p/10 # 初始等级
refresh
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
self.contents.clear
$l = $p/10
#描绘等级,分数字样
self.contents.font.color = Color.new(0,0,0,200)
self.contents.font.size = 27
self.contents.draw_text(80,60,120,32,"Level")
self.contents.font.size = 25
self.contents.draw_text(150, 60, 120, 32, $l.to_s)
self.contents.font.size = 22
self.contents.draw_text(90,90,120,32,"分数")
self.contents.font.size = 20
self.contents.draw_text(150,90,120,32,$p.to_s)
end
end
#============================================================================
#=============================================================================
class Scene_zhong
#=============================================================================
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
def main
@max_l = 10 #最大等级,但达到这个等级时自动胜出
@f = false #用这个开关判断游戏是否刚运行,方便后面图的坐标排布
@a = [] #随机数组
@b = [] #玩家输入数组
@test = [] #显示图片用的数组
@t = -1 #次数
@n = 0 #分数参数
@se = 0 #判断se是否已播放,避免重播
$game_variables[45] = 0 #这个变量时判断失败与否的变量,亦可用开关,主要时方便事件操作
@sprite = [Sprite.new] #这个为了批量生成精灵的数组
for i in 0..6
@sprite[i] = Sprite.new
@sprite[i].y = 173
@sprite[i].z = 2
end
@sprite[5].bitmap = Bitmap.new("Graphics/pictures/前景图")
@sprite[5].opacity = 255
@sprite[5].y = 0
@sprite[5].x = 0
@sprite[5].z = 500
@sprite[6].bitmap = Bitmap.new("Graphics/pictures/背景图")
@sprite[6].y = 0
@sprite[6].x = 0
@sprite[6].z = 1
@point_window = Window_point.new
@point_window.z = 600
#演奏BGM
Audio.bgm_play("Audio/BGM/015-Theme04", 100, 100)
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新
update
# 如果等级为最大级或失败就中断循环
if $l == @max_l or $game_variables[45] == -1
break
end
end
# 准备过渡
Graphics.freeze
#停止播放bgm
Audio.bgm_stop
if $game_variables[45] == -1
#演奏失败Me
Audio.me_play("Audio/ME/005-Defeat01", 100, 100)
else
#演奏胜利乐章
Audio.me_play("Audio/ME/002-Victory02", 100, 100)
end
for i in 1..100
Graphics.update
end
#批量释放精灵和图片
for i in 0..6
@sprite[i].bitmap.dispose
@sprite[i].dispose
end
@point_window.dispose
$scene = Scene_Map.new
end
#--------------------------------------------------------------------------
#★刷新定义
#--------------------------------------------------------------------------
def update
#刷新积分窗口
@point_window.refresh
#以下就是传说中的核心算法,如果你是脚本达人就不要看下去了~~ 因为方法太原始了
if @t == 4
@n += 1
@t = -1
@se = 0
end
for j in 0..4
if @a[j] == nil
@a[j] = rand(4) + 1
@test[j] = @a[j].to_s
@sprite[j].bitmap = Bitmap.new("Graphics/pictures/E_#{@test[j]}")
if @f == false
@sprite[j].x = 530 + 100*j
else
@sprite[j].x = 530
end
end
end
#======================================================================
#========================================================================
for s in 0..4
if @sprite[s].x > 28 #图象的边缘坐标
@sprite[s].x -= 2 + $l*0.5 #计算移动数度的公式
end
end
#=========================================================================
input_zhong
if @sprite[@t].x > 30 and @sprite[@t].x < 530 #当图片进入这一区域时按键才有效
if @b[@t] != nil and @a[@t] != nil
if @a[@t] == @b[@t]
if @se == @t
# 演奏 SE
Audio.se_play("Audio/SE/056-Right02", 100, 100)
@se += 1
end
$p = @t+ 1+ @n*5
x = @sprite[@t].x
@sprite[@t].bitmap.dispose
@sprite[@t].bitmap = Bitmap.new("Graphics/pictures/h_#{@test[@t]}")
@sprite[@t].x = x
else
# 演奏冻结 SE
Audio.se_play("Audio/SE/011-System11", 100, 100)
$game_variables[45] = -1
end
end
end
for g in 0..4
if @sprite[g].x <= 30 #图片出了区域时
if @b[g] != nil
if @a[g] == @b[g]
@sprite[g].bitmap.dispose
@a[g] = nil
@b[g] = nil
@f = true
else
end
else
$game_variables[45] = -1
end
end
end
end
#---------------------------------------------------------------------------
#★ 按键输入判断
#---------------------------------------------------------------------------
def input_zhong
if Input.trigger?(Input::LEFT)
@t += 1
@b[@t] = 1
end
if Input.trigger?(Input::UP)
@t += 1
@b[@t] = 2
end
if Input.trigger?(Input::RIGHT)
@t += 1
@b[@t] = 3
end
if Input.trigger?(Input::DOWN)
@t += 1
@b[@t] = 4
end
end
#----------------------------------------------------------------------------
end
复制代码
建议参考范例看一下吧~~素材规格是方向图片100*100,前景图中间镂出一个400*100的透明区域~~具体看范例~~~
范例
:
http://rpg.blue/upload_program/files/方向游戏.rar
--------------------------------------------------------------------
大半个月前做的"美化"版,这段时间一直没机会上网,现在有点空,就发上来,其实很鸡肋~~~{/gg} 另:我把文件上传到ftp上时,才发现论坛附件最大可以上传5M的文件,晕~~~
http://rpg.blue/upload_program/files/美化_方向游戏.rar
作者:
暴风の龙
时间:
2007-7-8 14:03
...就是那个让我头晕了好久的游戏啊......
作者:
越前リョーマ
时间:
2007-7-8 16:27
这个纯事件应该也可以,
就是不停循环了好了~
作者:
zhong
时间:
2007-7-9 00:41
话说那游戏也让我很郁闷,那天打了几次都没超过8级~~~{/gg}~~~`
作者:
gpra8764
时间:
2007-7-9 10:38
提示:
作者被禁止或删除 内容自动屏蔽
作者:
zhong
时间:
2007-7-10 03:07
呵呵~~{/gg}做的有点简陋~~~
作者:
风雪优游
时间:
2007-7-10 04:33
不错不错,咱想要美化滴
作者:
zhong
时间:
2007-8-31 02:27
{/gg}不知道这算不算美化了,挺鸡肋的东西,放在机子上也没用,就发上来了~~~~~
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1