基于VC 6.0使用C语言实现俄罗斯方块

本文实例为大家分享了C语言实现俄罗斯方块的具体代码,供大家参考,具体内容如下

裸写的俄罗斯方块的代码,有意见或者想征用,直接评论留言即可。

效果如下:

代码:

/***************************************************************/
/*俄罗斯方块的实现
* 基于VC 6.0 编译链接即可运行
* 已实现的功能:
* 1、初步的规划及背景图案的显示
* 2、四种方块实现左右移动、下键加速、上键变形(两种变形)功能
* 3、下落方块碰壁及触碰到其它方块的检测
* 4、方块积满一行的消除并加分的功能
* 5、预测方块的功能
* 6、引入set_windows_pos函数解决闪屏问题
* 未解决的缺陷或者代码存在的问题
* 1、预测方块处莫名其妙的出现背景块
* 2、代码耦合性太高,接口封装还是不够好
* 2017.3.22
* 版权:通渭县西关小学四年级一班田刚
*/
/***************************************************************/
#include<stdio.h>
#include<windows.h>
#include<conio.h>
#include<string.h> 

#define BACK        176//背景图案
#define BACK_INT      -80//背景的整数表示
#define FRAME        178//分割框图案
#define NODE        219//方块图案
#define NODE_INT      -37//方块的整数表示
#define ERROR        -1
#define OK         0 

int score = 0;//计分
static int time = 500;//时间,初始为500毫秒
char back[20][30] = {0};//竖直为x轴,横轴为y轴,原点在右上角
int block_type = 0;//方块类型 

void backgroud_init(void);//画面背景的初始化
void set_windows_pos(int i, int j);//指定光标位置
void block_display(int block_type, int dir_type, int coor_x, int coor_y, int color_type);//显示或者消除方块
void time_add(void);//加速函数
void block_type_change(void);//方块类型变化
int block_move_check_x(int block_type, int dir_type, int coor_x, int coor_y);//检测方块是否触到下面已经停止的方块
int block_move_check_y(int block_type, int dir_type, int coor_x, int coor_y, int dir_block);//检测方块是否触碰到左右的方块
int new_back_y_check(int block_type, int dir_type, int coor_y);//检测方块是否触碰到墙壁
int block_clear_sort(void);//检测是否满一行,需要消除得分
void block_clear_x(int row);//消除一个满行(都是方块) 

int main(void)
{
  int c = 0;
  int new_dir_type = 0;//新的方块方向
  int befor_dir_type = 0;//旧的方块方向
  int new_back_x = 0;//新的方块头坐标x
  int new_back_y = 0;//新的方块头坐标y
  int befor_back_x = 0;//旧的方块头坐标x
  int befor_back_y = -1;//旧的方块头坐标y
  int block_dir = -1;//方块的移动方向 

  backgroud_init();//背景的显示 

  while(1)
  { 

    block_type_change();//方块类型变化
    new_back_y = 8;//每次方块从最顶端出现时,其y坐标都为8
    time = 500; 

    //怎样在这里清除键盘输入,flush不起作用 

    for(new_back_x = 0; new_back_x < 20; new_back_x++)
    {
      befor_dir_type = new_dir_type;
      befor_back_x = new_back_x - 1;
      befor_back_y = new_back_y;
      block_dir = -1;//方块的方向变量初始为-1 

      block_display(block_type, 0, 17, 26, NODE);//画上预测区域的方块 

      if(kbhit())//检测有输入
      {
        c = getch();
        if(c > 0)
        {
          switch(c)
          {
            case 119://上
                if(0 == new_dir_type)
                {
                  new_dir_type = 1;//竖向
                }
                else
                {
                  new_dir_type = 0;//横向
                }
                break;
            case 97://左
                new_back_y--;
                block_dir = 0;
                break;
            case 100://右
                new_back_y++;
                block_dir = 1;
                break;
            case 115://下
                time_add();//加速
                break;
            default://ESC
                break;
          }
        }
      } 

      new_back_y = new_back_y_check(block_type, new_dir_type, new_back_y);//检查是否触碰到左右壁  

      block_display(block_type, befor_dir_type, befor_back_x, befor_back_y, BACK);//原来的方块位置清除掉 

      if(-1 != block_dir)//左右移动了方块
      {
        if(ERROR == block_move_check_y(block_type, new_dir_type, new_back_x, new_back_y, block_dir))//检查移动的方块是触碰到左右的方块
        {
          new_back_y = befor_back_y;
        }
      } 

      block_display(block_type, new_dir_type, new_back_x, new_back_y, NODE);//画下一个方块位置 

      if(ERROR == block_move_check_x(block_type, new_dir_type, new_back_x, new_back_y))//检查移动的方块是否触发到下面的方块
      {
        break;
      } 

      Sleep(time);
    } 

    block_display(block_type, 0, 17, 26, BACK);//清楚预测区域的方块  

    if(OK == block_clear_sort())//检查下面方块是否等够得分,能得分则消除得分
    {
      set_windows_pos(8, 22);//更新得分
      printf("%d", score);
    }
  } 

  return 0;
} 

/***************************************************************/
/***        画面背景的初始化             ***/
/***其中原点在右上角,竖轴为x轴,横轴为y轴。y(0 - 19)为方块区***/
/***域,20 - 30 为计分区域及方块预测提示区域         ***/
/***************************************************************/
void backgroud_init(void)
{
  int x = 0, y = 0; 

  for(x = 0; x < 20; x++)
  {
    for(y = 0; y < 20; y++)
    {
      back[x][y] = BACK;
    }
  } 

  for(x = 0; x < 20; x++)
  {
    for(y = 20; y < 30; y++)
    {
      if((0 == x) || (4 == x) || (10 == x) || (19 == x))
      {
        back[x][y] = FRAME;
      } 

      if((20 == y) || (29 == y))
      {
        back[x][y] = FRAME;
      }
    }
  } 

  //背景图案的显示
  for(x = 0; x < 20; x++)
  {
    for(y = 0; y < 30; y++)
    {
      printf("%c", back[x][y]);
    } 

    printf("\n");
  } 

  //显示TETRIS
  set_windows_pos(2, 22);//移动windows的光标
  printf("TETRIS\n"); 

  //显示积分
  set_windows_pos(6, 22);//移动windows的光标
  printf("SORT\n");
  set_windows_pos(8, 22);
  printf("%d\n", score); 

  //显示下一个要出现的方块
  set_windows_pos(12, 22);//移动windows的光标
  printf("EXPECT\n");
} 

/***************************************************************/
/***    设置windows光标,类似于TC中的gotoxy       ***/
/***i,j 为要传入的x,y坐标                  ***/
/***************************************************************/
void set_windows_pos(int i, int j)//设置windows光标,类似于TC中的gotoxy
{
  /*if((0 > i) || (0 > j))
  {
    return ERROR;
  }*/ 

  /*windows的横轴是x轴,而本程序设计的是竖轴是X轴
   这里做个转换*/
  COORD pos={j,i};
  HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
  SetConsoleCursorPosition(hOut,pos);
}   

/***************************************************************/
/***********************消除/填上方块***************************/
/***输入:block_type 方块类型 1:长条 2:2型 3:7型 4:田型***/
/***输入:dir_type 方向类型 0:横向 1:竖向         ***/
/***输入:coor_x coor_y  方块当前头的坐标          ***/
/***输入:color_type  图标类型  BACK 背景色 NODE 方块色  ***/
/***初始coor_x,coor_y为一个方块的最右下的一个方块的坐标   ***/
/***************************************************************/
void block_display(int block_type, int dir_type, int coor_x, int coor_y, int color_type)
{
  int x = 0, y = 0; 

  switch (block_type)
  {
    case 1://长条
      if(0 == dir_type)//横向
      {
        for(y = coor_y; y >= (coor_y - 3); y--)
        {
          back[coor_x][y] = color_type;//方块色
          set_windows_pos(coor_x, y);//移动windows的光标
          printf("%c", back[coor_x][y]);
        }
      }
      else if(1 == dir_type)//竖向
      {
        for(x = coor_x; (x >= (coor_x - 3)) && (x >= 0); x--)
        {
          back[x][coor_y] = color_type;//方块色
          set_windows_pos(x, coor_y);//移动windows的光标
          printf("%c", back[x][coor_y]);
        }
      }
      else
      {
        printf("dir_type is error!\n");
      }
      break;
    case 2://2型
      if(0 == dir_type)//横向
      {
        for(y = coor_y; y >= coor_y - 1; y--)
        {
          back[coor_x][y] = color_type;//方块色
          set_windows_pos(coor_x, y);//移动windows的光标
          printf("%c", back[coor_x][y]);
        } 

        coor_x--;
        coor_y--; 

        if(coor_x < 0)
        {
          return;
        } 

        for(y = coor_y; y >= coor_y - 1; y--)
        {
          back[coor_x][y] = color_type;//方块色
          set_windows_pos(coor_x, y);//移动windows的光标
          printf("%c", back[coor_x][y]);
        }
      }
      else if(1 == dir_type)//竖向
      {
        for(x = coor_x; (x >= coor_x - 1) && (x >= 0); x--)
        {
          back[x][coor_y] = color_type;//方块色
          set_windows_pos(x, coor_y);//移动windows的光标
          printf("%c", back[x][coor_y]);
        } 

        coor_x--;
        coor_y--; 

        if(coor_x < 0)
        {
          return;
        } 

        for(x = coor_x; x >= coor_x - 1; x--)
        {
          back[x][coor_y] = color_type;//方块色
          set_windows_pos(x, coor_y);//移动windows的光标
          printf("%c", back[x][coor_y]);
        }
      }
      else
      {
        printf("dir_type is error!\n");
      }
      break;
    case 3://7型
      if(0 == dir_type)//横向
      {
        for(y = coor_y; y >= coor_y - 2; y--)
        {
          back[coor_x][y] = color_type;//方块色
          set_windows_pos(coor_x, y);//移动windows的光标
          printf("%c", back[coor_x][y]);
        } 

        coor_x--;
        coor_y = coor_y - 2; 

        if(coor_x < 0)
        {
          return;
        } 

        back[coor_x][coor_y] = color_type;//方块色
        set_windows_pos(coor_x, coor_y);//移动windows的光标
        printf("%c", back[coor_x][coor_y]);
      }
      else if(1 == dir_type)//竖向
      {
        for(x = coor_x; (x >= coor_x - 2) && (x >= 0); x--)
        {
          back[x][coor_y] = color_type;//方块色
          set_windows_pos(x, coor_y);//移动windows的光标
          printf("%c", back[x][coor_y]);
        } 

        coor_x = coor_x - 2;
        coor_y--; 

        if(coor_x < 0)
        {
          return;
        } 

        back[coor_x][coor_y] = color_type;//方块色
        set_windows_pos(coor_x, coor_y);//移动windows的光标
        printf("%c", back[coor_x][coor_y]); 

      }
      else
      {
        printf("dir_type is error!\n");
      }
      break;
    case 4://田型
      if((0 == dir_type) || (1 == dir_type))//横向
      {
        for(y = coor_y; y >= coor_y - 1; y--)
        {
          back[coor_x][y] = color_type;//方块色
          set_windows_pos(coor_x, y);//移动windows的光标
          printf("%c", back[coor_x][y]);
        } 

        coor_x--; 

        if(coor_x < 0)
        {
          return;
        } 

        for(y = coor_y; y >= coor_y - 1; y--)
        {
          back[coor_x][y] = color_type;//方块色
          set_windows_pos(coor_x, y);//移动windows的光标
          printf("%c", back[coor_x][y]);
        }
      }
      else
      {
        printf("dir_type is error!\n");
      }
      break;
    default:
      printf("block_type is error!\n");
      break;
  }
} 

void time_add(void)//加速函数
{
  if(500 == time)
  {
    time = 100;//减少的100毫秒
  }
  else if(100 == time)
  {
    time = 500;
  }
  else
  {
    ;//暂时留空
  }
} 

void block_type_change(void)//方块类型变化
{
  block_type++; 

  if(block_type > 4)
  {
    block_type = 1;
  }
} 

/***************************************************************/
/*******************方块y坐标撞墙检测***************************/
/***输入:block_type 方块类型 1:长条 2:2型 3:7型 4:田型***/
/***输入:dir_type 方向类型 0:横向 1:竖向         ***/
/***输入:coor_y  方块当前头(右下角第一个方块)的坐标     ***/
/***************************************************************/
int new_back_y_check(int block_type, int dir_type, int coor_y)
{
  if(coor_y > 19)
  {
    coor_y = 19;
  } 

  switch (block_type)
  {
    case 1://长条
      if(0 == dir_type)//横向
      {
        if(coor_y - 3 < 0)
        {
          coor_y = 3;
        }
      }
      else if(1 == dir_type)//竖向
      {
        if(coor_y < 0)
        {
          coor_y = 0;
        }
      }
      else
      {
        printf("dir_type is error!\n");
      }
      break;
    case 2://2型
      if(0 == dir_type)//横向
      {
        if(coor_y - 2 < 0)
        {
          coor_y = 2;
        }
      }
      else if(1 == dir_type)//竖向
      {
        if(coor_y - 1 < 0)
        {
          coor_y = 1;
        }
      }
      else
      {
        printf("dir_type is error!\n");
      }
      break;
    case 3://7型
      if(0 == dir_type)//横向
      {
        if(coor_y - 2 < 0)
        {
          coor_y = 2;
        }
      }
      else if(1 == dir_type)//竖向
      {
        if(coor_y - 1 < 0)
        {
          coor_y = 1;
        }
      }
      else
      {
        printf("dir_type is error!\n");
      }
      break;
    case 4://田型
      if((0 == dir_type) || (1 == dir_type))//横向
      {
        if(coor_y - 1 < 0)
        {
          coor_y = 1;
        }
      }
      else
      {
        printf("dir_type is error!\n");
      }
      break;
    default:
      printf("block_type is error!\n");
      break;
  } 

  return coor_y;
} 

/*
检查方块是否触到下面已经停止的方块,触碰到就返回ERROR
*/
/***************************************************************/
/****检查方块是否触到下面已经停止的方块,触碰到就返回ERROR  ***/
/***输入:block_type 方块类型 1:长条 2:2型 3:7型 4:田型***/
/***输入:dir_type 方向类型 0:横向 1:竖向         ***/
/***输入:coor_x coor_y  方块当前头的坐标          ***/
/***初始coor_x,coor_y为一个方块的最右下的一个方块的坐标   ***/
/***************************************************************/
int block_move_check_x(int block_type, int dir_type, int coor_x, int coor_y)
{
  int ret = OK;
  int x = 0, y = 0; 

  switch (block_type)
  {
    case 1://长条
      if(0 == dir_type)//横向
      {
        for(y = coor_y; y >= coor_y - 3; y--)
        {
          if(NODE_INT == back[coor_x + 1][y])
          {
            ret = ERROR;
            break;
          }
        }
      }
      else if(1 == dir_type)//竖向
      {
        if(NODE_INT == back[coor_x + 1][coor_y])
        {
          ret = ERROR;
        }
      }
      else
      {
        printf("dir_type is error!\n");
      }
      break;
    case 2://2型
      if(0 == dir_type)//横向
      {
        for(y = coor_y; y >= coor_y - 1; y--)
        {
          if(NODE_INT == back[coor_x + 1][coor_y])
          {
            ret = ERROR;
            break;
          }
        } 

        coor_x--;
        coor_y =coor_y - 2 ; 

        if(NODE_INT == back[coor_x + 1][coor_y])
        {
          ret = ERROR;
        }
      }
      else if(1 == dir_type)//竖向
      {
        if(NODE_INT == back[coor_x + 1][coor_y])
        {
          ret = ERROR;
        } 

        coor_x--;
        coor_y--; 

        if(NODE_INT == back[coor_x + 1][coor_y])
        {
          ret = ERROR;
        }
      }
      else
      {
        printf("dir_type is error!\n");
      }
      break;
    case 3://7型
      if(0 == dir_type)//横向
      {
        for(y = coor_y; y >= coor_y - 2; y--)
        {
          if(NODE_INT == back[coor_x + 1][y])
          {
            ret = ERROR;
            break;
          }
        }
      }
      else if(1 == dir_type)//竖向
      {
        if(NODE_INT == back[coor_x + 1][coor_y])
        {
          ret = ERROR;
        } 

        coor_x = coor_x - 2;
        coor_y--; 

        if(NODE_INT == back[coor_x + 1][coor_y])
        {
          ret = ERROR;
        }
      }
      else
      {
        printf("dir_type is error!\n");
      }
      break;
    case 4://田型
      if((0 == dir_type) || (1 == dir_type))//横向
      {
        for(y = coor_y; y >= coor_y - 1; y--)
        {
          if(NODE_INT == back[coor_x + 1][y])
          {
            ret = ERROR;
            break;
          }
        }
      }
      else
      {
        printf("dir_type is error!\n");
      }
      break;
    default:
      printf("block_type is error!\n");
      break;
  } 

  return ret;
} 

/***************************************************************/
/****检查方块在向下移动的过程中是否触到左右的方块      ***/
/***输入:block_type 方块类型 1:长条 2:2型 3:7型 4:田型***/
/***输入:dir_type 方向类型 0:横向 1:竖向         ***/
/***输入:coor_x coor_y  方块当前头(右下)的坐标      ***/
/***输入:dir_block  当前方块的移动方向(左右)        ***/
/***************************************************************/
int block_move_check_y(int block_type, int dir_type, int coor_x, int coor_y, int dir_block)
{
  int x = 0, y = 0;
  int ret = OK; 

  switch (block_type)
  {
    case 1://长条
      if(0 == dir_type)//横向
      {
        if(1 == dir_block)//右移
        {
          if(NODE_INT == back[coor_x][coor_y])
          {
            ret = ERROR;
          }
        }
        else if(0 == dir_block)//左移
        {
          if(NODE_INT == back[coor_x][coor_y - 3])
          {
            ret = ERROR;
          }
        }
        else
        {
          printf("dir_block is error!");
        }
      }
      else if(1 == dir_type)//竖向
      {
        //当长条为竖向时,不用判断长条是往左移还是往右移
        for(x = coor_x; x >= coor_x - 3; x--)
        {
          if(NODE_INT == back[x][coor_y])
          {
            ret = ERROR;
            break;
          }
        }
      }
      else
      {
        printf("dir_type is error!\n");
      }
      break;
    case 2://2型
      if(0 == dir_type)//横向
      {
        if(1 == dir_block)//右移
        {
          if(NODE_INT == back[coor_x][coor_y])
          {
            ret = ERROR;
            break;
          } 

          if(NODE_INT == back[coor_x - 1][coor_y - 1])
          {
            ret = ERROR;
          }
        }
        else if(0 == dir_block)//左移
        {
          if(NODE_INT == back[coor_x][coor_y - 1])
          {
            ret = ERROR;
            break;
          } 

          if(NODE_INT == back[coor_x - 1][coor_y - 2])
          {
            ret = ERROR;
          }
        }
        else
        {
          printf("dir_block is error!");
        }
      }
      else if(1 == dir_type)//竖向
      {
        if(1 == dir_block)//右移
        {
          for(x = coor_x; x >= coor_x - 1; x--)
          {
            if(NODE_INT == back[x][coor_y])
            {
              ret = ERROR;
              break;
            }
          } 

          if(NODE_INT == back[coor_x - 2][coor_y - 1])
          {
            ret = ERROR;
          }
        }
        else if(0 == dir_block)//左移
        {
          if(NODE_INT == back[coor_x][coor_y])
          {
            ret = ERROR;
            break;
          } 

          coor_x--;
          coor_y--; 

          for(x = coor_x; x >= coor_x - 1; x--)
          {
            if(NODE_INT == back[x][coor_y])
            {
              ret = ERROR;
              break;
            }
          }
        }
        else
        {
          printf("dir_block is error!");
        }
      }
      else
      {
        printf("dir_type is error!\n");
      }
      break;
    case 3://7型
      if(0 == dir_type)//横向
      {
        if(1 == dir_block)//右移
        {
          if(NODE_INT == back[coor_x][coor_y])
          {
            ret = ERROR;
            break;
          } 

          if(NODE_INT == back[coor_x - 1][coor_y - 2])
          {
            ret = ERROR;
          }
        }
        else if(0 == dir_block)//左移
        {
          if(NODE_INT == back[coor_x][coor_y - 2])
          {
            ret = ERROR;
            break;
          } 

          if(NODE_INT == back[coor_x - 1][coor_y - 2])
          {
            ret = ERROR;
          }
        }
        else
        {
          printf("dir_block is error!");
        }
      }
      else if(1 == dir_type)//竖向
      {
        if(1 == dir_block)//右移
        {
          for(x = coor_x; (x >= coor_x - 2) && (x >= 0); x--)
          {
            if(NODE_INT == back[x][coor_y])
            {
              ret = ERROR;
              break;
            }
          }
        }
        else if(0 == dir_block)//左移
        {
          for(x = coor_x - 1; (x >= coor_x - 2) && (x >= 0); x--)
          {
            if(NODE_INT == back[x][coor_y])
            {
              ret = ERROR;
              break;
            }
          } 

          coor_x = coor_x - 2;
          coor_y--; 

          if(NODE_INT == back[coor_x][coor_y])
          {
            ret = ERROR;
          }
        }
        else
        {
          printf("dir_block is error!");
        }
      }
      else
      {
        printf("dir_type is error!\n");
      }
      break;
    case 4://田型
      if((0 == dir_type) || (1 == dir_type))//横向
      {
        if(1 == dir_block)//右移
        {
          for(x = coor_x; x >= coor_x - 1; x--)
          {
            if(NODE_INT == back[x][coor_y])
            {
              ret = ERROR;
              break;
            }
          }
        }
        else if(0 == dir_block)//左移
        {
          for(x = coor_x; x >= coor_x - 1; x--)
          {
            if(NODE_INT == back[x][coor_y - 1])
            {
              ret = ERROR;
              break;
            }
          }
        }
        else
        {
          printf("dir_block is error!");
        }
      }
      else
      {
        printf("dir_type is error!\n");
      }
      break;
    default:
      printf("block_type is error!\n");
      break;
  } 

  return ret;
} 

void block_clear_x(int row)//消除某一行
{
  int x = 0, y = 0; 

  char back_replace[20][30] = {0};//替代back 

  memcpy(back_replace, back, sizeof(back));//将back暂存到back_replace中 

  for(x = 0; x <= row; x++)
  {
    for(y = 0; y < 20; y++)
    {
      back[x][y] = BACK;//初始化未背景色
    }
  } 

  for(x = row; x >= 1; x--)
  {
    for(y = 0; y < 20; y++)
    {
      back[x][y] = back_replace[x - 1][y];//消除一行,方块下沉
    }
  } 

  set_windows_pos(0, 0);//移动windows的光标 

  for(x = 0; x < 20; x++)
  {
    for(y = 0; y < 20; y++)
    {
      printf("%c", back[x][y]);
    } 

    printf("\n");
  }
} 

/*
检查是否消行并且进行计分
*/
int block_clear_sort(void)
{
  int x = 0, y = 0;
  int ret = ERROR;
  int flag = 0; 

  for(x = 19; x >= 0; x--)//行
  {
    flag = 0; 

    for(y = 0; y < 20; y++)
    {
      if(NODE_INT == back[x][y])
      {
        flag++;//一行的块计数
      } 

      if(20 == flag)//表示一行有20个方块
      {
        block_clear_x(x);//消行
        score++;//加分
        ret = OK;
      }
    }
  } 

  return ret;
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • VC++ 6.0 C语言实现俄罗斯方块详细教程

    今天把我之前写的大作业分享一下吧,并教你们如何实现,希望你们看了前面的教程也能自己写一个. 1.要先下载一个 graphics.h 的头文件来绘图. 2.初始化窗口:initgraph(x, y);这是先创建一个窗口的函数,以左上角为(0,0),向右为x轴,向下为y轴,其中x表示长x个单位,y表示宽y个单位. 3.关闭图像窗口:closegraph();结束时用来关闭用的. 4.按任意键继续:getch();这个就和getchar();差不多,为了防止以运行完就关了,这样能停顿一下,他的头文件是

  • C语言实现俄罗斯方块源代码

    本文实例为大家分享了C语言实现俄罗斯方块的具体代码,供大家参考,具体内容如下 GitHub:[C语言]实现俄罗斯方块源代码 Head.h #ifndef _HEAD_H_ #define _HEAD_H_ #include<graphics.h> #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<time.h> #include<string.h> #def

  • C语言Turbo C下实现俄罗斯方块

    本文实例为大家分享了C语言俄罗斯方块的具体代码,供大家参考,具体内容如下 #include <stdio.h> #include <dos.h> #include <conio.h> #include <graphics.h> #include <stdlib.h> #ifdef __cplusplus #define __CPPARGS ... #else #define __CPPARGS #endif #define MINBOXSIZE

  • C语言源码实现俄罗斯方块

    介绍 俄罗斯方块(Tetris, 俄文:Тетрис)是一款电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名.俄罗斯方块的基本规则是移动.旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分.由于上手简单.老少皆宜,从而家喻户晓,风靡世界. 源码 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> #includ

  • C语言实现俄罗斯方块小游戏

    C语言实现俄罗斯方块小游戏的制作代码,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #define TTY_PATH "/dev/tty" #define STTY_ON "stty raw -echo -F" #define STTY_OFF "stty -raw echo -F" int map[21][14]; char

  • 基于VC 6.0使用C语言实现俄罗斯方块

    本文实例为大家分享了C语言实现俄罗斯方块的具体代码,供大家参考,具体内容如下 裸写的俄罗斯方块的代码,有意见或者想征用,直接评论留言即可. 效果如下: 代码: /***************************************************************/ /*俄罗斯方块的实现 * 基于VC 6.0 编译链接即可运行 * 已实现的功能: * 1.初步的规划及背景图案的显示 * 2.四种方块实现左右移动.下键加速.上键变形(两种变形)功能 * 3.下落方块碰壁及触

  • 用VC++6.0实现石头剪刀布游戏的程序

    源程序是从网上看到的, geek_monkey于2015年3月3日修改了bug(输入字符非石头剪刀布都算是玩家赢) 编译环境为VC++6.0 增加"上帝模式"和数据统计,纯属娱乐. 我是C语言初学者,轻喷 复制代码 代码如下: #include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> int exist_in(char *arr1[][2],

  • HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天

    1.什么是WebSocket? WebSocket 是一种自然的全双工.双向.单套接字连接.使用WebSocket,你的HTTP 请求变成打开WebSocket 连接(WebSocket 或者WebSocket over TLS(TransportLayer Security,传输层安全性,原称"SSL"))的单一请求,并且重用从客户端到服务器以及服务器到客户端的同一连接.WebSocket 减少了延迟,因为一旦建立起WebSocket 连接,服务器可以在消息可用时发送它们.例如,和轮

  • mysql数据库详解(基于ubuntu 14.0.4 LTS 64位)

    1.mysql数据库的组成与相关概念 首先明白,mysql是关系型数据库,和非关系型数据库中最大的不同就是表的概念不一样. +整个mysql环境可以理解成一个最大的数据库:A +用mysql创建的数据库B是属于A的,是数据的仓库,相当于系统中的文件夹 +数据表C:是存放数据的具体场所,相当于系统中的文件,一个数据库B中包含若干个数据表C(注意此处的数据库B和A不一样) +记录D:数据表中的一行称为一个记录,因此,我们在创建数据表时,一定要创建一个id列,用于标识"这是第几条记录",id

  • 基于Vue 2.0的模块化前端 UI 组件库小结

    AT-UI 是一款基于 Vue.js 2.0 的轻量级.模块化前端 UI 组件库,主要用于快速开发 PC 网站产品. 专门为桌面应用程序构建,AT-UI 提供了一套 npm + webpack + babel 前端开发工作流程,以及一个体面的干净整洁的 UI 组件. 特性 基于 Vue 开发的 UI 组件 基于 npm + webpack + babel 的工作流,支持 ES2015 CSS 样式独立,保证不同的框架实现都能保持统一的 UI 风格( 详见: AT-UI Style) 提供友好的

  • 基于React Native 0.52实现轮播图效果

    本文基于React Native 0.52 Demo上传到Git了,有需要可以看看,写了新内容会上传的(Git地址) 一.总览 轮播图几乎是必备的效果,这里选择 react-native-swiper 来实现,效果如下图: 二.实现轮播图效果 1.通过npm安装react-native-swiper npm install react-native-swiper --save 2.在recommend.js引入react-native-swiper import Swiper from 'rea

  • 基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍

    如下所示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="css/bootstrap.css" rel="external nofollow" >

  • C语言实现俄罗斯方块课程设计

    本文实例为大家分享了C语言实现俄罗斯方块的具体代码,供大家参考,具体内容如下 该课程设计用VC++6.0操作如下: 1.文件->新建->文件->左边选C/C++ Header File->右边文件名命名为"tetris.h"->路径假定为桌面文件夹:tetris->确定.然后将下面红色字体标记的"头文件"代码粘贴至其中,保存并退出(或者关闭工作空间). 2.文件->新建->文件->左边选C/C++ Header

  • C语言实现俄罗斯方块的六种模式详程建议收藏

    --------写在前面-------- 第一次做标题党,大家轻喷哈.这个游戏是博主在大一c语言实训时独立完成的,所有内容均为原创.小游戏耗时5天完成,除了常见的单人模式外,增加了作弊模式,双人模式,计时赛等玩法,真滴很好玩哦.虽然现在看起来很简陋,但对于当时的我来说实属不易,从页面设计到游戏背景音乐的选取再到关键算法的编写,每一步都凝汇了自己的努力,通宵鏖战的画面依然历历在目.现在分享出来,一方面是希望可以帮助到大家,另一方面也想纪念美好的大一时光.源码地址放在文末了,大家自取. ------

随机推荐