java erlang 游戏_游戏中最近可达点(用erlang写一个简单算法)
游戏中有点击障碍点,人物走到离障碍物最近点的算法。我这给一个简单的算法,这个问题可以复杂化,另外这个问题应该由客户端来完成。
如图,玩家在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写一个简单算法)相关推荐
- 用Java写一个简单的回合制游戏
用Java写一个简单的回合制游戏 创建基本属性,血量,名字,技能,技能伤害. 如下: public class One3 {//创建三个属性private String name;private St ...
- java一个项目只有一个主类吗_组成Java Application的若干类中,有且仅有一个主类,只有主类中含有主方main()。...
组成Java Application的若干类中,有且仅有一个主类,只有主类中含有主方main(). A:对 B:错 正确答案:对 解析: 组成Java Application的若干类中,有且仅有一个主 ...
- 用java做一个简单记事本_用记事本写一个简单的java程序
用记事本写一个简单的java程序 第一步: 安装好jdk,并设置好环境变量. 桌面-计算机(右键)-属性-高级系统设置-环境变量-path-在变量值后加上:和jdk安装路径加上(路径即为C:\Prog ...
- c语言写一个简单的小游戏-推箱子
在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...
- 使用Qt写一个简单的五子棋单机小游戏
使用Qt写一个简单的五子棋单机小游戏 刚学,不够专业请勿喷,有不对的地方还请指出,我渴望进步!现在贴出这个游戏我原创的所有代码.希望可以帮到有需要的人. 游戏界面: 因为后面添加了.wav的音频文件, ...
- 一个简单的c 游戏编程语言,编程达人 c语言写一个简单的小游戏-推箱子
在学习C语言之后,写了一个简单的小游戏来锻炼自己的代码以及C语言知识的掌握能力. 推箱子作为手机上最常见的简单游戏,其代码也相对简单,想法也比较简单,下面为其代码和运行图. /************ ...
- 用java写一个日历_使用JAVA写一个简单的日历
JAVA写一个简单的日历 import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDa ...
- java编写日历思路_使用JAVA写一个简单的日历
JAVA写一个简单的日历import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDat ...
- java递归怎么写_什么是递归?用Java写一个简单的递归程序
什么是递归?用Java写一个简单的递归程序 递归的定义 递归(recursion):以此类推是递归的基本思想,将规模大的问题转化为规模小的问题来解决. 递归的要素 自定义递归函数,并确定函数的基本功能 ...
最新文章
- 正则表达式 一切从简
- Java 洛谷 P1482 Cantor表(升级版)
- 在 PostgreSQL 中使用码农很忙 IP 地址数据库
- Codeforces Round #628 (Div. 2) F. Ehab‘s Last Theorem dfs树
- AWR 报告深度解读:Redo Nowait指标的算法和诊断泄露二十多万名用户数据
- iOS中滤镜处理及相关内存泄漏问题的解决
- sql backup database备份d盘_Oracle-备份与恢复(二)RMAN备份-自动备份计划任务脚本...
- 看云计算时代的web1800远程服务支持系统
- mysql 存储过程 对象_【MYSQL笔记3】MYSQL过程式数据库对象之存储过程的调用、删除和修改...
- Python|动态规划问题--斐波那契数列
- 在docker容器里的Linux环境下,执行netstat命令显示 command not found
- MATLAB 图像嵌入水印图像程序
- USACO-Preface Numbering
- Mozilla Firefox 全版本下载
- 怎么把照片压缩变小?如何改变图片的大小?
- SAP第三代增强——BADI解读
- 生成SAML所需X509证书
- mhp2nbsp;BOSS属性列表+部分BOSS打法
- 常见英语面试问题及答案
- linux FTP云盘
热门文章
- Zabbix的应用(6)----常见错误
- cad在布局怎么调比例_CAD中如何在布局空间调整图形比例?
- 红橙Darren视频笔记 Handler源码简析与handler框架模拟 ThreadLocal
- 从零开始学keras之多分类问题
- python中列表和集合的区别_python中列表和集合有什么区别
- Windows10和Ubuntu双系统下用windows引导Ubuntu
- ListView练习_购物商城
- 南通大学python期末考试试卷_模拟试卷C
- java cygwin,cygwin和java
- install java 8_Install Java 8 on Ubuntu