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

跳棋强迫跳跃

梁宪
2023-03-14

在我的跳棋代码中,我试图让它这样做,每当一个棋子落在它能够跳跃的地方时,它就会被强制跳跃。在我的代码中,它会突出显示你可以跳跃的地方。我已经做了它,这样你就可以跳跃其他棋子之类的,但是我还没有找到一种方法来强迫玩家跳跃。使用布尔值和一种方法更可取的是扫描棋盘进行跳跃并禁用所有的图块,除了正在跳跃的图块和你将要跳跃的图块。

主要类别

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

public class Main extends JFrame implements ActionListener
{
public Tile board[][];
private Container contentPane;
private JButton reset;
private static final Icon b =  new ImageIcon("Black.png");
private static final Icon r =  new ImageIcon("red.png");
private boolean turn1;
private boolean turn2;
private boolean jumpAvailable;
private int count = 0;

public Main()
{
    try 
    {
        // Set cross-platform Java L&F (also called "Metal")
        UIManager.setLookAndFeel(
                UIManager.getCrossPlatformLookAndFeelClassName());
    } 
    catch (UnsupportedLookAndFeelException e) {
        // handle exception
    }
    catch (ClassNotFoundException e) {
        // handle exception
    }
    catch (InstantiationException e) {
        // handle exception
    }
    catch (IllegalAccessException e) {
        // handle exception
    }


    contentPane = getContentPane();
    contentPane.setLayout(null);
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setTitle("Checkers");
    setSize(1430,1280);
    setResizable(false);
    contentPane.setBackground(Color.cyan.darker());

    board = new Tile[8][8];
    for(int x = 0; x < 8; x++)
    {
        for(int y = 0;  y < 8; y++)
        {
            board[x][y] = new Tile(x,y);
            board[x][y].setBounds(25 + (x*150), 25 + (y*150),150,150);
            board[x][y].addActionListener(this);
            board[x][y].setOpaque(true);
            if(x%2 == y%2)
            {
                board[x][y].setBackground(Color.BLACK);
            }
            else
            {
                board[x][y].setBackground(Color.RED);
            }
            contentPane.add(board[x][y]);
            if(x%2 == y/1 - 1)
            {
                board[x][y].setIcon(b);
            }
            if(x%2 == y/1 + 1)
            {
                board[x][y].setIcon(b);
            }
            if(x%2 == y/1 - 7)
            {
                board[x][y].setIcon(r);
            }
            if(x%2 == y/1 - 5)
            {
                board[x][y].setIcon(r);
            }
            turn1=true;
        }
    }

    reset = new JButton("Reset");
    reset.setBounds(1235,150,100,50);
    reset.addActionListener(this);
    contentPane.add(reset);

}

public static void main(String args[])
{
    Main frame = new Main();
    frame.setVisible(true);
}

public void actionPerformed(ActionEvent e)
{
    if(e.getSource()instanceof Tile)
    {
        jumpCheck();
        Tile clicked = (Tile)e.getSource();
        if(clicked==(Tile)e.getSource())
        {
            System.out.println(clicked.getRow() + " " + clicked.getColumn());
            count++;
        }
        for(int x = 0; x < 8; x++)
        {
            for(int y = 0;  y < 8; y++)
            {
                if(turn1)
                {
                    if(clicked==board[x][y] && board[x][y].getIcon()==r && board[x][y].getBackground()==Color.red)
                    {
                        if(clicked==board[x][y] && board[x][y].getRow()!=0 && board[x-1][y-1].getIcon()==r &&board[x+1][y-1].getIcon()==r)
                        {
                            JOptionPane.showMessageDialog(null, "This piece cannot move. Please select another.");
                        }
                        else if(clicked==board[x][y] && board[x][y].getRow()==0 && board[x+1][y-1].getIcon()==r)
                        {
                            JOptionPane.showMessageDialog(null, "This piece cannot move. Please select another.");
                        }
                        else if(clicked==board[x][y] && board[x][y].getRow()==7 && board[x-1][y-1].getIcon()==r)
                        {
                            JOptionPane.showMessageDialog(null, "This piece cannot move. Please select another.");
                        }

                        else if(clicked==board[x][y] && board[x][y].getIcon()==r && board[x+1][y-1].getIcon()==b && board[x+2][y-2].getIcon()==null||clicked==board[x][y] && board[x][y].getIcon()==r && board[x-1][y-1].getIcon()==b && board[x-2][y-2].getIcon()==null)
                        {
                            if(clicked==board[x][y] && board[x][y].getIcon()==r && board[x+1][y-1].getIcon()==b && board[x+2][y-2].getIcon()==null)
                            {
                                board[x][y].setIcon(null);
                                board[x+2][y-2].setBackground(Color.white);
                            }
                            else if(clicked==board[x][y] && board[x][y].getIcon()==r && board[x-1][y-1].getIcon()==b && board[x-2][y-2].getIcon()==null)
                            {
                                board[x][y].setIcon(null);
                                board[x-2][y-2].setBackground(Color.white);
                            }
                        }

                        else
                        {
                            board[x][y].setIcon(null);
                            if(clicked==board[x][y] && clicked.getRow()==0)
                            {
                                board[x+1][y-1].setBackground(Color.white);
                            }
                            else if(clicked==board[x][y] && clicked.getRow()==7)
                            {
                                board[x-1][y-1].setBackground(Color.white);
                            }
                            else
                            {
                                board[x-1][y-1].setBackground(Color.white);
                                board[x+1][y-1].setBackground(Color.white);
                            }
                        }
                    }


                    else if(clicked==board[x][y] && board[x][y].getIcon()==null)
                    {
                        if(clicked==board[x][y] && board[x][y].getBackground()==Color.white)
                        {
                            if(clicked==board[x][y] && board[x][y].getIcon()==null && board[x][y].getBackground()==Color.black)
                            {
                                JOptionPane.showMessageDialog(null, "Please choose a valid place to jump to.");
                            }



                            else if(clicked==board[x][y] && board[x+1][y+1].getIcon()==b)
                            {
                                board[x][y].setIcon(r);
                                turn1=false;
                                turn2=true;
                                board[x][y].setBackground(Color.red);
                                board[x+1][y+1].setIcon(null);
                            }

                            else if(clicked==board[x][y] && board[x-1][y+1].getIcon()==b)
                            {
                                board[x][y].setIcon(r);
                                turn1=false;
                                turn2=true;
                                board[x][y].setBackground(Color.red);
                                board[x-1][y+1].setIcon(null);
                            }

                            else if(clicked==board[x][y] && board[x][y].getBackground()==Color.red||board[x][y].getBackground()==Color.white)
                            {
                                if(count == 1)
                                {
                                    JOptionPane.showMessageDialog(null, "You really should click on a piece if you want to move.");
                                    count = 0;
                                }
                                else
                                {
                                    board[x][y].setIcon(r);
                                    turn1=false;
                                    turn2=true;
                                    board[x][y].setBackground(Color.red);
                                    board[x+2][y].setBackground(Color.red);
                                    board[x-2][y].setBackground(Color.red);
                                    count = 0;
                                }
                            }
                        }
                        else
                        {
                            JOptionPane.showMessageDialog(null, "Please choose a valid place to jump to.");
                        }
                    }


                }


                if(turn2)
                {
                    if(clicked==board[x][y] && board[x][y].getIcon()==b && board[x][y].getBackground()==Color.red)
                    {
                        if(clicked==board[x][y] && board[x][y].getRow()!=0 && board[x-1][y+1].getIcon()==b &&board[x+1][y+1].getIcon()==b)
                        {
                            JOptionPane.showMessageDialog(null, "This piece cannot move. Please select another.");
                        }
                        else if(clicked==board[x][y] && board[x][y].getRow()==0 && board[x+1][y-1].getIcon()==b)
                        {
                            JOptionPane.showMessageDialog(null, "This piece cannot move. Please select another.");
                        }
                        else if(clicked==board[x][y] && board[x][y].getRow()==7 && board[x-1][y+1].getIcon()==b)
                        {
                            JOptionPane.showMessageDialog(null, "This piece cannot move. Please select another.");
                        }

                        else if(clicked==board[x][y] && board[x][y].getIcon()==r && board[x+1][y-1].getIcon()==b && board[x+2][y-2].getIcon()==null||clicked==board[x][y] && board[x][y].getIcon()==r && board[x-1][y-1].getIcon()==b && board[x-2][y-2].getIcon()==null)
                        {
                            if(clicked==board[x][y] && board[x][y].getIcon()==r && board[x+1][y-1].getIcon()==b && board[x+2][y-2].getIcon()==null)
                            {
                                board[x][y].setIcon(null);
                                board[x+2][y-2].setBackground(Color.white);
                            }
                            else if(clicked==board[x][y] && board[x][y].getIcon()==r && board[x-1][y-1].getIcon()==b && board[x-2][y-2].getIcon()==null)
                            {
                                board[x][y].setIcon(null);
                                board[x-2][y-2].setBackground(Color.white);
                            }
                        }

                        else
                        {
                            board[x][y].setIcon(null);
                            if(clicked==board[x][y] && clicked.getRow()==0)
                            {
                                board[x-1][y+1].setBackground(Color.white);
                            }
                            else if(clicked==board[x][y] && clicked.getRow()==7)
                            {
                                board[x+1][y+1].setBackground(Color.white);
                            }
                            else
                            {
                                board[x+1][y+1].setBackground(Color.white);
                                board[x-1][y+1].setBackground(Color.white);
                            }
                        }
                    }

                    else if(clicked==board[x][y] && board[x][y].getIcon()==null)
                    {

                        if(clicked==board[x][y] && board[x][y].getBackground()==Color.white)
                        {
                            if(clicked==board[x][y] && board[x][y].getIcon()==null && board[x][y].getBackground()==Color.black)
                            {
                                JOptionPane.showMessageDialog(null, "Please choose a valid place to jump to.");
                            }

                            else if(clicked==board[x][y] && board[x-1][y-1].getIcon()==r)
                            {
                                board[x][y].setIcon(b);
                                turn2=false;
                                turn1=true;
                                board[x][y].setBackground(Color.red);
                                board[x-1][y-1].setIcon(null);
                            }

                            else if(clicked==board[x][y] && board[x+1][y-1].getIcon()==r)
                            {
                                board[x][y].setIcon(b);
                                turn2=false;
                                turn1=true;
                                board[x][y].setBackground(Color.red);
                                board[x+1][y-1].setIcon(null);
                            }

                            else if(clicked==board[x][y] && board[x][y].getBackground()==Color.red||board[x][y].getBackground()==Color.white)
                            {
                                if(count == 1)
                                {
                                    JOptionPane.showMessageDialog(null, "You really should click on a piece if you want to move.");
                                    count = 0;
                                }
                                else
                                {
                                    board[x][y].setIcon(r);
                                    turn2=false;
                                    turn1=true;
                                    board[x][y].setBackground(Color.red);
                                    board[x+2][y].setBackground(Color.red);
                                    board[x-2][y].setBackground(Color.red);
                                    count = 0;
                                }
                            }
                        }

                        else
                        {
                            JOptionPane.showMessageDialog(null, "Please choose a valid place to jump to.");
                        }
                    }
                }
            }
        }
    }
}

private void jumpCheck()//Where I would like to do force jumping.
{
    for(int x = 0; x < 8; x++)
    {
        for(int y = 0; y < 8; y++)
        {

        }
    }
}
}

