Java applet 井字游戏——怎样重新开始?(留问题)

今天在课本上看到applet井字小游戏的源码,但是并没有重新开始这个功能,我这边准备编写一个isRepaint()方法来弹出对话框询问玩家是否重新开始,但是不会初始化游戏,留待以后解决。

如果有路过的高手大大,望不吝赐教,青竹感激不尽!

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;

@SuppressWarnings("serial")
public class TicTacToe extends JApplet{

private char whoseTurn = ‘X‘;

//Create and initialize cells(单元格)
private Cell[][] cells = new Cell[3][3];

//Create and initialize a status label
private JLabel jlblStatus = new JLabel("X‘s turn to play");

//initialize UI
public TicTacToe(){
JPanel p = new JPanel(new GridLayout(3,3,0,0));
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
p.add(cells[i][j] = new Cell());

p.setBorder(new LineBorder(Color.red,1));
jlblStatus.setBorder(new LineBorder(Color.yellow,1));

add(p,BorderLayout.CENTER);
add(jlblStatus,BorderLayout.SOUTH);
}

/**Determine whether the cells are all occupied*/
public boolean isFull(){
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
if(cells[i][j].getToken() == ‘ ‘)
return false;

return true;
}

/**Determine whether the player with the specified token wins*/
public boolean isWon(char token){
for(int i=0;i<3;i++)
if((cells[i][0].getToken() == token)
&& (cells[i][1].getToken() == token)
&& (cells[i][2].getToken() == token)){
return true;
}

for(int j=0;j<3;j++)
if((cells[0][j].getToken() == token)
&& (cells[1][j].getToken() == token)
&& (cells[2][j].getToken() == token)){
return true;
}

if((cells[0][0].getToken() == token)
&& (cells[1][1].getToken() == token)
&& (cells[2][2].getToken() == token)){
return true;
}

if((cells[0][2].getToken() == token)
&& (cells[1][1].getToken() == token)
&& (cells[2][0].getToken() == token)){
return true;
}

return false;
}

//An inner class Cell for a cell
public class Cell extends JPanel{
//Token used for this cell
private char token = ‘ ‘;

public Cell(){
setBorder(new LineBorder(Color.black,1));
addMouseListener(new MyMouseListener()); //register listener
}

/**Return token*/
public char getToken(){
return token;
}

/**Set a new token*/
public void setToken(char c){
token = c;
repaint();
}

/**Paint the cell*/
protected void paintComponent(Graphics g){
super.paintComponent(g);

if(token == ‘X‘){
g.drawLine(10, 10, getWidth()-10, getHeight()-10);
g.drawLine(getWidth()-10, 10, 10, getHeight()-10);
}
else if(token == ‘O‘){
g.drawOval(10, 10, getWidth()-20, getHeight()-20);
}
}

private class MyMouseListener extends MouseAdapter{
/**handle mouse click on a cell*/
public void mouseClicked(MouseEvent e){
//If cell is empty and game is not over
if(token == ‘ ‘ && whoseTurn != ‘ ‘){
setToken(whoseTurn); //Set token in the cell

//Check game status
if(isWon(whoseTurn)){
jlblStatus.setText(whoseTurn+" won!The game is over");
whoseTurn = ‘ ‘; //Game is over
isRepaint();
}
else if(isFull()){
jlblStatus.setText("Draw!The Game is over");
whoseTurn = ‘ ‘;
}
else{
//change the turn
whoseTurn = (whoseTurn == ‘X‘)?‘O‘:‘X‘;
//Display whose turn
jlblStatus.setText(whoseTurn + "‘s turn");
}
}
}
}
public void isRepaint(){
int res = JOptionPane.showConfirmDialog(null, "是否重新开始游戏", "Game over", JOptionPane.YES_NO_OPTION);
if(res == JOptionPane.YES_OPTION){
//这样并不能初始化,,,
new TicTacToe();
new Cell();
repaint();
}else{
return;
}
}
}
}

时间: 2024-10-11 19:01:31

Java applet 井字游戏——怎样重新开始?(留问题)的相关文章

JAVA运行环境 和 Java Applet的运行环境 的区别

