用JAVA写一个俄罗斯方块游戏tetrisGame

article/2025/11/1 18:22:28

开拔

文章目录

  • 开发环境
  • 前言
  • 一、先看一下游戏运行时的画面
  • 二、代码部分
    • 1.项目结构以及主程序入口以及下载路径
    • 下载路径
    • 代码
      • 1. Cell.java
      • 2. I.java
      • 3. J.java
      • 4. L.java
      • 5. O.java
      • 6. S.java
      • 7. T.java
      • 8. Tetris.java
      • 9. Tetromino.java
      • 10. Z.java
  • 总结


开发环境

开发工具:eclipse2021-12
JDK版本:JDK15.0.1


前言

俄罗斯方块小时候经常玩的游戏,今天来重新温习一下


一、先看一下游戏运行时的画面

在这里插入图片描述

在这里插入图片描述


二、代码部分

1.项目结构以及主程序入口以及下载路径

项目结构。

主程序入口位置:
在这里插入图片描述

下载路径

链接:https://pan.baidu.com/s/1uFfc7Zkh4fAM-vRI4URTUQ
提取码:nzcc


代码

1. Cell.java

Cell.java:

package demo1;import java.awt.image.BufferedImage;
import java.util.Objects;/*
编写小方块类属性:行、列、每个小方格的图片方法:左移一格、右移一格、下落一格
编写小方格实体类*/
public class Cell {private int row;private int col;private BufferedImage image;public Cell() {}public Cell(int row, int col, BufferedImage image) {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;}@Overridepublic String toString() {return "Cell{" +"row=" + row +", col=" + col +", image=" + image +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Cell cell = (Cell) o;return row == cell.row &&col == cell.col &&Objects.equals(image, cell.image);}@Overridepublic int hashCode() {return Objects.hash(row, col, image);}//编写左移一格方法public void left(){col--;}//编写右移一格方法public void right(){col++;}//编写下落一格方法public void drop(){row++;}
}

2. I.java

I.java:

package demo1;public 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);//共计有两种旋转状态states = new State[2];//初始化两种状态的相对坐标states[0] = new State(0, 0, 0, -1, 0, 1, 0, 2);states[1] = new State(0, 0, -1, 0, 1, 0, 2, 0);}
}

3. J.java

J.java:

package demo1;public 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);//共计有四种旋转状态states = new State[4];//初始化四种状态的相对坐标states[0] = new State(0, 0, 0, -1, 0, 1, 1, 1);states[1] = new State(0, 0, -1, 0, 1, 0, 1, -1);states[2] = new State(0, 0, 0, 1, 0, -1, -1, -1);states[3] = new State(0, 0, 1, 0, -1, 0, -1, 1);}
}

4. L.java

L.java:

package demo1;public 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);//共计有四种旋转状态states = new State[4];//初始化四种状态的相对坐标states[0] = new State(0, 0, 0, -1, 0, 1, 1, -1);states[1] = new State(0, 0, -1, 0, 1, 0, -1, -1);states[2] = new State(0, 0, 0, 1, 0, -1, -1, 1);states[3] = new State(0, 0, 1, 0, -1, 0, 1, 1);}
}

5. O.java

O.java:

package demo1;public 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);//共计有零种旋转状态states = new State[0];}
}

6. S.java

S.java:

package demo1;public 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);//共计有两种旋转状态states = new State[2];//初始化两种状态相对坐标states[0] = new State(0, 0, 0, 1, 1, -1, 1, 0);states[1] = new State(0, 0, 1, 0, -1, -1, 0, -1);}
}

7. T.java

T.java:

package demo1;public 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);//共计有四种旋转状态states = new State[4];//初始化四种状态的相对坐标states[0] = new State(0, 0, 0, -1, 0, 1, 1, 0);states[1] = new State(0, 0, -1, 0, 1, 0, 0, -1);states[2] = new State(0, 0, 0, 1, 0, -1, -1, 0);states[3] = new State(0, 0, 1, 0, -1, 0, 0, 1);}
}

8. Tetris.java

Tetris.java:

