java鼠标移动事件的问题 1C

做了一个“方块躲避弹球”的实验。 方块是随鼠标移动的。将执行代码放在main方法中可以正常执行,
但新写了一个“开始”的MenuItem,点击后发现 方块不能随鼠标移动了!! 求大神告知一下原因 T T(下面是设计的主要代码,我贴出来了)
创建菜单,点击开始
鼠标移动事件
鼠标移动返回最新坐标
main方法,直接用creatBall可以,用CreatMenu就移动不了了。。

1个回答

移动事件的问题 1C
做了一个“方块躲避弹球”的实验。 方块是随鼠标移动的。将执行代码放在main方法中可以正常执行,
但新写了一个“开始”的MenuItem,点击后发现 方块不能随鼠标移动了!! 求大神告知一下原因 T T(下面是设计的主要代码,我贴出来了)
创建菜单,点击开始

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于java swing鼠标单机事件的问题

关于java swing鼠标单机事件的问题关于java swing鼠标单机事件的问题关于java swing鼠标单机事件的问题关于java swing鼠标单机事件的问题关于java swing鼠标单机事件的问题关于java swing鼠标单机事件的问题

Java swing 实现对电脑屏幕的鼠标移动事件和键盘输入的监控

通俗点就是一个程序,能够对电脑屏幕上鼠标移动的事件和键盘输入的ascii值进行监控,本人一开始写了一个,但是只是在我的程序cs端内的范围有效,如何实现对整个屏幕的监控,有大神知道吗?

java Swing 关于鼠标移动到JButton按钮上背景会跟随着移动的次数慢慢变白的问题?