结束主类

平铺等级

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;

public class Tile extends JButton
{
public int row;
public int column;
public boolean occupied;
public Icon image;

public Tile(int x, int y)
{
    row = x;
    column = y;
    occupied = false;
    createTile(column, row, occupied);
}

public void createTile(int y, int x, boolean b)
{
    row = x;
    column = y;
    occupied = false;
}

public int setRow()
{
    switch(row)
    {
        case 0: return 1;
        case 1: return 2;
        case 2: return 3;
        case 3: return 4;
        case 4: return 5;
        case 5: return 6;
        case 6: return 7;
        case 7: return 8;
        default: return 0;
    }
}

public int getRow()
{
    return row;
}

public int setColumn() 
{
    switch(column)
    {
        case 0: return 1;
        case 1: return 2;
        case 2: return 3;
        case 3: return 4;
        case 4: return 5;
        case 5: return 6;
        case 6: return 7;
        case 7: return 8;
        default: return 0;
    }
}

public int getColumn()
{
    return column;
}

public void setPiece(Icon piece)
{
    image = piece;
}

public Icon getPiece()
{
    return image;
}

public void setOccupied(boolean b)
{
    occupied = b;
}

public boolean isOccupied()
{
    return occupied;
}
}

结束瓷砖类

你有什么想法或建议吗?