package demo1;import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
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.io.IOException;//编写俄罗斯方块主类
public class Tetris extends JPanel {//声明正在下落的方块private Tetromino currentOne = Tetromino.randomOne();//声明将要下落的方块private Tetromino nextOne = Tetromino.randomOne();//声明游戏主区域private Cell[][] wall = new Cell[18][9];//声明单元格的值为48像素private static final int CELL_SIZE = 40;//声明游戏分数池int[] scores_pool = {0,1,2,5,10};//声明当前获得游戏的分数private int totalScore = 0;//当前已消除的行数private int totalLine = 0;//声明游戏的三种状态,分别是:游戏中、暂停、游戏结束public static final int PLAYING = 0;public static final int PAUSE = 1;public static final int GAMEOVER = 2;//声明变量存放当前游戏状态的值private int game_state;//声明一个数组,用来显示游戏状态String[] show_state = {"P[pause]","C[continue]","S[replay]"};//载入方块图片public static BufferedImage I;public static BufferedImage J;public static BufferedImage L;public static BufferedImage O;public static BufferedImage S;public static BufferedImage T;public static BufferedImage Z;public static BufferedImage backImage;static {try {I = ImageIO.read(new File("images/I.png"));J = ImageIO.read(new File("images/J.png"));L = ImageIO.read(new File("images/L.png"));O = ImageIO.read(new File("images/O.png"));S = ImageIO.read(new File("images/S.png"));T = ImageIO.read(new File("images/T.png"));Z = ImageIO.read(new File("images/Z.png"));backImage = ImageIO.read(new File("images/background.png"));} catch (IOException e) {e.printStackTrace();}}@Overridepublic void paint(Graphics g) {g.drawImage(backImage, 0, 0, null);//平移坐标轴g.translate(22, 15);//绘制游戏主区域paintWall(g);//绘制正在下落的四方格paintCurrentOne(g);//绘制下一个将要下落的四方格paintNextOne(g);//绘制游戏得分paintScore(g);//绘制游戏当前状态paintState(g);}public void start(){game_state = PLAYING;KeyListener l = new KeyAdapter() {@Overridepublic void keyPressed(KeyEvent e) {int code = e.getKeyCode();switch (code){case KeyEvent.VK_DOWN:sortDropAction(); //下落一格break;case KeyEvent.VK_LEFT:moveLeftAction(); //左移break;case KeyEvent.VK_RIGHT:moveRightAction(); //右移break;case KeyEvent.VK_UP:rotateRightAction(); //顺时针旋转break;case KeyEvent.VK_SPACE:handDropAction(); //瞬间下落break;case KeyEvent.VK_P://判断当前游戏的状态if(game_state == PLAYING){game_state = PAUSE;}break;case KeyEvent.VK_C://判断游戏状态if(game_state == PAUSE){game_state = PLAYING;}break;case KeyEvent.VK_S://表示游戏重新开始game_state = PLAYING;wall = new Cell[18][9];currentOne = Tetromino.randomOne();nextOne = Tetromino.randomOne();totalScore = 0;totalLine = 0;break;}}};//将俄罗斯方块窗口设置为焦点this.addKeyListener(l);this.requestFocus();while(true){//判断,当前游戏状态在游戏中时,每隔0.5秒下落if(game_state == PLAYING){try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}//判断能否下落if(canDrop()){currentOne.softDrop();}else{//嵌入到墙中landToWall();//判断能否消行destroyLine();//判断游戏是否结束if(isGameOver()){game_state = GAMEOVER;}else{currentOne = nextOne;nextOne = Tetromino.randomOne();}}}repaint();}}//创建顺时针旋转public void rotateRightAction(){currentOne.rotateRight();//判断是否越界或者是否重合if(outOfBounds() || coincide()){currentOne.rotateLeft();}}//瞬间下落public void handDropAction(){while(true){//判断四方格能否下落if(canDrop()){currentOne.softDrop();}else{break;}}//嵌入到墙中landToWall();//判断能否消行destroyLine();//判断游戏是否结束if(isGameOver()){game_state = GAMEOVER;}else{//游戏没有结束,继续生成新的四方格currentOne = nextOne;nextOne = Tetromino.randomOne();}}//按键一次四方格下落一格public void sortDropAction(){//判断能否下落if(canDrop()){//当前四方格下落一格currentOne.softDrop();}else{//将四方格嵌入到墙中landToWall();//判断能否消行destroyLine();//判断游戏是否结束if(isGameOver()){game_state = GAMEOVER;}else{//当游戏没有结束时,则继续生成新的四方格currentOne = nextOne;nextOne = Tetromino.randomOne();}}}//四方格嵌入到墙中private void landToWall() {Cell[] cells = currentOne.cells;for (Cell cell : cells) {int row = cell.getRow();int col = cell.getCol();wall[row][col] = cell;}}//判断四方格能否下落public boolean canDrop(){Cell[] cells = currentOne.cells;for (Cell cell : cells) {int row = cell.getRow();int col = cell.getCol();//判断是否到达底部if(row == wall.length - 1){return false;}else if(wall[row + 1][col] != null){ //判断是否有方块return false;}}return true;}//创建消行方法public void destroyLine(){//声明变量,统计当前消除的行数int line = 0;Cell[] cells = currentOne.cells;for (Cell cell : cells) {int row = cell.getRow();//判断当前行是否已满if(isFullLine(row)){line++;for(int i = row;i > 0;i--){System.arraycopy(wall[i - 1],0,wall[i],0,wall[0].length);}wall[0] = new Cell[9];}}//在分数池中获取分数,累加到总分数中totalScore += scores_pool[line];//统计消除总行数totalLine += line;}//判断当前行是否已满public boolean isFullLine(int row){Cell[] cells = wall[row];for (Cell cell : cells) {if(cell == null){return false;}}return true;}//判断游戏是否结束public boolean isGameOver(){Cell[] cells = nextOne.cells;for (Cell cell : cells) {int row = cell.getRow();int col = cell.getCol();if(wall[row][col] != null){return true;}}return false;}//绘制游戏当前状态private void paintState(Graphics g) {if(game_state == PLAYING){g.drawString(show_state[0],500,660);}else if(game_state == PAUSE){g.drawString(show_state[1],500,660);}else if(game_state == GAMEOVER){g.drawString(show_state[2],500,660);g.setColor(Color.red);g.setFont(new Font(Font.SANS_SERIF, Font.BOLD,60));g.drawString("GAMEOVER!", 30, 400);}}//绘制游戏得分private void paintScore(Graphics g) {g.setFont(new Font(Font.SANS_SERIF, Font.BOLD,30));g.drawString("SCORES: " + totalScore, 500, 248);g.drawString("LINES: " + totalLine, 500, 430);}//绘制下一个将要下落的四方格private void paintNextOne(Graphics g) {Cell[] cells = nextOne.cells;for (Cell cell : cells) {int x = cell.getCol() * CELL_SIZE + 370;int y = cell.getRow() * CELL_SIZE + 25;g.drawImage(cell.getImage(), x, y, null);}}//绘制正在下落的四方格private void paintCurrentOne(Graphics g) {Cell[] cells = currentOne.cells;for (Cell cell : cells) {int x = cell.getCol() * CELL_SIZE;int y = cell.getRow() * CELL_SIZE;g.drawImage(cell.getImage(), x, y, CELL_SIZE, CELL_SIZE, null);}}//绘制游戏主区域private void paintWall(Graphics g) {for(int i = 0;i < wall.length;i++){for(int j = 0;j < wall[i].length;j++){int x = j * CELL_SIZE;int y = i * CELL_SIZE;Cell cell = wall[i][j];//判断当前单元格是否有小方块,如果没有则绘制矩形,否则将小方块嵌入到墙中if(cell == null){g.drawRect(x, y, CELL_SIZE, CELL_SIZE);}else{g.drawImage(cell.getImage(), x, y, CELL_SIZE, CELL_SIZE,null);}}}}//判断游戏是否出界public boolean outOfBounds(){Cell[] cells = currentOne.cells;for (Cell cell : cells) {int col = cell.getCol();int row = cell.getRow();if(row < 0 || row > wall.length - 1 || col < 0 || col > wall[0].length - 1){return true;}}return false;}//判断方块是否重合public boolean coincide(){Cell[] cells = currentOne.cells;for (Cell cell : cells) {int row = cell.getRow();int col = cell.getCol();if(wall[row][col] != null){return true;}}return false;}//按键一次四方格左移一次public void moveLeftAction(){currentOne.moveLeft();//判断是否越界或者四方格是否重合if(outOfBounds() || coincide()){currentOne.moveRight();}}//按键一次四方格右移一次public void moveRightAction(){currentOne.moveRight();//判断是否越界if(outOfBounds() || coincide()){currentOne.moveLeft();}}public static void main(String[] args) {//创建一个窗口对象JFrame frame = new JFrame("俄罗斯方块");//创建游戏界面,也就是面板Tetris panel = new Tetris();//将面板嵌入到窗口中frame.add(panel);//设置可见frame.setVisible(true);//设置窗口尺寸frame.setSize(810, 940);//设置窗口居中frame.setLocationRelativeTo(null);//设置窗口关闭时程序终止frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//游戏主要逻辑封装在方法中panel.start();}
}

