游戏中有点击障碍点,人物走到离障碍物最近点的算法。我这给一个简单的算法,这个问题可以复杂化,另外这个问题应该由客户端来完成。

如图,玩家在b点,点击了a点,a在一个障碍区(红色,玩家只能在障碍区外移到)。这时候玩家应该走到c点,我们就需要计算出c点,一个简单的数学题,用什么语言都没几行代码,我就用erlang写一下。

障碍物通常都不规则的,我们只能从a点开始一个个点测试,直到不是障碍点,也就是x自增,y=x*tan(A),然后测试这个点,地图数据都是静态的数据,方便测试,这里就写死一个x为障碍结束的地方作为障碍检测函数。

我们还需要一个记录表示点,tan函数在erlang中是有的,但其实可以不用,我们就直接要一个比值,但需要一个向上取整的函数,据说是round函数,但测试一下,不行,难道是因为不是最新otp

D:\NetBeanPj\mytest\src>erl

Eshell V5.8.1.1  (abort with ^G)

1> round(1.2).

1

所以这里我们要写的一个辅助函数,最后就是我们的重点,取最近点,用一个列表解析就够了,剩下的就看具体实现吧,还可以写个测试函数,这次就不写成单元测试了。好的我们看代码:

-module(nearst_point).

-export([ceil/1, is_barrier/1, nearst_point/2]).

-export([p1/0, p2/0, test_1/0]).

%% 一个点

-record(point,{

x,

y

}).

%% 向上取整

ceil(Num) ->

Num1 = round(Num),

case Num1 >= Num of

true ->

Num1;

false ->

Num1+1

end.

%% 判断是否是障碍物

is_barrier(Point) ->

Point#point.x =/= 5 .

%% 查找最近点

nearst_point(Pointa,Pointb) ->

Tan = (Pointa#point.x - Pointb#point.x)/(Pointa#point.y - Pointb#point.y),

case Pointa#point.x > Pointb#point.y of

true ->

MaxX = Pointa#point.x,

MinX = Pointb#point.x;

false ->

MaxX = Pointb#point.x,

MinX = Pointa#point.x

end,

try

[

begin

Point = #point{

x = X,

y = ceil(X*Tan)},

case is_barrier(Point) of

true ->

ok;

false ->

throw(Point)

end

end|| X

catch

throw: Point ->

io:format("~p", [Point]),

Point

end.

%% 下面函数测试用,可以改成单元测试,这里就免了

p1() ->

#point{

x = 1,

y = 9}.

p2() ->

#point{

x = 15,

y = 25}.

test_1() ->

nearst_point(p1(),p2()).

编译和测试

2> c(nearst_point).

{ok,nearst_point}

3> nearst_point:test_1().

{point,5,5}{point,5,5}

4>

我们的测试如预期的在5那个点得到,好像有个小问题,怎么这个点输出了两次?哦,这不是问题,一个点是代码里的io输出的,一个点是返回给shell,shell的输出,看来写代码的人太懒,疑惑也会增多啊。在nearst_point中用到了一个小技巧,就是用throw来跳出循环(这个在erlang中还是挺有意思),这次到这,应该说写的很基础很难看。下次会来点有意思的,欢迎大家学习erlang。

一种更好的态度,更好的学习、思维方式。它会是网络极佳的生存方式,你喜欢就对。

posted on 2011-06-24 23:54 yangyusong 阅读(2760) 评论(0)  编辑  收藏

java erlang 游戏_游戏中最近可达点(用erlang写一个简单算法)相关推荐

  1. 用Java写一个简单的回合制游戏

    用Java写一个简单的回合制游戏 创建基本属性,血量,名字,技能,技能伤害. 如下: public class One3 {//创建三个属性private String name;private St ...

  2. java一个项目只有一个主类吗_组成Java Application的若干类中,有且仅有一个主类,只有主类中含有主方main()。...

    组成Java Application的若干类中,有且仅有一个主类,只有主类中含有主方main(). A:对 B:错 正确答案:对 解析: 组成Java Application的若干类中,有且仅有一个主 ...

  3. 用java做一个简单记事本_用记事本写一个简单的java程序

    用记事本写一个简单的java程序 第一步: 安装好jdk,并设置好环境变量. 桌面-计算机(右键)-属性-高级系统设置-环境变量-path-在变量值后加上:和jdk安装路径加上(路径即为C:\Prog ...

  4. c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

  5. 使用Qt写一个简单的五子棋单机小游戏

    使用Qt写一个简单的五子棋单机小游戏 刚学,不够专业请勿喷,有不对的地方还请指出,我渴望进步!现在贴出这个游戏我原创的所有代码.希望可以帮到有需要的人. 游戏界面: 因为后面添加了.wav的音频文件, ...

  6. 一个简单的c 游戏编程语言,编程达人 c语言写一个简单的小游戏-推箱子

    在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...

  7. 用java写一个日历_使用JAVA写一个简单的日历

    JAVA写一个简单的日历 import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDa ...

  8. java编写日历思路_使用JAVA写一个简单的日历

    JAVA写一个简单的日历import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDat ...

  9. java递归怎么写_什么是递归?用Java写一个简单的递归程序

    什么是递归?用Java写一个简单的递归程序 递归的定义 递归(recursion):以此类推是递归的基本思想,将规模大的问题转化为规模小的问题来解决. 递归的要素 自定义递归函数,并确定函数的基本功能 ...

最新文章

  1. 正则表达式 一切从简
  2. Java 洛谷 P1482 Cantor表(升级版)
  3. 在 PostgreSQL 中使用码农很忙 IP 地址数据库
  4. Codeforces Round #628 (Div. 2) F. Ehab‘s Last Theorem dfs树
  5. AWR 报告深度解读:Redo Nowait指标的算法和诊断泄露二十多万名用户数据
  6. iOS中滤镜处理及相关内存泄漏问题的解决
  7. sql backup database备份d盘_Oracle-备份与恢复(二)RMAN备份-自动备份计划任务脚本...
  8. 看云计算时代的web1800远程服务支持系统
  9. mysql 存储过程 对象_【MYSQL笔记3】MYSQL过程式数据库对象之存储过程的调用、删除和修改...
  10. Python|动态规划问题--斐波那契数列
  11. 在docker容器里的Linux环境下,执行netstat命令显示 command not found
  12. MATLAB 图像嵌入水印图像程序
  13. USACO-Preface Numbering
  14. Mozilla Firefox 全版本下载
  15. 怎么把照片压缩变小?如何改变图片的大小?
  16. SAP第三代增强——BADI解读
  17. 生成SAML所需X509证书
  18. mhp2nbsp;BOSS属性列表+部分BOSS打法
  19. 常见英语面试问题及答案
  20. linux FTP云盘

热门文章

  1. Zabbix的应用(6)----常见错误
  2. cad在布局怎么调比例_CAD中如何在布局空间调整图形比例?
  3. 红橙Darren视频笔记 Handler源码简析与handler框架模拟 ThreadLocal
  4. 从零开始学keras之多分类问题
  5. python中列表和集合的区别_python中列表和集合有什么区别
  6. Windows10和Ubuntu双系统下用windows引导Ubuntu
  7. ListView练习_购物商城
  8. 南通大学python期末考试试卷_模拟试卷C
  9. java cygwin,cygwin和java
  10. install java 8_Install Java 8 on Ubuntu