C语言控制台打砖块小游戏

本文为大家分享了C语言控制台小游戏,打砖块,供大家参考,具体内容如下

这个问题是我在领扣上面看到的一道困难问题,原题是这样的:

#include "stdafx.h"
#include<stdio.h>
int a[10][10] = { { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 }, 
                  { 0, 0, 1, 1, 1, 1, 0, 1, 1, 0 },
                  { 0, 0, 0, 0, 1, 1, 0, 1, 1, 0 },
                  { 0, 1, 1, 1, 1, 1, 0, 0, 1, 0 },
                  { 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
                  { 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 },
                  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
                  { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 },
                  { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } };//初始化二维数组,写成这个形状便于一目了然

void down(int a[10][10])//负责控制砖块下落的函数,使被赋值为3的砖块下落,下落到下界或值为1的方块之上
{
    int i, j;
    int m, n;
    for (i = 9; i >=0; i--)
    for (j = 0; j < 10; j++)
    if (a[i][j] == 3)
    {
        m = i;
        n = j;
        while (a[m + 1][n] != 1&&m!=9)
        {
            a[m + 1][n] = 1;
            a[m][n] = 0;
            m++;
        }
    }
}

void freshen(int a[10][10])//刷新函数,用于每次打过砖块之后,检查所有砖块的松动情况,过程大概是这样的,先将全部为1的砖块赋值为3,之后将四周与墙壁相连并且值为3的砖块赋值为·1,然后再进行一次全体砖块的循环遍历,这一次将所有与1相连接(1上下左右连接的砖块并且值为3的)的砖块赋值为1,这样的操作要做四遍,为什么要做这么多遍,这个问题留给读者体会。
{
    int i, j;
    for ( i = 0; i < 10; i++)
    for ( j = 0; j < 10; j++)
        if (a[i][j]==1)
            a[i][j] = 3;
        for (i = 0; i < 10; i++)
        {
            j = 0;
            while (a[i][j] != 0)
            {
                a[i][j] = 1;
                j++;
            }
        }
        for (i = 0; i < 10; i++)
        {
            j = 9;
            while (a[i][j] != 0)
            {
                a[i][j] = 1;
                j--;
            }
        }
        for (j = 0; j < 10; j++)
        {
            i = 0;
            while (a[i][j] != 0)
            {
                a[i][j] = 1;
                i++;
            }
        }
        for (j = 0; j < 10; j++)
        {
            i = 9;
            while (a[i][j] != 0)
            {
                a[i][j] = 1;
                i--;
            }
        }
        for (i = 0; i < 10; i++)
        for (j = 0; j < 10; j++)
        if (a[i][j] == 1)
        {
            if (a[i - 1][j] == 3)
                a[i - 1][j] = 1;
            else
            if (a[i + 1][j] == 3)
                a[i + 1][j] = 1;
            else
            if (a[i ][j-1] == 3)
                a[i ][j-1] = 1;
            else
            if (a[i ][j+1] == 3)
                a[i ][j+1] = 1;
        }
        for (i = 9; i >=0; i--)
        for (j = 9; j >=0; j--)
        if (a[i][j] == 1)
        {
            if (a[i - 1][j] == 3)
                a[i - 1][j] = 1;
            else
            if (a[i + 1][j] == 3)
                a[i + 1][j] = 1;
            else
            if (a[i][j - 1] == 3)
                a[i][j - 1] = 1;
            else
            if (a[i][j + 1] == 3)
                a[i][j + 1] = 1;
        }
        for (i = 9; i >= 0; i--)
        for (j = 9; j >= 0; j--)
        if (a[i][j] == 1)
        {
            if (a[i - 1][j] == 3)
                a[i - 1][j] = 1;
            else
            if (a[i + 1][j] == 3)
                a[i + 1][j] = 1;
            else
            if (a[i][j - 1] == 3)
                a[i][j - 1] = 1;
            else
            if (a[i][j + 1] == 3)
                a[i][j + 1] = 1;
        }
        for (i = 9; i >= 0; i--)
        for (j = 9; j >= 0; j--)
        if (a[i][j] == 1)
        {
            if (a[i - 1][j] == 3)
                a[i - 1][j] = 1;
            else
            if (a[i + 1][j] == 3)
                a[i + 1][j] = 1;
            else
            if (a[i][j - 1] == 3)
                a[i][j - 1] = 1;
            else
            if (a[i][j + 1] == 3)
                a[i][j + 1] = 1;
        }
}

void view(int a[10][10])//打印砖块函数
{
    for (int i = -1; i < 10; i++)
    {
        printf("0%d ", i);
    }
    printf("\n");
    for (int i = 0; i < 10; i++)
    {
        printf("%d:  ", i);
        for (int j = 0; j < 10; j++)
        {
            if (a[i][j] == 1)
                printf("*  ");
            else
                printf("   ");
        }
        printf("\n");
    }
}

void beat(int a[10][10],int i,int j)//打砖块函数
{
    a[i][j] = 0;
}

void main()
{
    int p,q;
    view(a);
    for (int w = 0; w < 18; w++)
    {
        printf("beat whichp?\n");
        scanf("%d", &p);
        printf("beat whichq?\n");
        scanf("%d", &q);
        beat(a, p, q);
        freshen(a);
        down(a);
        view(a);
    }
    getchar();
    return;
}

我用到的编译器是VS2013,C语言写控制台程序,大一初学C语言的同学们可以看一下这个编程思想。
最后的效果是这样的:

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

(0)

相关推荐

  • C语言 小游戏打砖块实现流程详解

    始祖是美国英宝格公司(en:Atari Games,ja:アタリ (ゲーム))于1976年推出的街机游戏"Breakout"(en:Breakout),由该公司在1972年发行的"PONG"(en:PONG,ja:ポン (ゲーム),世界上第一款电子游戏,类似台球)改良而来.相较于其前作,一个人就可以玩与变化丰富这两项特点让Breakout相当卖座,使各家公司竞相模仿. 因为规则简单与游戏性,现在许多移动电话都有内建打砖块游戏,也有许多因特网小游戏版本,目前在网上可以

  • C语言实现打砖块游戏

    本文实例为大家分享了C语言实现打砖块游戏的具体代码,供大家参考,具体内容如下 代码: #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<Windows.h> int score; int ball_row, ball_col; int ball_vv, ball_vh; int area_height, area_width; int baffle_col, baffle_row,

  • C语言控制台打砖块小游戏

    本文为大家分享了C语言控制台小游戏,打砖块,供大家参考,具体内容如下 这个问题是我在领扣上面看到的一道困难问题,原题是这样的: #include "stdafx.h" #include<stdio.h> int a[10][10] = { { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0 },                    { 0, 0, 1, 1, 1, 1, 0, 1, 1, 0 },                   { 0, 0, 0, 0,

  • C语言实现打砖块小游戏

    本文实例为大家分享了C语言实现打砖块游戏的具体代码,供大家参考,具体内容如下 本节我们将沿用 上一节 所提到的函数式游戏框架来写一个弹球打砖块的游戏. 基本量.边框绘制 我们首先定义好可能需要的变量,比如小球坐标以及速度.游戏界面高度和宽度等等,然后再根据之前提到的弹跳小球重构代码,剩下的内容再分步添置即可. #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <cwindow.h&

  • C语言控制台版2048小游戏

    效果不好,见谅,没事就写了一个!!! /** * @author Routh * @main.c * @date 2014, 4, 26 */ #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <windows.h> // console width #define CONSOLE_WIDTH 80 #define BOX_WIDTH 10 int BOX[4][4] = {

  • C语言实现打飞机小游戏

    本文实例为大家分享了C语言实现打飞机小游戏的具体代码,供大家参考,具体内容如下 编译环境:vs2019 需求: 在同一个平面内,控制大炮发射的三个方向,空格发射炮弹,敌军和友军飞机会一直随机在天上飞过,击中天上飞行的敌军飞机加一分,击中友军飞机减一分 思路: 先初始化程序,再画出说明和地图,接着进入无限循环,循环中分别实现飞机不停地在天上飞.通过awd空格键控制游戏内容.符合游戏条件时加分三个主要步骤. 做法: 首先要实现飞机的动画效果,本质是要在控制台上输出三条x轴上输出一个字符串,并要让这三

  • C语言实现贪吃蛇小游戏

    本文实例为大家分享了C语言实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 一.程序实现的原理: 1.构造蛇身:定义一个坐标数组,存放的是蛇的每一节蛇身所在的坐标位置.这样就将移动蛇身的操作转换为移动数组的操作,将吃食物增加蛇身体长度的操作转换为在数组后面追加元素的操作. 2.移动效果:每次移动时,将每一节蛇身(蛇头除外)依次往前移动一节,然后擦去蛇的最后一节,最后确定蛇头的方向,再绘制一个蛇头.这样就会显示一个移动效果. 3.身体增加效果:每次移动时候,判断蛇头是否碰到了食物,如果碰到了食

  • C语言制作贪吃蛇小游戏

    本文实例为大家分享了C语言制作贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 直接上代码 ​#include <stdio.h> #include <stdlib.h> #include <math.h> #include <conio.h> #include <time.h> #include <windows.h>   //MAXWIDTH.MAXHEIGHT.INITLEN 以字符记 #define MAXWIDTH (30)

  • 使用C语言实现贪吃蛇小游戏

    本文实例为大家分享了C语言实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 前言 控制台的欢乐就是这么简单: 提示:以下是本篇文章正文内容,下面案例可供参考 一.贪吃蛇实现的结构和方式 1.用枚举定义蛇的移动方向 enum Dir {     UP,     DOWN,     LEFT,     RIGHT,//枚举不能用分号; }; //创建结构体,对蛇的参数进行设置: struct Snake {     int size;//蛇的节数;     int dir;//蛇的方向;   

  • C语言实现贪吃蛇小游戏开发

    本文实例为大家分享了C语言实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 程序介绍 代码 #include<stdafx.h>            //vc自带头文件 #include<stdio.h>            //标准输入输出函数库 #include<time.h>            //用于获得随机数 #include<windows.h>            //控制dos界面 #include<stdlib.h>

  • go语言实现猜数字小游戏的方法

    本文实例讲述了go语言实现猜数字小游戏的方法.分享给大家供大家参考.具体分析如下: 随机生成一个数字,输入一个数字看是否匹对,匹配则结速,反之提示是大了还是小了 复制代码 代码如下: package main import (     "bufio"     "fmt"     "math/rand"     "os"     "strconv"     "time" ) var (  

  • jQuery网页版打砖块小游戏源码分享

    这是一款基于jQuery实现网页版打砖块小游戏源码,满满的童年回忆. 为大家分享的jQuery实现网页版打砖块小游戏源码如下 效果演示 源码下载 <!DOCTYPE html> <html lang="en" > <head> <meta charset="gb2312" /> <title>jQuery网页版打砖块小游戏源码</title> <link href="css/ma

随机推荐