9. Tetromino.java

Tetromino.java:

package demo1;/*
编写四方格父类属性:Cell数组用于创建4个小方块方法:左移一格、右移一格、下落一格、变形(暂时不考虑)*/
public class Tetromino {protected Cell[] cells = new Cell[4];//编写旋转状态protected State[] states;//声明旋转次数protected int count = 10000;//编写顺时针旋转四方格方法public void rotateRight(){if(states.length == 0){return;}//旋转次数加1count++;State s = states[count % states.length];Cell cell = cells[0];int row = cell.getRow();int col = cell.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(){//旋转次数减1count--;State s = states[count % states.length];Cell cell = cells[0];int row = cell.getRow();int col = cell.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 State{//编写属性:存储四方格各元素的相对位置int row0,col0,row1,col1,row2,col2,row3,col3;public State() {}public State(int row0, int col0, int row1, int col1, int row2, int col2, int row3, int col3) {this.row0 = row0;this.col0 = col0;this.row1 = row1;this.col1 = col1;this.row2 = row2;this.col2 = col2;this.row3 = row3;this.col3 = col3;}public int getRow0() {return row0;}public void setRow0(int row0) {this.row0 = row0;}public int getCol0() {return col0;}public void setCol0(int col0) {this.col0 = col0;}public int getRow1() {return row1;}public void setRow1(int row1) {this.row1 = row1;}public int getCol1() {return col1;}public void setCol1(int col1) {this.col1 = col1;}public int getRow2() {return row2;}public void setRow2(int row2) {this.row2 = row2;}public int getCol2() {return col2;}public void setCol2(int col2) {this.col2 = col2;}public int getRow3() {return row3;}public void setRow3(int row3) {this.row3 = row3;}public int getCol3() {return col3;}public void setCol3(int col3) {this.col3 = col3;}@Overridepublic String toString() {return "State{" +"row0=" + row0 +", col0=" + col0 +", row1=" + row1 +", col1=" + col1 +", row2=" + row2 +", col2=" + col2 +", row3=" + row3 +", col3=" + col3 +'}';}}//编写左移方法public void moveLeft(){for (Cell cell : cells) {cell.left();}}//编写右移方法public void moveRight(){for (Cell cell : cells) {cell.right();}}//编写下落方法public void softDrop(){for (Cell cell : cells) {cell.drop();}}//编写随机生成四方格的方法public static Tetromino randomOne(){int num = (int)(Math.random() * 7);Tetromino tetromino = null;switch (num){case 0:tetromino = new I();break;case 1:tetromino = new J();break;case 2:tetromino = new L();break;case 3:tetromino = new O();break;case 4:tetromino = new S();break;case 5:tetromino = new T();break;case 6:tetromino = new Z();break;}return tetromino;}
}

