一个五子棋程序

这是一个简单的绘图游戏程序,使用Java实现。游戏在一个网格上绘制黑白圆圈,玩家通过鼠标点击来改变圆圈的颜色。该程序包含游戏面板、按钮面板及事件处理等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
* filename: Game.java
*
* author: jellen
*
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
import java.util.*;

class PaintPanel extends JPanel {
ArrayList Items = new ArrayList();

public PaintPanel() {
setLayout(new BorderLayout());
ButtonPanel buttonPanel = new ButtonPanel();
add(buttonPanel, BorderLayout.SOUTH);
addMouseListener(new MouseHandler());
}

public void paintComponent(Graphics g) {
int startX = 50;
int startY = 50;
boolean isMy = false;
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;

for(int i=0; i<16; i++) {
g2.draw(new Line2D.Double(startX, startY+20*i, startX+300, startY+20*i));
g2.draw(new Line2D.Double(startX+20*i, startY, startX+20*i, startY+300));
}
for(int i=0; i<Items.size(); i++) {
isMy = !isMy;
if(isMy)
g2.setColor(Color.BLACK);
else
g2.setColor(Color.WHITE);
g2.fill((Ellipse2D)Items.get(i));
}
}
void myRepaint() {
repaint();
}
private class MouseHandler extends MouseAdapter {
public void mousePressed(MouseEvent event) {
int x = event.getX();
int y = event.getY();
paintItem(x, y);
repaint();
}
void paintItem(int x, int y) {
if(x > 50 && x < 350 && y >50 && y < 350) {
int X = x / 20;
int Y = y / 20;
int centerX = X*20 + 10;
int centerY = Y*20 + 10;
Ellipse2D ellipse = new Ellipse2D.Double();
ellipse.setFrameFromCenter(centerX, centerY, centerX+8, centerY+8);
Items.add(ellipse);
}
}
}
private class ButtonPanel extends JPanel {
public ButtonPanel() {
JButton reset = new JButton("Reset");
add(reset);
JButton quit = new JButton("Quit");
add(quit);

ResetEvent listenerR = new ResetEvent();
reset.addMouseListener(listenerR);
QuitEvent listenerQ = new QuitEvent();
quit.addMouseListener(listenerQ);
}

private class QuitEvent
extends MouseAdapter {
public void mouseClicked(MouseEvent event) {
System.exit(1);
}
}

private class ResetEvent
extends MouseAdapter {
public void mouseClicked(MouseEvent event) {
Items.clear();
myRepaint();
}
}
}
}

class GameFrame extends JFrame {
public GameFrame() {
setTitle("A Little Game");
setSize(400, 500);
setResizable(false);

PaintPanel panel = new PaintPanel();
getContentPane().add(panel);
}
} public class Game {
public static void main(String[] args) {
GameFrame frame = new GameFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值