作者yinjing (青艮)
站内GameDesign
标题Re: [问题] 想请教如何做出这样的游戏
时间Fri Jul 28 03:29:09 2006
※ 引述《IAMTCH (新的挑战)》之铭言:
: 如题,因为本身想试着做游戏,於是前阵子去询问学校的老师,
: 老师便给了我一个方向叫我试试看,但是我本身在这方面没什麽
: 经验,因此在这边请教各位,谢谢。
: 游戏内容:
: 1.回合制寻宝游戏:玩家和电脑各有同等数量的棋子n(n为游戏开始时设定),
: 每一回合中,双方轮流用一个棋子移动一步。棋子位置由
: 游戏开始後乱数放置於地图之中。
以我那老旧的笨逻辑来想......
先建立一个阵列,例如 { 0, 0, 0, 0, 0, 0, 各位观众!看~~6 x 6!
0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
嘘 嘘 嘘
0, 0, 0, 0, 0, 0,
嘘 嘘
0, 0, 0, 0, 0, 0,
嘘 嘘
0, 0, 0, 0, 0, 0 }
我是这样想的...... 0 代表的是零,没有东西的位置。
然後再将宝物放进去,例如代表宝物的是 2,
然後就把上面阵列看是要几个宝物随机放进去,把原本的 0 变成 2 。
(至於要怎样随机...... 若12宝物 / (6*6) = 1/3 出现机率,看程式有啥随机函式能用)
然後放棋子,怎麽放同上,只是要记得减机率的分母,至於要先放棋子再宝物随您,
或甚至[棋子+宝物]放不放一个随机,放哪种在一个随机也都好 ╮( ̄﹏ ̄)╭
: 2.运作方式:在方格地图中进行,地图里隐藏r个宝物(r为游戏开始时设定),
: 一个棋子只能拿一个宝物。因此游戏的关键在於,当棋子
: 遇到同伴时(即在相临方格接触时)能够交换资料,得知其
: 他宝物地点,然後让身上没宝物的棋子去争取。
「...........」 现在才看到写说隐藏r个宝物 @#$%^&*
喔,前面忘了说,棋子啊...... 看要怎样定,我大概是玩家定 1,电脑定 -1
要移动时,是先选要动哪个,选定时以判定大於零...... 到这边我後悔啦~~
我希望玩家 定成 3 电脑定成 -3 ...... 不喜欢?咬我啊 ╮(╯▽╰)╭
然後玩家选定时判定是否大於 2
(其实当初选判定是否等於 1 也是可以啦~~人真是善变的动物......|||)
是的话,就准备移动罗~~
我大概会先准备读入 4 个值备用,也就是选定棋子的上下左右座标的数值。
至於是哪个座标?也许您可以固定初始座标 ( x, y ),当往哪边就加减 x 或 y
哪边当原点就看个人罗,不过建议是四个角啦,这样另一边多远也比较好算。6 x 6 嘛
然後移动时确认是可移动位置才给移动,例如加绝对值後小於 3 (有绝对值这功能吧?)
(此时...... 想起有人说过乘除是蛮耗时间的东西...... (心虚)喔,再说啦)
此时!我又後悔啦 XDDDDD 我希望~~空地座标的值是 1 (囧rz)
然後~~移动过去是将目标座标的值 *= 移动的物件
例如 移动的玩家棋子为 3,目标空地值是 1,移过去後 1 *= 3,所以就变 3 罗;
但若 移动的玩家棋子为 3,目标宝物值是 2,移过去後 2 *= 3,所以是变 6 的。
这下您可以了解我方才所下的伏笔了吧 (谜之声:真烂的方法) 囧rz
而电脑是 -3,所以都是负的...... 至於这逻辑好不好...... 乱想的,天知道 囧
而离开的原地,通通就都放空地 1 罗~~
至於您说的交换资料?! 这方面就同前面回文,我是假设不存在的啦 (懒)
如是假设可转东西...... ( a 把宝物转到 b 上),
那就 b = a,a = 3 罗 (反正玩家就是 3 嘛) (←不过要写电脑就要改罗)
不过我可能会把转东西不列为[一步],为什麽?单纯觉得这样应该比较好写吧... |||
好像这部份就完了...... 嗯,换下部份。
: 3.胜利条件:一方先取得过半的宝物数量即获胜。
: 不限制作语言,不过老师是提议我用Visual C++,但我本身比较熟flash(但也
: 不到做游戏的水准),因此希望各位高手能够建议我,这样的游戏该怎麽学习制
: 作比较好,谢谢。
胜利条件嘛~~就一个个座标判断大於 5 (或等於 6) 的有几个,有没有过半罗
判断就设在每次动作结束时呼叫的函式,用回圈从头扫到尾
里面用 if 或啥类似的判断说玩家有宝物的就哪个值++,电脑有宝物就另个值++
当哪个值达一半则宣布哪边赢...... 就这样,ptt的历史又翻过了一页。
函式名称 ()
{
float player = 0 ; // 这只是宣告两个存数量的
float com = 0 ;
if ( 宝物数%2 != 0 ) // 判断奇偶数
{
宝物数++ ;
}
for ( int x = 0, x++, x <= 阵列的宽 )
{
for ( int y =0, y++, y <= 阵列的高)
{
if ( 阵列名称[x][y] == 6 ) // 这是计算拥有宝物的
{
player++ ;
}
else if ( 阵列名称[x][y] == -6 )
{
com++ ;
}
if ( player >= 宝物数/2) // 这是判断胜利
{
啥结束游戏的函式 ;
cout << "玩家获胜" << endl ;
}
else if ( com >= 宝物数/2)
{
啥结束游戏的函式 ;
cout << "电脑获胜" << endl ;
}
}
}
}
(检查宝物奇偶数 跟 判断胜利 可独立出来再写成个函式)
至於要不要分档案写或是用啥 x.判断胜利 跟 y.判断胜利......
还是那句:再说吧...... |||
ps: 那些啥数值、逻辑的仅供参考...... 不喜欢千万别勉强,好记好用较重要。
--
之所以写这些有的没的,
纯粹因为自己过去没用功写个自我弥补 囧
反正我现在的程度刚好跟新手差不多,
写起来应该也刚好适合新手吧 Orz
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.170.141.141
1F:推 IAMTCH:谢罗 我会仔细想想的^^ 07/28 13:34