共有1个答案

蒯翰墨
2023-03-14

我在这里看到的最简单的方法是创建一个名为“跳转”的新方法,它可以获得单击的平铺。在这个方法中,你有你的跳跃代码,如果你想强迫玩家跳到某个点,你可以用你想跳到的方块调用这个方法。下面是这个方法的一个示例,其中有一段代码,我认为它是用于跳转的:

private void jumpTo(Tile tileToJumpTo)
       {
          if(tileToJumpTo==board[x][y] && board[x][y].getBackground()==Color.white)
                            {
                                if(tileToJumpTo==board[x][y] && board[x][y].getIcon()==null && board[x][y].getBackground()==Color.black)
                                {
                                    JOptionPane.showMessageDialog(null, "Please choose a valid place to jump to.");
                                }



                                else if(tileToJumpTo==board[x][y] && board[x+1][y+1].getIcon()==b)
                                {
                                    board[x][y].setIcon(r);
                                    turn1=false;
                                    turn2=true;
                                    board[x][y].setBackground(Color.red);
                                    board[x+1][y+1].setIcon(null);
                                }

                                else if(tileToJumpTo==board[x][y] && board[x-1][y+1].getIcon()==b)
                                {
                                    board[x][y].setIcon(r);
                                    turn1=false;
                                    turn2=true;
                                    board[x][y].setBackground(Color.red);
                                    board[x-1][y+1].setIcon(null);
                                }

                                else if(tileToJumpTo==board[x][y] && board[x][y].getBackground()==Color.red||board[x][y].getBackground()==Color.white)
                                {
                                    if(count == 1)
                                    {
                                        JOptionPane.showMessageDialog(null, "You really should click on a piece if you want to move.");
                                        count = 0;
                                    }
                                    else
                                    {
                                        board[x][y].setIcon(r);
                                        turn1=false;
                                        turn2=true;
                                        board[x][y].setBackground(Color.red);
                                        board[x+2][y].setBackground(Color.red);
                                        board[x-2][y].setBackground(Color.red);
                                        count = 0;
                                    }
                                }
          }

我希望这回答了你的问题,对你有所帮助。:)

