俄罗斯方块中的进制数

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

2个回答

 一个俄罗斯方块可以在一个4x4的形状中表示
比如
I型
.xxx
.xxx
.xxx
.xxx
L形
.xxx
.xxx
..xx
xxxx

T形
...xx
x.xx
x.xx
xxxx
Z形
..xx
x.xx
x..x
xxxx
方块形
xxxx
x..x
x..x
xxxx
等等

每个点有图像,无图像两个状态可以用0 1表示。
所以可以用一个16位的二进制数表示一个俄罗斯方块的形状。每个二进制位表示一个坐标。
sinat_33392580
Error Carrot 谢谢,我懂了
大约 4 年之前 回复
sinat_33392580
Error Carrot 恩,我知道这个,但是我不太懂,就比如说0x0f00可以表示一个长条型的,但是为什么0x0f00转换成二进制后就是一个数组形式了呢
大约 4 年之前 回复

说实话,不知道你在说啥

sinat_33392580
Error Carrot 不用了,谢谢我弄明白了,可能不太会表达
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
求一个用C语言+SDL编写俄罗斯方块的代码

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

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

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

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)

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

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

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

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

设计一个俄罗斯方块AI

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

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

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

如何将图像转换为仅包含黑色和白色方块的二进制流? [关闭]

<div class="post-text" itemprop="text"> <p><img src="https://upload.wikimedia.org/wikipedia/commons/d/d5/Chess_Board.svg" alt="Image pattern"></p> <p>Image will be just like chess board kind (actual image will contain some random pattern not uniform pattern like this sample image).</p> <p>Is there any way to convert these kind of images into binary stream like?</p> <p>10101010</p> <p>01010101 ...... ....</p> <p>preferred programming languages: java, jquery, javascript, php</p> </div>

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 +--------------------+ |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |....................| |[][]................| |[][][][]............| |[]..[][]............| |[][][][]............| |[][][]..[][][][][][]| |[][][]..[]..[][][][]| +--------------------+

求大神帮忙,这段代码在哪有设置背景图片的,俄罗斯方块小游戏

求大神帮忙,这个俄罗斯方块程序在哪有设置新游戏背景图片的。另外运行以后新游戏界面底色如何清除。。链接在下面求求大神帮帮忙。。http://www.linuxidc.com/Linux/2011-08/41891.htm

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循环,很麻烦。网上的代码看上去没这么麻烦,但我看不懂,有哪位大神能提供下思路吗?谢谢!

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

// 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位数字是代表什么意思?表达什么关系。

关于俄罗斯方块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 是什么数据关系?什么表达式?

.net俄罗斯方块残影问题

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

用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++程序,遇到死循环的情况,求助