10. Z.java

Z.java:

package demo1;public 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);//共计有两种旋转状态states = new State[2];states[0] = new State(0, 0, -1, -1, -1, 0, 0, 1);states[1] = new State(0, 0, -1, 1, 0, 1, 1, 0);}
}

总结

↑:改变方位
←:向左移动
→:向右移动
↓:快速向下移动
空格:直接移动到最下面
P:暂停
C:开始

下载路径
链接:https://pan.baidu.com/s/1uFfc7Zkh4fAM-vRI4URTUQ
提取码:nzcc


http://chatgpt.dhexx.cn/article/ATiWah3M.shtml

相关文章

Java ——简易俄罗斯方块

一、将对象抽象为类 首先考虑俄罗斯方块游戏中含有哪些具体的对象&#xff0c;对象中含有哪些具体属性和方法&#xff0c;然后用代码来实现。 建立如下类&#xff1a; Cell类&#xff1a;代表最小的方格单位&#xff0c;构成7种图形的最基本图形。 含有row&#xff08;行号&…

【Java】俄罗斯方块小游戏(附源码)

俄罗斯方块小游戏 一、最终效果二、功能需求二、程序实现 一、最终效果 二、功能需求 1、 在二维平面里面用各种随机产生的方块堆积木&#xff0c;每满一行消去一行&#xff0c;当达到顶部时&#xff0c;游戏结束。 2、 通过方向键来控制方块转动&#xff0c;左移&#xff0c;…