顺便说一句,我建议您为用户可以执行的每个操作制定一个自己的方法。

 类似资料:
  • 我列出了这两种游戏的相似之处,目的是可能将其扩展到国际象棋,但对我的设计提出质疑。 相似点 件-物料(行、列)在板上的位置 板-nxn片格 游戏-包含棋盘和玩家列表 播放机-播放机名称 差异 在checkers中,您可以在不同的方向上移动,因此我创建了一个名为Checker的独立抽象类,它继承了Piece,并实现了一个返回pieces移动的Moveable接口。所以棋子和国王必须实施这个方法,提供

  • 错误消息: 我正在尝试用java构建一个跳棋游戏(目前在控制台中)。我有6门课: > 板:显示并跟踪板。它是一个名为mySquare的Square对象的2d数组。 CheckerMobile:包含来自X、fromY、toX、toY和布尔isAJump的变量。在Play中,我创建了一个CheckerMobile对象数组来找出哪些移动是有效的。 单件:单个棋盘格件。每个玩家都有一个由12件物品组成的数

  • 嗨,我正在尝试构建一个跳棋游戏,但在计算如何用单个棋子填充2D阵列游戏板时遇到了问题。任何帮助都将不胜感激。 我有两个独立的类RedPiece和BlackPiece来实现接口块。在额外的类板中,我试图将块放在一边,但我遇到了一个问题,在构建新板时找不到可变块: 这是我到目前为止为SetBoard()所做的: 有什么想法吗?谢谢。

  • 本文向大家介绍python微信跳一跳系列之棋子定位颜色识别,包括了python微信跳一跳系列之棋子定位颜色识别的使用技巧和注意事项,需要的朋友参考一下 python微信跳一跳,前言 这是python玩跳一跳系列博文中一篇,主要内容是用颜色识别的方法来进行跳跳小人的定位。 颜色识别 通过观察,我们可以发现,尽管背景和棋子在不停的变化,但跳跳小人的形状和颜色基本保持不变,对于形状,我们在上一篇博文中已

  • 我正在为一项任务做一个跳棋游戏。除了一件奇怪的事之外,整个事情都在按它应该的方式运行。这是我的黑板: 我通过给出源行和列,然后是目标行和列来移动。 如果我试图将一个工件移动到无效的位置(不是对角线),我应该打印出一个错误。所以如果我试着从5.2- 对于大多数情况,它都可以工作,但如果我尝试直接向下移动一个空间(例如,2 3- 我卡住了!你知道为什么会这样吗?如果需要,我可以发布更多代码。

  • 本文向大家介绍python3实现跳一跳点击跳跃,包括了python3实现跳一跳点击跳跃的使用技巧和注意事项,需要的朋友参考一下 借鉴了网上一些大神的代码和思路,这里整理一下写出点击跳跃玩跳一跳这个小游戏的思路 一、整体思路 棋子所在的坐标以及下一步所要到的坐标,根据两个坐标计算出两点之间距离进行跳跃。 二、分布思路 1、根据命令截图获取初始图保存到手机,然后上传到本地文件夹 2、将获取的截图放入新