Programa para diseñar un Juego de Ladrillos usando gráficos por computadora

En gráficos C , las funciones de graphics.h se utilizan para dibujar diferentes formas como un círculo, un rectángulo, etc., mostrar texto (cualquier mensaje) en diferentes formatos (diferentes fuentes y colores). Mediante el uso de programas graphics.h, se pueden diseñar animaciones y también juegos. Estos pueden ser útiles para los principiantes.

Funciones utilizadas:

  • rectángulo (l, t, r, b) : una función del archivo de encabezado graphics.h que dibuja un rectángulo de izquierda (l) a derecha (r) y de arriba (t) a abajo (b).
  • line(a1, b1, a2, b2) :  Una función del archivo de encabezado graphics.h que dibuja una línea desde el punto (a1, b1) hasta el punto (a2, b2).
  • setfillstyle (patrón, color) : una función del archivo de encabezado graphics.h mediante la cual se puede dar un patrón de dibujo y también un color específico.
  • floodfill(a, b, c): una función del archivo de encabezado graphics.h mediante la cual se puede colorear un área delimitada específica con (a, b) como el centro y c como el color del borde.
  • outtextxy(int x, int y, char *string) : Una función del archivo de encabezado graphics.h mediante la cual uno puede imprimir cualquier declaración donde, x, y son las coordenadas del punto y el tercer argumento contiene la dirección de la string para ser mostrado.
  • settextstyle(int font, int direction, int font_size) : una función del archivo de encabezado graphics.h que se puede usar para el estilo del texto imprimible donde el argumento de fuente especifica la fuente del texto. La dirección puede ser HORIZ_DIR (de izquierda a derecha) o VERT_DIR (de abajo a arriba).

Acercarse:

  • Este es un juego de ladrillos donde los ladrillos vienen de arriba y son de colores aleatorios.
  • Hay 3 columnas en las que se pueden colocar los ladrillos.
  • Si dos ladrillos del mismo color se encuentran uno al lado del otro, ambos desaparecen y la puntuación aumenta en 10 puntos.
  • Si los ladrillos tocan la parte superior del área de juego, el juego habrá terminado. A continuación se muestra un video para explicar cómo funciona el juego.

A continuación se muestra el programa para implementar el mismo:

C

// C program for the above approach
#include <conio.h>
#include <dos.h>
#include <graphics.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void outline()
{
    int u = 400;
 
    // Storing Box Outline
    rectangle(700, 300, 1000, 900);
 
    // Vertical Lines To Make
    // Divisions
    line(800, 300, 800, 900);
    line(900, 300, 900, 900);
 
    // Making Horizontal Line Using
    // While Function
    while (u <= 900) {
        line(700, u, 1000, u);
        u = u + 100;
    }
 
    // Printing The Instruction
    // On Screen
    settextstyle(10, 0, 3);
    outtextxy(20, 100, "FOR MOVE LEFT PRESS 'l'");
    outtextxy(20, 200, "FOR MOVE RIGHT PRESS 'r'");
    outtextxy(20, 300, "FOR MOVE MIDDLE PRESS 'm'");
}
 
