📄 openlight.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Openlight extends Applet implements MouseListener{
final int BlockSize = 30; // 棋盘格大小
int size = 5; // 棋盘大小
int OpenNum; // 统计打开灯的数量
private byte[][] chess = new byte[size][size]; // 存放灯开关状态
public void ClearGame() // 初始化数据,把灯全灭掉
{
for(int i=0; i< size; i++)for(int j=0; j< size; j++) chess[i][j]=0;
OpenNum=0;
}
public void init()
{
addMouseListener(this); // 增加鼠标监听
ClearGame();
}
public void paint(Graphics g) // 绘制棋盘及说明
{
g.clearRect(0,0,getSize().width,getSize().height); // 先清除画面
g.setColor(Color.black);
for(int i=0; i<= size; i++) // 画棋盘格
{
g.drawLine(0,i*BlockSize,size*BlockSize,i*BlockSize);
g.drawLine(i*BlockSize,0,i*BlockSize,BlockSize * size);
}
g.setColor(Color.cyan);
OpenNum=0;
for(int i=0; i<size; i++) //画当前所有灯的状态及统计数量
for(int j=0; j<size; j++)
if(chess[i][j]==1)
{
OpenNum ++;
g.fillRect(i*BlockSize+1,j*BlockSize+1,BlockSize-2,BlockSize-2);
}
g.setColor(Color.red);
g.drawRect(BlockSize * size + 10,0,60,20);
g.drawString("重新开始",BlockSize * size + 17,16);
g.drawString("亮:"+String.valueOf(OpenNum),BlockSize * size + 17,BlockSize * 3);
g.drawString("灭:"+String.valueOf(size*size-OpenNum),BlockSize * size + 17,BlockSize * 4);
g.setColor(Color.green);
g.drawString("学号:40243046",20,200);
g.drawString("姓名:罗立文",20,220);
g.drawString("班级:02级计算机2班",20,240);
if(OpenNum==size*size) // 如果全亮则显示胜利信息
{
g.setColor(Color.red);
String str=new String("你胜利了!恭喜!");
g.drawString(str,size*BlockSize /2 - str.length()*5,size * BlockSize/2);
}
}
public void update(Graphics g){ paint(g); }
public void stop(){removeMouseListener(this);} // 去掉鼠标监听
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void mousePressed(MouseEvent e) // 处理鼠标按下事件
{
int x = e.getX();
int y = e.getY();
if(x>0 && x<BlockSize * size && y>0 && y<BlockSize * size)
{
int dx=x / BlockSize;
int dy=y / BlockSize;
// 进行状态翻转处理
if(dy-1>=0) // 处理 (x,y-1)的状态
if(chess[dx][dy-1]==1) chess[dx][dy-1]=0;
else chess[dx][dy-1]=1;
if(dx-1>=0) // 处理 (x-1,y)的状态
if(chess[dx-1][dy]==1) chess[dx-1][dy]=0;
else chess[dx-1][dy]=1;
if(chess[dx][dy]==1) chess[dx][dy]=0; // 处理(x,y)的状态
else chess[dx][dy]=1;
if(dx+1<size) // 处理 (x-1,y)的状态
if(chess[dx+1][dy]==1) chess[dx+1][dy]=0;
else chess[dx+1][dy]=1;
if(dy+1<size) // 处理 (x,y+1)的状态
if(chess[dx][dy+1]==1) chess[dx][dy+1]=0;
else chess[dx][dy+1]=1;
}
if(x>BlockSize * size +10 && x<BlockSize * size + 70 && y>0 && y<20) // 按下重新开始按钮
ClearGame();
repaint();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -