import java.awt.*;
import hsa.Console;
public class Game{
static Console c;
public static void Wait (int time){
try{
Thread.sleep (time);
}
catch (InterruptedException e){
}
}
public static class Tile{
public int x,y,stack;
public Tile(){
x = 0;
y = 0;
stack = 0;
}
public Tile(int xco, int yco, int stacknum){
x = xco;
y = yco;
stack = stacknum;
}
public void draw(Tile tile){ //To draw the tile
if(stack>0){
c.setColor(Color.red);
c.fillRect(x*78+1+x,y*78+1+y,78,78); //Calculate coordinates
}
else{
c.setColor(Color.blue);
c.fillRect(x*78+1+x,y*78+1+y,78,78);
}
}
}
public static void main (String[] args){
c = new Console ();
for(int i=0;i<640;i+=79) c.drawLine(i,0,i,474);
for(int i=0;i<500;i+=79) c.drawLine(0,i,632,i);
//8x6 tiling
Tile[][] tile = new Tile[8][6];
for(int i=0;i<8;i++){
for(int j=0;j<6;j++){
tile[i][j] = new Tile();
tile[i][j].x = i;
tile[i][j].y = j; //Set x and y coordinates
tile[i][j].stack = 5;
}
}
Tile.draw(tile[0][0]);
}
}
这里我有一个使用多维数组的8x6方块。我认为坐标对应于正确的数字,但由于某种原因,坐标似乎复制了在它之前创建的坐标。有人能告诉我为什么会发生这种情况以及代码应该如何纠正?顺便说一下,我开始使用java,所以我不习惯面向对象编程:P
答案 0 :(得分:3)
您的坐标被声明为静态:
public static int x,y,stack;
声明中包含static
修饰符的字段称为static
字段或类变量。它们与class
相关联,而不是与任何对象相关联。该类的每个实例共享一个静态类变量,该变量位于内存中的一个固定位置。
但是,您应该移除static
修饰符,使其具有Tile
修改强>
从您的以下评论中获得更好的理解,使用draw()
函数:
方法1 :如果我们希望绘制函数为static
:
public static void draw(Tile tile){ //To draw the tile
if(stack>0){
c.setColor(Color.red);
c.fillRect(tile.x*78+1 + tile.x, tile.y*78+1+tile.y, 78, 78);
//Calculate coordinates
}
else{
c.setColor(Color.blue);
c.fillRect(tile.x*78+1 + tile.x, tile.y*78+1+tile.y, 78, 78);
}
}
您可以通过Tile.draw(tile)
调用此功能;其中tile
是Tile
方法2:如果draw(Title tile)
函数是非静态的:您根本不需要传递tile
实例:
public void draw(){ //To draw the tile
if(stack>0){
c.setColor(Color.red);
c.fillRect(tile.x*78+1 + tile.x, tile.y*78+1+tile.y, 78, 78);
//Calculate coordinates
}
else{
c.setColor(Color.blue);
c.fillRect(tile.x*78+1 + tile.x, tile.y*78+1+tile.y, 78, 78);
}
}
然后创建一个实例Tile title = new Title()
并调用title.draw()
答案 1 :(得分:0)
您已将x,y,z标记为静态,因此您的类的所有实例都使用相同的实例,只需删除静态关键字