注册 登录
编程论坛 Matlab

[原创]Matlab做的俄罗斯方块(含代码)

zhangenter 发布于 2006-12-03 22:42, 29408 次点击
只有本站会员才能查看附件,请 登录
做了点修改,解决了有时会不消方块的bug,补全了前面留的功能(键盘自定义设置、储存和载入游戏、高分记录),并在主要代码中加入了注释,便于大家读代码

[此贴子已经被作者于2007-9-9 6:34:20编辑过]

72 回复
#2
abingchem2006-12-04 09:22
高手啊,呵呵
有个疑问,为什么方块的颜色都一样啊
#3
zhangenter2006-12-04 12:35

方块用一个line画只能一样颜色,要不同颜色可以用patch,但是速度会慢点

#4
zhangenter2007-01-12 21:11

那么多人问Gui的问题,自己给自己顶一下

#5
hitlgq2007-04-07 15:29

怎样运行阿?
只有代码也不行!!

#6
seidel2007-04-07 16:08
很好啊!高手!!
#7
lawyer2012007-04-10 14:54
回复:(zhangenter)[原创]Matlab做的俄罗斯方块(含代...
高手
#8
liangjun13672007-04-10 20:16
高手
#9
happy_hao2007-05-04 00:34
高手没得说啊
#10
alficffn2007-05-04 17:55
高手  3Q
#11
cumtcowboy2007-05-10 12:54
强人
#12
h_x02007-05-15 17:14
怎么玩一会就不消了啊 ,还是有点问题吧
#13
zhangenter2007-05-15 20:35
我还没碰到过不能消的情况,不过有问题也是有可能的,有没有发现是在在什么情况下不能消呢?
#14
swf_20082007-05-16 09:36
高手啊
顶了先
不过运行起来还是有些BUG 有时消不掉
#15
csylijuan2007-05-16 14:11

以后多向高手学习

#16
swf_20082007-05-17 09:36

能不能在方块移除的几句程序后面加些注释,不大看的懂啊.谢谢

#17
包1232007-05-17 10:59

向高手学习,拿下这个大西瓜

#18
zhangenter2007-05-20 20:08
以下是引用swf_2008在2007-5-17 9:36:53的发言:

能不能在方块移除的几句程序后面加些注释,不大看的懂啊.谢谢

for num = 1: length( LastBlockYData )
% 对最后一个下来的方块按行搜索
[YData, Index] = find( TotalYData == LastBlockYData(num) ) ;
% 判断是否满12个(满12个为整行,可以消除)
if length( YData ) == 12
% 保存下行号
CompleteLine = [CompleteLine, LastBlockYData(num)] ;
UsefulIndex = [UsefulIndex, Index] ;
end
end
% 处理需要消除的行
if ~isempty( CompleteLine )
% 在所有方块序列中删除这些行
TotalXData( UsefulIndex ) = [] ;
TotalYData( UsefulIndex ) = [] ;

% 得到完成行的数目,得到相应的分数
LineNumber = length( CompleteLine ) ;
ScoreArray = [100 300 600 1000] ;
NewScore = ScoreArray(LineNumber) ;

% 更新总分
CurrentScore = getappdata( handles.RussiaBlock, 'CurrentScore' ) ;
TextString = get( handles.ScoreText, 'String' ) ;
TextString{2} = CurrentScore + NewScore ;
set( handles.ScoreText, 'String', TextString ) ;
setappdata( handles.RussiaBlock, 'CurrentScore', CurrentScore + NewScore ) ;

% 更新游戏等级(如果需要的话)
UpdateGameLevel( handles.RussiaBlock, CurrentScore + NewScore ) ;
% 处理需要下移的方块
for num = LineNumber : -1 : 1
[YData, Index] = find( TotalYData > LastBlockYData(num) ) ;
% 从下往上,逐行下移一行(20象素)
TotalYData(Index) = TotalYData(Index) - 20 ;
end
end
% 设置新的方块序列
set( handles.BlockHandle, 'XData', TotalXData, 'YData', TotalYData ) ;
end

#19
menghuayuan2007-05-24 10:29
我的运行不了?
#20
liuguang2007-05-25 20:07
真的是强
#21
zhangenter2007-08-30 22:11
回复:(h_x0)怎么玩一会就不消了啊 ,还是有点问题吧...

今天终于有机会看到有个朋友在我面前重现这个bug了,确实出现了消不掉的情况,检查了下代码问题出在这:

if length( YData ) == 12

这里,我是判断是否某一行有12个方块,因为方块游戏窗口的宽度刚好够放下12个方块,我玩俄罗斯一般都是按空格丢下方块,所以始终没发现bug,但那个朋友是一直按着往下来玩而不是按空格键的,这就造成当方块落下停止到下一个方块落下之间的时间段上,键盘重复响应,我的方块位置向量被重复累加了(这方块被累加了多次)。

当循环到上面提到的那行代码时候 YData 就可能不只12,甚至有可能是3、40了

现在如果把那行改成 if length( YData ) >= 12 ,那么仍然可以保证当某行填满时会被消除,但是这样的处理仍然会有bug的,有兴趣的话朋友可以思考的会有什么bug

#22
jiangbiao662007-09-02 14:55
太 厉害了! 本人非常佩服你!
#23
vfdff2007-09-02 18:34
里面的 参数 varargin 是什么类型的呀??
#24
zhangenter2007-09-04 21:27
我的理解 varargin是一个代表输入参数的抽象概念,元胞类型,其中每一项代码一个对应的输入参数,如:varargin{2}代码第二个输入参数,
更多信息 help varargin
see also varargout,nargin,nargout
#25
vfdff2007-09-05 01:32
有错误呀
??? function RussiaBlock( varargin )
|
Error: Function definitions are not permitted at the prompt or in scripts.
在matlab 7.0下运行
#26
elus2007-09-06 16:44
改成  if length( YData ) >= 12 bug更严重了,按着下就能消方块了
#27
zhangenter2007-09-09 15:13
以下是引用elus在2007-9-6 16:44:40的发言:
改成 if length( YData ) >= 12 bug更严重了,按着下就能消方块了

是的,我说的就是这问题,不过在新改的代码中已经解决了这问题,

只有本站会员才能查看附件,请 登录

[此贴子已经被作者于2007-9-9 15:16:45编辑过]

#28
kouweiwei2007-09-09 22:25

我是才学matlab的 看到你的作品都呆了 好厉害啊 以后有不会的要多多请教你了

#29
appqidetk2007-09-10 23:15
好多注释阿~基本有40%注释了~~赞~~
#30
Mickeyone2007-09-12 17:40
不错
#31
rongxue2007-09-15 22:30

非常佩服楼主!赞一个。

#32
zhangenter2007-09-16 02:55
以下是引用appqidetk在2007-9-10 23:15:37的发言:
好多注释阿~基本有40%注释了~~赞~~

呵呵,注释写得很辛苦,我在公司是不写注释出了名的

#33
appqidetk2007-09-18 20:16
回复:(zhangenter)以下是引用appqidetk在2007-9-10...
#34
to_shine2007-09-19 08:52

佩服,佩服

#35
Toanso2007-11-25 14:19
怒赞 !!!!
#36
huruigege2007-11-26 14:28
GUI啊,什么时候我也下写功夫做一做,比较面子的东西——平时我都只作数值计算,很枯燥,也得不到人的赏识,郁闷啊。
#37
bitssk2007-11-30 23:19
大牛人
#38
hlongxiang2007-11-30 23:22
高手,GUI界面功能越来越强大了,共同学习
#39
xcself2007-12-17 22:56
不消行一行都不消
LZ能发给我一个最优化算法吗?
一个BFGS 还有个内点法的
#40
ufosadan2007-12-18 22:10
的确是高手
#41
neckfully2008-01-08 11:05
hao  feichang hao
#42
mark02892008-01-19 21:54
楼主你太有才了
#43
皮卡丘2008-01-22 17:18
看下 呵呵
#44
happyran2008-02-01 14:52
是个高手啊!!!
#45
totticarter2008-03-12 09:10
先下载了看看再说!
#46
shuinong2008-03-16 17:54
祝你生日快乐
#47
ljhnjnu2008-03-21 09:36
高手就是高手!厉害!
#48
zhongmh2008-04-03 12:24
我是个新手!问一下要改方块的颜色怎么改啊?楼主太牛了!呵呵!能指点下MATLAB控制系统仿真吗?
#49
whuhujin2008-04-10 13:53
确实高手,学习中
#50
ftyszyx2008-04-12 20:20
回复 1# 的帖子
matlab还能用来写这?稀奇!
#51
wangbo9162008-04-21 12:16
很好啊 。
您真是高手。您能帮我 个忙,吗,我的毕业论文是要用matlab编程实现二维离散随机变量的计算,包括分布律,独立性判断等。您能帮我写个吗。我的邮箱249527358@不甚感激。
12