Java实现俄罗斯方块附源码

Java实现俄罗斯方块 软件的开发过程&#xff1a; 1&#xff09; 搞清需求&#xff0c;就是软件的功能描述 俄罗斯方块的基本规则&#xff1a; 1、一个用于摆放小型正方形的平面虚拟场地&#xff0c;其标准大小&#xff1a; 行宽为10&#xff0c;列高为20&#xff0c;以每个小…

JAVA 实现《俄罗斯方块》游戏|CSDN创作打卡

前言 俄罗斯方块是一个最初由阿列克谢帕吉特诺夫在苏联设计和编程的益智类视频游戏。 《俄罗斯方块》的基本规则是移动、旋转和摆放游戏自动输出的各种方块&#xff0c;使之排列成完整的一行或多行并且消除得分。 用java语言实现&#xff0c;采用了swing技术进行了界面化处理…

Java游戏开发——俄罗斯方块

游戏介绍 俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机的游戏&#xff0c;它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人Alex Pajitnov制作的&#xff0c;它看似简单但却变化无穷&#xff0c;游戏过程中仅需要玩家将不…

Java写俄罗斯方块,了解一下

Java俄罗斯方块目录&#xff1a; Java俄罗斯方块 ---&#xff08;一&#xff09;游戏场景篇Java俄罗斯方块 ---&#xff08;二&#xff09;游戏操作与逻辑篇Java写俄罗斯方块&#xff08;完整版&#xff09; 简要分析&#xff1a; 俄罗斯方块的规则在这里就不细说了&#xf…

Java游戏开发 —— 俄罗斯方块

引言&#xff1a; 俄罗斯方块的代码实现很简单&#xff0c;很有意思&#xff01; 思路&#xff1a; 1、创建主窗口&#xff0c;加载菜单及游戏面板。 2、在游戏面板中初始化各种参数&#xff0c;并建立各种功能组件。 3、利用paint()函数开始画方块。 4、游戏结束&#xff0c;…

Java俄罗斯方块,老程序员花了一个周末,连接中学年代!

Java俄罗斯方块&#xff0c;老程序员花了一个周末&#xff0c;连接中学年代&#xff01; 热门专栏推荐 【1】Java小游戏&#xff08;俄罗斯方块、飞机大战、植物大战僵尸等&#xff09; 【2】JavaWeb项目实战&#xff08;图书管理、在线考试、宿舍管理等&#xff09; 【3】Jav…

软件设计实战:基于Java的俄罗斯方块游戏【完整版】

个人简介 &#x1f468;&#x1f3fb;‍&#x1f4bb;个人主页&#xff1a;陈橘又青 &#x1f3c3;&#x1f3fb;‍♂️博客记录心情&#xff0c;代码编写人生。 &#x1f31f;如果文章对你有用&#xff0c;麻烦关注点赞收藏走一波&#xff0c;感谢支持&#xff01; &#x1f3…

Java实现游戏开发《俄罗斯方块》

一、用Java实现俄罗斯方块游戏&#xff1a; 1、效果图&#xff0c;如下图所示&#xff1a; 7种形态的第一种形态, 如下所示&#xff1a;分布是 &#xff1a;|、S、Z、J、O、L、T; 0 1 0 0 0 1 1 0 1 1 0 0 0 1 0 0 1 1 0 0 1 0 0 0 1 1 1 0 0 1 0 0 1 1 0 0 0 1 1 0 0 1 0 0 1…

