老程序员教你一天时间完成C++俄罗斯方块游戏

目录
  • 一、主要文件
  • 二、界面设计
  • 三、方块设计
  • 四、设计思路
    • 设计思路如下:
  • 五、总结

首先,看下效果图:

图1 游戏运行过程

下面详细讲解下制作过程。

一、主要文件

文件包含三个:tetris.cpp、tetris.h、main.cpp,各个文件的用途如下:

tetris.cpp 文件:函数实现;

tetris.h : 类和函数声明;

main.cpp : 主函数;

二、界面设计

bool vis[100][100]; // 用于标记坐标
int Co[100][100]; // 坐标的颜色

其中:

vis[100][100] 用于标记界面坐标,true表示有内容,false 表示空;

Co[100][100] 用于标记界面坐标的颜色;

设置框架函数,如下所示:

//设置框架
void setFrame()
{
   color(5);
   getCoord(30 ,1);
   cout<<"    < 俄罗斯方块游戏 >"<<endl<<endl;
   color(10);

   // 主要框架
   int x = LF_up_x ,y = 3;
   //横向边上下两条边
   for(int i = 0; i < 30; ++i) {
       getCoord(x ,2);  vis[x][2] = true;  cout<<"□";
       getCoord(x ,23); vis[x][23] = true; cout<<"□";
       x += 2;
   }

   //竖向两条边和小框左边竖线
   for(int i = 0; i < 21; ++i) {
       getCoord(LF_up_x ,y) ; vis[LF_up_x][y] = true ; cout<<"□" ;
       getCoord(71 ,y) ;      vis[71][y] = true ; cout<<"□" ;
       getCoord(51 ,y) ;      vis[51][y] = true ; cout<<"□" ;
       y += 1 ;
   }

   //小框架中间横线
   for(int i = 53 ;i <= 69 ; i += 2) {
       getCoord(i ,11);
       vis[i][11] = true;
       cout<<"□";
   }

   //小框内容
   color(10);
   getCoord(53 ,3);  cout<<" Next Block : " ;
   color(11) ;
   getCoord(54 ,13) ; cout<<"开始 :  Enter 键" ;
   getCoord(54 ,15) ; cout<<"暂停 :  T 键" ;
   getCoord(54 ,17) ; cout<<"退出 :  Q 键" ;
   getCoord(54 ,19) ;  cout<<"Score:" ;
   getCoord(54 ,21) ; cout<<"Rank :" ;
   T_Box::staticNum(0) ;
}

设置整体的界面,如下图所示:

图2 界面图

三、方块设计

表示方块的类,如下所示:

class T_Box
{
    static int Score ;
    static int Rank ;
    private :
             int x ,y ; // 坐标
             int type ; // 类型
             int fg ; // 某个图形的第 fg 个变化的图形
    public :
             T_Box(int sx = 31 ,int sy = 3 ,int st = 0 ,int f = 0);
             static void staticNum(int num);
             void setValue(int sx = 31 ,int sy = 3 ,int st = 0 ,int f = 0) ;
             void Move(int stepA ,int stepB);
             bool Stop();
             void printBox();
             void eraseBox();
             void Mark();
             void Pause();
             void nextBox(T_Box temp);
             void Transform();
             bool Judge();
};

各种方块的设计函数如下所示:

class Coord
{
    public :
            int x;
            int y;
            int Col;
}G[10][10][10];

其中:

x,y 是相对坐标;

Col 是方块颜色;

G[10][10][10] :一维表示方块类型,二维表示方块内的方格,三维表示方块的第几种表示形式;

来看下各个方块的设计,如下所示:

