【发布时间】:2025-11-26 09:55:02
【问题描述】:
我正在制作一个简单的程序生成地牢,您的角色在房间中生成,房间的门在随机方向上随机打开或关闭。这已经完成了。
当角色离开房间时,它会为新房间生成新的随机数。存储旧房间的号码并在角色向后移动时生成带有这些号码的房间。这部分还没有完成,但是很容易做,但我还不想这样做,因为它会导致下面的问题。
我怎样才能创建一些东西,无论玩家走到哪里都可以存储它并且知道何时使用变量?我怎样才能自动创建这样的变量?
当前代码:
public class Executable extends JFrame implements KeyListener {
Container contentPane=this.getContentPane();
Graphics bufferGraphics;
int xAxis; //Universal Variables:
int yAxis;
int characterX=463;
int characterY=486;
int oldCharacterX=463;
int oldCharacterY=486;
Image characterNorth = CustomImages.createImageIcon("Images/characterNorth.jpg").getImage();
Image characterEast = CustomImages.createImageIcon("Images/characterEast.jpg").getImage();
Image characterSouth = CustomImages.createImageIcon("Images/characterSouth.jpg").getImage();
Image characterWest = CustomImages.createImageIcon("Images/characterWest.jpg").getImage();
Image brickWall = CustomImages.createImageIcon("Images/brickWall.jpg").getImage();
Image brickFloor = CustomImages.createImageIcon("Images/brickFloor.jpg").getImage();
Image character=characterNorth;
boolean pressed=false;
static boolean northDoor;
static boolean eastDoor;
static boolean southDoor;
static boolean westDoor;
static boolean Randomizer=true;
static int north;
static int east;
static int south;
static int west;
static Random r=new Random();
boolean doorOpen=false;
public static void main(String[] args) { //Main
north=r.nextInt(3)+1;
east=r.nextInt(3)+1;
south=r.nextInt(3)+1;
west=r.nextInt(3)+1;
if(north==1) {
northDoor=true;
}else {
northDoor=false;
}
if(east==1) {
eastDoor=true;
}else {
eastDoor=false;
}
if(south==1) {
southDoor=true;
}else {
southDoor=false;
}
if(west==1) {
westDoor=true;
}else {
westDoor=false;
}
Executable e=new Executable();
}
public Executable() { //Canvas
this.setBounds(0, 0, 1680, 1050);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addKeyListener(this);
setFocusable(true);
requestFocusInWindow();
}
public void paint(Graphics g) { //Paint
for(xAxis=58;xAxis<=858;xAxis=xAxis+50) {
for(yAxis=81;yAxis<=881;yAxis=yAxis+50) {
g.drawImage(brickFloor,xAxis,yAxis,null);
}
yAxis=31;
}
for(xAxis=8;xAxis<958;xAxis=xAxis+50) {
g.drawImage(brickWall,xAxis,yAxis,null);
}
yAxis=931;
for(xAxis=8;xAxis<=908;xAxis=xAxis+50) {
g.drawImage(brickWall,xAxis,yAxis,null);
}
xAxis=8;
for(yAxis=81;yAxis<=881;yAxis=yAxis+50) {
g.drawImage(brickWall,xAxis,yAxis,null);
}
xAxis=908;
for(yAxis=81;yAxis<=881;yAxis=yAxis+50) {
g.drawImage(brickWall,xAxis,yAxis,null);
}
while(!doorOpen) {
if(northDoor==false && eastDoor==false && southDoor==false && westDoor==false) {
north=r.nextInt(3)+1;
east=r.nextInt(3)+1;
south=r.nextInt(3)+1;
west=r.nextInt(3)+1;
if(north==1) {
northDoor=true;
}else {
northDoor=false;
}
if(east==1) {
eastDoor=true;
}else {
eastDoor=false;
}
if(south==1) {
southDoor=true;
}else {
southDoor=false;
}
if(west==1) {
westDoor=true;
}else {
westDoor=false;
}
}else {
doorOpen=true;
}
}
if(northDoor) {
g.drawImage(brickFloor,458,31,null);
}
if(eastDoor) {
g.drawImage(brickFloor,908,481,null);
}
if(southDoor) {
g.drawImage(brickFloor,458,931,null);
}
if(westDoor) {
g.drawImage(brickFloor,8,481,null);
}
g.drawImage(character,characterX,characterY,null);
}
@Override
public void keyPressed(KeyEvent arg0) { //Character rotation and movement.
if(pressed==false) {
pressed=true;
if(arg0.getKeyCode() == KeyEvent.VK_W){
if(character==characterNorth) {
if(characterY>86 && characterX>13 && characterX<913) {
characterY=characterY-50;
}else if(northDoor && characterX==463) {
oldCharacterY=characterY;
characterY=characterY-50;
}
}else {
character=characterNorth;
}
}
if(arg0.getKeyCode() == KeyEvent.VK_A){
if(character==characterWest && characterY>36 && characterY<926) {
if(characterX>63) { //and y is greater than and less than
oldCharacterX=characterX;
characterX=characterX-50;
}else if(westDoor && characterY==486) {
oldCharacterX=characterX;
characterX=characterX-50;
}
}else {
character=characterWest;
}
}
if(arg0.getKeyCode() == KeyEvent.VK_S){
if(character==characterSouth) {
if(characterY<871 && characterX>13 && characterX<913) {
oldCharacterY=characterY;
characterY=characterY+50;
}else if(southDoor && characterX==463) {
oldCharacterY=characterY;
characterY=characterY+50;
}
}else {
character=characterSouth;
}
}
if(arg0.getKeyCode() == KeyEvent.VK_D){
if(character==characterEast && characterY>36 && characterY<926) {
if(characterX<848) { //and y is greater than and less than
oldCharacterX=characterX;
characterX=characterX+50;
}else if(eastDoor && characterY==486) {
oldCharacterX=characterX;
characterX=characterX+50;
}
}else {
character=characterEast;
}
}
repaint(oldCharacterX,oldCharacterY,40,40);
repaint(characterX,characterY,40,40);
}
}
@Override
public void keyReleased(KeyEvent arg0) { //Prevents keys from being held down.
if(arg0.getKeyCode() == KeyEvent.VK_W){
pressed=false;
}
if(arg0.getKeyCode() == KeyEvent.VK_A){
pressed=false;
}
if(arg0.getKeyCode() == KeyEvent.VK_S){
pressed=false;
}
if(arg0.getKeyCode() == KeyEvent.VK_D){
pressed=false;
}
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
【问题讨论】:
标签: java eclipse procedural