#ifndef RB_H #define RB_H //长条形 const int A1=1; const int A1_1=8; //田字 const int A2=2; //z字 const int A3=3; const int A3_1=9; //反z字 const int A4=4; const int A4_1=10; //T字 const int A5=5; const int A5_1=11; const int A5_2=12; const int A5_3=13; //L形 const int A6=6; const int A6_1=14; const int A6_2=15; const int A6_3=16; const int A6_4=17; //反L形 const int A7=7; const int A7_1=18; const int A7_2=19; const int A7_3=20; const int A7_4=21; class RB { private: int score; int level; int ID; int hotPointx; int hotPointy; int top; public: RB() { score=0; level=1; top=30; } // void GetHotPoint(); void DrawMap(); void DrawBlock(int x,int y,int id); void DeleteBlock(int x,int y,int id); int Rotate(int id); int Judge(int x,int y,int id); void UpdateMap(int id); void RunGame(); }; #endif #include"RB.h" #include<iostream> using namespace std; #include <windows.h> #include <conio.h> int Block[19][8]= { {0,0,0,1,0,2,0,3},//一字 {-1,1,0,1,1,1,2,1}, {0,0,1,0,1,1,0,1},//田形 {0,0,0,1,1,1,1,2},//z形 {0,1,1,1,1,0,2,0}, {0,2,0,1,1,1,1,0},//反z形 {0,0,1,0,1,1,2,1}, {0,0,1,0,2,0,1,1},//T形 {1,0,0,1,1,1,2,1}, {1,0,0,1,1,1,1,2}, {0,0,0,1,0,2,1,1}, {0,0,0,1,0,2,1,2},//L形 {0,0,0,1,1,0,2,0}, {0,0,1,0,1,1,1,2}, {2,0,0,1,1,1,2,1}, {1,0,1,1,1,2,1,2},//反L形 {0,0,0,1,1,1,2,1}, {0,0,0,1,0,2,1,0}, {0,0,1,0,2,0,2,1} }; int height[19]={1,4,2,2,3,2,3,3,3,3,3,3,2,3,2,3,2,3,2}; int map[12][24]={0}; void setCurPos(int i, int j, int color = 1 | 2 | 4)// <span style="white-space:pre"> </span> { HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出句柄 SetConsoleTextAttribute(out, color);//<span style="white-space:pre"> </span>//设置颜色 COORD pos = {2*i, j }; SetConsoleCursorPosition(out, pos);//<span style="white-space:pre"> </span>//设置位置 } //旋转方块 int RB::Rotate(int ID) { switch(ID) { case 0:ID=1;break; case 1:ID=0;break; case 2:ID=2;break; case 3:ID=4;break; case 4:ID=3;break; case 5:ID=6;break; case 6:ID=5;break; case 7:ID=8;break; case 8:ID=9;break; case 9:ID=10;break; case 10:ID=7;break; case 11:ID=12; break; case 12:ID=13;break; case 13:ID=14;break; case 14:ID=15;break; case 15:ID=16; break; case 16:ID=17;break; case 17:ID=18;break; case 18:ID=15;break; } return ID; } //画出砖块 void RB::DrawBlock(int x,int y,int id) { int nx=0,ny=0; for(int i=0;i<4;i++) { nx=x+Block[id][2*i]; ny=y+Block[id][2*i+1]; setCurPos(nx+1,ny+1); cout<<"■"; } } //消除砖块 void RB::DeleteBlock(int x,int y,int id) { int nx=0,ny=0; for(int i=0;i<4;i++) { nx=x+Block[id][2*i]; ny=y+Block[id][2*i+1]; setCurPos(nx+1,ny+1); cout<<" "; } } //画出游戏的边框 void RB::DrawMap() { for(int i=0;i<21;i++) { setCurPos(i,0); cout<<"■"; setCurPos(i,25); cout<<"■"; } for(int j=1;j<25;j++) { setCurPos(0,j); cout<<"■"; setCurPos(13,j); cout<<"■"; setCurPos(20,j); cout<<"■"; } for( i=14;i<21;i++) { setCurPos(i,7); cout<<"■"; } } int RB::Judge(int x,int y,int id) {int nx=0,ny=0; for(int i=0;i<4;i++) { nx=x+Block[id][2*i]; ny=y+Block[id][1+2*i]; if(nx>0||nx<13||ny>0||ny<25||map[nx][ny]==0) return 1; } return 0; } //更新画面 void RB::UpdateMap(int id) { int flag=0; int clear=0; int nx=0;int ny=0; // for(int i=0;i<4;i++) // { // nx=hotPointx+Block[id][i*2]; // ny=hotPointy+Block[id][2*i+1]; // map[nx][ny]=1; // } if(hotPointy<top) top=hotPointy; for(int j=hotPointy;j<hotPointy+height[id];j++) { flag=0; for(int i=0;i<12;i++) { if(map[i][j]==0) flag=0; break; } if(flag==1) { for(int k = j; k >= top; k--) { if (k == 0) //消除 到了最顶行 { for (int i = 1; i < 13; i++) { map[i][k] = 0; setCurPos(i,k + 1); cout << " "; } } else { for (int i = 0; i < 12; i++) { map[i][k] = map[i][k - 1]; setCurPos(i, k + 1); //因为有两条图形框边,游戏运行过程中的坐标系相对于 真正的坐标系是x、y都加 1 的 if (map[i][k] == 0) //被删除行的 上一行是空的,所以这一行也是空的 cout << " "; else //上一行不是空的 { int tempColor = map[i][k]; setCurPos(i + 1, k + 1, tempColor); cout << "■"; } } } } top++; // <span style="white-space:pre"> </span>//消除成功,最高点下降一个 clear++; score += clear * 100; } } } void RB::RunGame() { DrawMap(); int curBlock=0; int nextBlock=0; int Count=0; int i=0; char x=' '; hotPointx=6;hotPointy=0; curBlock=rand()%7; nextBlock=rand()%7; DrawBlock(hotPointx,hotPointy,curBlock); DrawBlock(15,2,nextBlock); Count = 10000 - 1000 * level; while(1) { if(i>Count) { if(Judge(hotPointx,hotPointy+1,curBlock)==0) { //落到底一瞬间发生了什么 UpdateMap(curBlock); DeleteBlock(15,2,nextBlock); curBlock=nextBlock; hotPointx=6;hotPointy=0; nextBlock=rand()%7; DrawBlock(hotPointx,hotPointy,curBlock); DrawBlock(15,2,nextBlock); if (Judge(hotPointx, hotPointy, curBlock) == 0) //无法绘制当前图形 { system("cls"); cout << "游戏结束!!!最终得分为:" << score << endl; system("pause"); exit(0); } } else { DeleteBlock(hotPointx,hotPointy,nextBlock); hotPointy++; DrawBlock(hotPointx,hotPointy,nextBlock); } } if(_kbhit()) { x=_getch(); if(x=='a'||x=='A') { if(Judge(hotPointx-1,hotPointy,curBlock)) { DeleteBlock(hotPointx,hotPointy,curBlock); hotPointx-=1; DrawBlock(hotPointx,hotPointy,curBlock); } } else if(x=='s'||x=='S') { if(Judge(hotPointx,hotPointy+1,curBlock)) { DeleteBlock(hotPointx,hotPointy,curBlock); hotPointy+=1; DrawBlock(hotPointx,hotPointy,curBlock); } } else if(x=='d'||x=='D') { if(Judge(hotPointx+1,hotPointy,curBlock)) { DeleteBlock(hotPointx,hotPointy,curBlock); hotPointx+=1; DrawBlock(hotPointx,hotPointy,curBlock); } } else if(x=='w'||x=='W') { int temp = curBlock; curBlock = Rotate(curBlock); if (Judge(hotPointx, hotPointy, curBlock)) { DeleteBlock(hotPointx, hotPointy, temp); DrawBlock(hotPointx, hotPointy, curBlock); } else curBlock = temp; } while(_kbhit()) { _getch(); } } i++; } } void main() { RB r1; r1.RunGame(); }

我用c++在做俄罗斯方块,但是出现了一个网上也没搜到的问题

为什么运行一段时间后,窗体就会变成白色了呢?这个问题我困扰了很久,不解决的话,下面我就难以实行其他功能了!我是个新手,请大家多多指教!有图有源码! #include "stdafx.h" #include "俄罗斯方块游戏2.h" #include <time.h> #define MAX_LOADSTRING 100 #define N 20 //小方块大小 HWND hWnd = NULL; #define W 600 //窗口大小 #define H 610 HGDIOBJ oldbrush; HBRUSH hb; int X1=10; int Y1=0; bool ShowTetris[30][30]={0}; class Tetris //“父类”组成大方块中的小方块 { public: POINT p[4]; public: virtual void one(HDC hdc,int x,int y){}; virtual void two(HDC hdc,int x,int y){}; virtual void three(HDC hdc,int x,int y){}; virtual void four(HDC hdc,int x,int y){}; void drawing(HDC hdc ,int x,int y); }; void Tetris::drawing(HDC hdc ,int x,int y) { POINT A[4]; for(int i=0;i<4;i++) { A[0].x = x+p[i].x*N; A[0].y = y+p[i].y*N; A[1].x = x + N+p[i].x*N; A[1].y = y+p[i].y*N; A[2].x = x + N+p[i].x*N; A[2].y = y + N+p[i].y*N; A[3].x = x+p[i].x*N; A[3].y = y + N+p[i].y*N; Polygon(hdc, A, 4); } } class T1:public Tetris //"田条" { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,2,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=0,p[2].y=1; p[3].x=1,p[3].y=1; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,2,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=0,p[2].y=1; p[3].x=1,p[3].y=1; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,2,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=0,p[2].y=1; p[3].x=1,p[3].y=1; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,2,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=0,p[2].y=1; p[3].x=1,p[3].y=1; drawing(hdc,x,y); } };class T2:public Tetris //“竖条” { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(52,52,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=2; p[3].x=0,p[3].y=3; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(52,52,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=2,p[2].y=0; p[3].x=3,p[3].y=0; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(52,52,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=2; p[3].x=0,p[3].y=3; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(52,52,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=2,p[2].y=0; p[3].x=3,p[3].y=0; drawing(hdc,x,y); } }; class T3:public Tetris //“T条” { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(95,102,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=1,p[2].y=1; p[3].x=2,p[3].y=1; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(95,102,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=2; p[3].x=1,p[3].y=1; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(95,102,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=0,p[1].y=0; p[2].x=1,p[2].y=1; p[3].x=2,p[3].y=0; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(95,102,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=1,p[1].y=1; p[2].x=1,p[2].y=2; p[3].x=0,p[3].y=1; drawing(hdc,x,y); } }; class T4:public Tetris //“L形条第一种” { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(200,82,150)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=2; p[3].x=1,p[3].y=0; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(200,82,150)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=2,p[2].y=0; p[3].x=2,p[3].y=1; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(200,82,150)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=1,p[1].y=1; p[2].x=1,p[2].y=2; p[3].x=0,p[3].y=2; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(200,82,150)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=1,p[2].y=1; p[3].x=2,p[3].y=1; drawing(hdc,x,y); } }; class T5:public Tetris //“L形条第二种” { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(270,152,170)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=0,p[1].y=0; p[2].x=1,p[2].y=1; p[3].x=1,p[3].y=2; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(270,152,170)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=2,p[0].y=0; p[1].x=2,p[1].y=1; p[2].x=1,p[2].y=1; p[3].x=0,p[3].y=1; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(270,152,170)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=2; p[3].x=1,p[3].y=2; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(270,152,170)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=2,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=0,p[2].y=0; p[3].x=0,p[3].y=1; drawing(hdc,x,y); } }; class T6:public Tetris //“Z形条第一种” { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,252,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=1,p[2].y=1; p[3].x=2,p[3].y=1; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,252,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=1,p[1].y=1; p[2].x=0,p[2].y=1; p[3].x=0,p[3].y=2; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,252,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=0,p[0].y=0; p[1].x=1,p[1].y=0; p[2].x=1,p[2].y=1; p[3].x=2,p[3].y=1; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(255,252,100)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=1,p[1].y=1; p[2].x=0,p[2].y=1; p[3].x=0,p[3].y=2; drawing(hdc,x,y); } }; class T7:public Tetris //“Z形条第二种” { public: void one(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(290,255,255)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=2,p[1].y=0; p[2].x=1,p[2].y=1; p[3].x=0,p[3].y=1; drawing(hdc,x,y); } void two(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(290,255,255)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=1; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=0; p[3].x=1,p[3].y=2; drawing(hdc,x,y); } void three(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(290,255,255)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=0; p[1].x=2,p[1].y=0; p[2].x=1,p[2].y=1; p[3].x=0,p[3].y=1; drawing(hdc,x,y); } void four(HDC hdc,int x,int y) { hb=CreateSolidBrush(RGB(290,255,255)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); p[0].x=1,p[0].y=1; p[1].x=0,p[1].y=1; p[2].x=0,p[2].y=0; p[3].x=1,p[3].y=2; drawing(hdc,x,y); } }; T1 t1; T2 t2; T3 t3; T4 t4; T5 t5; T6 t6; T7 t7; Tetris *p=new Tetris; void ChooseTetris1(HDC hdc,int a) { switch(a) { case 0:p=new T1;break; case 1:p=new T2;break; case 2:p=new T3;break; case 3:p=new T4;break; case 4:p=new T5;break; case 5:p=new T6;break; case 6:p=new T7;break; default:break; } } void display(HDC hdc) { t1.one(hdc,500,10); t2.one(hdc,500,75); t3.one(hdc,500,180); t4.one(hdc,500,245); t5.one(hdc,500,325); t6.one(hdc,500,410); t7.one(hdc,500,480); } // 全局变量: HINSTANCE hInst; // 当前实例 TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本 TCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名 // 此代码模块中包含的函数的前向声明: ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); int R; int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // TODO: 在此放置代码。 MSG msg; HACCEL hAccelTable; R=rand()%7; // 初始化全局字符串 LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); LoadString(hInstance, IDC_MY2CPP, szWindowClass, MAX_LOADSTRING); MyRegisterClass(hInstance); srand((unsigned)time(NULL)); // 执行应用程序初始化: if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_MY2CPP)); // 主消息循环: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int) msg.wParam; } // // 函数: MyRegisterClass() // // 目的: 注册窗口类。 // // 注释: // // 仅当希望 // 此代码与添加到 Windows 95 中的“RegisterClassEx” // 函数之前的 Win32 系统兼容时,才需要此函数及其用法。调用此函数十分重要, // 这样应用程序就可以获得关联的 // “格式正确的”小图标。 // ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MY2CPP)); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = MAKEINTRESOURCE(IDC_MY2CPP); wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL)); return RegisterClassEx(&wcex); } // // 函数: InitInstance(HINSTANCE, int) // // 目的: 保存实例句柄并创建主窗口 // // 注释: // // 在此函数中,我们在全局变量中保存实例句柄并 // 创建和显示主程序窗口。 // BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hInst = hInstance; // 将实例句柄存储在全局变量中 hWnd = CreateWindow(szWindowClass, L"Tetris",WS_CAPTION|WS_SYSMENU, CW_USEDEFAULT,CW_USEDEFAULT, W,H, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; } int a=0; int X[1000]; int Y[1000]; int JudgeTetris() { for(int i=0;i<4;i++) { if(p->p[i].y+Y1+1>=28) return 0; } for(int i=0;i<4;i++) { for(int j=0;j<a;j++) { if(p->p[i].y+Y1+1>=Y[j]&&p->p[i].x+X1==X[j]) { return 0; } } } return 1; } void StopTetris() { int x, y; for(int i=0;i<4;i++) { x=X1+p->p[i].x; y=Y1+p->p[i].y; // ShowTetris[x][y] = true; X[a]=x; Y[a]=y; ShowTetris[X[a]][Y[a]] = true; a++; } } void Down(HDC hdc,int n) { switch(n) { case 0: p->one(hdc,X1*N,Y1*N);break; case 1: p->two(hdc,X1*N,Y1*N);break; case 2: p->three(hdc,X1*N,Y1*N);break; case 3: p->four(hdc,X1*N,Y1*N);break; default:break; } if(JudgeTetris()) { Y1++; } else { StopTetris(); R=rand()%7; delete p; //到达低端时,随机选择一个数 ChooseTetris1(hdc,R); Y1=0; X1=10; } for (int i = 0; i < 30; i++) { for (int j = 0; j < 30; j++) { if (ShowTetris[i][j]) { hb=CreateSolidBrush(RGB(34,139,34)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); POINT a[4] = { i*N, j*N, (i + 1)*N, j*N, (i + 1)*N, (j + 1)*N, i*N, (j+1)*N }; Polygon(hdc, a, 4); } } } } void QuickDown(HDC hdc) { Y1+=1; InvalidateRect(hWnd,NULL,TRUE); } void GoLeft(HDC hdc) { if(X1<=0) { X1-=0; } else X1-=1; InvalidateRect(hWnd,NULL,TRUE); } int JR() //判断右边界 { for(int i=0;i<4;i++) { if(p->p[i].x+X1>=20) return 0; } return 1; } void GoRight(HDC hdc) { if(!JR()) { X1+=0; } else X1+=1; InvalidateRect(hWnd,NULL,TRUE); } int L=0; void Deforming(HDC hdc) { L+=1; L=L%4; InvalidateRect(hWnd,NULL,TRUE); } // 函数: WndProc(HWND, UINT, WPARAM, LPARAM) // // 目的: 处理主窗口的消息。 // // WM_COMMAND - 处理应用程序菜单 // WM_PAINT - 绘制主窗口 // WM_DESTROY - 发送退出消息并返回 // // LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; PAINTSTRUCT ps; HDC hdc; HGDIOBJ oldbrush; HBRUSH hb; RECT rect; srand((unsigned)time(NULL)); switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // 分析菜单选择: switch (wmId) { case IDM_ABOUT: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); break; case IDM_EXIT: DestroyWindow(hWnd); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_CREATE: SetTimer(hWnd,1,700,NULL); //函数反回值就是第一个参数值1,表示此定时器的ID号;第二个参数表示要等待700毫秒时间再重新处理一次。第三个参数在这种方法中一般用NULL。 case WM_TIMER: InvalidateRect(hWnd,NULL,TRUE); case WM_KEYDOWN: //键盘控制方块移动 hdc=GetDC(hWnd); switch((int)wParam) { case VK_DOWN: QuickDown(hdc);break; //加速下落 case VK_LEFT: GoLeft(hdc);break; //键盘左移 case VK_RIGHT: GoRight(hdc);break; //键盘右移 case VK_UP: Deforming(hdc);break; //变形 } ReleaseDC ( hWnd,hdc ); return 0; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); ChooseTetris1(hdc,R); hb=CreateSolidBrush(RGB(255,228,181));//hb=CreateSolidBrush(RGB(255,192,250)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); Rectangle(hdc,0,0,420,560); //游戏区域画刷 hb=CreateSolidBrush(RGB(176,224,230));//hb=CreateSolidBrush(RGB(255,192,250)); oldbrush=SelectObject(hdc,(HBRUSH)(hb)); Rectangle(hdc,420,0,600,560); //游戏区域画刷 display(hdc); Down(hdc,L); // TODO: 在此添加任意绘图代码... EndPaint(hWnd, &ps); break; case WM_DESTROY: KillTimer (hWnd, 1) ; PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; } // “关于”框的消息处理程序。 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); switch (message) { case WM_INITDIALOG: return (INT_PTR)TRUE; case WM_COMMAND: if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) { EndDialog(hDlg, LOWORD(wParam)); return (INT_PTR)TRUE; } break; }![图片](https://img-ask.csdn.net/upload/201605/23/1464003773_584645.jpg)![图片](https://img-ask.csdn.net/upload/201605/23/1464003943_873881.jpg)![图片](https://img-ask.csdn.net/upload/201605/23/1464004017_919643.jpg)