// 设置各种图形
void setBox()
{
    // 1 正方形
    for(int i = 0 ;i < 4 ; ++i)
    {
       G[0][0][i].x = 0 ;  G[0][0][i].y = 0 ;  G[0][0][i].Col = 14 ;
       G[0][1][i].x = 0 ;  G[0][1][i].y = 1 ;  G[0][1][i].Col = 14 ;
       G[0][2][i].x = 2 ;  G[0][2][i].y = 0 ;  G[0][2][i].Col = 14 ;
       G[0][3][i].x = 2 ;  G[0][3][i].y = 1 ;  G[0][3][i].Col = 14 ;
    }

    // 2  竖条
    G[1][0][0].x = 0 ; G[1][0][0].y = 0 ; G[1][0][0].Col = 3 ;
    G[1][1][0].x = 0 ; G[1][1][0].y = 1 ; G[1][1][0].Col = 3 ;
    G[1][2][0].x = 0 ; G[1][2][0].y = 2 ; G[1][2][0].Col = 3 ;
    G[1][3][0].x = 0 ; G[1][3][0].y = 3 ; G[1][3][0].Col = 3 ;

    G[1][0][1].x = 0 ; G[1][0][1].y = 0 ; G[1][0][1].Col = 3 ;
    G[1][1][1].x = 2 ; G[1][1][1].y = 0 ; G[1][1][1].Col = 3 ;
    G[1][2][1].x = 4 ; G[1][2][1].y = 0 ; G[1][2][1].Col = 3 ;
    G[1][3][1].x = 6 ; G[1][3][1].y = 0 ; G[1][3][1].Col = 3 ;

    G[1][0][2].x = 0 ; G[1][0][2].y = 0 ; G[1][0][2].Col = 3 ;
    G[1][1][2].x = 0 ; G[1][1][2].y = 1 ; G[1][1][2].Col = 3 ;
    G[1][2][2].x = 0 ; G[1][2][2].y = 2 ; G[1][2][2].Col = 3 ;
    G[1][3][2].x = 0 ; G[1][3][2].y = 3 ; G[1][3][2].Col = 3 ;

    G[1][0][3].x = 0 ; G[1][0][3].y = 0 ; G[1][0][3].Col = 3 ;
    G[1][1][3].x = 2 ; G[1][1][3].y = 0 ; G[1][1][3].Col = 3 ;
    G[1][2][3].x = 4 ; G[1][2][3].y = 0 ; G[1][2][3].Col = 3 ;
    G[1][3][3].x = 6 ; G[1][3][3].y = 0 ; G[1][3][3].Col = 3 ;

    // 3
    G[2][0][0].x = 0 ; G[2][0][0].y = 0 ; G[2][0][0].Col = 4 ;
    G[2][1][0].x = 0 ; G[2][1][0].y = 1 ; G[2][1][0].Col = 4 ;
    G[2][2][0].x = 2 ; G[2][2][0].y = 1 ; G[2][2][0].Col = 4 ;
    G[2][3][0].x = 2 ; G[2][3][0].y = 2 ; G[2][3][0].Col = 4 ;
    G[2][0][1].x = 0 ; G[2][0][1].y = 0 ; G[2][0][1].Col = 4 ;
    G[2][1][1].x = 2 ; G[2][1][1].y = 0 ; G[2][1][1].Col = 4 ;
    G[2][2][1].x = 0 ; G[2][2][1].y = 1 ; G[2][2][1].Col = 4 ;
    G[2][3][1].x = -2 ; G[2][3][1].y = 1 ; G[2][3][1].Col = 4 ;
    G[2][0][2].x = 0 ; G[2][0][2].y = 0 ; G[2][0][2].Col = 4 ;
    G[2][1][2].x = 0 ; G[2][1][2].y = 1 ; G[2][1][2].Col = 4 ;
    G[2][2][2].x = 2 ; G[2][2][2].y = 1 ; G[2][2][2].Col = 4 ;
    G[2][3][2].x = 2 ; G[2][3][2].y = 2 ; G[2][3][2].Col = 4 ;
    G[2][0][3].x = 0 ; G[2][0][3].y = 0 ; G[2][0][3].Col = 4 ;
    G[2][1][3].x = 2 ; G[2][1][3].y = 0 ; G[2][1][3].Col = 4 ;
    G[2][2][3].x = 0 ; G[2][2][3].y = 1 ; G[2][2][3].Col = 4 ;
    G[2][3][3].x = -2 ; G[2][3][3].y = 1 ; G[2][3][3].Col = 4 ;
    // 4
    G[3][0][0].x = 0 ; G[3][0][0].y = 0 ; G[3][0][0].Col = 5 ;
    G[3][1][0].x = 0 ; G[3][1][0].y = 1 ; G[3][1][0].Col = 5 ;
    G[3][2][0].x = -2 ; G[3][2][0].y = 1 ; G[3][2][0].Col = 5 ;
    G[3][3][0].x = 2 ; G[3][3][0].y = 1 ; G[3][3][0].Col = 5 ;
    G[3][0][1].x = 0 ; G[3][0][1].y = 0 ; G[3][0][1].Col = 5 ;
    G[3][1][1].x = 0 ; G[3][1][1].y = 1 ; G[3][1][1].Col = 5 ;
    G[3][2][1].x = 2 ; G[3][2][1].y = 1 ; G[3][2][1].Col = 5 ;
    G[3][3][1].x = 0 ; G[3][3][1].y = 2 ; G[3][3][1].Col = 5 ;
    G[3][0][2].x = 0 ; G[3][0][2].y = 0 ; G[3][0][2].Col = 5 ;
    G[3][1][2].x = 2 ; G[3][1][2].y = 0 ; G[3][1][2].Col = 5 ;
    G[3][2][2].x = 2 ; G[3][2][2].y = 1 ; G[3][2][2].Col = 5 ;
    G[3][3][2].x = 4 ; G[3][3][2].y = 0 ; G[3][3][2].Col = 5 ;
    G[3][0][3].x = 0 ; G[3][0][3].y = 0 ; G[3][0][3].Col = 5 ;
    G[3][1][3].x = 0 ; G[3][1][3].y = 1 ; G[3][1][3].Col = 5 ;
    G[3][2][3].x = -2 ; G[3][2][3].y = 1 ; G[3][2][3].Col = 5 ;
    G[3][3][3].x = 0 ; G[3][3][3].y = 2 ; G[3][3][3].Col = 5 ;

    // 5
    G[4][0][0].x = 0 ; G[4][0][0].y = 0 ; G[4][0][0].Col = 6 ;
    G[4][1][0].x = 0 ; G[4][1][0].y = 1 ; G[4][1][0].Col = 6 ;
    G[4][2][0].x = 0 ; G[4][2][0].y = 2 ; G[4][2][0].Col = 6 ;
    G[4][3][0].x = 2 ; G[4][3][0].y = 2 ; G[4][3][0].Col = 6 ;
    G[4][0][1].x = 0 ; G[4][0][1].y = 0; G[4][0][1].Col = 6 ;
    G[4][1][1].x = 0 ; G[4][1][1].y = 1 ; G[4][1][1].Col = 6 ;
    G[4][2][1].x = 2 ; G[4][2][1].y = 0 ; G[4][2][1].Col = 6 ;
    G[4][3][1].x = 4 ; G[4][3][1].y = 0 ; G[4][3][1].Col = 6 ;
    G[4][0][2].x = 0 ; G[4][0][2].y = 0 ; G[4][0][2].Col = 6 ;
    G[4][1][2].x = 2 ; G[4][1][2].y = 0 ; G[4][1][2].Col = 6 ;
    G[4][2][2].x = 2 ; G[4][2][2].y = 1 ; G[4][2][2].Col = 6 ;
    G[4][3][2].x = 2 ; G[4][3][2].y = 2 ; G[4][3][2].Col = 6 ;
    G[4][0][3].x = 0 ; G[4][0][3].y = 0; G[4][0][3].Col = 6 ;
    G[4][1][3].x = 0 ; G[4][1][3].y = 1 ; G[4][1][3].Col = 6 ;
    G[4][2][3].x = -2 ; G[4][2][3].y = 1 ; G[4][2][3].Col = 6 ;
    G[4][3][3].x = -4 ; G[4][3][3].y = 1 ; G[4][3][3].Col = 6 ;

    // 6
    G[5][0][0].x = 0 ; G[5][0][0].y = 0 ; G[5][0][0].Col = 9 ;
    G[5][1][0].x = 0 ; G[5][1][0].y = 1 ; G[5][1][0].Col = 9 ;
    G[5][2][0].x = 0 ; G[5][2][0].y = 2 ; G[5][2][0].Col = 9 ;
    G[5][3][0].x = -2 ; G[5][3][0].y = 2 ; G[5][3][0].Col = 9 ;
    G[5][0][1].x = 0 ; G[5][0][1].y = 0 ; G[5][0][1].Col = 9 ;
    G[5][1][1].x = 0 ; G[5][1][1].y = 1 ; G[5][1][1].Col = 9 ;
    G[5][2][1].x = 2 ; G[5][2][1].y = 1 ; G[5][2][1].Col = 9 ;
    G[5][3][1].x = 4 ; G[5][3][1].y = 1 ; G[5][3][1].Col = 9 ;
    G[5][0][2].x = 0 ; G[5][0][2].y = 0 ; G[5][0][2].Col = 9 ;
    G[5][1][2].x = 2 ; G[5][1][2].y = 0 ; G[5][1][2].Col = 9 ;
    G[5][2][2].x = 0 ; G[5][2][2].y = 1 ; G[5][2][2].Col = 9 ;
    G[5][3][2].x = 0 ; G[5][3][2].y = 2 ; G[5][3][2].Col = 9 ;
    G[5][0][3].x = 0 ; G[5][0][3].y = 0 ; G[5][0][3].Col = 9 ;
    G[5][1][3].x = 2 ; G[5][1][3].y = 0 ; G[5][1][3].Col = 9 ;
    G[5][2][3].x = 4 ; G[5][2][3].y = 0 ; G[5][2][3].Col = 9 ;
    G[5][3][3].x = 4 ; G[5][3][3].y = 1 ; G[5][3][3].Col = 9 ;
}