java Swing 关于鼠标移动到JButton按钮上背景会跟随着移动的次数慢慢变白的问题? ![图片说明](https://img-ask.csdn.net/upload/201710/19/1508404877_9374.jpg) ![图片说明](https://img-ask.csdn.net/upload/201710/19/1508404887_392629.jpg) ![图片说明](https://img-ask.csdn.net/upload/201710/19/1508404896_362473.jpg)

Java键盘移动事件怎么实现转换图片的功能!!!

做一个类似于捕鱼达人这样的游戏但是写炮台的时候不知道怎么写了 我的大概思路: 定义一个i=0;做为索引号通过键盘事件加或减取数组里面的图片 但我现在运行出来的结果是: 数组越界还有图片不换![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/50.gif) 好急的![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/50.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/50.gif)![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/50.gif)![图片](https://img-ask.csdn.net/upload/201701/12/1484151039_305114.jpg)

鼠标移动时的坐标问题

C#编程,我建了个窗体,里面放了几个按钮,我想实现鼠标移动时显示鼠标坐标的功能,但是当鼠标移动到按钮上时,就不能显示当前所在窗体的坐标了,怎么做才能让鼠标移动时忽略按钮继续显示鼠标的坐标呢?

关于Java鼠标监听器的问题

我按网上的鼠标监听器的内部类的方法写的结构,但是不知道为什么用鼠标之后没有结果,麻烦各位大神帮我看看 新人第一次用这个提问,关于提问的方式或者表述不清楚也欢迎大家指正啊 谢谢大家!!! buttonListener是Map1的内部类 ``` import javax.swing.*; public class test { public static void main(String[] args){ JFrame frame=new Map1(); frame.setVisible(true); new Map1(); } } ``` ``` import javax.swing.JFrame; import javax.swing.*; import java.awt.GridLayout; import java.awt.*; import java.awt.event.*; public class Map1 extends JFrame { ImageIcon bank1 = new ImageIcon("bank1.jpg");//为按钮加载图片 ImageIcon bank2 = new ImageIcon("bank2.jpg"); ImageIcon plank1 = new ImageIcon("plank1.jpg"); ImageIcon plank1_man = new ImageIcon("plank1_man.jpg"); ImageIcon plank2 = new ImageIcon("plank2.jpg"); ImageIcon plank2_man = new ImageIcon("plank2_man.jpg"); ImageIcon stump1 = new ImageIcon("stump1.jpg"); ImageIcon stump1_man = new ImageIcon("stump1_man.jpg"); ImageIcon stump2 = new ImageIcon("stump2.jpg"); ImageIcon stump2_man = new ImageIcon("stump2_man.jpg"); ImageIcon stump3 = new ImageIcon("stump3.jpg"); ImageIcon stump3_man = new ImageIcon("stump3_man.jpg"); ImageIcon water1 = new ImageIcon("water1.jpg"); ImageIcon water2 = new ImageIcon("water2.jpg"); ImageIcon water3 = new ImageIcon("water3.jpg"); ImageIcon water4 = new ImageIcon("water4.jpg"); JButton[][] button=new JButton[13][9];//创建按钮对象 public int xmove; public int ymove; public int xdecide=4; public int ydecide=12; public int decide[][]={ {0,0,0,0,0,0,0,0,0},//小人是1 {0,0,0,0,0,0,0,0,0},//木桩子是q2 {2,0,0,0,0,0,0,0,0},//桥是3 {0,0,0,0,0,0,0,0,0}, {0,0,0,0,2,0,0,0,0}, {0,0,0,0,0,0,0,0,0}, {2,0,2,3,3,3,2,0,0}, {0,0,0,0,0,0,0,0,0}, {2,0,0,0,2,0,0,0,0}, {3,0,0,0,3,0,0,0,0}, {2,0,0,0,3,0,0,0,0}, {0,0,0,0,3,0,0,0,0}, {0,0,0,0,1,0,0,0,0}, }; public Map1() { setSize(300,450);//设置大小 //JButton[][] button=new JButton[13][9];//创建按钮对象 JPanel panel=new JPanel(); setTitle("RiverCrossing"); this.add(panel); panel.setLayout(new GridLayout(13,9,0,0)); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); for(int a=0;a<9;a++) { button[0][a]=new JButton(bank2); } for(int a=0;a<9;a++) { button[12][a]=new JButton(bank1); } for(int a=1;a<12;a++) { for(int b=0;b<9;b++) { button[a][b]=new JButton(water1); } } //下面是第一个地图的(这些跟问题没关) button[2][0]=new JButton(stump1); button[6][0]=new JButton(stump1); button[8][0]=new JButton(stump1); button[10][0]=new JButton(stump1); button[3][1]=new JButton(water4); button[5][1]=new JButton(water3); button[5][2]=new JButton(water4); button[6][2]=new JButton(stump1); button[8][2]=new JButton(water4); button[2][4]=new JButton(water4); button[4][4]=new JButton(stump1); button[8][4]=new JButton(stump1); button[3][6]=new JButton(water3); button[6][6]=new JButton(stump1); button[12][4]=new JButton(stump2_man); button[0][4]=new JButton(stump3); button[9][0]=new JButton(plank2); button[9][4]=new JButton(plank2); button[10][4]=new JButton(plank2); button[11][4]=new JButton(plank2); buttonListener btListener[][]=new buttonListener[13][9];//创建监听器 for(int a=0;a<13;a++) { for(int b=0;b<9;b++) { panel.add(button[a][b]); button[a][b].addMouseListener(btListener[a][b]);//给监听器加到按钮 //System.out.printf("21"); } } } public class buttonListener implements MouseListener { public void mouseReleased(MouseEvent e) { System.out.printf("1"); outterloop:if(e.getButton() == MouseEvent.BUTTON1)//左键该执行的操作(移动小人) { for(ymove=0;ymove<13;ymove++)//行的位置 { for(xmove=0;xmove<9;xmove++)//列的位置 { if(e.getSource()==button[ymove][xmove])//点击的那个按钮的坐标 { //move(button,ymove,xmove); ymove=0; xmove=0; break outterloop; } } } } } public void mousePressed(MouseEvent e) { } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } } } ```

JAVA界面程序为什么无法快速点击鼠标

我用JAVA做的一个中国象棋人机对弈程序,界面就是用swing编程,通过监听鼠标事件来获取用户点击了哪个棋子,虽然可以正常运行,但如果快速点击鼠标,程序就会卡住不动,这是为什么啊

怎么使JWindow随着鼠标移动

<p> </p> <p style="text-align: left;">写了一个继承JFrame的类,设置了this.setUndecorated(true);</p> <p>出现了像Jwindow的样式,但是当添加了鼠标事件后,</p> <p>编程后窗体无法随鼠标移动,请大家帮忙解决!谢谢</p>

button需要鼠标移动到才会显示出来 为什么啊?

button需要鼠标移动到才会显示出来 为什么啊 import java.awt.BorderLayout; import java.awt.Container; import java.awt.FlowLayout; import javax.swing.*; public class tetrisGUI{ public void lauch() { ImageIcon back =new ImageIcon("C:\\Users\\18301\\Desktop\\tetris1.png"); JLabel label=new JLabel(back); label.setBounds(0, 0, back.getIconWidth(), back.getIconHeight()); JFrame frame=new JFrame("Tetris"); frame.getLayeredPane().add(label, Integer.MIN_VALUE); JPanel j=(JPanel)frame.getContentPane(); j.setOpaque(false); JPanel panel=new JPanel(); JButton single=new JButton("单人模式"); JButton create=new JButton("创建房间"); JButton enter=new JButton("进入房间"); panel.add(single); panel.add(create); panel.add(enter); panel.setOpaque(false); j.setLayout(new BorderLayout()); // 内容窗格默认的布局管理器为BorderLayout j.add(panel,BorderLayout.SOUTH); frame.getLayeredPane().setLayout(null); // 把背景图片添加到分层窗格的最底层作为背景 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(back.getIconWidth(), back.getIconHeight()); frame.setResizable(true); //frame.pack(); frame.setVisible(true); } public static void main(String[] args) { tetrisGUI t=new tetrisGUI(); t.lauch(); } }

Java 中Robot类的mouseMove不能正确移动

前一天还好的,第二天发现 只运行到以一个move,打开了其他软件的界面,然后鼠标就不动了,我手动点回Eclipse界面,鼠标又开始继续执行了 ``` robot = new Robot(); //点开了另一个软件然后鼠标就一直停留在这 robot.mouseMove(513, 1060); robot.delay(500); robot.mousePress(KeyEvent.BUTTON1_DOWN_MASK); robot.mouseRelease(KeyEvent.BUTTON1_DOWN_MASK); robot.delay(500); -----到这里鼠标就不会移动了 robot.mouseMove(972, 35); robot.delay(500); robot.mousePress(KeyEvent.BUTTON1_DOWN_MASK); robot.mouseRelease(KeyEvent.BUTTON1_DOWN_MASK); robot.delay(500); ``` 然后我在第二个move下加了个输出,发现已经执行了,但鼠标位置没变 后来试了下,在MyEclipse界面能够正常移动,切换到其他界面就出现上述情况

关于android实现鼠标移动点击等问题

要实现一个 类似 飞鼠 这的功能 利用悬浮框实现了飞鼠的功能 但是怎么让一个悬浮框去点击啊 比如服务端的悬浮框移动到了一个button上 客户端发送一个down事件过来 怎么让 这个悬浮框去点击那个button啊 有没有做过类似的大神 给个思路 怎么搞啊

swt中如何实现鼠标移动到某个地方显示提示信息

我在界面上当用鼠标点一下就在鼠标点的地方画上一个点 现在我想要做当鼠标移动到这个点的时候就在鼠标旁边显示出这个点的坐标! if (e.type == SWT.MouseDown) { Point point = new Point(); point.setX(e.x); point.setY(e.y); gc.drawPoint(point.getX(), point.getY()); } 点是画上去的。如何在点上加上鼠标监听事件·!!!

java中的键盘监听器失效问题

package com.tarena.swing; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JFrame; import javax.swing.JPanel; public class TestListener extends JPanel { public void action(){ KeyAdapter k=new KeyAdapter() { public void keyReleased(KeyEvent k){ System.out.println("sssss"); } }; this.addKeyListener(k); MouseAdapter l=new MouseAdapter() { public void mouseMoved(MouseEvent e){ System.out.println(e.getX()+" ,"+e.getY()); } }; this.addMouseMotionListener(l); } public static void main(String[] args) { JFrame j=new JFrame(); TestListener l=new TestListener(); j.setSize(400,654); j.add(l); j.setVisible(true); j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); j.setAlwaysOnTop(true); l.action(); } } ``` ``` 为TestSwing添加键盘监听事件和鼠标移动监听事件 但是键盘的监听失效 只有鼠标移动的能在控制台输出鼠标坐标 ``` ```

java Jframe 都设置undecorated为True,鼠标拖动事件失败

java Jframe 我再NetBeans中创建两个窗口,一个登录一个主窗口。都设置undecorated为True。同事都对窗口进行鼠标拖动的设置,但是为什么只有登录可以,主窗口不行呢?求大神指点迷津

webDriver如何让鼠标移动到定位的坐标上(求大佬们指导一二)

![图片说明](https://img-ask.csdn.net/upload/202004/07/1586251925_991155.png) 会不会是返回值的类型不对 或是局部强制转换没有带到下面去??? 大佬们求帮助

JavaFX关于鼠标事件的问题,求大神帮忙

如何编写两个程序,一个当单击鼠标时显示鼠标位置,另一个当按下鼠标时显示鼠标的位置,当释放时停止显示

如何给JTree添加鼠标监听(注意,不是JTree自带那个几个,比如selection)

就像题目那样,能给源代码最好,谢谢 就像题目那样,能给源代码最好,谢谢 就像题目那样,能给源代码最好,谢谢 就像题目那样,能给源代码最好,谢谢

jsp+java裁剪图片鼠标控制div移动放大缩小

最近做了一个头像上传,想做成QQ头像上传那样的,找了各种插件,发现基本上 都是拖动选择区域裁剪图片,并不是我想要的,于是手写了一个纯jquery+java+ajax 的,通过ajax上传到图片并保存到临时文件夹,同时返回图片路径以及宽度高度, 以实现预览效果,鼠标能够拖动图片,能够放大缩小![效果如图](https://img-ask.csdn.net/upload/201708/17/1502959477_513895.png) 但是遗憾的是当图片边框拖动到DIV内部会有留白,这时如果裁剪就会造成选区会超出原图一部分,![如图](https://img-ask.csdn.net/upload/201708/17/1502959824_270867.png) 在此想求一个能够在鼠标拖动和滚轮滚动的时候能够阻止图片边框进入外层DIV的方法,并且不影响下一次拖动和放大缩小,或者有能够在缩放拖动过程中当某一边位置到外层边框的时候将那一边限制其他区域不造成影响

JAVA编写俄罗斯方块问题,键盘监听事件不能响应,请大神指点!!!

本人开发环境,MyEclipse8.5,安装JDK版本为1.7:键盘监听器不能相应。 但如果使用MyEclipse自带的JDK的话,键盘监听事件会有响应,但是需要重新加载JDK,请求大神指点原因!!!程序入口在类Tetris中,键盘监听事件也在此类中 #类Cell ``` package com.MyTetris; import java.awt.image.BufferedImage; public class Cell { private int row; private int col; private BufferedImage image; // 贴图 /** * 构造器 * * @param row * @param col * @param image */ public Cell(int row, int col, BufferedImage image) { super(); // 调用Object构造器 this.row = row; this.col = col; this.image = image; } public int getRow() { return row; } public void setRow(int row) { this.row = row; } public int getCol() { return col; } public void setCol(int col) { this.col = col; } public BufferedImage getImage() { return image; } public void setImage(BufferedImage image) { this.image = image; } /** * 重写toString方法,方便调试 */ public String toString() { return row + "," + col; } public void moveRigth() { col++; } public void moveLeft() { col--; } public void softDrop() { row++; } } ``` #类Tetromino ``` package com.MyTetris; import java.util.Arrays; import java.util.Random; public abstract class Tetromino extends Object { protected Cell[] cells = new Cell[4]; protected Stage[] stages; // 不同的方块旋转所用的数据不一样 protected int index = 10000; // 取第几组数据旋转,index指下标 /** * 用于存储方块旋转时的数据 * * @author Administrator * */ protected class Stage { int row0, col0; int row1, col1; int row2, col2; int row3, col3; public Stage(int row0, int col0, int row1, int col1, int row2, int col2, int row3, int col3) { super(); this.row0 = row0; this.col0 = col0; this.row1 = row1; this.col1 = col1; this.row2 = row2; this.col2 = col2; this.row3 = row3; this.col3 = col3; } } /** * 随机生成7种方块之一,是公共方法 。 工厂方法:用于生产(创建)一个对象的方法,封装了复杂的创建过程,方便使用 用在创建对象过程复杂的情况 */ public static Tetromino randomOne() { Random random = new Random(); int type = random.nextInt(7); // 随机生成[0,7) switch (type) { case 0: return new T(); case 1: return new I(); case 2: return new S(); case 3: return new O(); case 4: return new J(); case 5: return new L(); case 6: return new Z(); } return null; // 必须写,不然编译时报错:编译时不看对象,只看引用类型 } /** * 测试方法,用来测试随机生成方法 */ public String toString() { return Arrays.toString(cells); } /** * 当前对象的4格方块整体向左移动 */ public void moveLeft() { cells[0].moveLeft(); cells[1].moveLeft(); cells[2].moveLeft(); cells[3].moveLeft(); } public void moveRigth() { for (int i = 0; i < cells.length; i++) { cells[i].moveRigth(); } } public void softDrop() { this.cells[0].softDrop(); this.cells[1].softDrop(); this.cells[2].softDrop(); this.cells[3].softDrop(); } /** * 向右旋转算法 */ public void rotateRigth() { // 1、计算index++ // 2、获取Sn(4组数据0,1,2,3) // 3、获取当前轴 // 4、格子0是轴,不变 // 5、格子1的行列变成:轴+Sn[1] // 6、格子2的行列变成:轴+Sn[2] // 7、格子3的行列变成:轴+Sn[3] index++; Stage s = stages[index % stages.length]; Cell o = cells[0]; int row = o.getRow(); int col = o.getCol(); cells[1].setRow(row + s.row1); cells[1].setCol(col + s.col1); cells[2].setRow(row + s.row2); cells[2].setCol(col + s.col2); cells[3].setRow(row + s.row3); cells[3].setCol(col + s.col3); } public void rotateLeft() { index--; Stage s = stages[index % stages.length]; Cell o = cells[0]; int row = o.getRow(); int col = o.getCol(); cells[1].setRow(row + s.row1); cells[1].setCol(col + s.col1); cells[2].setRow(row + s.row2); cells[2].setCol(col + s.col2); cells[3].setRow(row + s.row3); cells[3].setCol(col + s.col3); } } class T extends Tetromino { public T() { /** * 格子的出场位置 */ cells[0] = new Cell(0, 4, Tetris.T); cells[1] = new Cell(0, 3, Tetris.T); cells[2] = new Cell(0, 5, Tetris.T); cells[3] = new Cell(1, 4, Tetris.T); stages = new Stage[4]; stages[0] = new Stage(0, 0, 0, -1, 0, 1, 1, 0); // s0 stages[1] = new Stage(0, 0, -1, 0, 1, 0, 0, -1); // s1 stages[2] = new Stage(0, 0, 0, 1, 0, -1, -1, 0); // s2 stages[3] = new Stage(0, 0, 1, 0, -1, 0, 0, 1); // s3 } } class I extends Tetromino { public I() { cells[0] = new Cell(0, 4, Tetris.I); cells[1] = new Cell(0, 3, Tetris.I); cells[2] = new Cell(0, 5, Tetris.I); cells[3] = new Cell(0, 6, Tetris.I); stages = new Stage[2]; stages[0] = new Stage(0, 0, 0, -1, 0, 1, 0, 2); stages[1] = new Stage(0, 0, -1, 0, 1, 0, 2, 0); } } class S extends Tetromino { public S() { cells[0] = new Cell(0, 4, Tetris.S); cells[1] = new Cell(0, 5, Tetris.S); cells[2] = new Cell(1, 3, Tetris.S); cells[3] = new Cell(1, 4, Tetris.S); stages = new Stage[2]; stages[0] = new Stage(0, 0, 0, 1, 1, -1, 1, 0); stages[1] = new Stage(0, 0, 1, 0, -1, -1, 0, -1); } } class J extends Tetromino { public J() { cells[0] = new Cell(0, 4, Tetris.J); cells[1] = new Cell(0, 3, Tetris.J); cells[2] = new Cell(0, 5, Tetris.J); cells[3] = new Cell(1, 5, Tetris.J); stages = new Stage[4]; stages[0] = new Stage(0, 0, 0, -1, 0, 1, 1, 1); stages[1] = new Stage(0, 0, -1, 0, 1, 0, 1, -1); stages[2] = new Stage(0, 0, 0, 1, 0, -1, -1, -1); stages[3] = new Stage(00, 0, 1, 0, -1, 0, -1, 1); } } class L extends Tetromino { public L() { cells[0] = new Cell(0, 4, Tetris.L); cells[1] = new Cell(0, 3, Tetris.L); cells[2] = new Cell(0, 5, Tetris.L); cells[3] = new Cell(1, 3, Tetris.L); stages = new Stage[4]; stages[0] = new Stage(0, 0, 0, -1, 0, 1, -1, 1); stages[1] = new Stage(0, 0, -1, 0, 1, 0, 1, 1); stages[2] = new Stage(0, 0, 0, 1, 0, -1, 1, -1); stages[3] = new Stage(0, 0, 1, 0, -1, 0, -1, -1); } } class O extends Tetromino { public O() { cells[0] = new Cell(0, 4, Tetris.O); cells[1] = new Cell(0, 5, Tetris.O); cells[2] = new Cell(1, 4, Tetris.O); cells[3] = new Cell(1, 5, Tetris.O); stages = new Stage[2]; stages[0] = new Stage(0, 0, 0, 1, 1, 0, 1, 1); stages[1] = new Stage(0, 0, 0, 1, 1, 0, 1, 1); } } class Z extends Tetromino { public Z() { cells[0] = new Cell(1, 4, Tetris.Z); cells[1] = new Cell(0, 3, Tetris.Z); cells[2] = new Cell(0, 4, Tetris.Z); cells[3] = new Cell(1, 5, Tetris.Z); stages = new Stage[2]; stages[0] = new Stage(0, 0, -1, -1, -1, 0, 0, 1); stages[1] = new Stage(0, 0, -1, 1, 0, 1, 1, 0); } } ``` #类Tetris ``` package com.MyTetris; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.image.BufferedImage; import java.util.Arrays; import java.util.Timer; import java.util.TimerTask; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel; public class Tetris extends JPanel { public static final int ROWS = 20; public static final int COLS = 10; /** 墙 */ private Cell[][] wall = new Cell[ROWS][COLS]; /** 正在下落的方块 */ private Tetromino tetromino; /** 下一个进场的方块 */ private Tetromino nextOne; /** 消失的行数 */ private int lines; /** 得分 */ private int score; /** 定时器 */ private Timer timer; /** 得分表,对应销毁行数得分 */ private int[] souseTable = new int[] { 0, 10, 100, 1000, 10000 }; /** * 在Tetris中添加背景图片引用 */ private static BufferedImage backGround; private static BufferedImage gameOver; public static BufferedImage T; public static BufferedImage I; public static BufferedImage S; public static BufferedImage J; public static BufferedImage L; public static BufferedImage Z; public static BufferedImage O; // 静态代码块 static { try { // 图片加载,注意:Tetris类必须与tetris.png(图片)在一个包中,图片名字不能错 backGround = ImageIO.read(Tetris.class.getResource("tetris.png")); gameOver = ImageIO.read(Tetris.class.getResource("game-over.png")); T = ImageIO.read(Tetris.class.getResource("T.png")); I = ImageIO.read(Tetris.class.getResource("I.png")); S = ImageIO.read(Tetris.class.getResource("S.png")); J = ImageIO.read(Tetris.class.getResource("J.png")); L = ImageIO.read(Tetris.class.getResource("L.png")); O = ImageIO.read(Tetris.class.getResource("O.png")); Z = ImageIO.read(Tetris.class.getResource("Z.png")); } catch (Exception e) { e.printStackTrace(); } } /** * 重写paint方法 */ @Override public void paint(Graphics g) { // background:图片对象;0, 0:图片位置,与画板顶角位置相同,图片有多大,展示多大 // 绘制图片背景 g.drawImage(backGround, 0, 0, null); g.translate(15, 15); // 整体向下漂移 paintWall(g); // 画墙 paintTetromino(g); // 画正在下落的格子 paintNextOne(g); // 画下一个出场的格子 paintScore(g); } /** * 画分数 * * @param g */ public void paintScore(Graphics g) { int x = 294; int y = 160; // 设置分数和销毁行数的字体颜色 g.setColor(new Color(0xD667799)); Font font = new Font(Font.MONOSPACED, Font.BOLD, 28); g.setFont(font); g.drawString("SCORE:" + score, x, y); y += 56; g.drawString("LINES:" + lines, x, y); } /** * 封装绘制正在下落的格子的算法 */ public void paintTetromino(Graphics g) { if (tetromino == null) { return; } Cell[] cells = tetromino.cells; for (int i = 0; i < cells.length; i++) { // cells指下落的所有格子 // 将正在下落的某一个格子的引用赋值给cell Cell cell = cells[i]; int x = cell.getCol() * CELL_SIZE; int y = cell.getRow() * CELL_SIZE; g.drawImage(cell.getImage(), x, y, null); } } /** * 绘制下一个要出场的格子的算法 */ public void paintNextOne(Graphics g) { if (nextOne == null) { return; } Cell[] cells = nextOne.cells; for (int i = 0; i < cells.length; i++) { Cell cell = cells[i]; int x = (cell.getCol() + 10) * CELL_SIZE; int y = (cell.getRow() + 1) * CELL_SIZE; g.drawImage(cell.getImage(), x, y, null); } } /** * 封装了绘制墙的算法 */ private static final int CELL_SIZE = 26; private void paintWall(Graphics g) { for (int row = 0; row < wall.length; row++) { for (int col = 0; col < wall[row].length; col++) { Cell cell = wall[row][col]; int x = col * CELL_SIZE; int y = row * CELL_SIZE; if (cell == null) { g.drawRect(x, y, CELL_SIZE, CELL_SIZE); } else { g.drawImage(cell.getImage(), x, y, null); } } } } /** * @param args */ public static void main(String[] args) { System.out.println("1111"); JFrame frame = new JFrame("Tetris"); Tetris tetris = new Tetris(); // Tetris继承了JPanel,所以Tetris就是面板 frame.add(tetris); frame.setSize(541, 588); frame.setLocationRelativeTo(null); /** * 设置默认关闭操作 operation操作 */ frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); // 尽快调用paint()方法 tetris.action(); } /** * 添加软件启动(action)方法 */ public void action() { // wall[1][8] = new Cell(0, 0, T); // wall[8][2] = new Cell(0, 0, J); // Tetromino引用了randomOne创建的对象 tetromino = Tetromino.randomOne(); nextOne = Tetromino.randomOne(); this.repaint(); // 重新绘制界面,尽快自动自动调用paint()方法 KeyListener l = new KeyAdapter() { public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); switch (key) { case KeyEvent.VK_RIGHT: // tetromino.moveRigth(); System.out.println("按下->键"); Tetris.this.moveRigthAction(); break; case KeyEvent.VK_LEFT: // tetromino.moveLeft(); moveLeftAction(); break; case KeyEvent.VK_DOWN: // tetromino.softDrop(); softDropAction(); break; case KeyEvent.VK_SPACE: hardDropAction(); break; case KeyEvent.VK_UP: // tetromino.rotateRigth(); rotateRigthAction(); } repaint(); } }; this.addKeyListener(l); this.setFocusable(true); // 添加定时任务,让方块定时下落 timer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { softDropAction(); repaint(); } }; timer.schedule(task, 1000, 1000); } /** * 变形方法 */ public void rotateRigthAction() { tetromino.rotateRigth(); if (outOfBounds() || coincide()) { tetromino.rotateLeft(); } } /** * 正在下落的4格方块右移 */ public void moveRigthAction() { // 正在下落的方块右移 tetromino.moveRigth(); // 判断是否出界;coincide:重合;检查4格方块是否与墙上方块是否重合 if (outOfBounds() || coincide()) { // 如果出界,立刻左移 tetromino.moveLeft(); } } /** * 正在下落的4格方块左移 */ public void moveLeftAction() { tetromino.moveLeft(); if (outOfBounds() || coincide()) { tetromino.moveRigth(); } } /** * 检查正在下落的格子是否出界 * * @return */ public boolean outOfBounds() { // 正在下落的4个格子中任意一个格子出界,就是出界 Cell[] cells = tetromino.cells; for (int i = 0; i < cells.length; i++) { Cell cell = cells[i]; int row = cell.getRow(); int col = cell.getCol(); if (row < 0 || row >= ROWS || col < 0 || col >= COLS) { return true; } } return false; } /** * 判断格子是否重合 * * @return */ public boolean coincide() { Cell[] cells = tetromino.cells; for (int i = 0; i < cells.length; i++) { Cell cell = cells[i]; int row = cell.getRow(); int col = cell.getCol(); if (wall[row][col] != null) { return true; } } return false; } /** * 下落方法,直接下落到底部,并且进入到墙内 */ public void hardDropAction() { while (canDrop()) { tetromino.softDrop(); } landIntoWall(); int lines = destroyLines(); this.lines += lines; this.score += souseTable[lines]; if (!isGameOver()) { tetromino = nextOne; nextOne = tetromino.randomOne(); } } /** * 下落方法,一格一格的下落 */ public void softDropAction() { // 1、如果4格方块能下落,就下落 // 2、如果不能下落,就着陆到墙里面 // 3、检查行是否满,销毁已经慢的行 // 4、检查游戏是否结束,如果没有结束,就产生下一个方块 if (canDrop()) { tetromino.softDrop(); } else { this.landIntoWall(); int lines = destroyLines(); // 计算销毁的行数 this.lines = this.lines + lines; // 计算得分 this.score = this.score + souseTable[lines]; if (!isGameOver()) { tetromino = nextOne; nextOne = tetromino.randomOne(); } } } /** * 检查方块是否能够下落 */ private boolean canDrop() { // 1、4格方块的任意一个格子的行达到19,就不能下落 // 2、4格方块的任意一个格子,对应墙上的下方出现格子,则不能下落 // 3、先判断第一 种情况,不然会出现下标越界的错误 Cell[] cells = tetromino.cells; for (int i = 0; i < cells.length; i++) { Cell cell = cells[i]; int row = cell.getRow(); if (row == ROWS - 1) { return false; } } // 判断格子下方的墙上是否有格子 for (int i = 0; i < cells.length; i++) { Cell cell = cells[i]; int row = cell.getRow(); int col = cell.getCol(); if (wall[row + 1][col] != null) { return false; } } return true; } /** * 着陆到墙里面 */ private void landIntoWall() { // 获取每个格子的行、列,根据每个格子的位置,将格子订到墙上 Cell[] cells = tetromino.cells; for (Cell cell : cells) { int row = cell.getRow(); int col = cell.getCol(); wall[row][col] = cell; } } /** * 销毁已经满的行,返回销毁行数 */ private int destroyLines() { // 从0~19逐行查找,如果找到满行,就删除这行 int lines = 0; for (int row = 0; row < ROWS; row++) { if (isFullCells(row)) { deleteRow(row); lines++; } } return lines; } /** * 检查row行的格子是否是满的 * * @param row * @return */ private boolean isFullCells(int row) { Cell[] line = wall[row]; /** * for(int i=0;i<line.length;i++){ Cell cell = line[i]; } */ for (Cell cell : line) { if (cell == null) { return false; } } return true; } /** * 删除row行格子 * * @param row */ private void deleteRow(int row) { for (int i = row; i >= 1; i--) { // 复制:从wall[i-1] -> wall[i] System.arraycopy(wall[i - 1], 0, wall[i], 0, COLS); } Arrays.fill(wall[0], null); } /** * 检查游戏是否结束 */ private boolean isGameOver() { // 如果下一个方块没有出场位置了,则游戏结束:就是下一个出场的方块每个格子行列对应的墙上位置如果有方块,就游戏结束 Cell[] cells = nextOne.cells; for (int i = 0; i < cells.length; i++) { Cell cell = cells[i]; int row = cell.getRow(); int col = cell.getCol(); if (wall[row][col] != null) { return true; } } return false; } } ```

程序员的兼职技能课

获取讲师答疑方式: 在付费视频第一节(触摸命令_ALL)片头有二维码及加群流程介绍 限时福利 原价99元,今日仅需39元!购课添加小助手(微信号:csdn590)按提示还可领取价值800元的编程大礼包! 讲师介绍: 苏奕嘉&nbsp;前阿里UC项目工程师 脚本开发平台官方认证满级(六级)开发者。 我将如何教会你通过【定制脚本】赚到你人生的第一桶金? 零基础程序定制脚本开发课程,是完全针对零脚本开发经验的小白而设计,课程内容共分为3大阶段: ①前期将带你掌握Q开发语言和界面交互开发能力; ②中期通过实战来制作有具体需求的定制脚本; ③后期将解锁脚本的更高阶玩法,打通任督二脉; ④应用定制脚本合法赚取额外收入的完整经验分享,带你通过程序定制脚本开发这项副业,赚取到你的第一桶金!

Windows版YOLOv4目标检测实战:训练自己的数据集

课程演示环境:Windows10; cuda 10.2; cudnn7.6.5; Python3.7; VisualStudio2019; OpenCV3.4 需要学习ubuntu系统上YOLOv4的同学请前往:《YOLOv4目标检测实战:训练自己的数据集》 课程链接:https://edu.csdn.net/course/detail/28745 YOLOv4来了!速度和精度双提升! 与 YOLOv3 相比,新版本的 AP (精度)和 FPS (每秒帧率)分别提高了 10% 和 12%。 YOLO系列是基于深度学习的端到端实时目标检测方法。本课程将手把手地教大家使用labelImg标注和使用YOLOv4训练自己的数据集。课程实战分为两个项目:单目标检测(足球目标检测)和多目标检测(足球和梅西同时检测)。 本课程的YOLOv4使用AlexyAB/darknet,在Windows系统上做项目演示。包括:安装软件环境、安装YOLOv4、标注自己的数据集、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算)和先验框聚类分析。还将介绍改善YOLOv4目标检测性能的技巧。 除本课程《Windows版YOLOv4目标检测实战:训练自己的数据集》外,本人将推出有关YOLOv4目标检测的系列课程。请持续关注该系列的其它视频课程,包括: 《Windows版YOLOv4目标检测实战:人脸口罩佩戴检测》 《Windows版YOLOv4目标检测实战:中国交通标志识别》 《Windows版YOLOv4目标检测:原理与源码解析》

lena全身原图(非256*256版本,而是全身原图)

lena全身原图(非256*256版本,而是全身原图) lena原图很有意思,我们通常所用的256*256图片是在lena原图上截取了头部部分的256*256正方形得到的. 原图是花花公子杂志上的一个

快速入门Android开发 视频 教程 android studio

这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

Java调用微信支付

Java 使用微信支付 一. 准备工作 1.

汽车租赁管理系统需求分析规格说明书

汽车租赁管理系统需求分析规格说明书,这只是一个模板,如果有不会的可以借鉴一下,还是蛮详细的。。。。

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

程序员的算法通关课:知己知彼(第一季)

【超实用课程内容】 程序员对于算法一直又爱又恨!特别是在求职面试时,算法类问题绝对是不可逃避的提问点!本门课程作为算法面试系列的第一季,会从“知己知彼”的角度,聊聊关于算法面试的那些事~ 【哪些人适合学习这门课程?】 求职中的开发者,对于面试算法阶段缺少经验 想了解实际工作中算法相关知识 在职程序员,算法基础薄弱,急需充电 【超人气讲师】 孙秀洋&nbsp;| 服务器端工程师 硕士毕业于哈工大计算机科学与技术专业,ACM亚洲区赛铜奖获得者,先后在腾讯和百度从事一线技术研发,对算法和后端技术有深刻见解。 【课程如何观看?】 PC端:https://edu.csdn.net/course/detail/27272 移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程无限观看时长,但是大家可以抓紧时间学习后一起讨论哦~

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

Python入门视频精讲

Python入门视频培训课程以通俗易懂的方式讲解Python核心技术,Python基础,Python入门。适合初学者的教程,让你少走弯路! 课程内容包括:1.Python简介和安装 、2.第一个Python程序、PyCharm的使用 、3.Python基础、4.函数、5.高级特性、6.面向对象、7.模块、8.异常处理和IO操作、9.访问数据库MySQL。教学全程采用笔记+代码案例的形式讲解,通俗易懂!!!

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

Java62数据提取代码

利用苹果手机微信下面的wx.data文件提取出62数据,通过62可以实现不同设备直接登陆,可以通过文件流的方式用脚本上传到服务器进行解析

Python代码实现飞机大战

文章目录经典飞机大战一.游戏设定二.我方飞机三.敌方飞机四.发射子弹五.发放补给包六.主模块 经典飞机大战 源代码以及素材资料(图片,音频)可从下面的github中下载: 飞机大战源代码以及素材资料github项目地址链接 ————————————————————————————————————————————————————————— 不知道大家有没有打过飞机,喜不喜欢打飞机。当我第一次接触这个东西的时候,我的内心是被震撼到的。第一次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每

2018年全国大学生计算机技能应用大赛决赛 大题

2018年全国大学生计算机技能应用大赛决赛大题,程序填空和程序设计(侵删)

Lena图像处理测试专业用图,高清完整全身原图

Lena图像处理测试专业用图,高清完整全身原图,该图片很好的包含了平坦区域、阴影和纹理等细节,这些都有益于测试各种不同的图像处理算法。它是一幅很好的测试照片!其次,由于这是一个非常有魅力女人的照片。

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

verilog实现地铁系统售票

使用 verilog 实现地铁售票

Python+OpenCV计算机视觉

Python+OpenCV计算机视觉系统全面的介绍。

Python可以这样学(第四季:数据分析与科学计算可视化)

董付国老师系列教材《Python程序设计(第2版)》(ISBN:9787302436515)、《Python可以这样学》(ISBN:9787302456469)配套视频,在教材基础上又增加了大量内容,通过实例讲解numpy、scipy、pandas、statistics、matplotlib等标准库和扩展库用法。

150讲轻松搞定Python网络爬虫

【为什么学爬虫?】 &nbsp; &nbsp; &nbsp; &nbsp;1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到! &nbsp; &nbsp; &nbsp; &nbsp;2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 &nbsp; 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

获取Linux下Ftp目录树并逐步绑定到treeview

在linux下抓取目录树,双击后获取该节点子节点(逐步生成)。另外有两个类,一个是windows下的(一次性获取目录树),一个是linux下的(足部获取目录树)

YOLOv3目标检测实战系列课程

《YOLOv3目标检测实战系列课程》旨在帮助大家掌握YOLOv3目标检测的训练、原理、源码与网络模型改进方法。 本课程的YOLOv3使用原作darknet(c语言编写),在Ubuntu系统上做项目演示。 本系列课程包括三门课: (1)《YOLOv3目标检测实战:训练自己的数据集》 包括:安装darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 (2)《YOLOv3目标检测:原理与源码解析》讲解YOLOv1、YOLOv2、YOLOv3的原理、程序流程并解析各层的源码。 (3)《YOLOv3目标检测:网络模型改进方法》讲解YOLOv3的改进方法,包括改进1:不显示指定类别目标的方法 (增加功能) ;改进2:合并BN层到卷积层 (加快推理速度) ; 改进3:使用GIoU指标和损失函数 (提高检测精度) ;改进4:tiny YOLOv3 (简化网络模型)并介绍 AlexeyAB/darknet项目。

手把手实现Java图书管理系统(附源码)

【超实用课程内容】 本课程演示的是一套基于Java的SSM框架实现的图书管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的java人群。详细介绍了图书管理系统的实现,包括:环境搭建、系统业务、技术实现、项目运行、功能演示、系统扩展等,以通俗易懂的方式,手把手的带你从零开始运行本套图书管理系统,该项目附带全部源码可作为毕设使用。 【课程如何观看?】 PC端:https://edu.csdn.net/course/detail/27513 移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程2年有效观看时长,大家可以抓紧时间学习后一起讨论哦~ 【学员专享增值服务】 源码开放 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化

微信小程序开发实战之番茄时钟开发

微信小程序番茄时钟视频教程,本课程将带着各位学员开发一个小程序初级实战类项目,针对只看过官方文档而又无从下手的开发者来说,可以作为一个较好的练手项目,对于有小程序开发经验的开发者而言,可以更好加深对小程序各类组件和API 的理解,为更深层次高难度的项目做铺垫。

Java 最常见的 200+ 面试题:面试必备

这份面试清单是从我 2015 年做了 TeamLeader 之后开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘在 Java 技术栈中,还有那些知识点是我不知道的,我想找到这些技术盲点,然后修复它,以此来提高自己的技术水平。虽然我是从 2009 年就开始参加编程工作了,但我依旧觉得自己现在要学的东西很多,并且学习这些知识,让我很有成就感和满足感,那所以何乐而不为呢? 说回面试的事,这份面试...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

微信小程序 实例汇总 完整项目源代码

微信小程序 实例汇总 完整项目源代码

基于西门子S7—1200的单部六层电梯设计程序,1部6层电梯

基于西门子S7—1200的单部六层电梯设计程序,1部6层电梯。 本系统控制六层电梯, 采用集选控制方式。 为了完成设定的控制任务, 主要根据电梯输入/输出点数确定PLC 的机型。 根据电梯控制的要求,

相关热词 c#中如何设置提交按钮 c#帮助怎么用 c# 读取合并单元格的值 c#带阻程序 c# 替换span内容 c# rpc c#控制台点阵字输出 c#do while循环 c#调用dll多线程 c#找出两个集合不同的
立即提问