- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我一直在尝试找出一种方法来计算每次有人在我制作的井字游戏 GUI 游戏中获胜的时间。我已经制定了方法来检查 tic tac toe 棋盘上是否有 X 或 O 的任何获胜组合。我只是困惑于如何在每次调用 checkWinsX 和 checkWinsO 时进行计数。我尝试制作另一种方法,为 X 或 O 添加一个点,但我有点失败了,哈哈。
public class ticTacToeFrame extends javax.swing.JFrame {
int turn = 0; //Deterines the turn
int winsX; //Tracks total wins for X
int winsO; //Tracks total wins for O
public ticTacToeFrame() {
initComponents();
}
public void clearAll() {
ulBUT.setText("");
umBUT.setText("");
urBUT.setText("");
mlBUT.setText("");
centerBUT.setText("");
mrBUT.setText("");
llBUT.setText("");
lmBUT.setText("");
lrBUT.setText("");
statusTF.setText("");
}
////////////////////////////////////////////////////////////////////////
// I tried to make something of this sort multiple times here to count the checkWins, and so far this is the one that would seem to start off the best in my head
////////////////////////////////////////////////////////////////////////
public static int wins() {
int winsX = 0;
int winsO = 0;
}
public void checkWinX(int wins) {
//Top row horizontal check for winning
if (ulBUT.getText().equals("X") && umBUT.getText().equals("X") && urBUT.getText().equals("X")) {
statusTF.setText("X Wins Horizontally In The Top Row!");
}
//Middle row horizontal check for winning
else if (mlBUT.getText().equals("X") && centerBUT.getText().equals("X") && mrBUT.getText().equals("X")) {
statusTF.setText("X Wins Horizontally In The Middle Row!");
}
//Bottom row horizontal check for winning
else if (llBUT.getText().equals("X") && lmBUT.getText().equals("X") && lrBUT.getText().equals("X")) {
statusTF.setText("X Wins Horizontally In The Bottom Row!");
}
//Diagonal check for winning
else if (ulBUT.getText().equals("X") && centerBUT.getText().equals("X") && lrBUT.getText().equals("X")) {
statusTF.setText("X Wins Diagonnaly!");
}
else if (urBUT.getText().equals("X") && centerBUT.getText().equals("X") && llBUT.getText().equals("X")) {
statusTF.setText("X Wins Diagonnaly!");
}
}
public void checkWinO() {
//Top row horizontal check for winning
if (ulBUT.getText().equals("O") && umBUT.getText().equals("O") && urBUT.getText().equals("O")) {
statusTF.setText("O Wins Horizontally In The Top Row!");
}
//Middle row horizontal check for winning
else if (mlBUT.getText().equals("O") && centerBUT.getText().equals("O") && mrBUT.getText().equals("O")) {
statusTF.setText("O Wins Horizontally In The Middle Row!");
}
//Bottom row horizontal check for winning
else if (llBUT.getText().equals("O") && lmBUT.getText().equals("O") && lrBUT.getText().equals("O")) {
statusTF.setText("O Wins Horizontally In The Bottom Row!");
}
//Diagonal check for winning
else if (ulBUT.getText().equals("O") && centerBUT.getText().equals("O") && lrBUT.getText().equals("O")) {
statusTF.setText("O Wins Diagonnaly!");
}
else if (urBUT.getText().equals("O") && centerBUT.getText().equals("O") && llBUT.getText().equals("O")) {
statusTF.setText("O Wins Diagonnaly!");
}
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
ulPAN = new javax.swing.JPanel();
ulBUT = new javax.swing.JButton();
umBUT = new javax.swing.JButton();
urBUT = new javax.swing.JButton();
mlBUT = new javax.swing.JButton();
centerBUT = new javax.swing.JButton();
mrBUT = new javax.swing.JButton();
llBUT = new javax.swing.JButton();
lmBUT = new javax.swing.JButton();
lrBUT = new javax.swing.JButton();
statusTF = new javax.swing.JTextField();
oWinsTF = new javax.swing.JTextField();
xWinsTF = new javax.swing.JTextField();
resetGameBUT = new javax.swing.JButton();
turnTF = new javax.swing.JTextField();
tiesTF1 = new javax.swing.JTextField();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("Tic Tac Toe | John Gironda");
setBackground(new java.awt.Color(87, 87, 87));
ulPAN.setLayout(new java.awt.GridLayout(3, 3));
ulBUT.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
ulBUTActionPerformed(evt);
}
});
ulPAN.add(ulBUT);
umBUT.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
umBUTActionPerformed(evt);
}
});
ulPAN.add(umBUT);
urBUT.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
urBUTActionPerformed(evt);
}
});
ulPAN.add(urBUT);
mlBUT.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
mlBUTActionPerformed(evt);
}
});
ulPAN.add(mlBUT);
centerBUT.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
centerBUTActionPerformed(evt);
}
});
ulPAN.add(centerBUT);
mrBUT.setToolTipText("");
mrBUT.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
mrBUTActionPerformed(evt);
}
});
ulPAN.add(mrBUT);
llBUT.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
llBUTActionPerformed(evt);
}
});
ulPAN.add(llBUT);
lmBUT.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
lmBUTActionPerformed(evt);
}
});
ulPAN.add(lmBUT);
lrBUT.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
lrBUTActionPerformed(evt);
}
});
ulPAN.add(lrBUT);
statusTF.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
statusTFActionPerformed(evt);
}
});
oWinsTF.setText("Total O Wins: 0");
oWinsTF.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
oWinsTFActionPerformed(evt);
}
});
xWinsTF.setText("Total X Wins: 0");
xWinsTF.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
xWinsTFActionPerformed(evt);
}
});
resetGameBUT.setText("RESET");
resetGameBUT.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
resetGameBUTActionPerformed(evt);
}
});
turnTF.setText("Turn: X");
turnTF.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
turnTFActionPerformed(evt);
}
});
tiesTF1.setText("Total Ties: 0");
tiesTF1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
tiesTF1ActionPerformed(evt);
}
});
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(16, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(ulPAN, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 400, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(layout.createSequentialGroup()
.addComponent(statusTF)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(xWinsTF, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addComponent(turnTF, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(tiesTF1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(oWinsTF, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE))))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(resetGameBUT, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(16, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(16, 16, 16)
.addComponent(ulPAN, javax.swing.GroupLayout.PREFERRED_SIZE, 350, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(154, 154, 154)
.addComponent(resetGameBUT, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(xWinsTF, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(statusTF, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(oWinsTF, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(tiesTF1, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(30, 30, 30)
.addComponent(turnTF, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(16, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
private void ulBUTActionPerformed(java.awt.event.ActionEvent evt) {
if (ulBUT.getText().equals("")) {
if (turn % 2 == 0) {
ulBUT.setText("X");
} else {
ulBUT.setText("O");
}
turn++;
checkWinX();
checkWinO();
}
}
private void umBUTActionPerformed(java.awt.event.ActionEvent evt) {
if (umBUT.getText().equals("")) {
if (turn % 2 == 0) {
umBUT.setText("X");
} else {
umBUT.setText("O");
}
turn++;
checkWinX();
checkWinO();
}
}
private void urBUTActionPerformed(java.awt.event.ActionEvent evt) {
if (urBUT.getText().equals("")) {
if (turn % 2 == 0) {
urBUT.setText("X");
} else {
urBUT.setText("O");
}
turn++;
checkWinX();
checkWinO();
}
}
private void mlBUTActionPerformed(java.awt.event.ActionEvent evt) {
if (mlBUT.getText().equals("")) {
if (turn % 2 == 0) {
mlBUT.setText("X");
} else {
mlBUT.setText("O");
}
turn++;
checkWinX();
checkWinO();
}
}
private void centerBUTActionPerformed(java.awt.event.ActionEvent evt) {
if (centerBUT.getText().equals("")) {
if (turn % 2 == 0) {
centerBUT.setText("X");
} else {
centerBUT.setText("O");
}
turn++;
checkWinX();
checkWinO();
}
}
private void mrBUTActionPerformed(java.awt.event.ActionEvent evt) {
if (mrBUT.getText().equals("")) {
if (turn % 2 == 0) {
mrBUT.setText("X");
} else {
mrBUT.setText("O");
}
turn++;
checkWinX();
checkWinO();
}
}
private void llBUTActionPerformed(java.awt.event.ActionEvent evt) {
if (llBUT.getText().equals("")) {
if (turn % 2 == 0) {
llBUT.setText("X");
} else {
llBUT.setText("O");
}
turn++;
checkWinX();
checkWinO();
}
}
private void lmBUTActionPerformed(java.awt.event.ActionEvent evt) {
if (lmBUT.getText().equals("")) {
if (turn % 2 == 0) {
lmBUT.setText("X");
} else {
lmBUT.setText("O");
}
turn++;
checkWinX();
checkWinO();
}
}
private void lrBUTActionPerformed(java.awt.event.ActionEvent evt) {
if (lrBUT.getText().equals("")) {
if (turn % 2 == 0) {
lrBUT.setText("X");
} else {
lrBUT.setText("O");
}
turn++;
checkWinX();
checkWinO();
}
}
private void resetGameBUTActionPerformed(java.awt.event.ActionEvent evt) {
clearAll();
}
private void statusTFActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void xWinsTFActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void oWinsTFActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void turnTFActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void tiesTF1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(ticTacToeFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(ticTacToeFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(ticTacToeFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(ticTacToeFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ticTacToeFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton centerBUT;
private javax.swing.JButton llBUT;
private javax.swing.JButton lmBUT;
private javax.swing.JButton lrBUT;
private javax.swing.JButton mlBUT;
private javax.swing.JButton mrBUT;
private javax.swing.JTextField oWinsTF;
private javax.swing.JButton resetGameBUT;
private javax.swing.JTextField statusTF;
private javax.swing.JTextField tiesTF1;
private javax.swing.JTextField turnTF;
private javax.swing.JButton ulBUT;
private javax.swing.JPanel ulPAN;
private javax.swing.JButton umBUT;
private javax.swing.JButton urBUT;
private javax.swing.JTextField xWinsTF;
// End of variables declaration
}
最佳答案
我必须告诉你,你的做法完全错误。从游戏模型开始
public class TicTacToeModel {
Boolean[][] board; //use Boolean class rather than boolean primative so you can set board spaces that haven't been taken yet null
public void setSpace (int x, int y, boolean isX) throws SpaceTakenException { ... }
public boolean getSpace(int x, int y) { ... }
public Boolean calculateWinner() { ... } // calculate if there's a winner, and return its Boolean value if so. Otherwise null
}
完成并运行后,您可以根据您的模型调整 GUI。
关于java - 如何计算 Java 程序中 X 和 O 的获胜次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61787569/
在使用 requests 库中的状态代码时,我遇到了一些奇怪的事情。每个 HTTP 状态代码都有一个常量,有些具有别名(例如,包括 200 的复选标记): url = 'https://httpbin
这是我得到的代码,但我不知道这两行是什么意思: o[arr[i]] = o[arr[i]] || {}; o = o[arr[i]]; 完整代码: var GLOBAL={}; GLOBAL.name
所以这个问题的答案What is the difference between Θ(n) and O(n)? 指出“基本上,当我们说算法是 O(n) 时,它也是 O(n2)、O(n1000000)、O
这是一个快速的想法;有人会说 O(∞) 实际上是 O(1) 吗? 我的意思是它不依赖于输入大小? 所以在某种程度上它是恒定的,尽管它是无限的。 或者是唯一“正确”的表达方式 O(∞)? 最佳答案 无穷
这是真的: log(A) + log(B) = log(A * B) [0] 这也是真的吗? O(log(A)) + O(log(B)) = O(log(A * B)) [1] 据我了解 O(f
我正在解决面试练习的问题,但我似乎无法找出以下问题的时间和空间复杂度的答案: Given two sorted Linked Lists, merge them into a third list i
我了解 Big-Oh 表示法。但是我该如何解释 O(O(f(n))) 是什么意思呢?是指增长率的增长率吗? 最佳答案 x = O(n)基本上意味着 x <= kn对于一些常量 k . 因此 x = O
我正在编写一个函数,该函数需要一个对象和一个投影来了解它必须在哪个字段上工作。 我想知道是否应该使用这样的字符串: const o = { a: 'Hello There' }; funct
直觉上,我认为这三个表达式是等价的。 例如,如果一个算法在 O(nlogn) + O(n) 或 O(nlogn + n) 中运行(我很困惑),我可以假设这是一个O(nlogn) 算法? 什么是真相?
根据 O'Reilly 的 Python in a Nutshell 中的 Alex Martelli,复杂度类 O(n) + O(n) = O(n)。所以我相信。但是我很困惑。他解释说:“N 的两个
O(n^2)有什么区别和 O(n.log(n)) ? 最佳答案 n^2 的复杂性增长得更快。 关于big-o - 大 O 符号 : differences between O(n^2) and O(n
每当我收到来自 MS outlook 的电子邮件时,我都会收到此标记 & nbsp ; (没有空格)哪个显示为?在 <>. 当我将其更改为 ISO-8859-1 时,浏览器页面字符集编码为 UTF-8
我很难理解 Algorithms by S. Dasgupta, C.H. Papadimitriou, and U.V. Vazirani - page 24 中的以下陈述它们将 O(n) 的总和表
我在面试蛋糕上练习了一些问题,并在问题 2给出的解决方案使用两个单独的 for 循环(非嵌套),解决方案提供者声称他/她在 O(n) 时间内解决了它。据我了解,这将是 O(2n) 时间。是我想错了吗,
关于 Java 语法的幼稚问题。什么 T accept(ObjectVisitorEx visitor); 是什么意思? C# 的等价物是什么? 最佳答案 在 C# 中它可能是: O Accept(
假设我有一个长度为 n 的数组,我使用时间为 nlogn 的排序算法对它进行了排序。得到这个排序后的数组后,我遍历它以找到任何具有线性时间的重复元素。我的理解是,由于操作是分开发生的,所以时间是 O(
总和 O(1)+O(2)+ .... +O(n) 的计算结果是什么? 我在某处看到它的解决方案: O(n(n+1) / 2) = O(n^2) 但我对此并不满意,因为 O(1) = O(2) = co
这个问题在这里已经有了答案: 11 年前关闭。 Possible Duplicate: Plain english explanation of Big O 我想这可能是类里面教的东西,但作为一个自学
假设我有两种算法: for (int i = 0; i 2)更长的时间给定的一些n - 其中n这种情况的发生实际上取决于所涉及的算法 - 对于您的具体示例, n 2)分别时间,您可能会看到: Θ(n)
这个问题在这里已经有了答案: Example of a factorial time algorithm O( n! ) (4 个回答) 6年前关闭。 我见过表示为 O(X!) 的 big-o 示例但
我是一名优秀的程序员,十分优秀!