当前位置: 首页 > 知识库问答 >
问题:

基于回合的游戏Java(Stratego)

万高轩
2023-03-14

所以我有JXButton[][]数组(gridLayout),每个JXButton都有一个图标,一个播放器所属的片段,并且有一个MouseListener

我目前正在努力使战略游戏(两个球员-我处理两者)。我设置了图标,碎片和一个碎片应该如何移动。

现在我希望让它轮流播放。

    public void makeHidden(int iD){

            if(iD==1){
                for (int i=0;i<8;i++){
                    for(int y=0;y<10;y++){
                        if(allbuttons[i][y].getPlayerID()==iD){
                            tmp1[i][y]=allbuttons[i][y].getIcon();
                            allbuttons[i][y].setIcon(new ImageIcon(pieceimgsB[12]));
                        }
                    }

                }
            }
            else if(iD==2){
                for (int i=0;i<8;i++){
                    for(int y=0;y<10;y++){
                        if(allbuttons[i][y].getPlayerID()==iD){
                            tmp2[i][y]=allbuttons[i][y].getIcon();
                            allbuttons[i][y].setIcon(new ImageIcon(pieceimgsR[12]));
                        }
                    }

                }
            }
        }
 public void restoreHidden(int iD){
        if(iD==1){
            for (int i=0;i<8;i++){
                for(int y=0;y<10;y++){
                    if(allbuttons[i][y].getPlayerID()==iD){

                        allbuttons[i][y].setIcon(tmp1[i][y]);
                    }
                }

            }
        }
        else if(iD==2){
            for (int i=0;i<8;i++){
                for(int y=0;y<10;y++){
                    if(allbuttons[i][y].getPlayerID()==iD){

                        allbuttons[i][y].setIcon(tmp2[i][y]);
                    }
                }

            }
        }
    }

我的思想Makehidded播放器2件当播放器1转动时隐藏。

restorehidded应该改变图标时,播放器2。

如果这两种方法看起来还可以,那么我的问题在于如何实现转向。

public void letsPlay(){
        switch (turn){
            case 1: 

                getsb().makeHidden(2);
                //getsb().restoreHidden(1);
                if(getsb().getPlayerMoved()==true){
                    setTurn(2);
                }
                break;
            case 2:

                getsb().makeHidden(1);
                //getsb().restoreHidden(2);
                if(getsb().getPlayerMoved()==true){

                    setTurn(1);
                    //;
                }
                break;
        }

    }

共有1个答案

段干俊茂
2023-03-14

这似乎是一个XY问题,重点不是让您的侦听器专门管理这样的行为(和其他固有的行为),而是如何设计模块化和易于维护的东西。

我建议你试着通过思考如何设计你的游戏和UI结构来解决你的问题。让我们举一个简单的例子:

首先,你有一个游戏块,它有一个类型和一个玩家,所以你为什么不使用一个特定的对象类型呢?例如:

class PieceType {
  String name;
  String iconName;
}

class Player {
  String name;
}

class Piece {
  PieceType type;
  Player owner;

class BoardCell {
  Piece piece;
}
class Board {
  private BoardCell [][] pieces = new Piece[10][10];

  public BoardCell cellAtPiece(int x, int y) { return pieces[x][y]; }
  /* other functions */
}
class Game {
  Board board;
  Player[] players = new Player[2];
  Player currentPlayer;

  Player getCurrentPlayer() { return currentPlayer; }
  /* other methods, eg turn advance, check for correct position, eat piece etc */
}
class BoardButton extends JXButton {
  final private Game game;
  final private BoardCell cell;

  public BoardButton(Game game, int x, int y) { 
    this.game = game;
    this.cell = game.cellAtPiece(x,y);
  }

  public void refreshIcon() {
    if (cell.piece == null) { setIcon(null); }
    else if (cell.piece.owner != game.getCurrentPlayer()) { setIcon(hidden); }
    else setIcon(cell.piece.type.icon);
  }

  /* other utilities, like checking if a piece can be moved from here for current player and such */
 类似资料:
  • 我正在用Java创建我的第一个游戏。游戏是大富翁。我在纠结如何设计游戏,使其基于回合的结构模型(管理玩家回合)。我想允许一个单一的人控制和一个或多个人工智能控制的玩家玩游戏。 我的具体问题是,我不知道是否要实现一个游戏循环,这意味着一个循环可以管理玩家和与大富翁游戏直接相关的变量,(想想这样的事情,比如提示每个玩家进行他们的回合,增加回合到下一个玩家,或者从每个玩家那里获得骰子滚动--依次)。我指

  • 目前,我正在尝试用Java开发基于2D平铺的侧滚游戏,主要基于David Brackeen的“用Java开发游戏”中的代码和示例 目前地图文件的大小为100x100个图块(每个图块为64x64像素)。我已经将系统配置为仅显示玩家可见的图块。Graphics系统由ScreenManager类管理,该类返回当前BufferStrategy的图形对象,如下所示: ScreenManager.java 来

  • 另外,如果我对制作web客户机感兴趣,在websockets和长轮询之间有什么额外的需要考虑的吗?

  • 所以我是Java编码的新手,我对C#有很好的经验,我知道它们非常相似。我目前正在通过创建一个文本冒险游戏来处理Java,游戏使用案例(案例1、案例2、默认等),目前我正在开发一个保存和加载功能,但我不知道如何保存一个使用案例来进一步编码的分支游戏,有人有什么想法吗?

  • 使用Cocos2D, 模仿QQ连连看写的一个连连看游戏Demo,有声音效果。 [Code4App.com]

  • 利用 cocos2d 制作的一个RPG回合制战斗游戏,包括人物在有障碍物的瓷砖地图中走动、回合制战斗场面,技能效果、抽奖效果。 作者说:(使用本网站代码里面的图片素材,望原作者见谅),算是自己琢磨一个月的总结吧,希望对像我一样的新手有点帮助,高手勿喷。 [Code4App.com]