Microsoft visual Studio 2015 下的俄罗斯方块源程序以及修改过程

本文介绍了一款在Microsoft Visual Studio 2015环境下用C++编写的俄罗斯方块游戏。在开发过程中遇到了使用`clrscr()`函数的错误,由于该函数在VC平台不被支持,解决方案是将其替换为`system("cls")`并引入`<stdlib.h>`头文件。同时,文章也展示了如何解决`kbhit()`和`getch()`函数的错误,分别更改为`_kbhit()`和`_gech()`。游戏包含了各种方块形态的操作,如旋转、移动等,并提供了得分和等级显示功能。
摘要由CSDN通过智能技术生成


项目名称:俄罗斯方块

项目语言:C++

项目软件: Microsoft visual Studio 2015 

错误1

错误提要:错误使用标识符

错误定位:

clrscr() 

错误提示:

未定义标识符“clrscr”

  • 解决方案一:
  • 将clrscr();替换成 system("cls");  再加#include<stdlib.h>头文件
  • 错误原因:
  • 1.clrscr()是在头文件conio.h下的函数,原型是void clrscr(void)
  • 2.在VC平台下,显然是不能使用控制台语句conio的,而在TC平台则可以

错误2

错误提要:

错误定位: 

kbhit()

gech()

错误提示:


解决方案:

kbhit()    改为   _kbhit()

gech()   改为   _gech()

可运行源码:

  • #include <iostream>
  • #include<conio.h>
  • #include <stdlib.h>
  • #include<time.h>
  • using namespace std;
  • int z=1,a,b=1,c;
  • const int kd=12;
  • const int zkd=18;
  • const int gd=21;
  • const int xfk=10;
  • int fs=0,dj=1,lsfs=0; //统计分数的变量
  • int dx1,dx2,dx3,dx4,dy1,dy2,dy3,dy4;  //打方块坐标
  • int xdx1=5+xfk,xdx2=4+xfk,xdx3=5+xfk,xdx4=4+xfk,xdy1=1,xdy2=1,xdy3=2,xdy4=2; //小方块坐标
  • int map[zkd][gd];  //一个二维数组来决定整个画面


  • int sjs (int); //返回一个随机数大小由参数决定
  • void csxz (int); //创建一个新的大方块
  • void csxzx (int);//创建一个新的小方块
  • void csh(); //游戏的轮廓
  • void cout_map(); //输出map
  • void xz (int,int); //改变当前方块的形态
  • void zytjzs (int); //左右控制方块
  • void zytj (int,int,int); //左右控制方块
  • void xtjzs (); //下移方块
  • int xtj (int,int); //下移方块
  • int jstj (); //结束条件
  • void dfpl (int,int); //消除后的排序
  • void dftj (); //消除
  • int main (){
  • srand((unsigned)time(NULL));
  • int lsx=0,lsxy=60,lsy=lsxy; //快速下降时用到的变量
  • char k='\0';
  • csh();
  • c=sjs(6); //取一个随机数
  • a=sjs(6);//取一个随机数
  • csxz (a);//通过随机数创建一个大方块
  • csxzx (c);//通过随机数创建一个小方块
  • while (z==1){
  • for (long i=0;i<6000000;i++);
  • if (kbhit()){
  • k=getch();
  • }
  • if (k=='5'){
  • b++;
  • if (b>4)b=1;
  • xz (a,b); //改变方块的形态  a是当前方块 b是当前的四个形态
  • }
  • if (k=='4'){
  • zytj (a,b,4); //向左控制
  • }
  • if (k=='6'){
  • zytj (a,b,6);//向右控制
  • }
  • if (k=='8'){lsy=2;}
  • lsx++;
  • if (lsx>lsy){
  • if (xtj (a,b)==0){
  • dftj ();
  • if (jstj ()==1){
  • z=0;
  • }else{
  • lsy=lsxy;
  • a=c;
  • c=sjs(6);
  • b=1;
  • csxz (a);
  • csxzx (c);
  • }
  • }
  • lsx=0;
  • }
  • if (lsfs==5){
  • dj++;
  • if (lsxy>3)lsxy--;
  • lsfs=0;
  • }
  • k='\0';
  • clrscr();
  • cout_map();
  • }
  • cout<<"游戏结束!";
  • return 0;
  • }
  • void csh(){
  • for (int y=0;y<gd;y++){
  • for (int x=0;x<zkd;x++)map[x][y]=0;
  • }
  • for (int x=0;x<zkd;x++){map[x][0]=1;map[x][gd-1]=1;}
  • for (int y=0;y<gd;y++){map[0][y]=2;map[kd-1][y]=2;map[zkd-1][y]=2;}
  • for (int x=12;x<zkd-1;x++)map[x][10]=1;
  • map[0][0]=0;map[kd-1][0]=0;map[0][gd-1]=0;map[kd-1][gd-1]=0;map[zkd-1][gd-1]=0;map[zkd-1][0]=0;
  • map[kd+1][18]=5;map[kd][18]=4;
  • map[kd+2][18]=12;
  • map[kd+4][18]=7;map[kd+3][18]=6;

  • map[kd+1][16]=9;map[kd][16]=8;
  • map[kd+2][16]=12;
  • map[kd+4][16]=11;map[kd+3][16]=10;
  • }
  • void cout_map(){
  • for (int y=0;y<gd;y++){
  • for (int x=0;x<zkd;x++){
  • if (map[x][y]==0)cout<<"  ";
  • if (map[x][y]==1)cout<<"一";
  • if (map[x][y]==2)cout<<"丨";
  • if (map[x][y]==3)cout<<"口";
  • if (map[x][y]==4)cout<<"分";
  • if (map[x][y]==5)cout<<"数";
  • if (map[x][y]==12)cout<<": ";
  • if (map[x][y]==6){
  • if (fs>999&&fs<10000)cout<<fs/100;
  • if (fs>99&&fs<1000)cout<<" "<<fs/100;
  • if (fs<100)cout<<"  ";
  • }
  • if (map[x][y]==7){
  • if (fs>999&&fs<10000){
  • if (fs%1000<10)cout<<"0"<<fs%1000;
  • if (fs%1000>99){
  • if ((fs%1000)%100<10){
  • cout<<"0"<<(fs%1000)%100;
  • }else{
  • cout<<(fs%1000)%100;
  • }
  • }
  • if (fs%1000<100&&fs%1000>9)cout<<fs%1000;
  • }
  • if (fs>99&&fs<1000){
  • if (fs%100<10){
  • cout<<"0"<<fs%100;
  • }else{
  • cout<<fs%100;
  • }
  • }
  • if (fs>9&&fs<100)cout<<fs;
  • if (fs<10)cou
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值