算法的口袋妖怪游戏 (皮卡丘)
内容
例都在同一行或列
去哪儿水平, 在矩形内的垂直
考虑水平延伸, 纵
主要功能代码
更新: 13/06/2014: 口袋妖怪游戏完成, 你在这里看到.
在写这篇文章我必须找到他的算法,对大型游戏谷歌文章引用,但找不到一个明确的文章都还是有,但我读不懂=)) (cũng có thể trình độ tìm kiếm và đọc hiểu thuật toán còn quá gà 🙂 ). 本文将介绍给大家,我认为出路. 他们提到的一些想法和构建, 编写代码,所以如果我们正在寻找的建议出现错误, 回应我们,并建立更多. 在基体中目前测试,发现故障, 连接并张贴在接口上.
我们整个口袋妖怪排列在矩阵模型. 在这里,我们会暂时考虑方阵NHE. 执行在控制台上,并从那里可以采取了游戏的主接口.
为了实现他的比赛的算法将分成情况下,从简单到复杂的找到自己的方式 (糖可以吃) 2 CON口袋妖怪, 概述有 3 TH TH自己的,每个都会有 2 小树枝是横向审查, 纵. 你有没有注意到你的TH可以充分分享汇集, 但是我不总值,因为在他的代码视为归入它变得复杂了太多的ELES if语句进行排序返回小的情况下这样的.
例都在同一行或列
TH1: 两个在相同的点在一行 (在x直线)
TH2: 两个在同一点的列 (y轴线)
同 2 TH此基础上,我们只需要使用一个循环从开始到结束,检查通信线路一起不. 如果他们认为完成, 如果没有,我们将用TH扩展水平或垂直下一步. 审查 2 我们使用TH 2 功能是 checkLineX(INT Y1, INT Y2, INT x) 和 checkLineY(INT X1, INT X2, INTÿ) 分别在货物的术语和在列方面. 如果行程之间的函数返回true 2 点, 否则为false去.
批准的方式水平, 在矩形内的垂直
同 2 点错位, 第一列,我们将看看在矩形内的 2 创建, TH是在Z形路径.
TH3: 的方式批准水平的矩形范围内
我们建立下巴 checkRectX(点P1, 点P2), (检查横长方形的程度,这 2 生成p1和p2点). 首先,我们将找出点坐标列 (和) 少 (PMI), 稍大点 (pMaxY). 接下来,我们给予极大的关心运行婴儿死亡 (从左至右), 每列 (和) 分别为,我们将考虑如何 3 小折叠线都没有无缝使用checkLineX功能和内置checkLineY. 如果存在医疗列,不知怎的,使 3 连接这种方式,我们可以证明是之间的路 2 我将返回点和y是该列的值. 否则返回 -1.
TH4: 审批垂直路径
建设下巴 checkRectY(点P1, 点P2) TH3相似,但没有发表评论,垂直.
考虑水平延伸, 纵
最后, 2 TH考虑是否扩大 4 TH上失败. 也就是说,我们必须考虑到这样的情况下,U形或L.
TH5: 考虑水平延伸
,在这种情况下,我们会考虑向左或向右功能水平延伸 checkMoreLineX(点P1, 点P2, 整型) 在这种P1, P2是 2 检查点, 找到你的方式, 型是类型, 将获得的值类型 1 (去到) 或 -1 (向左走). 首先,我们找出与列点 (和) 但小 (PMI), 有较大的点y (pMaxY). 因为当矩形内或上的直线被认为 2 点不在一起, 因此,我们扩展它通过查看列pMaxY.y的左侧 (列包含较大的列的位置) 和对从柱pMinY右. 同时,任何增加或减少列索引时 2 点 (pMinY.x, 和) 和 (pMaxY.x, 和) 不是障碍. 如果您遇到任何医用价值,使垂直 (绿) 如何证明查找方式. 当该函数返回y中列的值, 否则返回 -1. 但是,你考虑每列此之前,我们需要考虑pMinY pMaxY期 (绿色分配器) 尚未通知.
TH6: 在垂直延伸
履行职能 checkMoreLineY(点P1, 点P2, 整型) 与上述相同,但浏览每个行.
你有没有注意到,我们可以完全融合在一起,因为它TH3,4,5,6相似, 但在这里我没有这样做,因为如上所述是必要的,如果过多, 否则分裂出来这样TH.
另一种是TH 5, 6 绝对可以同时包含TH1,2,3,4但我还是分开的,因为当TH1,2,3,4检讨在此之前,我们会发现快之间的最短路线 2 点 (如果有), 即使合并,我们没有发现的最短路径,如果有一个U形通道满足一次审查.
最后,我们将编写一个函数checkTwoPoint(点P1, 点P2) 测试并发现原来的你的方式 2 点P1, P2任. 该函数将返回的对象是MYLINE包括 2 p1和p2点. 在这两者之间TH线 2 点P1, P2可以在收益包括P1和P2 MYLINE, 在TH路径折叠,则返回MYLINE包括 2 点弯.
守则主要功能内置
这里将在Java语言中提到的算法代码的主要功能 (你绝对可以切换到不同的语言,如果理解). 从文件中读取一些其它功能矩阵功能, 打印功能矩阵, … 那么你在代码完成看到帖子的结尾.
火腿checkLineX和checkLineY
// check with line x, from column y1 to y2 private boolean checkLineX(int y1, int y2, int x) { // find point have column max and min int min = Math.min(y1, y2); int max = Math.max(y1, y2); // run column for (int y = min; y <= max; y++) { if (matrix[x][y] == barrier) { // if see barrier then die System.out.println("die: " + x + "" + y); return false; } System.out.println("ok: " + x + "" + y); } // not die -> success return true; } private boolean checkLineY(int x1, int x2, int y) { int min = Math.min(x1, x2); int max = Math.max(x1, x2); for (int x = min; x <= max; x++) { if (matrix[x][y] == barrier) { System.out.println("die: " + x + "" + y); return false; } System.out.println("ok: " + x + "" + y); } return true; }
火腿checkLineX和checkLineY
// check in rectangle private int checkRectX(Point p1, Point p2) { // find point have y min and max Point pMinY = p1, pMaxY = p2; if (p1.y > p2.y) { pMinY = p2; pMaxY = p1; } for (int y = pMinY.y + 1; y < pMaxY.y; y++) { // check three line if (checkLineX(pMinY.y, y, pMinY.x) && checkLineY(pMinY.x, pMaxY.x, y) && checkLineX(y, pMaxY.y, pMaxY.x)) { System.out.println("Rect x"); System.out.println("(" + pMinY.x + "," + pMinY.y + ") -> (" + pMinY.x + "," + y + ") -> (" + pMaxY.x + "," + y + ") -> (" + pMaxY.x + "," + pMaxY.y + ")"); // if three line is true return column y return y; } } // have a line in three line not true then return -1 return -1; } private int checkRectY(Point p1, Point p2) { // find point have y min Point pMinX = p1, pMaxX = p2; if (p1.x > p2.x) { pMinX = p2; pMaxX = p1; } // find line and y begin for (int x = pMinX.x + 1; x < pMaxX.x; x++) { if (checkLineY(pMinX.x, x, pMinX.y) && checkLineX(pMinX.y, pMaxX.y, x) && checkLineY(x, pMaxX.x, pMaxX.y)) { System.out.println("Rect y"); System.out.println("(" + pMinX.x + "," + pMinX.y + ") -> (" + x + "," + pMinX.y + ") -> (" + x + "," + pMaxX.y + ") -> (" + pMaxX.x + "," + pMaxX.y + ")"); return x; } } return -1; }
火腿checkMoreLineX和checkMoreLineY
private int checkMoreLineX(Point p1, Point p2, int type) { // find point have y min Point pMinY = p1, pMaxY = p2; if (p1.y > p2.y) { pMinY = p2; pMaxY = p1; } // find line and y begin int y = pMaxY.y; int row = pMinY.x; if (type == -1) { y = pMinY.y; row = pMaxY.x; } // check more if (checkLineX(pMinY.y, pMaxY.y, row)) { while (matrix[pMinY.x][y] != barrier && matrix[pMaxY.x][y] != barrier) { if (checkLineY(pMinY.x, pMaxY.x, y)) { System.out.println("TH X " + type); System.out.println("(" + pMinY.x + "," + pMinY.y + ") -> (" + pMinY.x + "," + y + ") -> (" + pMaxY.x + "," + y + ") -> (" + pMaxY.x + "," + pMaxY.y + ")"); return y; } y += type; } } return -1; } private int checkMoreLineY(Point p1, Point p2, int type) { Point pMinX = p1, pMaxX = p2; if (p1.x > p2.x) { pMinX = p2; pMaxX = p1; } int x = pMaxX.x; int col = pMinX.y; if (type == -1) { x = pMinX.x; col = pMaxX.y; } if (checkLineY(pMinX.x, pMaxX.x, col)) { while (matrix[x][pMinX.y] != barrier && matrix[x][pMaxX.x] != barrier) { if (checkLineX(pMinX.y, pMaxX.y, x)) { System.out.println("TH Y " + type); System.out.println("(" + pMinX.x + "," + pMinX.y + ") -> (" + x + "," + pMinX.y + ") -> (" + x + "," + pMaxX.y + ") -> (" + pMaxX.x + "," + pMaxX.y + ")"); return x; } x += type; } } return -1; }
火腿checkTwoPoint
private MyLine checkTwoPoint(Point p1, Point p2) { // check line with x if (p1.x == p2.x) { if (checkLineX(p1.y, p2.y, p1.x)) { return new MyLine(p1, p2); } } // check line with y if (p1.y == p2.y) { if (checkLineY(p1.x, p2.x, p1.y)) { return new MyLine(p1, p2); } } int t = -1; // t is column find // check in rectangle with x if ((t = checkRectX(p1, p2)) != -1) { return new MyLine(new Point(p1.x, t), new Point(p2.x, t)); } // check in rectangle with y if ((t = checkRectY(p1, p2)) != -1) { return new MyLine(new Point(t, p1.y), new Point(t, p2.y)); } // check more right if ((t = checkMoreLineX(p1, p2, 1)) != -1) { return new MyLine(new Point(p1.x, t), new Point(p2.x, t)); } // check more left if ((t = checkMoreLineX(p1, p2, -1)) != -1) { return new MyLine(new Point(p1.x, t), new Point(p2.x, t)); } // check more down if ((t = checkMoreLineY(p1, p2, 1)) != -1) { return new MyLine(new Point(t, p1.y), new Point(t, p2.y)); } // check more up if ((t = checkMoreLineY(p1, p2, -1)) != -1) { return new MyLine(new Point(t, p1.y), new Point(t, p2.y)); } return null; }
类MYLINE
package nguyenvanquan7826; import java.awt.Point; public class MyLine { public Point p1; public Point p2; public MyLine(Point p1, Point p2) { super(); this.p1 = p1; this.p2 = p2; } public String toString() { String string = "(" + p1.x + "," + p1.y + ") and (" + p2.x + "," + p2.y + ")"; return string; } }
项目结构如下: (界面元素创建未完嘿嘿).
输入文件具有以下内容 (号码 5 首先是行数, 矩阵列, 号码 0 是去, 1 是需要旅游, 2 如障碍, 在这里可以使用选框限制道路, 没有被发送出去):
5
2 2 2 2 2 2 2
2 0 0 0 0 0 2
2 0 1 0 0 0 2
2 0 2 2 0 0 2
2 0 0 0 1 0 2
2 0 0 0 0 2 2
2 2 2 2 2 2 2
欢迎, 我一直在游戏中的钻石. 该位,当你选择 2 钻石,它会来回移动与nhau.Ban只能帮她做的那部分是khong.Thank!
往复运动在这个非常困难的事,你因为这关系到显卡. 如果您在Android或某事做,那么它也有库支持, 我没有在这个偶可见.
我只写在Eclipse中使用Java独
所以这是非常困难, 我也弄不明白,它不再. 如果你寻求理解,然后分享他们NHE.
我想做的事情作为他的皮卡丘游戏,但我不明白他的代码序列,建立自己的形象,以及如何进入 . 他回答,以帮助您.
对不起几天到假期我没博客. 🙂
订单代码: 我指的是游戏代码或代码算法, 算法则有芽. 随着游戏的代码, 你做以下:
+ 构建算法 & 码技术
+ 构建游戏界面
+ 通过界面上的算法和事件的影响安装界面,
Ảnh cho vào thế nào? Code để ra ảnh chứ sao nữa. Còn code thế nào thì đó là việc em cần học.
是的 ! 孩子们谢谢 .
em dg là sinh viên năm 2 khoa cntt anh ak em vừa mới bắt đầu hok java cơ bản em rất mún dc code làm game nhưng em không biết code giao diện để hình thành 1 game hoàn chỉnh anh có tài liệu về code gaio diện ja va ko ak . anh có thể chia sẻ cho em vs dc ko . 谢谢您 …
Hình như class checkMoreLineX matrix[X][pMaxX.x] != barrier phải là matrix[X][pMaxX.y] != barrier mới đúng đó anh 🙂 Thanks vì đã hướng dẫn.
Anh có thể viết nốt thuật toán reset khi ko còn cặp có thể ăn đc ko?
Ban dung thuat tim đuong nay de kiem tra tung cap mot la đuoc
Anh ơi cho em hỏi, anh dùng thật toán gì để tạo ra màn chơi hợp lệ(không biết em diễn tả có đúng không, màn chơi hợp lệ kiểu như là luôn tìm đc 2 con để ăn cho đến hết ván ấy), em cảm ơn anh trước
的, trong demo này mình không có làm cái đó bạn ah, mình cho ngẫu nhiên hết 🙂
thế có nghĩa là vẫn có trường hợp game không thể win được à anh. Sao em chơi game này của anh ván nào em cũng win được hết ???
是啊, vẫn còn TH có thể không thắng được
em chơi 10 ván đều thắng đc cả 10 :在 . Bây h em muốn làm sao cho ván nào cũng có thể thắng được. 我打算这样做: 我创建 1 流式传输, 每次喂食后的直流 1 这对将测试流, 如果不再吃任何更多的对它将再次干预. 不知道这样他就能不可行 ?有一个更好的办法,兄弟姐妹, 我发现算法创建一个有效的播放画面,找出无限期
中小企业, 是啊,这方向是. 只有检查后,每个独行. 虽然我原本出生在一个有效的显示, 但他们玩,他们选择怎么不知道.
我哥哥一直不让我报告请参考先生.
我没有=)).
他问我为什么这个文件与输入文件内容等输入在一个完整的项目内容? 而该项目完成输入文件的意义是怎样一个?
我是一个学生 1 弱这么多先生, 期待他同情! 感谢您的文章!
什么输入文件在文章中只是为了测试算法,只有你. 此外,在程序输入文件来测试. 该数据实际上被随机产生
详细回答您的电子邮件!
我的朋友, 显然你误了大事几次,呵呵折线.
我的意思是让NE: L
L
L
是的,那么你. 最多 3 在Z形轨道,展开.
哦,对于f问他怎么努力打球这个水平,将移动到游戏pokachu一个新的水平
当一个赢家就是你玩更难水平. 舀困难可能更多的细胞数量.
我用这个算法,但不知何故,整个地图错误ArrayBoundsOfException部分checkMoreLineX, 与. 所以你必须添加代码段的循环,而前检查. 再次与您添加这两种情况 2 孩子们最上面一行, 底部, 最左边的, 最右边的类似,食用. 用他的算法,它肯定假的 :)). 他能解释一下你没事吧,先生户?
那会停止代码, 他的求爱测试感觉很好. 在外面的信封,我已经可以说你.
这个古怪的小码你,你必须创建一个围绕空边框的矩阵 (矩阵[行+ 2][柱+ 2]) 在功能checkMoreLine棒ArrayBoundsOfException错误
当被问及小他在什么样的代码接口部分爵士.
的Java Swing NHE.
兄弟,我已经阅读了随机算法,但是我不明白如何向我解释? 谢谢
在大多数语言中这具有随机功能. 我也不太清楚如何创建,但是听说它依赖于时间以及运行时生成的某些芯片.
我的意思是肌肉的creatMatrix功能
然后随机生成每个元素.
上述算法的通用名称是什么??
我不知道. 我自己写的.