Advertisement

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;
    }

所采用的编译器为Visual Studio 2013,并基于C语言开发了一个终端程序。对于刚开始学习C语言的大一新生而言,这一编程思路具有重要的参考价值。

在这里插入图片描述
在这里插入图片描述

全部评论 (0)

还没有任何评论哟~