- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个名为 Tile 的对象,它包含有关其图 block 上的内容以及图 block 类型的信息。然后,我创建了这些 Tile 对象的 2D 数组,并循环显示过程以在控制台中将网格输出为 ASCII 网格,循环检查以查看图 block 上的内容,并将用空白等填充关联的网格方 block 。
我想知道您是否可以指导我如何获取玩家对象,并开始将其放入网格内,因为我很困惑从哪里开始。我很好奇如何让 Tiles.contains() 向我显示玩家对象,以便我可以开始针对该对象执行功能,例如 Player.moveLeft 等。
感谢您的帮助!
我很困惑从哪里开始。
/**
* @aim Tile Object which contains information about each grid square
*/
public class Tile
{
//-------------------------------------------------------------------------------------
// Class Variables
//-------------------------------------------------------------------------------------
private String szType;
private boolean bIsEmpty;
private String szOnTile;
//-------------------------------------------------------------------------------------
// Constructor
//-------------------------------------------------------------------------------------
public Tile()
{
reset();
return;
}
public Tile(String Type, boolean IsEmpty, String OnTile)
{
reset();
setType(Type);
setIsEmpty(IsEmpty);
setOnTile(OnTile);
}
//-------------------------------------------------------------------------------------
// Setters
//-------------------------------------------------------------------------------------
public void setType(String Type)
{
this.szType = Type;
return;
}
public void setIsEmpty(boolean IsEmpty)
{
this.bIsEmpty = IsEmpty;
return;
}
public void setOnTile(String OnTile)
{
this.szOnTile = OnTile;
return;
}
//-------------------------------------------------------------------------------------
// Getters
//-------------------------------------------------------------------------------------
public String getType()
{
return(this.szType);
}
public boolean getIsEmpty()
{
return(this.bIsEmpty);
}
public String getOnTile()
{
return(this.szOnTile);
}
//-------------------------------------------------------------------------------------
// Utilities
//-------------------------------------------------------------------------------------
public void displayObject()
{
System.out.println("Type = " + getType());
System.out.println("IsEmpty = " + getIsEmpty());
System.out.println("OnTile = " + getOnTile());
System.out.println();
}
private void reset()
{
setType("Blank");
setIsEmpty(true);
setOnTile("None");
}
//-------------------------------------------------------------------------------------
// Test-Rig
//-------------------------------------------------------------------------------------
public static void main(String[] args)
{
}
}
public class TestMap
{
public static final int iGRID_WIDTH = 10;
public static final int iGRID_HEIGHT = 10;
public static Tile[][] Map = new Tile[iGRID_HEIGHT][iGRID_WIDTH];
public static void generateMap ()
{
int i = 0;
int j = 0;
for(i = 0 ; i < iGRID_HEIGHT ; i++)
{
for(j = 0 ; j < iGRID_WIDTH ; j++)
{
Map[i][j] = new Tile();
}
}
return;
}
public static void displayMap()
{
int i = 0;
int j = 0;
System.out.println("---------------------");
for(i = 0 ; i < iGRID_HEIGHT ; i++)
{
System.out.print("|");
for(j = 0 ; j < iGRID_WIDTH ; j++)
{
if(Map[i][j].getOnTile() == "None")
{
System.out.print(" " + "|");
}
}
System.out.print("\n");
System.out.println("---------------------");
}
}
public static void main(String[] args)
{
generateMap();
displayMap();
}
}
我希望能够获取一个玩家对象并开始在网格中遍历它。我知道如何使用普通的二维数组来做到这一点;但我对如何将其传输到二维对象数组感到困惑。我知道我的 Tile 对象并不完全符合 OOP 规则,它仍在进行中。
编辑:
我现在已经实现了所讨论的更改(或尝试),这就是结果:
/**
* @author Damien Newnham
* @aim Tile Object which contains information about each grid square
*/
public class Tile implements TileObjectInterface
{
//-------------------------------------------------------------------------------------
// Class Variables
//-------------------------------------------------------------------------------------
private String szType;
private boolean bIsEmpty;
private String szOnTile;
//-------------------------------------------------------------------------------------
// Constructor
//-------------------------------------------------------------------------------------
public Tile()
{
reset();
return;
}
public Tile(String Type)
{
reset();
setType(Type);
}
//-------------------------------------------------------------------------------------
// Setters
//-------------------------------------------------------------------------------------
public void setType(String Type)
{
this.szType = Type;
return;
}
//-------------------------------------------------------------------------------------
// Getters
//-------------------------------------------------------------------------------------
public String getType()
{
return(this.szType);
}
public boolean isObjectHere(TileObjectInterface searchingObject)
{
boolean isObjectHere = false;
if(containedObjectList.contains(searchingObject) == true)
{
isObjectHere = true;
}
return isObjectHere;
}
//-------------------------------------------------------------------------------------
// Utilities
//-------------------------------------------------------------------------------------
public void displayObject()
{
System.out.println("Type = " + getType());
System.out.println();
}
public void removeObject(TileObjectInterface implementingObject)
{
containedObjectList.remove(implementingObject);
}
public void addObject(TileObjectInterface implementingObject)
{
containedObjectList.add(implementingObject);
}
private void reset()
{
setType("Blank");
}
//-------------------------------------------------------------------------------------
// Test-Rig
//-------------------------------------------------------------------------------------
public static void main(String[] args)
{
}
}
public class TestMap extends Globals
{
public static void generateMap ()
{
int i = 0;
int j = 0;
for(i = 0 ; i < iGRID_HEIGHT ; i++)
{
for(j = 0 ; j < iGRID_WIDTH ; j++)
{
Map[i][j] = new Tile();
}
}
return;
}
public static void spawnPlayer()
{
Map[0][0].addObject(player);
}
public static void displayMap()
{
int i = 0;
int j = 0;
System.out.println("-------------------------------");
for(i = 0 ; i < iGRID_HEIGHT ; i++)
{
System.out.print("|");
for(j = 0 ; j < iGRID_WIDTH ; j++)
{
if(Map[i][j].isObjectHere(player) == true)
{
System.out.print("XX" + "|");
}
else
{
System.out.print(" " + "|");
}
}
System.out.print("\n");
System.out.println("-------------------------------");
}
System.out.println("\n\n");
}
public static void main(String[] args)
{
}
}
public class PlayerMovementController extends Globals
{
public static int iPlayerRow = 0;
public static int iPlayerColumn = 0;
public static void movePlayer(char chDirection)
{
chDirection = Character.toUpperCase(chDirection);
if (chDirection == 'L')
{
Map[iPlayerRow][iPlayerColumn].removeObject(player);
Map[iPlayerRow - 1][iPlayerColumn].addObject(player);
iPlayerRow = iPlayerRow - 1;
}
else
{
if (chDirection == 'R')
{
Map[iPlayerRow][iPlayerColumn].removeObject(player);
Map[iPlayerRow + 1][iPlayerColumn].addObject(player);
iPlayerRow = iPlayerRow + 1;
}
else
{
if (chDirection == 'U')
{
Map[iPlayerRow][iPlayerColumn].removeObject(player);
Map[iPlayerRow][iPlayerColumn - 1].addObject(player);
iPlayerColumn = iPlayerColumn - 1;
}
else
{
if(chDirection == 'D')
{
Map[iPlayerRow][iPlayerColumn].removeObject(player);
Map[iPlayerRow][iPlayerColumn + 1].addObject(player);
iPlayerColumn = iPlayerColumn + 1;
}
}
}
}
}
public static void main(String[] args)
{
}
}
public class Globals
{
public static Player player = new Player("Damo");
public static final int iGRID_WIDTH = 10;
public static final int iGRID_HEIGHT = 10;
public static Tile[][] Map = new Tile[iGRID_HEIGHT][iGRID_WIDTH];
public static void main(String[] args)
{
}
}
public class TestRig
{
public static void main(String[] args)
{
TestMap.generateMap();
TestMap.spawnPlayer();
TestMap.displayMap();
PlayerMovementController.movePlayer('R');
TestMap.displayMap();
PlayerMovementController.movePlayer('R');
TestMap.displayMap();
PlayerMovementController.movePlayer('D');
TestMap.displayMap();
PlayerMovementController.movePlayer('L');
TestMap.displayMap();
}
}
/**
* @author Damien Newnham
* @aim Player Object which contains information about the player
*/
public class Player implements TileObjectInterface
{
//-------------------------------------------------------------------------------------
// Class Variables
//-------------------------------------------------------------------------------------
private String szCharacterName;
//-------------------------------------------------------------------------------------
// Constructor
//-------------------------------------------------------------------------------------
public Player()
{
reset();
return;
}
public Player(String CharacterName)
{
reset();
setCharacterName(CharacterName);
}
//-------------------------------------------------------------------------------------
// Setters
//-------------------------------------------------------------------------------------
public void setCharacterName(String CharacterName)
{
this.szCharacterName = CharacterName;
return;
}
//-------------------------------------------------------------------------------------
// Getters
//-------------------------------------------------------------------------------------
public String getCharacterName()
{
return(this.szCharacterName);
}
//-------------------------------------------------------------------------------------
// Utilities
//-------------------------------------------------------------------------------------
public void displayObject()
{
System.out.println("CharacterName = " + getCharacterName());
System.out.println();
}
private void reset()
{
setCharacterName("Bob");
}
//-------------------------------------------------------------------------------------
// Test-Rig
//-------------------------------------------------------------------------------------
public static void main(String[] args)
{
}
}
import java.util.LinkedList;
public interface TileObjectInterface
{
LinkedList<TileObjectInterface> containedObjectList = new LinkedList<>();
}
现在的问题是添加和删除对象时出现逻辑错误或语法错误,运行 TestRig 的输出如下所示
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
|XX|XX|XX|XX|XX|XX|XX|XX|XX|XX|
-------------------------------
所需的输出应该是第一个图像左上角单元格中的 XX,然后向右移动一次,再向右移动一次,向下移动一次,然后向左移动一次。正如所见,它似乎在每个单元格中显示 XX。
再次感谢!
最佳答案
这个想法是用一个代表 map 的 Tile 对象的二维数组。您可能想问自己,图 block / map 是否应该能够对它们包含的对象执行操作。当您将 Tile 类视为可以包含其他对象的容器时,您的实现会更加清晰。
该类的目的是包含对象并删除/添加新对象。因此,一个好主意是将接口(interface)中包含的对象抽象出来。每个单独的图 block 充当实现接口(interface)的这些对象的容器。
这会导致数据层除了保存与程序(游戏)相关的数据外没有其他用途。在此层之上,您可以构建一个逻辑层,现在可以使用数据层对其执行操作。逻辑层将包含您的二维数组遍历。
请记住,这是一种非常基本的方法,一旦扩展程序,您可能需要进行更多抽象。
如何在 Java 中实现此功能的代码示例:
// in Tile class
// please consider renaming the interface etc. (just for clearance here)
LinkedList<TileObjectInterface> containedObjectList = new LinkedList<>();
// method example to add to the container (which is Tile)
// consider adding error checks
public void add(TileObjectInterface implementingObject) {
this.containedObjectList.add(implementingObject);
}
我无法回答您有关如何设计容器的问题,因为这将取决于稍后的使用情况。如果您制作一个简单的列表实现,您可能会遇到运行时类检查,这可能是不需要的。但我可以想象,当您持有例如玩家对象的外部引用时,可以对容器进行操作。
关于java - 有人可以指导我如何获取玩家对象并将其移动到二维平铺对象数组中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56609473/
只是想知道 Jquery Mobile 是否足够稳定以用于实时生产企业移动应用程序。 有很多 HTML5 框架,因为我们的团队使用 JQuery 已经有一段时间了,我们更愿意使用 Jquery 移动框
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 3 年前。 Improve t
所以我尝试在 JavaScript 中对元素进行拖放。我使用的视频教程在这里; https://www.youtube.com/watch?v=KTlZ4Hs5h80 。我已经按照它的说明进行了编码,
无法在移动 iOS(safari 和 chrome)上自动播放以前缓存的 mp3 音频 我正在 Angular 8 中开发一个应用程序,在该应用程序的一部分中,我试图在对象数组中缓存几个传入的音频 m
Git 基于内容而不是文件,所以我目前理解以下行为,但我想知道是否有特殊选项或 hack 来检测此类事情: git init mkdir -p foo/bar echo "test" foo/a.tx
我正在寻找语义 ui 正确的类来隐藏例如移动 View 中的 DIV。在 Bootstrap 中,我们有“visible-xs”和“hidden-xs”。 但是在语义ui上我只找到了“仅移动网格” 最
我正在使用 ubuntu 和 想要移动或复制大文件。 但是当我与其他人一起使用服务器时,我不想拥有所有内存并使其他进程几乎停止。 那么有没有办法在内存使用受限的情况下移动或复制文件? 最佳答案 如果你
这些指令有什么区别?以 ARM9 处理器为例,它不应该是: ASM: mov r0, 0 C: r0 = 0; ASM: ld r0, 0 C: r0 = 0; ? 我不知道为什么要使用一个或另一个:
我有一个文件夹,其中包含一些随机命名的文件,其中包含我需要的数据。 为了使用数据,我必须将文件移动到另一个文件夹并将文件命名为“file1.xml” 每次移动和重命名文件时,它都会替换目标文件夹中以前
我经常在 IB/Storyboard 中堆叠对象,几乎不可能拖动其他对象后面的对象而不移动前面的对象。无论如何我可以移动已经选择但位于其他对象后面的对象吗?当我尝试移动它时,它总是选择顶部的对象,还是
几个月前,我看到 Safari 7 允许推送通知,它似乎是一个非常有用的工具,除了我看到的每个示例都专注于桌面浏览,而不是移动设备。 Safari 推送通知是否可以在移动设备上运行,如果没有,是否有计
我有一个简单的 View 模型,其中包含修改后的 ObservableCollection使用 SynchronizationContext.Current.Send在 UI 线程上执行对集合的更改。
关于cassandra创建的数据文件和系统文件的位置,我需要移动在“cassandra.yaml”配置文件中设置的“commitlog_directory”、“data_file_directorie
我有这个代码 $(function() { var message = 'Dont forget us'; var original; var txt1 = ' - '; $(wind
我的客户报告说他的网站有一个奇怪的问题。该网站的 URL 是 your-montenegro.me 在 基于 Android 的浏览器 上加载时,页面底部会出现一个奇怪的空白区域。以下是屏幕截图: 华
我有这个 HTML 标记: Express 300 bsf Sign Up 我需要将元素从 DOM 上的一个
我有一个可重新排序的 TableView (UITableView 实例)。尽管我已经实现了 UITableViewDataSource 方法: tableView:moveRowAtIndexPat
我的客户报告说他的网站有一个奇怪的问题。该网站的 URL 是 your-montenegro.me 在 基于 Android 的浏览器 上加载时,页面底部会出现一个奇怪的空白区域。以下是屏幕截图: 华
我需要在拖放或复制/剪切和粘贴(复制与移动)期间获取操作类型。它是一个 Swing 应用程序,并且实现了 TransferHandle。我在操作结束时需要此信息,在 importData 方法中。 对
我编写了一个具有 add 和 get 方法的 SortedIntList 类。 我调用以下四个方法: SortedIntList mySortedIntList = new SortedIntList
我是一名优秀的程序员,十分优秀!