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;
    }
}

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
用java编写俄罗斯方块的难题不知道怎么解决,求大神帮助!

怎么解决方块下落后,堆积的各种方块颜色的问题? 关键代码部分 //获得方块类型编号 int type=this.dto.getGameAct().getTypeCode(); //打印方块 for (int i = 0; i < points.length; i++) { drawAct(points[i].x,points[i].y,type,g); } //绘制地图 boolean[][] map=this.dto.getGameMap(); //map为 boolean[][] map,如果方块不能再向下移动,该map对面的坐标点就等于true //双重循环来遍历map for (int x = 0; x < map.length; x++) { for (int y = 0; y < map[x].length; y++) { if(map[x][y]){ //画方块的方法,x为map的x坐标,y为map的y坐标,第三个参数是方块的颜色编号 drawAct(x,y,this.dto.getGameAct().getTypeCode(),g); } } } ================================================= 我的问题就是堆积起来的方块怎么能保持各自的颜色![图片说明](https://img-ask.csdn.net/upload/201611/07/1478451556_422135.jpg)

求一个用C语言+SDL编写俄罗斯方块的代码

跪求一个用C语言+SDL编写俄罗斯方块的代码,实在是不理解,求救

用java写了一个键盘监听,实现一张图片的上下左右移动,为什么图片会出现一闪一闪的,大神求解

