游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4948|回复: 7

[讨论] RPG排序算法,请MATLAB高手赐教!

[复制链接]

13

主题

31

帖子

39

积分

注册会员

Rank: 2

积分
39
发表于 2009-7-18 15:38:00 | 显示全部楼层 |阅读模式
小弟最近设计的一款RPG游戏的排序式战斗系统,遇到了一个问题,请MATLAB高手帮忙写下,这个功能:

以下是计算需求:


请输入数列1(数据个数1-6个,数据类型为正整数)
请输入数列2(和数列1一样,假如数列1个数值个数为3,数列2也应该为3个数值)
请输入,要显示多少次排序结果


做运算,
第一次,列表排序,数列1中数值最小的排在最前面

第二次到第N次
把所所有数列1的数值做比较,找出最小的
所有数列1的数值减去该最小值
必然,有一个数字为0,(在RPG中即表示这个人开始行动),这时列出一个新序列
减去最小值后,判断,如果某个数值为0那么将该数值重置为该数值的数列1+数列2该位置的数值和,列出新序列
特殊情况:如果有超过1个数值为0,那么按照ID顺序,先重置ID小的数值,等下一轮再重置ID其次的数值,其他规则相同
例如,
数列1(10,20,30)
数列2(20,20,10)
某一轮产生如下情况
0,0,10
那么首先重置ID1为30
30,0,10
然后重置ID2为40
30,40,10

举个实例
例如,数列1(20,5,26)
      数列2(3,20,10)

那么第一次排序,ID2 ID1 ID3
中间经过计算,所有数值减去最小值5,生成新数列15,0,21
第二次排序,ID2,ID1,ID3
有0的数值,重置为15,25,21(25即为重置为ID2的数列1+数列2,5+20=25)
第三次排序,ID1 ID3 ID2

由此类推,列出这种排序N次(就是用户输入的次数)

请MATLAB高手出现吧,阿门! [em3]

1

主题

20

帖子

20

积分

注册会员

Rank: 2

积分
20
发表于 2009-7-19 09:02:00 | 显示全部楼层

Re:RPG排序算法,请MATLAB高手赐教!

高手。。看不懂

0

主题

7

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2009-7-19 21:00:00 | 显示全部楼层

Re:RPG排序算法,请MATLAB高手赐教!

同楼上

28

主题

3250

帖子

3262

积分

论坛元老

Rank: 8Rank: 8

积分
3262
QQ
发表于 2009-7-20 09:43:00 | 显示全部楼层

Re:RPG排序算法,请MATLAB高手赐教!

时序条式回合制战斗的顺序计算,数列1是初始状态,数列2是类似速度的东西
目的是模拟多回合的战斗顺序

解释完毕,LX继续

8

主题

96

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2009-7-20 14:52:00 | 显示全部楼层

Re:RPG排序算法,请MATLAB高手赐教!

我用的matlab是7.0版本,以下是.m文件源代码:

clear;
P = xlsread('rpg.xls','1');
Q = xlsread('rpg.xls','2');
dim=size(P,2);
P1=ones(2,dim);
N=10;
a=P(1,;
b=P(2,:);
[P11,ind1]=sort(P(1,:));
P1(2,:)=P(2,ind1);
P1(1,:)=P11;
a=cat(1,a,sort(a));
b=cat(1,P(2,:),P1(2,:));
j=1;
for k=1:N
    P1(1,:)=P1(1,:)-P1(1,1)*ones(1,dim);
    a=cat(1,a,P1(1,:));
    b=cat(1,b,P1(2,:));   
    P1(1,1)=P(1,P1(2,1))+Q(P1(2,1));
    [P11,ind1]=sort(P1(1,:));
    P1(2,:)=P1(2,ind1);
    P1(1,:)=P11;
    a=cat(1,a,P1(1,:));
    b=cat(1,b,P1(2,:));
end
xlswrite('rpg.xls',a,'a');
xlswrite('rpg.xls',b,'b');


在楼主的数列1(20,5,26)
      数列2(3,20,10)
例子里,计算结果如下:
20        5        26
5        20        26
0        15        21
15        21        25
0        6        10
6        10        23
0        4        17
4        17        36
0        13        32
13        25        32
0        12        19
12        19        23
0        7        11
7        11        25
0        4        18
4        18        36
0        14        32
14        23        32
0        9        18
9        18        25
0        9        16
9        16        23


排序如下
1        2        3
2        1        3
2        1        3
1        3        2
1        3        2
3        2        1
3        2        1
2        1        3
2        1        3
1        2        3
1        2        3
2        3        1
2        3        1
3        1        2
3        1        2
1        2        3
1        2        3
2        1        3
2        1        3
1        3        2
1        3        2
3        2        1


不知道是不是符合楼主的原意?

8

主题

96

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2009-7-20 14:56:00 | 显示全部楼层

Re:RPG排序算法,请MATLAB高手赐教!

解释一下,rpg.xls文件有2个工作表,分别叫“1”,“2”,在楼主的例子里,1里的数据是
20 5 26
1  2 3

2里的数据是
3 20 10

最后结果写在新的工作表“a”“b”里,前面是具体数值,后者是排列次序

13

主题

31

帖子

39

积分

注册会员

Rank: 2

积分
39
 楼主| 发表于 2009-7-20 23:04:00 | 显示全部楼层

Re: RPG排序算法,请MATLAB高手赐教!

厉害!谢谢楼上的高手
不过小弟有还有一点疑问:可否在MATALB里直接让用户输入两个数列,以及要排序的次数,然后直接在MATLAB里直接显示排序结果呢?
另外,为什么我按照你的方法的MATLAB提示如下错误
??? Attempted to access P(2,; index out of bounds because size(P)=[1,3].
我的版本是2008B

8

主题

96

帖子

98

积分

注册会员

Rank: 2

积分
98
发表于 2009-7-21 09:08:00 | 显示全部楼层

Re:RPG排序算法,请MATLAB高手赐教!

回楼上

这个错误的原因是你的1工作表里只有1行数据,比如
20 5 26

而正确的输入方式是
20 5 26
1 2 3
即要加上序号1,2,3...,与上一列的数据一一对应
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-15 16:08

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表