Java小程序,也就是Java Applet,可以在Web浏览器中运行.Java Applet必须以<applet>脚本的形式嵌入到HTML页面中,才能在web浏览器中运行. 之前总以为本地安装了JDK,指定好JAVA_HOME和PATH环境变量,所有的Java程序就都可以运行了,后来有个同事让我帮他解决web浏览器中不能运行一个项目管理软件的甘特图时,才发现Java Applet和一般的Java应用的运行环境配置是不一样的. 在Windows上运行Java应用程序,只要有JDK的二进制目录,

Java Applet实现五子棋游戏

从谷歌的AlphaGo到腾讯的绝艺,从人脸识别到无人驾驶,从谷歌眼镜到VR的兴起,人工智能领域在不断的向前迈进,也在不断深入的探索.但背后错综复杂的技术和利益成本也是很多企业亟待解决的难题.对于人工智能,我们可能还帮不上什么忙,但我相信以后的人工智能技术会越来越开源,也会提供给我们便捷开发的接口.由围棋大战引发的思考才是我们今天的主题,我们今天是利用Java Applet窗口应用程序来实现五子棋的一个小游戏,最基础的一个版本,主要回顾一下Applet的应用以及Graphics画图技术. 首先,我

小代码 &nbsp; 验证java applet

/**************************************************   WZ   ASUST  2016  备注: 必要的配置 运行java文件后产生 class文件最后运行浏览器 需要删除原有的class文件 而且浏览器具有记忆功能 需要关闭再来 等待3秒就能在基本页面加载后加载APPLET java控制台 然后必要时请点击运行. **************************************************/ import java.

Java Applet给ActiveX跪下了

耸人听闻!Java Applet又不是人,怎么能跪下呢?就是跪下,又怎么能给ActiveX这个手下败将跪下呢? 曾几何时,Java Applet把ActiveX踩在了脚底下.ActiveX不安全,而Java Applet因为虚拟机的技术,能够构造Sandbox,Java Applet可以在SandBox里面运行,而Sandbox可以排除Java Applet的任何危险动作,诸如针对本地文件的IO等等.正因如此,当然也因为Java阵营的添油加醋的造势和炒作,弄得大多数的公司把自己的防火墙配置成禁止

Java网页小程序——Java Applet

Java Applet是编译过的Java程序,可以在所以支持Java的浏览器中运行. 1.Applet的使用 import java.applet.Applet; import java.awt.Graphics; public class AppletDemo extends Applet { @Override public void paint(Graphics g) { g.drawString("Hello Applet!", 5, 30);//绘制文本 g.drawArc(

使用Java Applet在客户端解压缩,以及使用证书的意义

以前解压缩是用Java Applet在客户端解压缩.但是现在Chrome不支持Nt API了,不得不把Java去掉,在服务器里解压缩.风险在于,解压缩以后,传输的是原始文件,有被截获的可能.以前之所以这么做,在于只有Java可以在客户端做这个工作,而JS不行. 之所以使用Java证书,并且年年更新,是因为避免出现Applet在浏览器里的提示框,就为这么一小步工作,所以技术上要加入证书,费用上每年付费250欧元.

[Java] Applet

1. Applet 类 Applet 类在使用时没有main()方法,不能独立运行,必须嵌入到网页中,在网页上显示各种信息和效果.所以Applet 类用于网页交互的应用较为普遍.我们一般把Java Applet 程序称为Java 小程序 Applet 类在java.applet 包中,在使用时必须加载该包 Applet 类的定义形式: public class Applet extends Panel 2. Apple 类中的方法 生命周期方法:public void init() 用于初始化,

Java Applet:练习TextField类和TextArea类的文本事件

出自: Java语言与面向程序程序设计(第二版) 第七章第五节P223 1. [代码]java代码 /** *这个程序主要来练习文本事件,当在文本框(TextField)中输入文字时,会在文本域(TextField) *同步显示输入的文字 */ import java.applet.*; import java.awt.*; import java.awt.event.*; public class myApplet extends Applet implements ActionListene

Java Applet 基础

Java Applet 基础 Applet 是一种 Java 程序.它一般运行在支持 Java 的 Web 浏览器内.因为它有完整的 Java API支持,所以Applet 是一个全功能的 Java 应用程序. 如下所示是独立的 Java 应用程序和 applet 程序之间重要的不同: Java 中 Applet 类继承了 java.applet.Applet 类. Applet 类没有定义 main(),所以一个 Applet 程序不会调用 main() 方法. Applet 被设计为嵌入在一