// Driver Code
void main()
{
    int gd = DETECT, gm;
 
    // Initialize of gdriver with
    // DETECT macros
    initgraph(&gd, &gm, "C:\\turboc3\\bgi");
 
    // Declaring & Initialising Variables
    int a = 800, b = 50, c = 900, d = 150,
        x, left[10], right[10], mid[10],
        up = 5, low = 2, lb = 900, mb = 900,
        rb = 900, i = 0, j = 0, k = 0,
        score = 0, p;
    char z, str[3];
 
    // Calling outline() function
    outline();
 
    // Creating Infinite Loop To Make
    // Continuous Use OF Game
    while (1) {
        // Creating & Naming The
        // Brick Box
        settextstyle(8, 0, 2);
        outtextxy(800, 10, "Brick Box");
        rectangle(a, b, c, d);
 
        // Generating Random Color Number
        x = (rand() % (up - low + 1)) + low;
        setfillstyle(SOLID_FILL, x);
        floodfill(a + 5, d - 5, 15);
 
        // Getting Input To Move Bricks
        z = getch();
 
        // Operations For Place The Bricks
        // In Left Side
        if (z == 'l') {
            // Creating & Naming The Left
            // Sub-Box
            settextstyle(8, 0, 2);
            outtextxy(630, 10, "Left Sub-Box");
 
            rectangle(a - 150, b, c - 150, d);
            floodfill(a - 55, d - 5, 15);
            delay(200);
            setfillstyle(SOLID_FILL, BLACK);
            floodfill(a - 55, d - 5, 15);
            rectangle(a - 100, lb - 100,
                      c - 100, lb);
            setfillstyle(SOLID_FILL, x);
            floodfill(a - 5, lb - 5, 15);
            delay(200);
 
            // Decreasing The Base Of
            // Left Side
            lb = lb - 100;
 
            // Storing Corresponding Color
            // In Left[] Array
            left[i] = x;
            i++;
 
            // Process To Check Is There Any
            // Matching In The Left Side By
            // Upside Down
            if (left[0] == left[1]) {
                lb = 900;
                setfillstyle(SOLID_FILL, BLACK);
                floodfill(a - 5, lb - 5, 15);
                floodfill(a - 5, lb - 105, 15);
                score = score + 10;
                i = 0;
                left[1] = 0;
            }
            else if (left[1] == left[2]) {
                lb = 800;
                setfillstyle(SOLID_FILL, BLACK);
                floodfill(a - 5, lb - 5, 15);
                floodfill(a - 5, lb - 105, 15);
                score = score + 10;
                i = 1;
                left[2] = 0;
            }
            else if (left[2] == left[3]) {
                lb = 700;
                setfillstyle(SOLID_FILL, BLACK);
                floodfill(a - 5, lb - 5, 15);
                floodfill(a - 5, lb - 105, 15);
                score = score + 10;
                i = 2;
                left[3] = 0;
            }
            else if (left[3] == left[4]) {
                lb = 600;
                setfillstyle(SOLID_FILL, BLACK);
                floodfill(a - 5, lb - 5, 15);
                floodfill(a - 5, lb - 105, 15);
                score = score + 10;
                i = 3;
                left[4] = 0;
            }
            else if (left[4] == left[5]) {
                lb = 500;
                setfillstyle(SOLID_FILL, BLACK);
                floodfill(a - 5, lb - 5, 15);
                floodfill(a - 5, lb - 105, 15);
                score = score + 10;
                i = 4;
                left[5] = 0;
            }
            else
                p = 0;
 
            // Loop Breaking Condition For
            // Left Side
            if (lb < 400)
                break;
        }
 
        // Operations For Place The Bricks
        // In Right Side
        else if (z == 'r') {
            // Creating & Naming The Left
            // Sub-Box
            settextstyle(8, 0, 2);
            outtextxy(970, 10, "Right Sub-Box");
 
            rectangle(a + 150, b, c + 150, d);
            floodfill(a + 155, d - 5, 15);
            delay(200);
            setfillstyle(SOLID_FILL, BLACK);
            floodfill(a + 155, d - 5, 15);
            rectangle(a + 100, rb - 100,
                      c + 100, rb);
            setfillstyle(SOLID_FILL, x);
            floodfill(a + 105, rb - 5, 15);
            delay(200);
 
            // Decreasing The Base Of
            // Right Side
            rb = rb - 100;
 
            // Storing Corresponding Color
            // In Right[] Array
            right[j] = x;
            j++;
 
            // Process to Check Is There Any Matching
            // In The Right Side By Upside Down
            if (right[0] == right[1]) {
                rb = 900;
                setfillstyle(SOLID_FILL, BLACK);
                floodfill(a + 105, rb - 5, 15);
                floodfill(a + 105, rb - 105, 15);
                score = score + 10;
                j = 0;
                right[1] = 0;
            }
            else if (right[1] == right[2]) {
                rb = 800;
                setfillstyle(SOLID_FILL, BLACK);
                floodfill(a + 105, rb - 5, 15);
                floodfill(a + 105, rb - 105, 15);
                score = score + 10;
                j = 1;
                right[2] = 0;
            }
            else if (right[2] == right[3]) {
                rb = 700;
                setfillstyle(SOLID_FILL, BLACK);
                floodfill(a + 105, rb - 5, 15);
                floodfill(a + 105, rb - 105, 15);
                score = score + 10;
                j = 2;
                right[3] = 0;
            }
            else if (right[3] == right[4]) {
                rb = 600;
                setfillstyle(SOLID_FILL, BLACK);
                floodfill(a + 105, rb - 5, 15);
                floodfill(a + 105, rb - 105, 15);
                score = score + 10;
                j = 3;
                right[4] = 0;
            }
            else if (right[4] == right[5]) {
                rb = 500;
                setfillstyle(SOLID_FILL, BLACK);
                floodfill(a + 105, rb - 5, 15);
                floodfill(a + 105, rb - 105, 15);
                score = score + 10;
                j = 4;
                right[5] = 0;
            }
            else
                p = 0;
 
            // Loop Breaking Condition For
            // Right Side
            if (rb - 100 < 300)
                break;
        }
 
        // Operations For Place The Bricks
        // In Middle Side
        else {
            rectangle(a, mb - 100, c, mb);
            floodfill(a + 5, mb - 5, 15);
            delay(200);
 
            // Decreasing The Base Of
            // Middle Side
            mb = mb - 100;
 
            // Storing Corresponding Color In
            // Mid[] Array
            mid[k] = x;
            k++;
 
            // Process To Check Is There Any
            // Matching In The Middle Side
            // By Upside Down
            if (mid[0] == mid[1]) {
                mb = 900;
                setfillstyle(SOLID_FILL, BLACK);
                floodfill(a + 5, mb - 5, 15);
                floodfill(a + 5, mb - 105, 15);
                score = score + 10;
                k = 0;
                mid[1] = 0;
            }
            else if (mid[1] == mid[2]) {
                mb = 800;
                setfillstyle(SOLID_FILL, BLACK);
                floodfill(a + 5, mb - 5, 15);
                floodfill(a + 5, mb - 105, 15);
                score = score + 10;
                k = 1;
                mid[2] = 0;
            }
            else if (mid[2] == mid[3]) {
                mb = 700;
                setfillstyle(SOLID_FILL, BLACK);
                floodfill(a + 5, mb - 5, 15);
                floodfill(a + 5, mb - 105, 15);
                score = score + 10;
                k = 2;
                mid[3] = 0;
            }
            else if (mid[3] == mid[4]) {
                mb = 600;
                setfillstyle(SOLID_FILL, BLACK);
                floodfill(a + 5, mb - 5, 15);
                floodfill(a + 5, mb - 105, 15);
                score = score + 10;
                k = 3;
                mid[4] = 0;
            }
            else if (mid[4] == mid[5]) {
                mb = 500;
                setfillstyle(SOLID_FILL, BLACK);
                floodfill(a + 5, mb - 5, 15);
                floodfill(a + 5, mb - 105, 15);
                score = score + 10;
                k = 4;
                mid[5] = 0;
            }
            else
                p = 0;
 
            // Loop Breaking Condition For
            // Middle Side
            if (mb - 100 < 300)
                break;
        }
 
        // Time Delay
        delay(200);
 
        // Display Score Whenever There Is
        // Any Match
        sprintf(str, "%d", score);
        outtextxy(100, 600, "SCORE: ");
        outtextxy(100, 700, str);
    }
 
    // Time Delay
    delay(500);
 
    // Clearing The Screen When Game
    // Is Over
    cleardevice();
 
    // Holding screen for a while
    getch();
 
    // Close the initialized gdriver
    closegraph();
}

Producción:

Publicación traducida automáticamente

Artículo escrito por sounetraghosal2000 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *