Java游戏编程之常用算法

767 阅读4分钟

作者:老九—技术大黍

原文:Developing Games in Java

社交:知乎

公众号:老九学堂(新人有惊喜)

特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系笔者授权

前言

我们做Web开发时肯定不需要用到算法,并且我们在使用Java进行Web服务开发时,一般也用不到什么算法,包括什么各种分布式的微服应用开发。

但是,只要我们进行游戏开发,一般都会用到算法的。

什么是算法?

算法是一种解决问题的有效方法(effective method),该方法使用有限的指令序列来解决问题。(An algorithm is an effective method for solving a problem using a finite sequence of instructions)。

每个算法是一个完成复杂任务的列表,该列表是被定义好的(固定的)。算法从一个初始状态开始,然后指令描述了一个到成功状态的固定处理序列,最后到结束状态。

数据结构—指针链表

在指针列表中的每个元素都指针类型(Java类内置指针),并且在该列表中包含两个整数,分别由指针的x和y坐标表示。另外,因为Point类是由Java内置的,所以面向对象的编程已经可以这样使用了。

指针结构:是一个线性结构,它使用一个结点指向另外一个结点,从开始结点到结束点。

参见下面的图示

image-20210412144704153.png

代码对应

image-20210412144756268.png

插入排序

规则是每次将一个待排序的项,按其关键字大小插入到它前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。该方法常常被使用到桥牌游戏中。在计算机程序中, 我们需要确保空间可以插入新的元素,并且把较大的元素放到它的右边位置。如下图所示:

image-20210412145447744.png

ListSortExample类

import static java.lang.System.*;
/**
	功能:使用链表数据结构实现的插入排序
	作者:技术大黍
	备注:使用单向链表数据结构来实现插入排序算法--使用链表的操作列表的速度最快!
	*/
public class ListSortExample{ 
	//定义一个抽象数据Node用来表示指针类型
    static class Node{ 
    	int val; //实现数据
    	Node next; //指针
    	
    	//使用结构方法来初始化指针链表
        Node(int v, Node t) { 
        	val = v; 
        	next = t; 
        } 
    } 
    
    //创建链表结点--从控制台读取数据
    static Node create(){ 
    	//声明第一个结点,并且初始化它
    	Node a = new Node(0, null); 
    	out.println("请输入数字:(按ctrl+z表示输入结果)");
    	//如果控制台输入不结束,那么一直创建链表
	    for (In.init(); !In.empty(); ) 
			a.next = new Node(In.getInt(), a.next); 
	    return a; 
	} 
	
	//对链表进行排序处理
    static Node sort(Node a) { 
    	Node t, u, x, b = new Node(0, null); 
    	//如果传入的参数a下一个结点不为空
        while (a.next != null){ 
        	//那么把a的指针指向t结点
            t = a.next; 
            //把t结点的指针指向u结点
            u = t.next; 
            //把a的指针指向u--于是现是a->u->t
            a.next = u; 
            //下面是排序的交换算法:如果链表中大于一的元素,那么开始排序
            for (x = b; x.next != null; x = x.next) 
				if (x.next.val > t.val) 
					break; 
			//否则把b的指针指向t的指针
            t.next = x.next; 
            //然后把b的指针指向t结点
            x.next = t; 
          } 
        return b; 
    } 
    //在控制台显示排序结果
    static void print(Node h){ 
    	out.println("插入排序结果为:");
    	for (Node t = h.next; t != null; t = t.next) 
			out.println(t.val + ""); 
	} 
	
    public static void main(String[] args) { 
    	print(sort(create())); 
    } 
} 

运行效果

image-20210412145813612.png

总结

算法实际是在无处不在,当我们使用Java提供的API时,我们已经在使用算法了,比如LinkedList、Vector、List、Queue等等,只不过那些算法是别人提供的,并且是经过了实践检验的工具类。

但是,我们都知道就算法来说,它是没有最好的,只有更好的。因此,在游戏开发中,有时候是需要我们自己来书写算法的,以便完成特定的要求。

最后

记得给大黍❤️关注+点赞+收藏+评论+转发❤️

作者:老九学堂—技术大黍

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。