俄罗斯方块游戏的设计与实现(Java+Swing+Eclipse)

目录 基于Java的俄罗斯方块游戏的设计与实现 I 摘 要 I Based on the design and implementation of Java game Tetris II Abstract II 1 绪论 1 1.1程序开发背景及意义 1 1.2开发技术概述 2 1.3俄罗斯方块游戏的研究现状 2 1.3.1 国内外研究现状 2 1.3.2 文献综述 3 2相关技术…

【Java小游戏】俄罗斯方块

文章目录 规则准备工作编写小方块类编写四方格父类创建7种不同的形状编写俄罗斯方块主类初始化7种形状 随机生成四方格创建游戏场景绘制游戏绘制游戏背景绘制游戏主区域绘制正在下落的四方格绘制下一个下落的四方格绘制游戏得分绘制游戏状态 编写游戏逻辑判断方块是否出界判断方…

Java实现俄罗斯方块小游戏。(附完整源代码)

大家好&#xff0c;我是百思不得小赵。 创作时间&#xff1a;2022 年 5 月 12 日 博客主页&#xff1a; &#x1f50d;点此进入博客主页 —— 新时代的农民工 &#x1f64a; —— 换一种思维逻辑去看待这个世界 &#x1f440; 今天是加入CSDN的第1167天。觉得有帮助麻烦&#x…

Java实现俄罗斯方块游戏(简单版)

游戏页面效果如下&#xff1a; 俄罗斯方块游戏本身的逻辑&#xff1a; 俄罗斯方块游戏的逻辑是比较简单的。它就类似于堆砌房子一样&#xff0c;各种各样的方地形状是不同的。但是&#xff0c;俄罗斯方块游戏的界面被等均的分为若干行和若干列&#xff0c;因此方块的本质就是占…

vs2019功能介绍_MFC界面库BCGControlBar v30.0新功能详解:支持VS 2019

亲爱的BCGSoft用户&#xff0c;我们非常高兴地宣布BCGControlBar Professional for MFC和BCGSuite for MFC v30.0正式发布&#xff01;新版本添加了对Visual Studio 2019的支持等。接下来几篇文章将对这个版本的新功能一一进行介绍&#xff0c;让您对BCG这个控件有一个全新的认…

MFC界面库BCGControlBar v32.0 - 网格、报表控件升级

亲爱的BCGSoft用户&#xff0c;我们非常高兴地宣布BCGControlBar Professional for MFC和BCGSuite for MFC v32.0正式发布&#xff01;新版本支持Windows 11、增强功能区简化模式、改进控件外观等&#xff0c;以及其他新功能和改进。需要最新版的可以点击这里【BCG下载】 BCGC…

MFC扩展库BCGControlBar :网格和报告控件

BCGControlBar ("Business Components Gallery ControlBar")是MFC扩展库&#xff0c;使您可以创建具有完全自定义选项&#xff08;功能区、可自定义工具栏、菜单等&#xff09;以及一组专业设计的丰富Microsoft Office和Microsoft Visual Studio的应用程序 GUI控件&a…

MFC界面库之BCGControlers使用

觉得默认的MFC实在是太丑了,想要用一下扩展的界面库.网上查了些资料.不过在这里我还是小结一下使用的过程吧! 1.当然是安装文件了,在上一步不用多勾选,直接按照默认的就可以了...但是要注意一定要以管理员身份运行BCGCBProBuildWizard.exe否则没有办法通过...... 2.配置lib文件…

MFC界面控件BCGControlBar v33.3 - 编辑控件功能升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版和BCGSuite for MFC v33.3已正式发布了&#xff0c;该版本包含了增强的Ribbon自定义、新的…

MFC界面美化

排列整齐 基于MFC编写GUI代码时&#xff0c;界面美化最基本的部分就是排列整齐&#xff0c;如果是用Visual Studio 2015 IDE 开发&#xff0c;那就十分方便了&#xff0c;在快捷功能框即有相关按钮&#xff0c;这和Qt的控件调整有些类似&#xff0c;可以有效减少我们在布局上耗…