package Fly; 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.io.File; import java.util.Timer; import java.util.TimerTask; import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swing.JPanel; /** * 1.设置游戏窗口 * 2. * @author q * */ public class OperateFly extends JFrame{ protected static int WIDTH=1000; protected static int HEIGHT=600; private Timer timer; private static int intervel=10; private Flyings flys=new Flyings(); public static BufferedImage fly1; public static BufferedImage background; public static BufferedImage begin_one; public static BufferedImage gameover; public static BufferedImage begin_two; public static BufferedImage begin_three; static{ try{ fly1=ImageIO.read(new File("images/fyls1.png")); background=ImageIO.read(new File("images/background.png")); begin_one=ImageIO.read(new File("images/firstbegin.png")); begin_two=ImageIO.read(new File("images/SecondBegin.png")); begin_three=ImageIO.read(new File("images/ThreeBegin.png")); }catch(Exception e){ e.printStackTrace(); } } public OperateFly(){ //窗口 JPanel panel=new JPanel(); this.setSize(WIDTH, HEIGHT); this.add(panel);//将面板添加到窗口中 this.setAlwaysOnTop(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelativeTo(null); this.setVisible(true); this.addKeyListener(new KeyAdapter(){ @Override public void keyPressed (KeyEvent e) { switch(e.getKeyCode()){ //上移 case KeyEvent.VK_W: case KeyEvent.VK_UP: System.out.println(e.getKeyCode()); flys.moveup(); break; //下移 case KeyEvent.VK_S: case KeyEvent.VK_DOWN: flys.movedown(); break; //左移 case KeyEvent.VK_A: case KeyEvent.VK_LEFT: flys.moveleft(); break; case KeyEvent.VK_D: case KeyEvent.VK_RIGHT: flys.moveright(); break; default: System.out.println(e.getKeyCode()); } } @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub } }); } /* * 画图 */ public void paint(Graphics g){ g.drawImage(background,0,0,WIDTH,HEIGHT,null); paintfly(g); } /*画飞行器*/ public void paintfly(Graphics g){ g.drawImage(fly1,flys.getX(),flys.getY(),flys.getWidth(),flys.getHeight(),null); } public static void main(String[] args){ JFrame frame=new JFrame("FLY"); OperateFly operatefly=new OperateFly(); operatefly.action(); } public void action(){ timer=new Timer(); timer.schedule(new TimerTask(){ @Override public void run() { repaint(); //重画 }},intervel,intervel); } } 下面是Flyings类 package Fly; import java.awt.image.BufferedImage; import FlyingObject.FlyingsObject; /* * 飞行工具类 */ public class Flyings extends FlyingsObject{ private static final int Speedx=2; private static final int Speedy=2; private int life; public Flyings(){ image=OperateFly.fly1; life=3; width=600; height=400; x=598; y=356; } @Override public void moveup() { this.x=x; this.y-=Speedy; if(OutofBoundsY()){ this.y=getY(); } } @Override public void movedown() { this.x=x; this.y+=Speedy; if(OutofBoundsY()){ this.y=getY(); } } @Override public void moveleft() { this.x-=Speedx; this.y=y; if(OutofBoundsY()){ this.x=getX(); } } @Override public void moveright() { this.x+=Speedx; this.y=y; if(OutofBoundsY()){ this.x=getX(); } } /*上下越界判断*/ public boolean OutofBoundsY(){ return this.y>OperateFly.HEIGHT-getHeight()||this.y<0; } /*左右越界判断*/ public boolean OutofBoundsX(){ return this.x>OperateFly.WIDTH-getWidth()||this.x<0; } }

JAVA课程设计简单的俄罗斯方块,急!!!

老师提供的代码: import java.awt.*; import java.awt.event.*; /** * Sample application of Rassia game * * @author Zhefan Jin * @version 1.00 07/05/28 */ class GamePanel extends Frame { /** * The attributes of class GamePanel */ int cellSize =20; int hCellCount =30; int vCellCount =40; int sideSpace =20, bottomSpace=20, upSpace=60; Dimension dimFrame, dimGame; Point GameAreaZero; BlockB activeBlock; //End of attributes private Point Convert2DC(Point p){ Point pReturn =new Point(); pReturn.x =p.x +sideSpace; pReturn.y =dimFrame.height -bottomSpace -p.y; return pReturn; } /** * The constructor. */ public GamePanel() { dimFrame =new Dimension(); dimGame =new Dimension(); GameAreaZero =new Point(); dimFrame.height = upSpace +bottomSpace +vCellCount*cellSize; dimFrame.width = sideSpace*2 + hCellCount*cellSize; GameAreaZero.x = sideSpace; GameAreaZero.y = dimFrame.height -bottomSpace; dimGame.height = vCellCount*cellSize; dimGame.width = hCellCount*cellSize; activeBlock =new BlockB(); System.out.println(dimFrame.toString()); System.out.println(GameAreaZero.toString()); setResizable(false); MenuBar menuBar = new MenuBar(); Menu menuFile = new Menu(); MenuItem menuFileExit = new MenuItem(); MenuItem menuFileStart = new MenuItem(); menuFile.setLabel("File"); menuFileExit.setLabel("Exit"); menuFileStart.setLabel("Start"); // Add action listener.for the menu button menuFileExit.addActionListener ( new ActionListener() { public void actionPerformed(ActionEvent e) { GamePanel.this.windowClosed(); //syntex? } } ); menuFileStart.addActionListener ( new ActionListener() { public 老师的要求: 1. 老师已提供了部分代码,你的目标是按要求完成另一部分代码,最终实现俄罗斯方块游戏的一个局部,效果如下: ![图片说明](https://img-ask.csdn.net/upload/201509/08/1441674790_8849.png) 图 1 2. 具体如下: a) 已提供的代码是Russia.java,这个文件是正确的,不要对它作任何修改。 b) 要求你生成一个新文件BlockB.java,在其中实现类BlockB。Russia.java中使用了BlockB类,如果你的编写都正确,Russia就能正常执行。 c) BlockB.java和Russia.java需放在同一个目录下。按照要求实现BlockB类后,编译这两个文件,然后运行Russia,正确情况下将出现图1效果。 3. BlockB类的要求: a) BlockB类的数据(变量)成员是: i. Point类的对象origin, p0, p1, p2, p3。Point类在java类库的位置是java.awt.Point。(我们在上学期的实验07中使用了Point类。实验07的题目和答案在发下来的资料中供参考。) ii. int类型数据成员gesture,其取值范围0-3,表示4种姿态,具体说明见后。 b) BlockB类的方法(函数)成员如下: i. BlockB() 构造函数。其中对Point类数据成员进行创建(new),并对其它成员变量赋合适的初值。 ii. void setGesture(int g) 设置姿态,包含两个动作:1)用参数g对数据成员gesture进行赋值。2)根据新的姿态,调整p0, p1, p2, p3在Block局部坐标系里的坐标值,坐标说明见后。 iii. void moveTo(int x, int y) 把数据成员origin(原点)移动到窗口坐标系(x,y)位置。 iv. Point getP0() 直接返回p0。 v. Point getP1() 直接返回p1。 vi. Point getP2() 直接返回p2。 vii. Point getP3() 直接返回p3。 4. 关于点的位置、姿态等的说明: a) 坐标系的说明 i. 俄罗斯方块游戏中的活动块称为一个Block(块)。游戏使用两种坐标系:Block局部坐标系和游戏窗口坐标系。 ii. Block局部的坐标系定义了组成Block的4个小方块p0, p1, p2, p3之间的位置关系,如下图: ![图片说明](https://img-ask.csdn.net/upload/201509/08/1441675020_644932.png) 如上图中4个点的坐标可以是:p0(0,0), p1(0,1), p2(0,2), p3(-1,0)。 iii. 一个Block在窗口中的位置由点origin确定,origin是Block坐标系的原点在窗口坐标系中的位置,如下图origin位置是(10, 10): ![图片说明](https://img-ask.csdn.net/upload/201509/08/1441675048_482696.png) b) 姿态(gesture)的说明。一个Block可以有4种姿态,分别用0、1、2、3来表示,每种姿态下点p0、p1、p2、p3的位置是不同的。 ![图片说明](https://img-ask.csdn.net/upload/201509/08/1441675069_836083.png)

JAVA的线程给Jframe添加键盘监听不同时运行

我想用Java写一个俄罗斯方块,其中有一个线程是关于JFrame的键盘监听实现图形的变形,但是监听一直没有同时进行,咋回事。 ``` public class practice1 { public static void main(String[] args) { // RegisterInterface Tetris = new RegisterInterface("俄罗斯方块"); SnakeDemo t = new SnakeDemo(); } } ``` ``` import java.awt.Canvas; import java.awt.Container; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextArea; public class SnakeDemo extends JFrame{ private static final long serialVersionUID = 5671798241966272024L; protected static JFrame game = new JFrame(); protected static Container game1 = game.getContentPane(); private JLabel label1 = new JLabel("分 数:"); private JLabel label2 = new JLabel("所花时间:"); private JLabel label3 = new JLabel("说 明:"); protected static JTextArea explain = new JTextArea("此游戏是一个俄罗斯方块简易版本,实现简单地移动,得分,变形的功能," + "外加上一些显示,计时和音效后。\n" + "游戏界面按左右键实现移动,按ESC重新开始,按空格键可以实现暂停和开始,按Shift变形。"); private Font f = new Font("微软雅黑", Font.PLAIN, 15); protected static boolean a = true; private boolean b = true; protected static int x; protected static int y; protected static int i,u; protected static int s2, s3, s4, s5, s6, s7, s8, s1, p = 0; protected int ran2, l; private Graphics g1; Thread e1 = new shift(); public SnakeDemo() { game.setTitle("俄罗斯方块"); game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); game.setBounds(400, 10, 700, 800); game.setResizable(false); game1.add(label1); label1.setBounds(500, 260, 85, 20); label1.setFont(f); game1.add(label2); label2.setBounds(500, 290, 85, 20); label2.setFont(f); game1.add(label3); label3.setBounds(500, 320, 85, 20); label3.setFont(f); game1.add(explain); explain.setBounds(500, 350, 160, 200); explain.setLineWrap(true); explain.setEditable(false); explain.setOpaque(false); explain.setFont(f); game1.add(new mycanvas()); game.setVisible(true); game.setFocusable(true); } /* * 在绘制图形时x,y表示的是一个图形左下角的坐标,其中每个小方块的长宽都为20, * polygon绘制图形其中s(int)表示生成图形的x轴坐标,每个图形的y轴坐标由一个y计算得到 这里提供了最简单的方块的生成与变形,及生成一个横向的可以变形为一个纵向的。 */ public class mycanvas extends Canvas { public void paint(Graphics g) { g1 = (Graphics2D) g; int max = 7, min = 1; ran2 = (int) (Math.random() * (max - min) + min); ran2 = 1; background(); //绘制背景 //定义线程shift,shift释放则发生变形 if (ran2 == 1) { //如果ran=1则绘制第一种横向方块 i = 0; s1 = 165; s2 = 245; s3 = 245; s4 = 165; y = 25; e1.start(); //调用线程shift while (a) { //while循环实现图形移动 int x1[] = { s1, s2, s3, s4 }; if (i == 0) { //i=0时为横向状态 int y1[] = { y, y, y - 20, y - 20 }; g1.fillPolygon(x1, y1, 4); } if (i == 1) { //i=1时为变形为竖向的状态 int y1[] = { y, y, y - 80, y - 80 }; g1.fillPolygon(x1, y1, 4); } movement(); //调用descend方法实现图形下移 background(); //再次绘制背景 } } } } public void background() { //绘制背景的方法 for (int x2 = 5; x2 <= 405; x2 += 20) { for (int y2 = 5; y2 <= 705; y2 += 20) { g1.drawRect(x2, y2, 20, 20); } } } public void movement() { //图形下移的方法 System.out.println(i); if (i == 0) { //正常状态下移方法 g1.clearRect(s1, y - 40, 80, 20); } if (i == 1) { //变形后下移方法 if (l == 0) { g1.clearRect(s1 + 20, y - 40, 60, 20); l = 1; } g1.clearRect(s1, y - 100, 20, 20); } if (y <= 705) y += 20; else a = false; } } ``` ```import java.awt.event.KeyEvent; import java.awt.event.KeyListener; public class shift extends Thread { public void run() { SnakeDemo.game.addKeyListener(new KeyListener() { // 对Jframe窗体game添加键盘事件监听 public void keyTyped(KeyEvent e) { } public void keyReleased(KeyEvent e) { int code; code = e.getKeyCode(); switch (code) { case KeyEvent.VK_SHIFT: // 如果当shift键释放时发生如下变化 if (SnakeDemo.y >= 85) { // 判断图形是否有充足的Y轴变形,如果有则有横向状态变为竖向状态 synchronized (this) { SnakeDemo.i = 1; SnakeDemo.s2 = SnakeDemo.s1 + 20; SnakeDemo.s3 = SnakeDemo.s2; SnakeDemo.s4 = SnakeDemo.s1; System.out.println("ghjkbnm,ghjklhjklhjk"); } } code = 0; break; default: throw new IllegalArgumentException("Unexpected value: " + code); } } public void keyPressed(KeyEvent e) { } }); } } ```

关于俄罗斯方块的代码问题

学校在大一结束要我们编俄罗斯方块,要有自己的风格,无论是界面还是功能,用C++6.0和EasyX,不是很会,求助一下,希望能得到不要太复杂,但是有风格的代码

如果用汇编语言编程俄罗斯方块

马上就要课程设计了,要求用汇编语言编俄罗斯方块,哪位大神能给出程序啊,多谢了!!!

求一个C语言基于SDL2开发的俄罗斯方块游戏!!!!! 需要源码

如题求一个C语言基于SDL2开发的俄罗斯方块游戏!!!!! 需要源码

Android俄罗斯方块做好后方向键不受控制是怎么回事?

Android俄罗斯方块做好后方向键不受控制是怎么回事?上下左右都没有反应。可明明已经设置好了按键功能

设计一个俄罗斯方块AI

我们老师给的作业设计 哪位大神能帮帮忙 程序已经设计完成,就是AI方面没有死路 有没有开源代码给看看 字符型界面 ![图片说明](https://img-ask.csdn.net/upload/201509/16/1442405880_686843.png)

c语言设计俄罗斯方块判断能否下落问题

我会用字摸点阵的方法保存每个方块的形状,并且能用掩码的方式画出来,但很 难判断能否下落。 我判断能否左右移动的算法是:用掩码分别计算每一行最左或最右的方块位置,然后在最左边那则不能移动块旁边的中点取颜色,如果不是黑色则不能移动。 ``` // 检查左边界 int Left(int x, int y, unsigned int binary_code) { int i; int leftmost = 0; // 最左端与x的的距离 int pix_in_line = 0; // 标志一行是否有方块 int mask = 1; // 设置掩码 for(i = 1; i<=16; i++, binary_code >>= 1) { if((mask & binary_code) == 1) { if(i%4 > leftmost) leftmost = i%4; if(i == 4) leftmost = 4; pix_in_line = 1; } x -= LEN; if(i%4 == 0) { x += 4*LEN; if(pix_in_line == 1) { if(getpixel(x - leftmost*LEN - LEN/2, y + LEN/2) != BLACK) return 1; else if(x - leftmost*LEN == 0) return 1; } y += LEN; leftmost = 0; pix_in_line = 0; } } return 0; } ``` 按这种方法判断下边界的要用两个for循环,很麻烦。网上的代码看上去没这么麻烦,但我看不懂,有哪位大神能提供下思路吗?谢谢!

Tetris 俄罗斯方块的程序怎么写

Problem Description Tetris is a famous puzzle video game.A random sequence of tetrominoes —shapes composed of four square blocks each—fall down the playing field (a rectangular vertical well). The object of the game is to manipulate these tetrominoes, by moving each one sideways and rotating it by 90 degree units, with the aim of creating a horizontal line of blocks without gaps. When such a line is created, it disappears, and any block above the deleted line will fall. As the game progresses, the tetrominoes fall, and the game ends when the stack of tetrominoes reaches the top of the playing field and no new tetrominoes are able to enter. Here we consider only a simple variation of tetris. The playing field consists of 20 rows and 10 columns. There’re 7 kinds of tetrominoes: Each kind of tetrominoes may have 4 kind of rotation,ie, rotating by 0,90,180,270 degrees.Here is a sample rotation of type 2 Tetromino: We define the initial position of a tetromino in the falling sequences as the leftmost occupied column of the tetromino after rotation. For example,for a type 2 tetromino with 180 degree rotation and a initial position of 3 is just like: After one move down, it will look likes: You will be given a sequence of tetrominoes with their rotation degrees and their initial position.And in this game there is no player manipulating tetrominoes. Once their rotation degree and initial position are determined,the ending of the game is unique. You just simulate as the original Tetris and are required to output the playing field right before the end of game(if the game ends before the end of sequences,you should output the the playing field right before its ends.).Note if there are some horizontal line that are fully covered by blocks,we should first delete such lines then judging the end of game. Input Input contains multiple cases.Test cases are separated by several blank lines. Each test case starts with a integer M(1<=N<=300) ,indicating that there are M tetrominoes in the input sequence.Follow by M lines,each line contains three integers id,degree,pos(1<=id<=7,degree∈{0,90,180,270},1<=pos<=10),as described before.It guarantees that their inputs are legal. Output For each test case, output the playing field right before the end of game.ie,the playing field right before entering the last tetromino.For output,you should add a boarder to the playing field and output the rows in decreasing order,ie first output Row 20, then Row 19 and so on.If a block is occupied ,output “[]”,otherwise you should ouput '..' . Output a blank line after each Case.You may refer to the sample output for more details. Sample Input 10 3 90 1 6 270 2 5 90 1 4 90 1 7 90 5 1 0 7 1 0 7 1 0 7 3 90 4 2 90 3 Sample Output +--------------------+ |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |[][]................| |[][][][]............| |[]..[][]............| |[][][][]............| |[][][]..[][][][][][]| |[][][]..[]..[][][][]| +--------------------+

关于俄罗斯方块问题,想的头都炸了!!!

// Shape数组 public static final Shape[] SHAPES = { // 0号砖块, 下一个是0号 // OO // OO new Shape(0, new int[] { 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, 1, 1, 1, 1), // 1号砖块, 下一个是2号 // OOOO new Shape(1, new int[] { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, 1, 0, 2, 0), 问题。后面4位数字是代表什么意思?表达什么关系。

俄罗斯方块问题 Bricks

Problem Description Little White bought a new house recently. She doesn't like the design of the floor anyway, so she decides to decorate the floor. Now she has bricks of the 5 shapes below, all with an infinite amount. Bricks cannot overlap each other, and you cannot rotate them to fit in the "holes". Now, please tell Little White how many units can she cover using these bricks. Input For every test case, you are given two integers n and m indicating the floor is an n*m rectangle consisting of n*m 1*1 grids.(1<=n<=100,1<=m<=6) Proceed to the end of file. Output For every test case, print an integer on a single line, representing the maximum possible area that can be covered. Sample Input 1 4 2 3 3 2 4 4 Sample Output 0 4 4 12

.net俄罗斯方块残影问题

求大佬帮忙,教我怎样解决俄罗斯方块移动后留下的残影,就是方块移动后在地图上面留下了痕迹,但是用鼠标点住窗体往下面拖到最底部再拖上来又没了,学生 求解决,谢谢

俄罗斯方块中的进制数

我是一个菜鸟,我想知道为什么俄罗斯方块游戏中要用一个十六进制数表示一个俄罗斯方块,而且为什么十六进制数可以转换成二进制是数组形式

用java如何编写翻牌小游戏

用java编写翻牌小游戏,点击一张牌,它周围的牌都会翻过来,直到完全翻过来,求源代码

俄罗斯方块堆放在网格里的做法,怎么使用C语言的程序编写的代码的思想来解决此算法

Problem Description Working in corporation is toilsome and rest is important. In leisure time, WisKey like to play Tetris. The Tetris game in board is N*5, and there are 8 kinds of blocks. Look that, red mean the area can’t be place. Other colors mean different kinds of blocks. If I give you C grey blocks (the 1st kind), and other infinite color blocks, Can you fulfil the board without any blocks overlap. Input Each case will contain two integers N (1<=N<=1000) and C (0<=C<=100). N*5 grid follow it. The ‘1’ represent red area, it can’t be place. The ‘0’ represent normal area. Process cases to end of file. Output If you can full of the Tetris, print “YES”, otherwise, print “NO”. Sample Input 1 1 00000 1 1 00100 1 1 01010 4 1 10000 00101 10010 00000 Sample Output YES YES NO YES

关于俄罗斯方块Shape数据关系

public final class Shape { private static Random random = new Random(); // 当变换砖块形状时,查询此表 private static final int[] NEXT = { 0, 2, 1, 4, 5, 6, 3, 8, 9, 10, 7, 12, 13, 14, 11, 16, 15, 18, 17 }; // Shape数组 public static final Shape[] SHAPES = { // 0号砖块, 下一个是0号 // OO // OO new Shape(0, new int[] { 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, 1, 1, 1, 1), // 1号砖块, 下一个是2号 // OOOO new Shape(1, new int[] { 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }, 1, 0, 2, 0), // 2号砖块, 下一个是1号 // O // O // O // O new Shape(2, new int[] { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 }, 0, 2, 0, 1), // 3号砖块, 下一个是4号 // O // O // OO new Shape(3, new int[] { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, 0, 1, 1, 1), // 4号砖块,下一个是5号 // OOO // O new Shape(4, new int[] { 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0 }, 1, 1, 1, 0), // 5号砖块, 下一个是6号 // OO // O // O new Shape(5, new int[] { 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, 0, 2, 1, 0), // 6号砖块, 下一个是3号 // O // OOO new Shape(6, new int[] { 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0, 1, 2, 0), // 7号砖块, 下一个是8号 // O // O // OO new Shape(7, new int[] { 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 }, 0, 2, 1, 0), // 8号砖块, 下一个是9号 // O // OOO new Shape(8, new int[] { 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0, 1, 2, 0), // 9号砖块, 下一个是10号 // OO // O // O new Shape(9, new int[] { 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1), // 10号砖块, 下一个是7号 // OOO // O new Shape(10, new int[] { 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, 1, 1, 1, 0), // 11号砖块, 下一个是12 // O // OOO new Shape(11, new int[] { 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0, 1, 2, 0), // 12号砖块, 下一个是13 // O // OO // O new Shape(12, new int[] { 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1), // 13号砖块, 下一个是14 // OOO // O new Shape(13, new int[] { 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, 1, 1, 1, 0), // 14号砖块, 下一个是11 // O // OO // O new Shape(14, new int[] { 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, 0, 2, 1, 0), // shape of 15, next=16 // OO // OO new Shape(15, new int[] { 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0 }, 1, 1, 1, 0), // shape of 16, next=15 // O // OO // O new Shape(16, new int[] { 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0 }, 0, 1, 1, 1), // shape of 17, next=18 // OO // OO new Shape(17, new int[] { 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0 }, 1, 1, 1, 0), // shape of 18, next=17 // O // OO // O new Shape(18, new int[] { 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, 0, 1, 1, 1) }; // 砖块的索引 private int index; // 4*4的二维数组 private int[] data; // 上下左右的margin private int marginTop; private int marginRight; private int marginBottom; private int marginLeft; private Shape(final int index, final int[] data, int mt, int mr, int mb, int ml) { this.index = index; this.data = data; this.marginTop = mt; this.marginRight = mr; this.marginBottom = mb; this.marginLeft = ml; } // 随机生成一个砖块 public static Shape random() { int index = (random.nextInt() >>> 1) % Shape.SHAPES.length; return Shape.SHAPES[index]; } public int getIndex() { return index; } public int[] getData() { return data; } public int marginTop() { return marginTop; } public int marginLeft() { return marginLeft; } public int marginRight() { return marginRight; } public int marginBottom() { return marginBottom; } // 下一个砖块 public Shape next() { return SHAPES[NEXT[index]]; } } 举new Shape(2, new int[] { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 }, 0, 2, 0, 1) 后面0, 2, 0, 1 是什么数据关系?什么表达式?

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

springboot+jwt实现token登陆权限认证

一 前言 此篇文章的内容也是学习不久,终于到周末有时间码一篇文章分享知识追寻者的粉丝们,学完本篇文章,读者将对token类的登陆认证流程有个全面的了解,可以动态搭建自己的登陆认证过程;对小项目而已是个轻量级的认证机制,符合开发需求;更多精彩原创内容关注公主号知识追寻者,读者的肯定,就是对作者的创作的最大支持; 二 jwt实现登陆认证流程 用户使用账号和面发出post请求 服务器接受到请求后使用私...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

总结了 150 余个神奇网站,你不来瞅瞅吗?

原博客再更新,可能就没了,之后将持续更新本篇博客。

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

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

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

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

程序员写出这样的代码,能不挨骂吗?

当你换槽填坑时,面对一个新的环境。能够快速熟练,上手实现业务需求是关键。但是,哪些因素会影响你快速上手呢?是原有代码写的不够好?还是注释写的不够好?昨夜...

外包程序员的幸福生活

今天给你们讲述一个外包程序员的幸福生活。男主是Z哥,不是在外包公司上班的那种,是一名自由职业者,接外包项目自己干。接下来讲的都是真人真事。 先给大家介绍一下男主,Z哥,老程序员,是我十多年前的老同事,技术大牛,当过CTO,也创过业。因为我俩都爱好喝酒、踢球,再加上住的距离不算远,所以一直也断断续续的联系着,我对Z哥的状况也有大概了解。 Z哥几年前创业失败,后来他开始干起了外包,利用自己的技术能...

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

2020阿里全球数学大赛:3万名高手、4道题、2天2夜未交卷

阿里巴巴全球数学竞赛( Alibaba Global Mathematics Competition)由马云发起,由中国科学技术协会、阿里巴巴基金会、阿里巴巴达摩院共同举办。大赛不设报名门槛,全世界爱好数学的人都可参与,不论是否出身数学专业、是否投身数学研究。 2020年阿里巴巴达摩院邀请北京大学、剑桥大学、浙江大学等高校的顶尖数学教师组建了出题组。中科院院士、美国艺术与科学院院士、北京国际数学...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

早上躺尸,晚上干活:硅谷科技公司这么流行迟到?

硅谷科技公司上班时间OPEN早已不是什么新鲜事,早九晚五是常态,但有很多企业由于不打卡,员工们10点、11点才“姗姗来迟”的情况也屡见不鲜。 这种灵活的考勤制度为人羡慕,甚至近年来,国内某些互联网企业也纷纷效仿。不过,硅谷普遍弹性的上班制度是怎么由来的呢?这种“流行性迟到”真的有那么轻松、悠哉吗? 《动态规划专题班》 课程试听内容: 动态规划的解题要领 动态规划三大类 求最值/计数/可行性 常...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

Python爬虫,高清美图我全都要(彼岸桌面壁纸)

爬取彼岸桌面网站较为简单,用到了requests、lxml、Beautiful Soup4

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

Java岗开发3年,公司临时抽查算法,离职后这几题我记一辈子

前几天我们公司做了一件蠢事,非常非常愚蠢的事情。我原以为从学校出来之后,除了找工作有测试外,不会有任何与考试有关的事儿。 但是,天有不测风云,公司技术总监、人事总监两位大佬突然降临到我们事业线,叫上我老大,给我们组织了一场别开生面的“考试”。 那是一个风和日丽的下午,我翘着二郎腿,左手端着一杯卡布奇诺,右手抓着我的罗技鼠标,滚动着轮轴,穿梭在头条热点之间。 “淡黄的长裙~蓬松的头发...

大胆预测下未来5年的Web开发

在2019年的ReactiveConf 上,《Elm in Action》的作者Richard Feldman对未来5年Web开发的发展做了预测,很有意思,分享给大家。如果你有机会从头...

立即提问
相关内容推荐