📄 drawpanel.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class DrawPanel extends JPanel // 图形处理,画图类
{
// 用于设置画图面板布局方
BorderLayout borderLayout1 = new BorderLayout();
// 声明布尔型变量v1、v2、v3,用来控制哪个杆被选择,值为true的,对应序号的杆被选
boolean v1 = true, v2 = false, v3 = false;
// 声明用于存储盘子总数的变量plate_num
int plate_num;
盘子类 superPlate[];
// 声明主类对象
主程序 mainframe;
// 声明三个盘子类SuperPlate对象数组,用来分别保存三个杆上的盘子对象
盘子类 superplate1[]; // 柱1上盘子对象
盘子类 superplate2[]; // 柱2上盘子对象
盘子类 superplate3[]; // 柱3上盘子对象
// win判断是否取胜,start判断游戏是否开始
boolean start = false, win = false;
// 声明变量winNum,用来存储最右边杆上的盘子数
int winNum;
// 构造方法,并将主类对象作为参数传递进来
public DrawPanel(主程序 mainframe) {
// 初始化面板布局
this.setLayout(borderLayout1);
// 获取主类对象并保存
this.mainframe = mainframe;
}
// 画图方法
public void paintComponent(Graphics g) {
// 获取Graphics2D对象g_2d,从而进行2D画图
Graphics2D g_2d = (Graphics2D) g;
g_2d.setColor(Color.WHITE);
g_2d.clearRect(0, 0, 400, 400);
// 游戏界面中,设置说明性文字的字体、颜色、位置及内容
BasicStroke bs2 = new BasicStroke(7f, BasicStroke.CAP_SQUARE,
BasicStroke.JOIN_MITER);
g_2d.setStroke(bs2);
g_2d.setColor(Color.BLUE);
g_2d.drawLine(50, 310, 350, 310);
g_2d.setColor(Color.DARK_GRAY);
g_2d.drawString("说明:光标<左><右>键选择柱子,<空格>键移动盘子", 30, 330);
/** ****************对选定杆子的画图操作****************** */
// 柱1被选定画图
if (v1 == true) {
// 用红色画出直线,表示被选中杆
g_2d.setColor(Color.RED);
g_2d.drawLine(100, 303, 100, 100);
g_2d.setColor(Color.BLUE);
g_2d.drawLine(200, 303, 200, 100);
g_2d.drawLine(300, 303, 300, 100);
}
// 柱2被选定画图
else if (v2 == true) {
// 用红色画出直线,表示被选中杆
g_2d.setColor(Color.RED);
g_2d.drawLine(200, 303, 200, 100);
g_2d.setColor(Color.BLUE);
g_2d.drawLine(100, 303, 100, 100);
g_2d.drawLine(300, 303, 300, 100);
}
// 柱2被选定画图
else if (v3 == true) {
// 用红色画出直线,表示被选中杆
g_2d.setColor(Color.RED);
g_2d.drawLine(300, 303, 300, 100);
g_2d.setColor(Color.BLUE);
g_2d.drawLine(100, 303, 100, 100);
g_2d.drawLine(200, 303, 200, 100);
}
// 若游戏开始,则画盘子
if (start == true) {
// 使用直线表示所画盘子,设置盘子的颜色和画盘子直线的样式
g_2d.setColor(Color.GREEN);
BasicStroke bs1 = new BasicStroke(8f, BasicStroke.CAP_ROUND,
BasicStroke.JOIN_ROUND);
g_2d.setStroke(bs1);
// 若柱1上有盘子时,画柱1上的盘子
if (mainframe.s1.isEmpty() == false) {
// 按循环画出柱1上每一个盘子,
for (int i = 0; i < mainframe.s1.size(); i++) {
// 画盘子左半边直线
g_2d.drawLine(superplate1[i].plate_x,
superplate1[i].plate_y, superplate1[i].plate_x
- superplate1[i].plate_width,
superplate1[i].plate_y);
// 画盘子右半边直线
g_2d.drawLine(superplate1[i].plate_x,
superplate1[i].plate_y, superplate1[i].plate_x
+ superplate1[i].plate_width,
superplate1[i].plate_y);
}
}
// 若柱2上有盘子时,画柱2上的盘子
if (mainframe.s2.isEmpty() == false) {
for (int i = 0; i < mainframe.s2.size(); i++) {
g_2d.drawLine(superplate2[i].plate_x,
superplate2[i].plate_y, superplate2[i].plate_x
- superplate2[i].plate_width,
superplate2[i].plate_y);
g_2d.drawLine(superplate2[i].plate_x,
superplate2[i].plate_y, superplate2[i].plate_x
+ superplate2[i].plate_width,
superplate2[i].plate_y);
}
}
// 若柱3上有盘子时,画柱3上的盘子
if (mainframe.s3.isEmpty() == false) // 画柱3上的盘子
{
for (int i = 0; i < mainframe.s3.size(); i++) {
g_2d.drawLine(superplate3[i].plate_x,
superplate3[i].plate_y, superplate3[i].plate_x
- superplate3[i].plate_width,
superplate3[i].plate_y);
g_2d.drawLine(superplate3[i].plate_x,
superplate3[i].plate_y, superplate3[i].plate_x
+ superplate3[i].plate_width,
superplate3[i].plate_y);
}
}
}
// 当游戏胜利后,画游戏胜利画面
if (win == true) // 游戏胜利画面
{
// 设置字体
Font f = new Font("Dialog", Font.ITALIC, 30);
// 清屏
g_2d.setColor(Color.WHITE);
g_2d.clearRect(0, 0, 400, 400);
g_2d.setColor(Color.BLUE);
g_2d.setFont(f);
g_2d.drawString("恭喜你成功完成", 120, 200);
}
}
// 初始化SuperPlate对象,用于初始化盘子数组对象
public void setPlateNum(int x) {
this.plate_num = x;// 测试数据
superplate1 = new 盘子类[plate_num];
superplate2 = new 盘子类[plate_num];
superplate3 = new 盘子类[plate_num];
}
// 数据更新方法
public void updata()
{
// 判断柱1是否有盘子,若有则取出全部盘子对象
if (mainframe.s1.isEmpty() == false) {
// 从vector数组中取对象
for (int i = 0; i < mainframe.s1.size(); i++) {
superplate1[i] = null;
superplate1[i] = (盘子类) mainframe.s1.elementAt(i);// 返回指定索引处的组件。
}
}
// 判断柱2是否有盘子,若有则取出全部盘子对象
if (mainframe.s2.isEmpty() == false) {
for (int i = 0; i < mainframe.s2.size(); i++) {
superplate2[i] = null;
superplate2[i] = (盘子类) mainframe.s2.elementAt(i);
}
}
// 判断柱3是否有盘子,若有则取出全部盘子对象
if (mainframe.s3.isEmpty() == false) {
for (int i = 0; i < mainframe.s3.size(); i++) {
superplate3[i] = null;
superplate3[i] = (盘子类) mainframe.s3.elementAt(i);
}
}
// 判断游戏胜利条件,当柱3上盘子总数为plate_num,设置控制游戏胜利的变量为true
if (winNum == plate_num) {
win = true;
repaint();
}
repaint();
}
// 取得柱3上的盘子总数
public void getWinNum(int t) {
this.winNum = t;// 用来判断是否结束
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -