NewTetrisScore.cppNewTetrisScore.cpp// newTetris.cpp : Defin
es the entry point for the console application.
//
#include"stdafx.h"
#include<stdlib.h>
#include<iostream>
#include<time.h>
#include<windows.h>
#define GAME_INTERVAL 20
#define DIR_DOWN 2
#define DIR_LEFT 4
#define DIR_RIGHT 6
#define DIR_ROTATE 5
usingnamespace std;
classTetrisShape{
public:
char shapeArray[4][4];
int shapeTopLeftX =6;
int shapeTopLeftY =0;
void populateShapeArray(int shape);
void rotate();
template<size_t rows, size_t cols>
void setShape(char(&shape)[rows][cols]);
TetrisShape(int shape){ populateShapeArray(shape);};
TetrisShape(){};
};
voidTetrisShape::rotate(){
char _shapeArray[4][4];
_shapeArray[0][0]= shapeArray[0][3]; _shapeArray[1][0]= sh
apeArray[0][2]; _shapeArray[2][0]= shapeArray[0][1]; _shapeA
rray[3][0]= shapeArray[0][0];
_shapeArray[0][1]= shapeArray[1][3]; _shapeArray[1][1]= sh
apeArray[1][2]; _shapeArray[2][1]= shapeArray[1][1]; _shapeA
rray[3][1]= shapeArray[1][0];
_shapeArray[0][2]= shapeArray[2][3]; _shapeArray[1][2]= sh
apeArray[2][2]; _shapeArray[2][2]= shapeArray[2][1]; _shapeA
rray[3][2]= shapeArray[2][0];
_shapeArray[0][3]= shapeArray[3][3]; _shapeArray[1][3]= sh
apeArray[3][2]; _shapeArray[2][3]= shapeArray[3][1]; _shapeA
rray[3][3]= shapeArray[3][0];
for(int _x =0; _x <4; _x++){
for(int _y =0; _y <4; _y++){
shapeArray[_x][_y]= _shapeArray[_x][_y];
}
}
}
voidTetrisShape::populateShapeArray(int shape){
switch(shape){
case1:
shapeArray[0][0]=' '; shapeArray[1][0]=' '; shapeArray[2][
0]=' '; shapeArray[3][0]=' ';
shapeArray[0][1]=' '; shapeArray[1][1]='X'; shapeArray[2]
[1]=' '; shapeArray[3][1]=' ';
shapeArray[0][2]=' '; shapeArray[1][2]='X'; shapeArray[2]
[2]=' '; shapeArray[3][2]=' ';
shapeArray[0][3]=' '; shapeArray[1][3]='X'; shapeArray[2]
[3]='X'; shapeArray[3][3]=' ';
break;
case2:
shapeArray[0][0]=' '; shapeArray[1][0]='X'; shapeArray[2]
[0]=' '; shapeArray[3][0]=' ';
shapeArray[0][1]=' '; shapeArray[1][1]='X'; shapeArray[2]
[1]=' '; shapeArray[3][1]=' ';
shapeArray[0][2]=' '; shapeArray[1][2]='X'; shapeArray[2]
[2]=' '; shapeArray[3][2]=' ';
shapeArray[0][3]=' '; shapeArray[1][3]='X'; shapeArray[2]
[3]=' '; shapeArray[3][3]=' ';
break;
case3:
shapeArray[0][0]=' '; shapeArray[1][0]=' '; shapeArray[2][
0]=' '; shapeArray[3][0]=' ';
shapeArray[0][1]=' '; shapeArray[1][1]='X'; shapeArray[2]
[1]=' '; shapeArray[3][1]=' ';
shapeArray[0][2]=' '; shapeArray[1][2]='X'; shapeArray[2]
[2]='X'; shapeArray[3][2]=' ';
shapeArray[0][3]=' '; shapeArray[1][3]=' '; shapeArray[2][
3]='X'; shapeArray[3][3]=' ';
break;
case4:
shapeArray[0][0]=' '; shapeArray[1][0]=' '; shapeArray[2][
0]=' '; shapeArray[3][0]=' ';
shapeArray[0][1]=' '; shapeArray[1][1]=' '; shapeArray[2][
1]='X'; shapeArray[3][1]=' ';
shapeArray[0][2]=' '; shapeArray[1][2]='X'; shapeArray[2]
[2]='X'; shapeArray[3][2]=' ';
shapeArray[0][3]=' '; shapeArray[1][3]='X'; shapeArray[2]
[3]=' '; shapeArray[3][3]=' ';
break;
case5:
shapeArray[0][0]=' '; shapeArray[1][0]=' '; shapeArray[2][
0]=' '; shapeArray[3][0]=' ';
shapeArray[0][1]=' '; shapeArray[1][1]=' '; shapeArray[2][
1]='X'; shapeArray[3][1]=' ';
shapeArray[0][2]=' '; shapeArray[1][2]=' '; shapeArray[2][
2]='X'; shapeArray[3][2]=' ';
shapeArray[0][3]=' '; shapeArray[1][3]='X'; shapeArray[2]
[3]='X'; shapeArray[3][3]=' ';
break;
case6:
shapeArray[0][0]=' '; shapeArray[1][0]=' '; shapeArray[2][
0]=' '; shapeArray[3][0]=' ';
shapeArray[0][1]=' '; shapeArray[1][1]=' '; shapeArray[2][
1]=' '; shapeArray[3][1]=' ';
shapeArray[0][2]=' '; shapeArray[1][2]='X'; shapeArray[2]
[2]='X'; shapeArray[3][2]=' ';
shapeArray[0][3]=' '; shapeArray[1][3]='X'; shapeArray[2]
[3]='X'; shapeArray[3][3]=' ';
break;
}
}
int score =0;
int currentShape =-
1;// this is going to represent the shape that is currently in play.
bool isDropping =false;// global that defines if a piece is current
ly falling - mainly for gameTick function.
int currentTick =0;
template<size_t rows, size_t cols>
void generateBucket(char(&bucket)[rows][cols]);// Creates a sli
ghtly pre-filled bucket.
void generateShapeStream();// Generate a stream of shapes.
void dropShape();// Draw the shape top/center.
bool moveShape(int direction);// Move the shape in the spec. dir
.
template<size_t rows, size_t cols>
bool gameTick(char(&bucket)[rows][cols],char(&perm_bucket)[
rows][cols]);// Handles what is going on in the game every seco
nd.
template<size_t rows, size_t cols>
void landShape(char(&bucket)[rows][cols]);// What to do when
the shape hits the bottom.
template<size_t rows, size_t cols>
int checkScore(char(&bucket)[rows][cols],char(&perm_bucket)[
rows][cols],int tempvar,int score);
template<size_t rows, size_t cols>
void drawBucket(char(&bucket)[rows][cols]);// Draws the curre
nt contents of the bucket.
template<size_t rows, size_t cols>
bool canEnter(int direction,char(&bucket)[rows][cols]);// Check
s if the shape can enter the space it is trying to drop into.
int getUserInput();// gets the key pressed from the user.
void setCursorTo(int x,int y);// Move the cursor to the appropria
te position
int previousX =6, previousY =0;
int shapes[256];
template<size_t rows, size_t cols>
int check_bucket(char(&bucket)[rows][cols]);
template<size_t rows, size_t cols>
void set_bucket(char(&bucket)[rows][cols],char(&perm_bucket)
[rows][cols]);
TetrisShape activeShape;
int main(){
// Two bucket arrays, one shown on the screen, the other with th
e permanent contents of the buckets (walls and any non-
moving shapes)
char bucket[12][25];
int score =0;
int tempvar =0;
char _bucket[12][25];
int shapes[256]={};
int shapeIndex =0;
bool gameOver =false;
generateBucket(bucket);
generateBucket(_bucket);
generateShapeStream();
drawBucket(bucket);
while(!gameOver){
gameOver = gameTick(bucket, _bucket);
Sleep(50);
checkScore(bucket, _bucket, tempvar, score);
cout <<"Your Score is: "<< score << endl;
currentTick++;
}
setCursorTo(25,6);
cout <<"GAME OVER";
system("pause");
}
void setCursorTo(int x,int y)
{
HANDLE handle;
COORD position;
handle =GetStdHandle(STD_OUTPUT_HANDLE);
position.X = x;
position.Y = y;
SetConsoleCursorPosition(handle, position);
}
/* generateBucket - takes a bucket array of any size and
* creates a semi-empty bucket, with a
* few random shapes in the bottom few lines. */
template<size_t rows, size_t cols>
void generateBucket(char(&bucket)[rows][cols]){
for(int w =0; w <12; w++){
for(int z =0; z <25; z++){
if(((w ==0)||(w ==11))&&(z ==0)){ bucket[w][z]='.';}
elseif(((w %12==0)||(w %12==11))&&((z >0)&&(z <24))){ buc
ket[w][z]='|';}
elseif(((w ==0)||(w ==11))&&(z ==24)){ bucket[w][z]='+';}
elseif(z ==24){ bucket[w][z]='-';}
else{ bucket[w][z]=' ';}
}
}
}
/* generateShapeStream - generates a pre-determined list of
* shapes that will fall from the sky. */
void generateShapeStream(){
// Initialize the random number generator
srand(time(NULL));
for(int i =0; i <256; i++){
shapes[i]= rand()%6+1;
}
//cout << "In generate shape..." << endl;
}
/* drawBucket - draws the actual bucket on the screen
* including the currently dropping shape. */
template<size_t rows, size_t cols>
void drawBucket(char(&bucket)[rows][cols]){
setCursorTo(0,0);
for(int w =0; w <25; w++){
for(int z =0; z <12; z++){
cout << bucket[z][w];
}
cout << endl;
}
}
/* gameTick - this function does all of the different
* processessing that happens throughout
* the game. This also returns false to
* stop the main loop once gameover has
* been reached */
template<size_t rows, size_t cols>
bool gameTick(char(&bucket)[rows][cols],char(&perm_bucket)[
rows][cols]){
drawBucket(bucket);
if(!isDropping){
currentShape++;
activeShape =TetrisShape(shapes[currentShape]);
if(!canEnter(DIR_DOWN, perm_bucket)){
returntrue;
}
else{
isDropping =true;
updateBucket(bucket,false);
}
}
else{
if(currentTick % GAME_INTERVAL ==1){
// we are on a drop interval.
if(canEnter(DIR_DOWN, perm_bucket)){
updateBucket(bucket, moveShape(DIR_DOWN));
}
else{
landShape(perm_bucket);
}
}
}
int direction = getUserInput();
if(canEnter(direction, perm_bucket)){
updateBucket(bucket, moveShape(direction));
}
if(!canEnter(DIR_DOWN, perm_bucket)){
landShape(perm_bucket);
set_bucket(bucket, perm_bucket);
}
returnfalse;
}
/* moveShape - Handles moving the shape in the bucket. */
bool moveShape(int direction){
previousX = activeShape.shapeTopLeftX;
previousY = activeShape.shapeTopLeftY;
switch(direction){
case DIR_DOWN:
activeShape.shapeTopLeftY++;
returnfalse;
break;
case DIR_RIGHT:
activeShape.shapeTopLeftX++;
returnfalse;
break;
case DIR_LEFT:
activeShape.shapeTopLeftX--;
returnfalse;
break;
case DIR_ROTATE:
activeShape.rotate();
returntrue;
break;

NewTetrisScore.cppNewTetrisScore.cpp newTetris.cpp  Defines t.docx

  • 1.
    NewTetrisScore.cppNewTetrisScore.cpp// newTetris.cpp :Defin es the entry point for the console application. // #include"stdafx.h" #include<stdlib.h> #include<iostream> #include<time.h> #include<windows.h> #define GAME_INTERVAL 20 #define DIR_DOWN 2 #define DIR_LEFT 4 #define DIR_RIGHT 6 #define DIR_ROTATE 5 usingnamespace std; classTetrisShape{ public: char shapeArray[4][4]; int shapeTopLeftX =6; int shapeTopLeftY =0; void populateShapeArray(int shape); void rotate(); template<size_t rows, size_t cols> void setShape(char(&shape)[rows][cols]); TetrisShape(int shape){ populateShapeArray(shape);}; TetrisShape(){}; };
  • 2.
    voidTetrisShape::rotate(){ char _shapeArray[4][4]; _shapeArray[0][0]= shapeArray[0][3];_shapeArray[1][0]= sh apeArray[0][2]; _shapeArray[2][0]= shapeArray[0][1]; _shapeA rray[3][0]= shapeArray[0][0]; _shapeArray[0][1]= shapeArray[1][3]; _shapeArray[1][1]= sh apeArray[1][2]; _shapeArray[2][1]= shapeArray[1][1]; _shapeA rray[3][1]= shapeArray[1][0]; _shapeArray[0][2]= shapeArray[2][3]; _shapeArray[1][2]= sh apeArray[2][2]; _shapeArray[2][2]= shapeArray[2][1]; _shapeA rray[3][2]= shapeArray[2][0]; _shapeArray[0][3]= shapeArray[3][3]; _shapeArray[1][3]= sh apeArray[3][2]; _shapeArray[2][3]= shapeArray[3][1]; _shapeA rray[3][3]= shapeArray[3][0]; for(int _x =0; _x <4; _x++){ for(int _y =0; _y <4; _y++){ shapeArray[_x][_y]= _shapeArray[_x][_y]; } } } voidTetrisShape::populateShapeArray(int shape){ switch(shape){ case1: shapeArray[0][0]=' '; shapeArray[1][0]=' '; shapeArray[2][ 0]=' '; shapeArray[3][0]=' '; shapeArray[0][1]=' '; shapeArray[1][1]='X'; shapeArray[2] [1]=' '; shapeArray[3][1]=' '; shapeArray[0][2]=' '; shapeArray[1][2]='X'; shapeArray[2] [2]=' '; shapeArray[3][2]=' '; shapeArray[0][3]=' '; shapeArray[1][3]='X'; shapeArray[2] [3]='X'; shapeArray[3][3]=' '; break;
  • 3.
    case2: shapeArray[0][0]=' '; shapeArray[1][0]='X';shapeArray[2] [0]=' '; shapeArray[3][0]=' '; shapeArray[0][1]=' '; shapeArray[1][1]='X'; shapeArray[2] [1]=' '; shapeArray[3][1]=' '; shapeArray[0][2]=' '; shapeArray[1][2]='X'; shapeArray[2] [2]=' '; shapeArray[3][2]=' '; shapeArray[0][3]=' '; shapeArray[1][3]='X'; shapeArray[2] [3]=' '; shapeArray[3][3]=' '; break; case3: shapeArray[0][0]=' '; shapeArray[1][0]=' '; shapeArray[2][ 0]=' '; shapeArray[3][0]=' '; shapeArray[0][1]=' '; shapeArray[1][1]='X'; shapeArray[2] [1]=' '; shapeArray[3][1]=' '; shapeArray[0][2]=' '; shapeArray[1][2]='X'; shapeArray[2] [2]='X'; shapeArray[3][2]=' '; shapeArray[0][3]=' '; shapeArray[1][3]=' '; shapeArray[2][ 3]='X'; shapeArray[3][3]=' '; break; case4: shapeArray[0][0]=' '; shapeArray[1][0]=' '; shapeArray[2][ 0]=' '; shapeArray[3][0]=' '; shapeArray[0][1]=' '; shapeArray[1][1]=' '; shapeArray[2][ 1]='X'; shapeArray[3][1]=' '; shapeArray[0][2]=' '; shapeArray[1][2]='X'; shapeArray[2] [2]='X'; shapeArray[3][2]=' '; shapeArray[0][3]=' '; shapeArray[1][3]='X'; shapeArray[2] [3]=' '; shapeArray[3][3]=' '; break; case5: shapeArray[0][0]=' '; shapeArray[1][0]=' '; shapeArray[2][ 0]=' '; shapeArray[3][0]=' '; shapeArray[0][1]=' '; shapeArray[1][1]=' '; shapeArray[2][ 1]='X'; shapeArray[3][1]=' '; shapeArray[0][2]=' '; shapeArray[1][2]=' '; shapeArray[2][
  • 4.
    2]='X'; shapeArray[3][2]=' '; shapeArray[0][3]=''; shapeArray[1][3]='X'; shapeArray[2] [3]='X'; shapeArray[3][3]=' '; break; case6: shapeArray[0][0]=' '; shapeArray[1][0]=' '; shapeArray[2][ 0]=' '; shapeArray[3][0]=' '; shapeArray[0][1]=' '; shapeArray[1][1]=' '; shapeArray[2][ 1]=' '; shapeArray[3][1]=' '; shapeArray[0][2]=' '; shapeArray[1][2]='X'; shapeArray[2] [2]='X'; shapeArray[3][2]=' '; shapeArray[0][3]=' '; shapeArray[1][3]='X'; shapeArray[2] [3]='X'; shapeArray[3][3]=' '; break; } } int score =0; int currentShape =- 1;// this is going to represent the shape that is currently in play. bool isDropping =false;// global that defines if a piece is current ly falling - mainly for gameTick function. int currentTick =0; template<size_t rows, size_t cols> void generateBucket(char(&bucket)[rows][cols]);// Creates a sli ghtly pre-filled bucket. void generateShapeStream();// Generate a stream of shapes. void dropShape();// Draw the shape top/center. bool moveShape(int direction);// Move the shape in the spec. dir . template<size_t rows, size_t cols> bool gameTick(char(&bucket)[rows][cols],char(&perm_bucket)[ rows][cols]);// Handles what is going on in the game every seco nd. template<size_t rows, size_t cols> void landShape(char(&bucket)[rows][cols]);// What to do when
  • 5.
    the shape hitsthe bottom. template<size_t rows, size_t cols> int checkScore(char(&bucket)[rows][cols],char(&perm_bucket)[ rows][cols],int tempvar,int score); template<size_t rows, size_t cols> void drawBucket(char(&bucket)[rows][cols]);// Draws the curre nt contents of the bucket. template<size_t rows, size_t cols> bool canEnter(int direction,char(&bucket)[rows][cols]);// Check s if the shape can enter the space it is trying to drop into. int getUserInput();// gets the key pressed from the user. void setCursorTo(int x,int y);// Move the cursor to the appropria te position int previousX =6, previousY =0; int shapes[256]; template<size_t rows, size_t cols> int check_bucket(char(&bucket)[rows][cols]); template<size_t rows, size_t cols> void set_bucket(char(&bucket)[rows][cols],char(&perm_bucket) [rows][cols]); TetrisShape activeShape; int main(){ // Two bucket arrays, one shown on the screen, the other with th e permanent contents of the buckets (walls and any non- moving shapes) char bucket[12][25]; int score =0; int tempvar =0; char _bucket[12][25]; int shapes[256]={}; int shapeIndex =0; bool gameOver =false;
  • 6.
    generateBucket(bucket); generateBucket(_bucket); generateShapeStream(); drawBucket(bucket); while(!gameOver){ gameOver = gameTick(bucket,_bucket); Sleep(50); checkScore(bucket, _bucket, tempvar, score); cout <<"Your Score is: "<< score << endl; currentTick++; } setCursorTo(25,6); cout <<"GAME OVER"; system("pause"); } void setCursorTo(int x,int y) { HANDLE handle; COORD position; handle =GetStdHandle(STD_OUTPUT_HANDLE); position.X = x; position.Y = y; SetConsoleCursorPosition(handle, position); } /* generateBucket - takes a bucket array of any size and * creates a semi-empty bucket, with a * few random shapes in the bottom few lines. */ template<size_t rows, size_t cols>
  • 7.
    void generateBucket(char(&bucket)[rows][cols]){ for(int w=0; w <12; w++){ for(int z =0; z <25; z++){ if(((w ==0)||(w ==11))&&(z ==0)){ bucket[w][z]='.';} elseif(((w %12==0)||(w %12==11))&&((z >0)&&(z <24))){ buc ket[w][z]='|';} elseif(((w ==0)||(w ==11))&&(z ==24)){ bucket[w][z]='+';} elseif(z ==24){ bucket[w][z]='-';} else{ bucket[w][z]=' ';} } } } /* generateShapeStream - generates a pre-determined list of * shapes that will fall from the sky. */ void generateShapeStream(){ // Initialize the random number generator srand(time(NULL)); for(int i =0; i <256; i++){ shapes[i]= rand()%6+1; } //cout << "In generate shape..." << endl; } /* drawBucket - draws the actual bucket on the screen * including the currently dropping shape. */ template<size_t rows, size_t cols> void drawBucket(char(&bucket)[rows][cols]){ setCursorTo(0,0); for(int w =0; w <25; w++){ for(int z =0; z <12; z++){ cout << bucket[z][w]; } cout << endl; }
  • 8.
    } /* gameTick -this function does all of the different * processessing that happens throughout * the game. This also returns false to * stop the main loop once gameover has * been reached */ template<size_t rows, size_t cols> bool gameTick(char(&bucket)[rows][cols],char(&perm_bucket)[ rows][cols]){ drawBucket(bucket); if(!isDropping){ currentShape++; activeShape =TetrisShape(shapes[currentShape]); if(!canEnter(DIR_DOWN, perm_bucket)){ returntrue; } else{ isDropping =true; updateBucket(bucket,false); } } else{ if(currentTick % GAME_INTERVAL ==1){ // we are on a drop interval. if(canEnter(DIR_DOWN, perm_bucket)){ updateBucket(bucket, moveShape(DIR_DOWN)); } else{ landShape(perm_bucket); }
  • 9.
    } } int direction =getUserInput(); if(canEnter(direction, perm_bucket)){ updateBucket(bucket, moveShape(direction)); } if(!canEnter(DIR_DOWN, perm_bucket)){ landShape(perm_bucket); set_bucket(bucket, perm_bucket); } returnfalse; } /* moveShape - Handles moving the shape in the bucket. */ bool moveShape(int direction){ previousX = activeShape.shapeTopLeftX; previousY = activeShape.shapeTopLeftY; switch(direction){ case DIR_DOWN: activeShape.shapeTopLeftY++; returnfalse; break; case DIR_RIGHT: activeShape.shapeTopLeftX++; returnfalse; break; case DIR_LEFT: activeShape.shapeTopLeftX--; returnfalse; break; case DIR_ROTATE:
  • 10.