Hi guys. This is my first post hereAnyway, I'm working on a console tetris clone (I bet you get alot of people on here who do these little projects, lol), but I have ran into a touch of difficulty with one or two aspects of it. (This is my first game. I don't usually program games, hence why I'm having a few problems).
So far, I have just focused on functionality, rather than making it look nice... I will be doing that at a later stage. I have programmed it so that the w,s,a and d keys move just the one block around the 'allowed' area (obviously it wont work exactly like that when it is done, but I just wanna get something which can move about on the screen first). Below is my code atm. The problem I am having (among others), is that my block won't moveAlso, I'm not entirely sure how I will do the rotate part, so if anyone has any ideas, I would appreciate them. I'm programming in Dev-C++ in windows. I usually do most of my programming in Linux, but nm.
It is not as efficient as it really could be, but again, I will change that when I have something which works entirely first.
P.S. Some of the functions in the program are either unfinished, or used only in the development stage (e.g. game_view_grid() function). These will be deleted later.Code:// INCLUDES // #include <cstdlib> #include <iostream> #include <windows.h> #include <conio.h> // DEFINES // #define WIN32_LEAN_AND_MEAN #define WIDTH 50 #define HEIGHT 54 // Function Prototypes // void game_menu(); // Menu function of the program void game_init(); // Game init function void game_grid(); // Function draws the tetris grid void game_grid_clear(); // This function clears the interior of the grid void game_previous_blocks(); void game_view_grid(); void game_keyboard(); // Take keyboard input and processing it void game_translate(); // Performs the standard, one space down thing void game_graphics_update(); // Update the graphics void game_main(); // This is the main game loop function. This is where most of the work is done void game_close(); // This function closes the application void game_controls(); // This displays the controls for playing the game. void game_draw_block(); int game_still_running(); // Tests if the program is still in 'run' mode // Globally declared variables // HANDLE hOutput; int Option_number,i,j; char grid[WIDTH][HEIGHT]; // This is the game array, and will record where the blocks are char player_name; int RUNNING; using namespace std; // Main Program // int main(int argc, char *argv[]) { hOutput = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hOutput, FOREGROUND_GREEN|FOREGROUND_INTENSITY); game_menu(); system("Pause"); return EXIT_SUCCESS; } void game_grid_clear() { COORD Position; int i,j; for(i=0; i<WIDTH; i++) { for(j=0; j<HEIGHT; j++) { Position.X = i; Position.Y = j; SetConsoleCursorPosition(hOutput, Position); cout << " "; } } } void game_previous_blocks() { // This function draws all the previously dropped blocks // It also gets rid of any full lines of blocks } void game_controls() { system("cls"); cout << "\n\t\tControls:\n\n"; cout << "\tUp Arrow : Rotate piece clockwise\n"; cout << "\tDown Arrow : Rotate piece anticlockwise\n"; cout << "\tLeft Arrow : Move piece to the left\n"; cout << "\tRight Arrow : Move piece to the right\n"; cout << "\tDelete : Make the piece drop quicker\n"; cout << "\n\t"; system("Pause"); game_menu(); } void game_menu() { system("cls"); cout << "\n\t\tTetris Clone\n\n"; cout << "\tOptions:\n\t1. Play\n\t2. Controls\n\n\tOption Number>>"; cin >> Option_number; if(Option_number == 1) { game_init(); } else if(Option_number == 2) { game_controls(); } } void game_grid() { // Build game grid on the screen int i; COORD Position; system("cls"); for(i=0; i<HEIGHT; i++) { Position.X = WIDTH; Position.Y = i; SetConsoleCursorPosition(hOutput, Position); cout << "|"; } for(i=0; i<WIDTH; i++) { Position.X = i; Position.Y = HEIGHT; SetConsoleCursorPosition(hOutput, Position); cout << "_"; } } void game_init() { system("cls"); // Initial locally declared variables char start; int i, j; COORD Position1, Position2; // That the player's name cout << "\n\t\tTetris Clone\n\n"; cout << "Please enter the player's name>>"; cin >> player_name; // Draw the game grid game_grid(); // Ask if the player is ready to begin Position1.X = 0; Position1.Y = 56; Position2.X = 0; Position2.Y = 57; start = 'z'; while(start !='y') { for(i=0; i<WIDTH; i++) { Position2.X = i; SetConsoleCursorPosition(hOutput, Position2); cout << " "; } SetConsoleCursorPosition(hOutput, Position1); cout << "Are you ready to start playing (y/n)?\n"; cout << ">>"; start = getch(); } // Clear the question from the window for(i=0; i<=WIDTH; i++) { for(j=56; j<=59; j++) { Position1.X = i; Position1.Y = j; SetConsoleCursorPosition(hOutput, Position1); cout << " "; } } game_main(); } void game_keyboard() { if( (i-1)>0 ) { switch(getch()) { grid[i][j] = 0; case 'a': i--; break; grid[i][j] = 1; } } else if( (i+1)<WIDTH ) { switch(getch()) { grid[i][j] = 0; case 'd': i++; break; grid[i][j] = 1; } } else if( (j-1)>0 ) { switch(getch()) { grid[i][j] = 0; case 'w': j--; break; grid[i][j] = 1; } } else if( (j+1)<HEIGHT ) { switch(getch()) { grid[i][j] = 0; case 's': j++; break; grid[i][j] = 1; } } } void game_translate() { } void game_graphics_update() { for(i=0; i<WIDTH; i++) { for(j=0; j<HEIGHT; j++) { if( grid[i][j] == 1) { cout << (unsigned char)219; } } } } int game_still_running() { return 1; } void game_main() { // The first part of this code is just the beginning count down sequence COORD Position; RUNNING = 1; int time; time = 200; // Defines the time between frames Position.X = 20; Position.Y = 24; int i,j; for(i=3; i>=1; i--) { SetConsoleCursorPosition(hOutput, Position); cout << "Starting in...\n\n\t\t\t " << i; Sleep(1000); } game_grid_clear(); Position.X = 25; Position.Y = 24; SetConsoleCursorPosition(hOutput, Position); cout << "GO!"; Sleep(1000); // Wipe the screen for the beginning of the game game_grid_clear(); // This is where the real game programming happens // Initially set the grid array to be zeros. If a grid spot is filled, then // 1 will be entered in the array for(i=0; i<WIDTH; i++) { for(j=0; j<HEIGHT; j++) { grid[i][j] = 0; } } // Make a block appear grid[24][1] = 1; // The main game loop while(RUNNING == 1) { // Draw the block game_draw_block(); // Sleep for time Sleep(time); // Consider keyboard input game_keyboard(); // Move down by one grid space game_translate(); // Update Graphics game_grid_clear(); game_graphics_update(); // game_view_grid(); // Test if still running RUNNING = game_still_running(); if(RUNNING == 0) { game_close(); } } } void game_draw_block() { COORD Position; for(i=0; i<WIDTH; i++) { for(j=0; j<HEIGHT; j++) { if(grid[i][j] == 1) { Position.X = i; Position.Y = j; SetConsoleCursorPosition(hOutput, Position); cout << (unsigned char)219; } } } } void game_view_grid() { } void game_close() { }



LinkBack URL
About LinkBacks
Anyway, I'm working on a console tetris clone (I bet you get alot of people on here who do these little projects, lol), but I have ran into a touch of difficulty with one or two aspects of it. (This is my first game. I don't usually program games, hence why I'm having a few problems).
Also, I'm not entirely sure how I will do the rotate part, so if anyone has any ideas, I would appreciate them. I'm programming in Dev-C++ in windows. I usually do most of my programming in Linux, but nm.