上面设置的是各个方块的相对坐标以及方块的颜色。

四、设计思路

先来看下方块的主要类,如下所示:

class T_Box
{
    static int Score ;
    static int Rank ;
    private :
             int x ,y ; // 坐标
             int type ; // 类型
             int fg ; // 某个图形的第 fg 个变化的图形
    public :
             T_Box(int sx = 31 ,int sy = 3 ,int st = 0 ,int f = 0) ;
             static void staticNum(int num) ;
             void setValue(int sx = 31 ,int sy = 3 ,int st = 0 ,int f = 0) ;
             void Move(int stepA ,int stepB) ;
             bool Stop() ;
             void printBox() ;
             void eraseBox() ;
             void Mark() ;
             void Pause() ;
             void nextBox(T_Box temp) ;
             void Transform() ;
             bool Judge() ;
};

其中:

Score : 表示游戏分数;

Rank : 表示游戏等级,等级是根据分数计算的;

各个函数的用途如下:

T_Box :构造函数,初始化坐标类型;

staticNum : 更新分数和等级,显示在右下侧小框内;

setValue : 设置方块的初始坐标、类型以及第几种变化,其中类型和变化是随机值;

Move : 将下落的方块向左、右、下移动;

Stop : 计算游戏是否已结束;

printBox : 输出方块图形到界面;

eraseBox : 擦除界面上的方块;

Mark : 标记当前位置已有内容了;

Pause : 游戏暂停,等待开始;

nextBox : 在右上侧方格内显示下一个将要降落的方格;

Transform :在方格下落过程中变换方格样式;

Judge : 判断方格是否可以变换样式;

接下来就说下主程序的设计逻辑,代码如下所示:

// 主程序
void Tetris()
{
   srand(time(0)); // 取系统时间
   setBox();    // 设置各种图形
   T_Box  cd ,tempA ,tempB;   // 每个下降的方块的初始值
   tempB.setValue(); // 设置方块初始值
   tempB.nextBox(tempA);
   for(int i = 0;   ; ++i)
   {
       if(!(i%2))   tempA.setValue();
       else         tempB.setValue();
       if(i%2)      tempB.nextBox(tempA) ,cd = tempA;
       else         tempA.nextBox(tempB) ,cd = tempB;
       while(1) {
          cd.printBox(); // 输出图形
          if(cd.Stop())
          {
              color(6);
              getCoord(20 ,10);
              cout<<"   T_T    游戏结束    T_T";
              Exit();
          }
          Sleep(350);
          cd.eraseBox(); //擦除图形
          cd.Move(0 ,1);
          if(kbhit()) // 判断是否有按键按下,如果有则可能是旋转或者加速按键
          {
            char ch = getch();
            switch(ch)
            {
                case 'a' :   cd.Move(-2 ,0) ; break;    //  向左移动一格
                case 'd' :   cd.Move(2 ,0) ;  break;    //  向右移动一格
                case 'w' :   cd.Transform() ; break;                   //  变换方格
                case 's' :   cd.Move(0 ,2) ; break;  //  急降方格
                case 'T' :   cd.Pause() ; break;
                case 'Q' :   Exit();  break;
                default :    break; // 如果都不是则不执行
             }
          }
          if(cd.Stop())  break;
       }
       cd.printBox();
       cd.Mark();
       Check(); // 检查是否可以消除
    }
}

设计思路如下:

1. 首先,设置各种图形以及界面图形;

2. 产生当前方格和下一个方格,下一个方格显示到右上侧方框内;

3. 输出当前下落方格到界面;

4. 判断游戏是否结束;

5. 向下移动方格;

6. 监听用户输入,执行用户输入的操作,包括:移动、急降方格、变换方格样式、退出、暂停等。

7. 检测方格是否降落到底部,循环操作,一直到方格降落到底部;

8. 循环 2 ~ 7,一直到游戏结束;

五、总结