用vc++做俄罗斯方块MFC

用VC++做俄罗斯方块,学的都是建立一个文本框,然后添类什么的,但是看了好多都给出了源代码…可是还是不会啊,要全部自己打吗,还是可以添加类实现,求知道啊

俄罗斯方块问题 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

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

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

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

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

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

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

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

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

点沙成金:英特尔芯片制造全过程揭密

“亚马逊丛林里的蝴蝶扇动几下翅膀就可能引起两周后美国德州的一次飓风……” 这句人人皆知的话最初用来描述非线性系统中微小参数的变化所引起的系统极大变化。 而在更长的时间尺度内,我们所生活的这个世界就是这样一个异常复杂的非线性系统…… 水泥、穹顶、透视——关于时间与技艺的蝴蝶效应 公元前3000年,古埃及人将尼罗河中挖出的泥浆与纳特龙盐湖中的矿物盐混合,再掺入煅烧石灰石制成的石灰,由此得来了人...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

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

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

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

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

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

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

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

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

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

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

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

优雅的替换if-else语句

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

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

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

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

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

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

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

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

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

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

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

面试:第十六章:Java中级开发(16k)

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

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

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

你打算用Java 8一辈子都不打算升级到Java 14,真香

我们程序员应该抱着尝鲜、猎奇的心态,否则就容易固步自封,技术停滞不前。

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

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

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

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

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

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

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

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

《经典算法案例》01-08:如何使用质数设计扫雷(Minesweeper)游戏

我们都玩过Windows操作系统中的经典游戏扫雷(Minesweeper),如果把质数当作一颗雷,那么,表格中红色的数字哪些是雷(质数)?您能找出多少个呢?文中用列表的方式罗列了10000以内的自然数、质数(素数),6的倍数等,方便大家观察质数的分布规律及特性,以便对算法求解有指导意义。另外,判断质数是初学算法,理解算法重要性的一个非常好的案例。

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

一文带你入门Java Stream流,太强了

两个星期以前,就有读者强烈要求我写一篇 Java Stream 流的文章,我说市面上不是已经有很多了吗,结果你猜他怎么说:“就想看你写的啊!”你看你看,多么苍白的喜欢啊。那就“勉为其难”写一篇吧,嘻嘻。 单从“Stream”这个单词上来看,它似乎和 java.io 包下的 InputStream 和 OutputStream 有些关系。实际上呢,没毛关系。Java 8 新增的 Stream 是为...

立即提问
相关内容推荐