C++俄罗斯方块设计的重点在于界面的设计以及游戏的整体逻辑,其中,界面设计主要是获取对应坐标,在对应坐标处输出对应图形,整体逻辑是不断循环产生下落的方格,方格移动是通过擦除当前位置的方格,将方格坐标整体移动一个再次显示来实现的。

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • C++实现俄罗斯方块游戏

    本文实例为大家分享了C++实现俄罗斯方块游戏的具体代码,供大家参考,具体内容如下 使用VS2017编译 思路: 1.打印出游戏地图,也就是设计游戏地图类game_interdace,包括设计游戏开始界面的函数,游戏地图界面的函数,游戏结束界面的函数,以及设计一些辅助函数如(设置光标为目标点,改变颜色,隐藏光标)来完成上述设计. 2.设计方块图形类,包括生成图形,清理图形,图形移动,图形停止的处理,图形的消失(实质是得分)等. #include <iostream> #include<co

  • C++实现俄罗斯方块源码

    本文实例为大家分享了C++实现俄罗斯方块的具体代码,供大家参考,具体内容如下 先是效果图: 主菜单: 游戏: 设置: 错误处理: 代码: #include <iostream.h> #include <conio.h> #include <stdio.h> #include <windows.h> #include <fstream.h> #include <time.h> #include <cstring> #prag

  • C++实现俄罗斯方块(linux版本)

    本文实例为大家分享了C++实现俄罗斯方块的具体代码,供大家参考,具体内容如下 主程序 RussiaBlock.cpp // // Created by adl on 2020/7/18. // #include "Block.h" #include "Table.h" #include <thread> #include <mutex> #include "hierarchical_mutex.h" #include &q

  • C++实现俄罗斯方块

    本文实例为大家分享了C++实现俄罗斯方块的具体代码,供大家参考,具体内容如下 工具:vc++2010,图库:EasyX 先看效果图片 纯手写,没有面向对象思想,看全部源码 #include <stdio.h> #include <graphics.h> #include <time.h> #include <conio.h> #define BLOCK_COUNT 5 #define BLOCK_WIDTH 5 #define BLOCK_HEIGHT 5

  • linux环境下C++实现俄罗斯方块

    本文实例为大家分享了C++实现俄罗斯方块的具体代码,供大家参考,具体内容如下 本程序的运行环境是linux,用到了多线程.创建了一个用来绘图的线程和一个获取按键的线程.程序中有一些需要改善的地方,比如336-338行定义的全局变量以及声明的对象.本来声明的Block和Table对象应该在main函数里面,然后将这两个对象作为参数传递给线程函数getkey.但是好像只能传递一个对象参数给线程函数.希望高手能够对程序进行改进. ps:由于用到了多线程,而pthread不是linux的默认库,所以编译

  • 老程序员教你一天时间完成C++俄罗斯方块游戏

    目录 一.主要文件 二.界面设计 三.方块设计 四.设计思路 设计思路如下: 五.总结 首先,看下效果图: 图1 游戏运行过程 下面详细讲解下制作过程. 一.主要文件 文件包含三个:tetris.cpp.tetris.h.main.cpp,各个文件的用途如下: tetris.cpp 文件:函数实现: tetris.h : 类和函数声明: main.cpp : 主函数: 二.界面设计 bool vis[100][100]; // 用于标记坐标 int Co[100][100]; // 坐标的颜色

  • 老程序员教你一天时间完成Java迷宫小游戏

    目录 效果图 实现思路 迷宫算法(网上参考的) 相关图示说明 代码实现 创建窗口 创建菜单及菜单选项 绘制迷宫的每个单元 计算并打通迷宫 绘制起点终点 加入键盘移动监听 收尾 总结 效果图 实现思路 1.创建运行窗口. 2.创建菜单. 3.绘制迷宫的每个单元. 4.通过算法计算迷宫路径,并打通路径,形成迷宫. 5.绘制起点终点. 6.添加键盘事件控制起点方块移动. 7.收尾. 迷宫算法(网上参考的) 1.将起点作为当前迷宫单元并标记为已访问 2.当还存在未标记的迷宫单元,进行循环 1).如果当前

  • 老程序员教你一天时间完成C语言扫雷游戏

    目录 扫雷游戏 1.菜单 2.初始化棋盘 3.打印棋盘 4.布置雷 5.排查雷 6.整体效果展示 7.代码分享 7.1 test.c 7.2 game.c 7.3 game.h 总结 扫雷游戏 今天我们就要设计一款这样的游戏,首先需要设置棋盘,然后对棋盘进行随机布雷,最后在排雷. 1.菜单 首先制作一个简易菜单 int main() { int input; srand((unsigned int)time(NULL)); do { menu(); printf("请选择:\n");

  • 如何成为一个优秀的jsp程序员

    在网上看到很多问题是关于如何学习jsp的,正好网上看到一篇关于学习jsp的文章,就摘了一部分翻译过来,希望能对大家学习jsp有点指 导. 一个普通的错误是把JSP当作简化的 Java.它不是,(事实上, JSP 是简化的 servlets .)程序员通常试着没有学习要求的支持技巧而 直接学习 JSP .JSP 是一个衔接技术,并且成功地连接你需要理解的另外的技术.如果你已经知道 Java , HTML 和 Javascript,这意味着 JSP 将确实是简单的. 需要成为一个成功的 JSP 程序

  • 成为一个成功Jsp程序员的九步

    如何成为一个成功的Jsp程序员?一个普通的错误是把JSP当作简化的 Java.它不是,(事实上, JSP 是简化的 servlets .)程序员通常试着没有学习要求的支持技巧而 直接学习 JSP .JSP 是一个衔接技术,并且成功地连接你需要理解的另外的技术.如果你已经知道 Java,HTML 和 Javascript,这意味着 JSP 将确实是简单的. 需要成为一个成功的 JSP 程序员可以参考这个时间表.请注意下列: *忽略你已经熟悉的步骤. *训练的时间只是代表学习好足够的基础时间,这样才

  • 每个程序员都应该学习使用Python或Ruby

    如果你是个学生,你应该会C,C++和Java.还会一些VB,或C#/.NET.多少你还可能开发过一些Web网页,你知道一些HTML,CSS和JavaScript知识.总体上说,我们很难发现会有学生显露出掌握超出这几种语言范围外的语言的才能.这真让人遗憾,因为还有很多种编程语言,它们能让你成为一个更好的程序员. 在这篇文章里,我将会告诉你,为什么你一定要学习Python或Ruby语言. 跟C/C++/Java相比 - Python/Ruby能让你用少的多的多的代码写出相同的程序.有人计算过,Pyt

  • 8种类型极品程序员,不知你属于哪一种?

    在日常工作里肯定会发现很多有趣的事情,极品程序员所做的事就是很有意思的.事实上,现在所讨论的极品程序员主要是从他们的判断力.行为举止.个人态度和匪夷所思的工作方式上来判断的,有的时候这些程序员一味的只是追求文档上的内容,而不擅于用分析方式来解决问题. 几乎每一个软件开发者多多少少都会出现头脑短路的现象,也就是说,下面所列举的各种极品程序员类型,总有一款是属于你的. 1. 钟爱型程序员:万般宠爱集于一种技术 这种类型的程序员所遇到的致命错误就是:只钟爱一种技术,对别的技术不来电.其实这不是什么值得

  • 最有价值的50道java面试题 适用于准入职Java程序员

    下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面试题集参照了JDK最新版本,去掉了EJB 2.x等无用内容,补充了数据结构和算法相关的题目.经典面试编程题.大型网站技术架构.操作系统.数据库.软件测试.设计模式.UML等内容,同时还对很多知识点进行了深入的剖析,例如hashCode方法的设计.垃圾收集的堆和代.Java新的并发编程.NIO.2等,相信对准备入职的Ja

  • 一个合格的程序员应该读过哪些书(偏java)

    很多程序员响应,他们在推荐时也写下自己的评语. 以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书. 其实除了前10本之外,推荐数前30左右的书籍都算经典,笔者整理编译这个问答贴,同时摘译部分推荐人的评语. 下面就按照各本书的推荐数排列. 1.<代码大全> 史蒂夫·迈克康奈尔 推荐数:1684 "优秀的编程实践的百科全书,<代码大全>注重个人技术,其中所有东西加起来, 就是我们本能所说的"编写整洁的代码".这本书有50页在谈论代码布局

  • 程序员编程从初级到中级的10个秘诀

    这个观点很好,有关程序员如何从初级跃升到中级的信息极少.以下是为了实现这种转变需要你去做的10件事. 1.学习另一门语言 其实你学的是哪一门语言并没有关系,但是学习另一门语言(不管你已经了解多少种语言)将把你打造为更好的程序员.能学会一门与你日常使用的语言风格迥异的语言则更佳.打个比方,如果你是C#程序员,学习VB.NET或者Java对你的帮助就没有学习Ruby或者Groovy大. 我说"学另一门语言"的意思是要真正学会它.学习一门语言包括三个领域的知识:语法.内置操作符和库,以及&q

随机推荐